DTMF DECODER

Başlatan ta7om, 27 Temmuz 2004, 14:12:14

Veli B.

eepromun 4 adresine 1234 sayılarını göm, 4 adet değişken tanımla ve her gelen datayı sırası ile değişkenlere yaz daha sonra ise değişkenlerin içerikleri ile eepromu (READ) karşılaştır.sonuç doğru ise istediğini yaptır.

Şifreyi eeproma sabit olarak gömmek istiyorsan DATA değiştirebilmek istiyorsan WRITE kullan

fsan

Alıntı yapılan: "katana"Kullanımı kendi standartlarıma göre olduğu için 8870 üzerinde bulunan dtmf ready pinini kullanmadan portb deki değişmeler ile kesme oluşturuyorum.Bu benim için şöyle bir avantaj sağlıyor.Aynı tuşa iki defa basılsa bile işlemci kabul etmiyor.(Portb üzerinde değişiklik oluşmayacağından dolayı)Şifre konusunda bir avantaj benim durumum için.

Şu iki satır ile direkt olarak 4 bitlik bilgiyi okuyorum

(BURADA DTMF DEĞİŞKEN)

DTMF=PORTB ^ %00001111
DTMF=DTMF>>4

http://finance.groups.yahoo.com/group/picprojeup5/files/katana/dtmf.rar
katana birader bu isi kesme ile halletmen iyi fikir (birde bu devrenin neye kullanilacagina bagli tabiki)
yalniz yukarida DTMF=PORTB ^ %00001111 yazan yerde "^"  yerine "& %11110000" mi olacakti ?
Alıntı YapBitwise operators act on each bit of a value in boolean fashion. They can be used to isolate bits or add bits into a value. For example,

B0 = B0 & %00000001 ' Isolate bit 0 of B0
B0 = B0 | %00000001 ' Set bit 0 of B0
B0 = B0 ^ %00000001 ' Reverse state of bit 0 of B0

ta7om

sayın Katana bu linke bir gözat sound konusunda işine yarayabilir:

http://users.picbasic.org/projects/making_music/

Bu arada picten bir  :twisted:  :twisted: BEEEP :twisted:  :twisted:  sesi çıkartamadım ya çıldıracam.Nasıl yapılır bu arkadaşlar.Sound saçmalıyor(yada ben saçmalatıyorum :roll: ) Frekans çıkışı ilede abuk subuk bir şey yaptım ama bırakın tatmin etmemeyi beceremedim. :evil:  :evil:  :evil:

:evil:[/quote]

Veli B.

Hayır dostum kendi yöntemim için kullanımım doğru.
PORTB nin üst 4 bitini kullandığım için alt 4 biti doldurarak 255 tabanına göre stabıl değer alıp 16 ya bölme yapıyorum.sonuç direkt elimde, öbür türlü 128 çıkarmam ve 8 bölme yapmam gerekli.İki işlem yerine tek işlem. ;)
@ ta7om, link için teşekkürler.

fsan

tamam ozaman sorun yok ustat :)

bende sadece PortB.4-7 bitlerini okumak istersem bunu 2 satirda hallediyorum:

DTMF = PORTB  & %11110000
DTMF = DTMF >> 4



"&" kullaninca asagidaki gibi oluyor
        b7-b4  b3-b0        
PORTB  =  1101   xxxx 
       &  1111   0000
          -----------
DTMF   =  1101   0000


sonra...
DTMF = DTMF >> 4  ' shift right 4 yapinca
DTMF = 0000 1101  ' oluyor

Veli B.

Aslında aynı şeyi yapıyoruz dostum.Sen maskeleme ben ise dolgu yöntemini kullanıyorum.Ben tüme terstan varıyorum sen tümden ters geliyorsun.

mukoali

slm arkadaşlar bu program işi tamam da benim sorunum şu 8870 in bacaklarını pic e direk bağlıyorum ama 8870 dtmf tonlarını alınca ilgili bacaklarını 1 yapmıor std bacağıda 1 olmuyor pic le alakasını kesince normal çalışıyor buradaki sorunu aşamadım yazılımla pic i pullup yaptım değişen bir şey olmadı bu konuda ki yardımları bekliyorum gerçi sorum elektronik sorusu oldu ama başka yazacağım yer yok

fsan

selam mukoali,
Semadaki gibi 8870 nin pin-10 (Three State Output Enable Input) +5V baglanacak veya bosta brakilacak(intern pullup var) yoksa Q1-Q4 cikislar high-Z(3 state mode) olur.  

Birde Pic'in 8870 e baglanan pinleri hepsi "input" olacak.. 8870 nin Q1-Q4,STD mesela PortB pin 0-4 ye bagliysa:
TRISB = %xxx11111 ' olmasi gerekir, (xxx ler 0 veya 1 olabilir)
PORTB = 0  



http://picbasic.com/downloads/MT8870D.pdf

http://picbasic.com/downloads/LABXTSCH.PDF
http://picbasic.com/downloads/XTDOCS.ZIP

ta7om

Üstatlar;

Aşağıdaki uygulama 877 için yapılmıştı ben 84A GÖgöre çevirdim program
ilk yüklenildiğinde normal olarak çalışıyor ancak voltajı kesip
1 dk kadar bekleyip tekrar verdiğimde sanki kilitleniyor ve
hiçbir şekilde çalışmıyor açaba nerede hata yaptım.
(Deneme kartım osc v.s. normal)



DEVICE 16F84A
DECLARE XTAL 4
TxON    var  BIT      
DATA 1              
READ 0,TxON        


 TONEen     var   PORTA.4      '1 STD  8870)TONE enable
 E1        var   PORTA.0       'Q1 du 8870
 E2        var   PORTA.1       'Q2 du 8870
 E3        var   PORTA.2       'Q3 du 8870
 E4        var   PORTA.3       'Q4 du 8870

 
 
 bip               var  PORTB.0    'SOUND bip (800/1000Hz) 1/2 saniye
 PTT               var  PORTB.1    'PTT
 inittimer         var  PORTB.2    
 LINK_PTT_ON_OFF   var  PORTB.3    'PTT ve Link On/OFF
 ROLE_PTT_ON_OFF   var  PORTB.4    'PTT ve ROLE On/OFF         
 COR_ROLE          var  PORTB.5    'COR ROLE
 COR_LINK          var  PORTB.6   'COR LINK
 Rx1G2             var  PORTB.7    '

 TRISB=%00000000
 TRISA=%00001111
 PORTB=0

 PTT=0             
 GOSUB RazTxs      
 DIM b1 AS BYTE
 DIM b2 AS BYTE
 DIM bcl AS BYTE
 DIM duree AS WORD
 DIM note AS WORD
 
 b1=0
 b2=0
 bcl=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

      IF TxON=1 THEN
      GOSUB identification
ENDIF


boucle1:    BUTTON TONEen,1,255,0,b1,1,decode1   
               PAUSE 20
      BUTTON TONEen,0,255,0,b2,1,RAZ          
             GOTO boucle1
decode1:   Q1=E1      
      Q2=E2
      Q3=E3
      Q4=E4
       c1 =  Q1 + 2*Q2 + 4*Q3 +  8*Q4    
      IF c1=12 THEN                   '  DTMF 12 = #
      GOTO boucle2
          ENDIF
          GOTO boucle1
boucle2:    bcl=0
               WHILE bcl<75   
               BUTTON TONEen,1,255,0,b1,1,decode2   
         PAUSE 20
          bcl=bcl+1
               WEND
               GOTO boucle1
decode2:   Q1=E1      
         Q2=E2
         Q3=E3
         Q4=E4
          c2 =  Q1 + 2*Q2 + 4*Q3 +  8*Q4    
         IF c2=5 THEN   'DTMF 5 RAKAMI    
            GOTO boucle3
          ENDIF      
             GOTO boucle1
boucle3:    bcl=0
              WHILE bcl<75   
      BUTTON TONEen,1,255,0,b1,1,decode3   
           PAUSE 20
           bcl=bcl+1
           WEND
           GOTO boucle1
decode3:   Q1=E1      
         Q2=E2
         Q3=E3
         Q4=E4
          c3 =  Q1 + 2*Q2 + 4*Q3 +  8*Q4    
           GOTO boucle4         
boucle4:    bcl=0
           WHILE bcl<75   
           BUTTON TONEen,1,255,0,b1,1,decode4   
           PAUSE 20
           bcl=bcl+1
           WEND
           GOTO boucle1
decode4:   
           Q1=E1      
           Q2=E2
         Q3=E3
         Q4=E4
          c4 =  Q1 + 2*Q2 + 4*Q3 +  8*Q4    
           GOTO commande
     RAZ:  
          Q1=0
          Q2=0
          Q3=0
          Q4=0
             GOTO boucle1
           END
commande:   
          PAUSE 200   
          
         IF TxON=1 AND c3=13 AND c4=6 THEN   ' # 5 A 6
          ROLE_PTT_ON_OFF=1  
          ENDIF

          IF TxON=1 AND c3=13 AND c4=5 THEN   ' # 5 A 5
          ROLE_PTT_ON_OFF=0      
          ENDIF
         
         IF TxON=1 AND c3=13 AND c4=4 THEN   ' # 5 A 4
          LINK_PTT_ON_OFF=1  
          ENDIF

          IF TxON=1 AND c3=13 AND c4=3 THEN   ' # 5 A 3
          LINK_PTT_ON_OFF=0      
          ENDIF
             
                 
         c1=0   
         c2=0
         c3=0
           c4=0
         GOTO boucle1  
         
RazTxs:    
         LINK_PTT_ON_OFF=0
         ROLE_PTT_ON_OFF=0  
         RETURN
        
initialisation_timer:  
        PAUSE 20
        inittimer=1    
        PAUSE 20
        inittimer=0
        RETURN
bippe:      
       PAUSE 100
       PTT= 1
       PAUSE 200            
       SOUND bip,[115,70]  
       PTT=0
       PAUSE 100
       RETURN                          

identification:  
       PAUSE 100
       PTT=1
       PAUSE 500

       duree=40
       note=1000
       FREQOUT bip,duree,note
       PAUSE duree
       PAUSE 500
       PTT=0
   
  RETURN

mukoali

slm fsan
şifreli kilit olayındaki yardımlarından sonra onu halletmiştim okulda atelye kapısına uyguladık çocıklara yeni bir ilgi alanı oldu

şimdi bir de bunu aşarsam yeni bir ilgi alanı oluşacak
dediklerini yapmiştım zaten ama yinede olmamıştı bilmediğim başka bir şey var mı diye araştırıyordum şimdi benim aklıma gelen benim kullandığım 2 pic dede bir problem mi vardı yeni bir pic alıp deneyeceğim ama bendeki sorun bana çok saçma geliyor

fsan

Alıntı yapılan: "mukoali"acaba kullandığım 2 pic dede bir problem mi vardi..  sorun  bana çok saçma geliyor
hocam, entegrelerin besleme gerilimi pinleri ile GND arasina 100nF lik birer Cap. baglayip birde öyle deneyin

Pici devreye sokunca besleme gerilimi +5V mu kontrol edin değilse:
belkide picin baglantilarinda bir hata vardir yada picteki bahsedilen girisler bozuktur yada programda hata var giris olmasi gerekirken yanlislikla cikis yapmisdir (picin pini cikis/0 ise, ve DTMF cikislari (Q1-Q4) 1 ise.. Pic bu sefer +5V yi gnd ye kisa devre yapar :\

istersen piclerin bozuk olduguna karar vermeden önce baska bir basit bir uygulama yapip bu Picdeki bahsettigin cikislari Set/Reset yapip kontrol

mukoali

biraz gecikmeli yazıyorum fsan ama ev taşımakla meşguldüm
bu arada biraz denemeler yaptım ve devreyi çalıştırdım ama hala anlamadığım yerler var giriş olarak rb0 dan rb4 kadar kullandım proğramda ona göre değiştirdim devre çalıştı ama a portlarını giriş yapınca çalışmıyor dediğin gibi çıkış yapmış gibi davranıyor proğramda her şey doğru proteus da simülasyonda da düzgün çalışıyor ama gerçek uygulamada problem çıkıyor burayı çözemedim
ikinci sorunum ise şu dtmf tone gönderme işini telefonla yapınca sorun yok yaptığım devre çalışıyor ama dtmf tonu bir başka picle dtmf komutuyla gönderince çalışmıyor mümkünse bu konuda bigine ihtiyacım var

Veli B.

Dostum osc nedir 20 mi? Birde picle ürettiğinde çıkışına basit bir rc filtre koydunmu?En sağlıklı yüksek frekans ile ürettiğinde çalışır ve filtre gerçek ton sinyallerine çok yaklaştırır.osilaskopun varsa bir incele farkı göreceksin.
Program yada tasarım hatan(eğer var ise ;) ) için gruba koyarsan bir inceleme imkanı doğar.

mukoali

osc 4 mhz ancak şu an ben alıcı kısmıyla uğraşıyorum gerçi şimdilik alıcı kısmı tamam verici de de 4 mhz kullanacağım ve rc filtresinin değerleri hangi aralıkta olacak bu konuda bilgi verirsen sevinirim

fsan

Alıntı YapDTMFOUT uses FREQOUT to generate the dual tones. FREQOUT generates tones using a form of pulse width modulation. The raw data coming out of the pin looks pretty scary. Some kind of filter is usually necessary to smooth the signal to a sine wave get rid of some of the harmonics that are generated:

DTMFOUT works best with a 20MHz oscillator. It can also work with a 10MHz oscillator and even at 4MHz, although it will start to get very hard to filter and be of fairly low amplitude. Any other frequency will cause DTMFOUT to generate a frequency that is a ratio of the actual oscillator used and 20MHz which will not be very useful for sending touch tones.
@mukoali
Picbasic pro manual'de yukarida semadaki uygulama.. ve yazildigi gibi yalniz 4Mhz crystal kullanacaksan birde asagidaki uygulamayi deneyebilirsin
Alıntı YapHello all,

I am generating some DTMF tones from the PIC and would like some ideas on shaping / Filtering the signals from the PIC.
I tried the example given in the PB Manual but not satisfactory.

Any help !

Regards
Alıntı YapHere is an attachement for a filter it is better then in the book
succes.
(Resim gizlendi görmek için tıklayın.)

kolay gelsin