DTMF YAZILIMINDAKİ KÜÇÜK SORUN SİMİLASYONLU

Başlatan sozkarabacak, 10 Şubat 2009, 10:09:59

sozkarabacak

SELAMLAR,
Aşağıdaki yazılım similasyonda ve pratikte çalışmaktadır. Fakat şöyle bir sorunla önceleri bu sorun dediğim nokta uygulamada önce işime gelmişti şimdi başka bir projede kullanmam gerekince bir sorun haline geldi.
Sistemde iki adet röle ve bu rölelere ait dört adet açma ve kapama şifresi vardır. 1. röle için #525 röle aç  #524 röle kapa 2. röle için #523 röle aç  #522 röle kapadır. Şimdi 1. rölede hiç bir sorun yok normal olarak açılıp kapanıyor. 2 rölede 1. röle kapalıyken normal olarak kendine ait şifre ile açılıp kapanıyor. Fakat iki rölede açık durumdayken 1. rölenin kapama şifresini girdiğimizde bu şifre 2. röleyide kapatmakta bu sorun nerden kaynaklanıyor? Yazılımda bir mantık hatası yok gibi duruyor ama bu noktada arkadaşların yardımını bekliyorum. İlgilenecek arkadaşlar için ekteki dosyada similasyon programınıda sunuyorum bu similasyonla tüm DTMF uygulamalarınızın similasyonunu gerçekleştirebilirsiniz.

'**************************************************************
  'YAZAN     : ANONİM :)                                          *
  'ADI       :                                                  *
  'TARIH     : 11/02/2008                                       *
  'ÇALIMA ADI: CAMİ EZAN VAAZ KONTROL                           *
  ' #525     : EZAN AÇ                                          *
  ' #524     : EZAN KAPA                                        *
  '	#523     : VAAZ AÇ                                          *
  '	#522     : VAAZ KAPA                                        *
  '**************************************************************
     
  TRISB=%11111111
  TRISA=%00000000
  PORTA=0
@ DEVICE pic16F84A                                                   
@ DEVICE pic16F84A, WDT_OFF              
@ DEVICE pic16F84A, PWRT_ON             
@ DEVICE pic16F84A, PROTECT_OFF         
  
  STD var  PORTB.0    '1 STD  8870)TONE enable
  E1  var  PORTB.4    'Q1 du 8870
  E2  var  PORTB.3    'Q2 du 8870
  E3  var  PORTB.2    'Q3 du 8870
  E4  var  PORTB.1    'Q4 du 8870
 
  SIFRE_1 var  PORTA.1    ' 
  SIFRE_2 var  PORTA.2    ' 
  
  b1 VAR BYTE
  b2 VAR BYTE
  b3 VAR BYTE
  b1=0
  b2=0
  b3=0
      
  c1  var BYTE   '1° code DTMF
  c2  var BYTE   '2° code DTMF
  c3  var BYTE   '3° code DTMF
  c4  var BYTE   '4° code DTMF
  Q1  var BIT
  Q2  var BIT
  Q3  var BIT
  Q4  var BIT
 
BASLA:
DTMF1:    
            BUTTON STD,1,255,0,b1,1,DECODER1	
            PAUSE 20
    		BUTTON STD,0,255,0,b2,1,RAZ          
           	GOTO DTMF1
DECODER1:	
            Q1=E1		
    		Q2=E2
    		Q3=E3
    		Q4=E4
     		c1 =  Q1 + 2*Q2 + 4*Q3 +  8*Q4 	
            GOTO DTMF2
           
DTMF2: 	
            b3=0
            WHILE b3<75	
    		BUTTON STD,1,255,0,b1,1,DECODER2	
       	    PAUSE 20
        	b3=b3+1
            WEND
            GOTO DTMF1
DECODER2:	
            Q1=E1		
    		Q2=E2
    		Q3=E3
    		Q4=E4
     		c2 =  Q1 + 2*Q2 + 4*Q3 +  8*Q4 	
      	    GOTO DTMF3
        
DTMF3: 	
            b3=0
            WHILE b3<75	
    		BUTTON STD,1,255,0,b1,1,DECODER3	
         	PAUSE 20
	        b3=b3+1
            WEND
            GOTO DTMF1
DECODER3:	
            Q1=E1		
    		Q2=E2
    		Q3=E3
    		Q4=E4
     		c3 =  Q1 + 2*Q2 + 4*Q3 +  8*Q4 	
            GOTO DTMF4      	
            
DTMF4: 
            
			b3=0
            WHILE b3<75	
    		BUTTON STD,1,255,0,b1,1,DECODER4	
            PAUSE 20
 	        b3=b3+1
            WEND
            GOTO DTMF1
DECODER4:	
            Q1=E1		 
            Q2=E2
    		Q3=E3
    		Q4=E4
     		c4 =  Q1 + 2*Q2 + 4*Q3 +  8*Q4 	
 	        GOTO SIFRE
              
RAZ:  
	  
        	Q1=0
        	Q2=0
		    Q3=0
		    Q4=0
       	    GOTO DTMF1
            END
SIFRE:	
           PAUSE 10	
  	       IF c1=12 AND c2=5 AND c3=2 AND c4=5 THEN   ' # 5 2 5 ROLE1 KAPAMA
           SIFRE_1=1   
           ENDIF

           IF c1=12 AND c2=5 AND c3=2 AND c4=4 THEN   ' # 5 2 4 ROLE1 AÇMA 
           SIFRE_1=0      
           ENDIF
           
		   IF c1=12 AND c2=5 AND c3=2 AND c4=3 THEN   ' # 5 2 3 ROLE2 AÇMA
           SIFRE_2=1   
           ENDIF

           IF c1=12 AND c2=5 AND c3=2 AND c4=2 THEN   ' # 5 2 2 ROLE2 KAPAMA
           SIFRE_2=0      
           ENDIF
	         
		  c1=0	
          c2=0
          c3=0
   	      c4=0
          GOTO DTMF1    


http://rapidshare.com/files/196268495/DTMF_S__304_M__304_LASYON.rar.html
http://picasaweb.google.com/33elektronik http://www.33elektronik.tr.cx MSN: [email]sukruozkarabacak@hotmail.com[/email]

ete

Programda mantıksal bir hata yok. Ancak devrede hata var.
PortA.2 bacağına bağlı olan led pine direk bağlı gözüküyor.
Bu led'i ayırırsanız programda düzgün çalışıyor.
Sebebini ancak şöyle açıklayabilirim. Pic pinlerinden en fazla 20 -25 ma lik bir akım çekebilirsiniz. Bunun fazlası pinleri bozar. Bu nedenle bağlanacak elemanlarda akım sınırlama direncini mutlaka kullanmanız gerekiyor.
Led direk bağlı iken muhtemelen pic reset atıyordur veya başka bir şey yapıyordur. Ancak ledi GND den ayırırsanız veya GND ile led arasına 330Ohm direnç bağlarsanız sistem normal çalışmaya başlıyor.

Dediğim gibi programda da mantıksal hata yok. Yalnızca tuşlara basma zamanlaması bazen insanı bezdiriyor.  Hızlı çalışsın diye aşağıdaki değişikliği yaptım.

BASLA:
DTMF1:      
            WHILE STD=0:WEND
DECODER1:	
           gosub AL
          C1=b1
           WHILE STD=1:WEND
           
DTMF2: 	
           WHILE STD=0:WEND
DECODER2:	
           GOSUB AL
           C2=b1	
      	   WHILE STD=1:WEND
        
DTMF3: 	
            WHILE STD=0:WEND
DECODER3:	
            GOSUB AL
            C3=b1
            WHILE STD=1:WEND    	
            
DTMF4: 
            
			WHILE STD=0:WEND
DECODER4:	
            GOSUB AL
            C4=b1
     		WHILE STD=1:WEND
 	        GOTO SIFRE
              
RAZ:  
	  
        	Q1=0
        	Q2=0
		    Q3=0
		    Q4=0
       	    GOTO DTMF1
            END
SIFRE:	
           PAUSE 10	
           IF C1=12 THEN
              IF C2=5 THEN
                 IF C3=2 THEN
                    IF C4=5 THEN SIFRE_1=1
                    IF C4=4 THEN SIFRE_1=0
                    IF C4=3 THEN SIFRE_2=1
                    IF C4=2 THEN SIFRE_2=0                    
                  ENDIF
               ENDIF
            ENDIF
   		  c1=0	
          c2=0
          c3=0
   	      c4=0
          GOTO DTMF1     
                       
AL:         Q1=E1		
    		Q2=E2
    		Q3=E3
    		Q4=E4
     		B1 =  Q1 + 2*Q2 + 4*Q3 +  8*Q4 	
             return  


Yalnızca BASLA etiketinden itibaren veriyorum üst taraftakiler ayrıca programda yer alması gerekiyor.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

sozkarabacak

Teşekkür ediyorum bilgilendirme için ayrıca denemeleri yapıp sonucu ve baskı devreyi buraya eklerim.
http://picasaweb.google.com/33elektronik http://www.33elektronik.tr.cx MSN: [email]sukruozkarabacak@hotmail.com[/email]

sozkarabacak

@ete

Dediğinizi denedim.  Çalışması güzel oldu. Fakat sizin süre sorunu nedeniyle yazdığınız kendi versiyonunuzda şöyle bir problem var şifreleri doğru girdiğiniz sürece bir sorun olmuyor ama rasgele şifrelere basın sonra doğru şifreyi girmeyi deneyin program kilitliyor. Bilginiz olsun.
http://picasaweb.google.com/33elektronik http://www.33elektronik.tr.cx MSN: [email]sukruozkarabacak@hotmail.com[/email]

ete

Be aslında simulasyon için o değişikliği yapmıştım. Siz yine orjinalini kullanın.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

temha

bu konu üzerine emeği geçen arkadaşlara teşekkür ederim. Bende dtmf 8870 entegresiyle dtmfleri okuyup tek display üzerinde gösteren bir devre tasarladım. Yalnız henüz çalışmadı. Cami ezan dtmf kodlarını okumaya çalıştım. Yalnız henüz başarılı olamadım. Size şöyle bir sorum olacak bu endegreyi kullandığımız zaman Pul up direncine ihtiyacımız yokmu. Sizin örneklerde yok. Benim hazırladığım devre şu anda dtmfleri okuyamıyor ama ezan okunurken dtmf karakterleri çıkıyor. Yani anlayacağınız hocanın sesini dtmf kodu zannediyor. Şimdiden teşekkürler.