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)
devreyi sanal değilde gerçek deney boardu üzerinden denemenizde fayda var.