16f628 ile 11 Çıkışlı DTMF

Başlatan Erdinçbavaş, 02 Ekim 2015, 19:05:44

Erdinçbavaş

Arkadaşlar merhaba daha önce bir siteden indirdiğim DTMF devresini yapmak istedim fakat pice hex. dosyasını yüklediğim devreyi kurdum çıkışlar sürekli yandı.Bende Serkan Ayyıldız hocamın kitabından (sayfa 263) yeniden program yapmaya çalışıyorum.1234 yazınca b3 4s yansın istiyorum fakat isiste programı yükledim b2 ve b3 çıkışları direk yanıyor.Nihayi hedefe ulaşmadan önce adım adım gitmek istiyorum nasıl bir yol izlemeliyim.Daha önceden jal ile 16f628-cm8870 ve 10-11 çıkışlı olarak dtmf yapan var mı?

Açma = *  ( yıldız)
Kapama = # (dies-kare)
İşlem,
1 1 1 1 * 0 1  = 1 nolu röle açıldı
1 1 1 1 # 0 1  = 1 nolu röle kapandı

1 1 1 1 * 1 1  = 11 nolu röle açıldı
1 1 1 1 # 1 1  = 11 nolu röle kapandı. Nihayi hedefim bu olacak

---------------------------------------------------------------------------------------------------------------
include 16f628_4i             -- Kullandığımız entegre (Mikrodenetleyici) tanıtılır.İçindeki osilatör aktif edilir.
include jlib                -- Jal kütüphanesi yüklenir.
include hd447804
include dtmf
disable_a_d_functions         -- Analog giriş çıkışlar devre dışı bırakılır.
pragma target  protection  on   -- Şifre koyar.Korumaya alır.

pin_a0_direction = output
pin_a1_direction = output
pin_a2_direction = output
pin_a3_direction = output
pin_a4_direction = output
pin_a6_direction = output
pin_a7_direction = output

port_b_direction = all_output   -- Port B Çıkış olarak atanır.

port_a = 0b00000000
port_b = 0b00000000

var byte x = 0 , dt
hd44780_clear

forever loop       -- Program sonsuz döngüye alınır.(Sonsuz Döngü Başlangıcı)
   if dtmf_oku ( dt ) then
      if      x == 0 & dt == "1" then x = x + 1
      elsif   x == 1 & dt == "2" then x = x + 1
      elsif   x == 2 & dt == "3" then x = x + 1
      elsif   x == 3 & dt == "4" then x = x + 1
      else    x =  0
      end if
     
      hd44780_line1
      hd44780 = dt hd44780 = " " print_decimal_1 ( hd44780 , x , "0" )
     
      while dtmf_std_pin == high loop end loop
     
      if x == 4 then
      pin_b3 = high
      delay_1s   (4)
      pin_b3 = low
      x = 0
      end if
      end if
end loop             -- (Sonsuz Döngü Bitişi)

ByTEK

devreyi sanal değilde gerçek deney boardu üzerinden denemenizde fayda var.