 | Elektrotekno.com Elektronik ve Teknoloji Merkezi
| | Yazar | Mesaj | mame | | Tarih: 13.12.2007, 05:45 Mesaj konusu: LCD SAAT pıcbasıc yardım | |
| merhaba lcd ıle ds1302 entegresını kullanarak dahılı osılator ıle menulu saat yaptım fakat saat 30sn sonra falan sureklı resetlenıp basa donuyor.acaba kodlardamı hata var yoksa programlarken sıgortalardamı hata yapıyorum.
programlarken sıgortaların durumu ıntrc ı/o-wdte mclre-boren aktif.program wınpıc 800 (oradakı butun olasılıklar denendi.)kodlar asagıda.entegre 16f628.yardımlarınız ıcın tesekkurler.
trısa=%1100001 'porta tamamı çıkış
trısb=0 'portb tamamı çıkış
optıon_reg.7=0 'pull up dirençlerinin hepsi iptal
cmcon=7
'*****lcd_defıne tanımlamaları*****
defıne lcd_dreg portb 'lcd data bacakları portb'ye bağlı
defıne lcd_dbıt 0 'lcd data bacakları portb.4'den başlıyor
defıne lcd_ereg porta 'lcd enable bacağı portb'ye bağlı
defıne lcd_ebıt 3 'lcd enable pini portb.3 bağlı
defıne lcd_rsreg porta 'lcd rs pini portb'ye bağlı
defıne lcd_rsbıt 2 'lcd rs pini portb.2 bağlı
defıne lcd_bıts 4 'lcd 4 bit heberleşme yapıyor
defıne lcd_lınes 2 'lcd 2*16
'*****rtc ds1302 tanımlamaları*****
rtc_rst var portb.6
rtc_clk var portb.4
rtc_dta var portb.5
menu var porta.6
yukarı var porta.7
asagı var porta.0
'*****rtc ds1302 değişkenleri*****
sn var byte
dak var byte
saat var byte
gun var byte
ay var byte
yıl var byte
mem var byte
sayı var byte
onlar var byte
bırler var byte
a var byte 'karakter sayısı
c var byte 'karakter sayısı
d var byte 'karakter sayısı
e var byte 'karakter sayısı
saat=22
dak=34
gun=13
ay=12
yil=07
lcdout $fe,$0c
for a=0 to 35 'karakter sayısına onaltı eklenecek (49+16)
pause 150 'yazının kayma hızı
lcdout $fe,1
for c=0 to 19 'kayacak yazının karakter sayısının bir eksiği (50-1)
lookup c, ["muhammet alı kaymak"],d
lcdout $fe,143+c-a,d
next c
c=0
next a
a=0
low rtc_rst 'reset ve clock pinleri sıfırladık
low rtc_clk
gosub zaman_yaz
basla:
lcdout $fe,$0c
gosub zaman_oku
lcdout $fe,1,"saat : ",dec2 saat,":",dec2 dak,":",dec2 sn
lcdout $fe,$c0,"tarıh:",dec2 gun,"/",dec2 ay,"/","20",dec2 yıl
gosub gecikme
ıf menu=0 then ayar
goto basla
zaman_oku:
high rtc_rst
shiftout rtc_dta, rtc_clk, 0, [$bf]
shıftın rtc_dta, rtc_clk, 1, [sn, dak, saat,gun , ay, mem, yıl, mem] 'oku
low rtc_rst
mem=sn:gosub cevır:sn=sayı
mem=dak:gosub cevır:dak=sayı
mem=saat:gosub cevır:saat=sayı
mem=gun:gosub cevır:gun=sayı
mem=ay:gosub cevır:ay=sayı
mem=yıl:gosub cevır:yıl=sayı
':pause 100
return
zaman_yaz:
mem=sn:gosub terscevır:sn=sayı
mem=dak:gosub terscevır:dak=sayı
mem=saat:gosub terscevır:saat=sayı
mem=gun:gosub terscevır:gun=sayı
mem=ay:gosub terscevır:ay=sayı
mem=yıl:gosub terscevır:yıl=sayı
high rtc_rst
shıftout rtc_dta, rtc_clk, 0, [$8e, 0] 'yazmak için hazırla
low rtc_rst:pause 1
high rtc_rst
shıftout rtc_dta, rtc_clk, 0, [$be, sn, dak, saat,gun , ay, 0, yıl, 0] 'yaz
low rtc_rst
pause 10
return
cevır:
onlar=mem & %01110000
onlar=onlar>>4
bırler=mem & %00001111
sayı=onlar*10+bırler
return
terscevır:
onlar=mem dıg 1
onlar=onlar<<4
bırler=mem dıg 0
sayı=onlar+bırler
return
gecıkme:
pause 300
return
ayar:
ıf menu=0 then ayar
for a=0 to 16 'karakter sayısına onaltı eklenecek (49+16)
pause 150 'yazının kayma hızı
lcdout $fe,1
for c=0 to 15 'kayacak yazının karakter sayısının bir eksiği (50-1)
lookup c, [" menu "],d
lcdout $fe,143+c-a,d
next c
c=0
next a
a=0
z:
gosub ekran3
lcdout $fe,$c0,"<=zaman ayarla=> "
gosub gecıkme
ıf menu=0 then saatayar1
ıf asagı=0 then t
ıf yukarı=0 then cık
goto z
t:
gosub ekran3
lcdout $fe,$c0,"<=tarıh ayarla=> "
gosub gecıkme
ıf menu=0 then tarıh
ıf asagı=0 then cık
ıf yukarı=0 then z
goto t
cık:
gosub ekran3
lcdout $fe,$c0," <=cıkıs=> "
gosub gecıkme
ıf menu=0 then basla
ıf yukarı=0 then t
ıf asagı=0 then z
goto cık
saatayar1:
lcdout $fe,1
ıf menu=0 then saatayar1
gosub ekran0
saatayar:
gosub gecıkme
lcdout $fe, $c7, dec2 saat
lcdout $fe,$0e
lcdout $fe, $10
e=0
button menu, 0, 255, 255, e, 1,dakikaayar1
button yukari,0,255,255,e,1,saatiarttir
button asagı,0,255,255,e,1,saatiazalt
goto saatayar
saatiarttir:
ıf yukarı=0 then saat=saat+1
ıf saat=24 then saat=0
goto saatayar
saatiazalt:
ıf asagı=0 then saat=saat-1
ıf saat=255 then saat=23
goto saatayar
dakikaayar1:
ıf menu=0 then dakikaayar1
lcdout $fe,1
gosub ekran0
dakikaayar:
gosub gecıkme
lcdout $fe, $ca, dec2 dak
lcdout $fe,$0e
lcdout $fe, $10
e=0
button menu, 0, 255, 255, e, 1,zaman_b
button yukarı,0,255,255,e,1,dakarttir
button asagı,0,255,255,e,1,dakazalt
dakarttir:
ıf yukarı=0 then dak=dak+1
ıf dak=60 then dak=0
goto dakikaayar
dakazalt:
ıf asagı=0 then dak=dak-1
ıf dak=255 then dak=59
goto dakikaayar
zaman_b:
ıf menu=0 then zaman_b
gosub zaman_yaz
lcdout $fe,1," zaman ayarlandı"
gosub gecıkme
gosub gecıkme
gosub gecıkme
goto basla
tarıh:
ıf menu=0 then tarıh
lcdout $fe,1
gosub ekran1
tarıh_ayar1:
gosub gecıkme
lcdout $fe, $c6, dec2 gun
lcdout $fe,$0e
lcdout $fe, $10
e=0
button menu, 0, 255, 255, e, 1,ay_a
button yukari,0,255,255,e,1,gun_arttır
button asagı,0,255,255,e,1,gun_azalt
gun_arttır:
ıf yukarı=0 then gun=gun+1
ıf gun=32 then gun=1
goto tarıh_ayar1
gun_azalt:
ıf asagı=0 then gun=gun-1
ıf gun=0 then gun=31
goto tarıh_ayar1
ay_a:
ıf menu=0 then ay_a
lcdout $fe,1
gosub ekran1
ay_a1:
gosub gecıkme
lcdout $fe, $c9, dec2 ay
lcdout $fe,$0e
lcdout $fe, $10
e=0
button menu, 0, 255, 255, e, 1,yıl_a
button yukarı,0,255,255,e,1,ay_art
button asagı,0,255,255,e,1,ay_azal
ay_art:
ıf yukarı=0 then ay=ay+1
ıf ay=13 then ay=1
goto ay_a1
ay_azal:
ıf asagı=0 then ay=ay-1
ıf ay=0 then ay=12
goto ay_a1
yıl_a:
ıf menu=0 then yıl_a
lcdout $fe,1
gosub ekran1
yıl_a1:
gosub gecıkme
lcdout $fe, $ce, dec2 yıl
lcdout $fe,$0e
lcdout $fe, $10
e=0
button menu, 0, 255, 255, e, 1,zaman_b
button yukarı,0,255,255,e,1,yıl_art
button asagı,0,255,255,e,1,yıl_azal
yıl_art:
ıf yukarı=0 then yıl=yıl+1
ıf yıl=100 then ay=00
goto yıl_a1
yıl_azal:
ıf asagı=0 then yıl=yıl-1
ıf yıl=255 then yıl=99
goto yıl_a1
gecıkme2:
pause 150
return
ekran1:
lcdout " tarıh ayarla "
lcdout $fe,$c0,"tarıh:",dec2 gun,":",dec2 ay,":","20",dec2 yıl
return
ekran0:
lcdout " zaman ayarla "
lcdout $fe,$c0,"saat : ",dec2 saat,":",dec2 dak,":",dec2 sn
return
ekran3:
lcdout $fe,1, " menu "
return
end
|
|
|
|
elektron | | Tarih: 13.12.2007, 12:33 Mesaj konusu: | |
| merhaba mame;
wdt disable yap.
|
|
mame | | Tarih: 14.12.2007, 02:36 Mesaj konusu: | |
| elektron yazmış: merhaba mame;
wdt disable yap.
cevabın ıcın tesekkurler dedıgını yaptım sorun cozulmedı.devrede sorunum yok aynı devre calısan bır program var ortada dolasan antrakta hex olarak verılmıs.o programla devreyı sorunsuz calıstırıyorum.sanırım mclr ile ilgili sorunum var devre programlarken mclr i kapatıyorum.ama sanırım programdada ayarlamam gereken bıseyler var program ve ısıs dosyalarını yukluyorum.bırde bu bastakı @ıle yapılandevice tanımlamalarını pıc basıc pro tanımıyor illegal opcode hatası verıyot acaba nerde hata var.bunlar program basına yazana bılgı ıcınmı yoksa programda bı ayar yaparakmı bunları tanıtıyoruz.helpte konuyla ılgılı bılgı bulamadım.yapmak ısteyene baskı devrede ekledım.
@ DEVICE pic16F628A
@ DEVICE pic16F628A, WDT_off
@ DEVICE pic16F628A, PWRT_On
@ DEVICE pic16F628A, PROTECT_OFF
@ DEVICE pic16F628A, MCLR_On
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT
|
|
mame | | Tarih: 30.12.2007, 06:46 Mesaj konusu: | |
| hatamı buldum meger görmemisim pullup ları dısable yapacagıma enable yapmısım optionreg7=1 yapınca program normale döniyor ilgilenenlere tesekkürler.
|
|
|
|