Herkese merhaba. ben Ankara'dan Adem. Aranıza yeni katılıyorum.pic ile yeni ugraşmaya başladım ve proton kullanıyorum. Yeni pic deneme kartı aldım ve saat projesi ustunde calısıyorum fakat sankı saat ılerı ayar dugmesıne basılmıs gıbı ılerı sayıyor vıdeoda gorebılırsınız. kodları da gonderıyorum. Lutfen yardım edın..
http://www.youtube.com/watch?v=G00_icEMUHI
'****************************************************************
'* Name : UNTITLED.BAS *
'* Author : [select VIEW...EDITOR OPTIONS] *
'* Notice : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
'* : All Rights Reserved *
'* Date : 5/15/2010 *
'* Version : 1.0 *
'* Notes : lcd de yazı denemesi *
'* : *
'****************************************************************
Device=16F84A
XTAL=4
TRISB=0
PORTB=0
Dim i As Byte
Declare LCD_TYPE alpha
Declare LCD_LINES 2
Declare LCD_INTERFACE 4
Declare LCD_DTPIN PORTB.0
Declare LCD_ENPIN PORTB.5
Declare LCD_RSPIN PORTB.4
basla:
saat var Byte
dsaat var Byte
dakika var Byte
saniye var Byte
ticks var Byte
guncelle var Byte
pause 500
saat = 0
dakika = 0
saniye = 0
ticks = 0
guncelle= 1
OPTION_REG = $55
INTCON = $a0
On Interrupt GoTo tickint
PORTB=0
TRISB=%00000000
PORTA=1
TRISA=%11111111
ana_dongu:
If PORTB.1=0 Then saat_arttir
If PORTB.2=0 Then saat_azalt
If PORTB.3=0 Then dak_arttir
Cls
kontrol:
If guncelle = 1 Then
lcdout $fe,1," "
dsaat=saat
If (saat//12)=0 Then
dsaat=dsaat+12
EndIf
If saat<12 Then
lcdout DEC2 dsaat,":",DEC2 dakika,":",DEC2 saniye," AM"
Else
lcdout DEC2 (dsaat-12),":",DEC2 dakika,":",DEC2 saniye," PM"
EndIf
guncelle=0
EndIf
GoTo ana_dongu
saat_arttir:
lcdout $fe,$c0," *SAAT ILERI*"
saat=saat+1
If saat >=24 Then
saat=0
EndIf
GoTo ark_sondur
saat_azalt:
lcdout $fe,$c0," *SAAT GERI*"
saat=saat-1
If saat >=24 Then
saat=23
EndIf
GoTo ark_sondur
dak_arttir:
lcdout $fe,$c0," *DAK.ILERI*"
dakika=dakika+1
If dakika >= 60 Then
dakika=0
saat=saat+1
If saat >=24 Then
saat=0
EndIf
EndIf
GoTo ark_sondur
ark_sondur:
For i= 1 To 25
pause 10
Next i
guncelle=1
GoTo kontrol
Disable
tickint:
ticks=ticks+1
If ticks < 61 Then tiexit
ticks=0
saniye=saniye+1
If saniye>=60 Then
saniye=0
dakika=dakika+1
If dakika>=60 Then
dakika=0
saat=saat+1
Sound PORTA.3,[110,20]
If saat>=24 Then
saat=0
EndIf
EndIf
EndIf
guncelle=1
tiexit:
INTCON.2=0
Resume
End
kod tag kullanıldı
ayrıca, video hata vermektedir .
maxim
kodlarını birde şu şekilde denermisin acaba
ticks=ticks+1
if ticks=61 then
ticks=0
saniye=saniye+1
endif
if saniye=60 then
saniye=0
dakika=dakika+1
endif
if dakika=60 then
saat=saat+1
Sound PORTA.3,[110,20]
dakika=0
endif
if saat=24 then saat=0
guncelle=1
INTCON.2=0
Resume
kolay gelsin.
Teşekkur ederim yardımınız için. Verdiginiz komutları değiştirdim , sorun hala devam ediyor...
Videoyu göremedik ...
http://hotfile.com/dl/95791630/5ffd123/10012011020.mp4.html
Adembas,
Anladığım kadarı ile programı PBP dan Protona aklına estiği gibi çevirmişsin.
Bazı hatalar var tabiiki programda sorun onlardan kaynaklanıyor. Sırası ile açıklayayım sonrada düzeltilmiş halini vereceğim.
Birincisi Option Registerinde gereksiz tanımlama mevcut. Bu nedenle Onu değiştir. Option register değeri 5 olacaktır.
Daha sonra değişken tanımlamaları PBP şeklinde olmuş onlarıda Proton tanımlamasına çevir.
Protonda Dim Değişken as Byte (yada Word) şeklinde tanımlanır.
Daha sonra gecikme komutları yine PBP daki şekli ile kalmış Onları Delayms olarak değiştir.
Daha sonra ekrana yazdırma komutlarıda yine PBP dan kalma. Onlarıda Print At komutları ile değiştir.
Asıl önemli hata, butonları PortB.1 , PortB.2 ve PortB.3 pinlerine vermişsin ama bunları Tris registerinde belirtmemişsin.
Ama en önemlisi aynı pinleri LCD nin data hattı olarak göstermişsin. Bu nedenle ,
- Butonları PortA ya geçir. Yani;
POrtA=0
TrisA=%00000111 şeklinde tanımlama yap ve butonları birer pullup direnci ile PortA.0 , PortA.1 ve PortA.2 ye bağla. Butonların diğer ucu GND de olmalıdır. Butona basılınca PortA pinlerine LOW uygulanacaktır.
Ana döngü eiketi altında bir kaç satır sonra CLS komutu var. Bu komut ekranın görünürlüğünü ortadan kaldırmaktadır. Bu komutu oradan sil ve onun yerine ARK SONDUR etiketi altına ;
Print At 2,1,Rep 32\16
komutunu ekle.
Bunları tamamladıktan sonra programı derle ve çalıştır. Çalışacaktır.
Doğru programı aşağıda veriyorum.
E T E
Device=16F84A
Xtal=4
PORTA=0
TRISA=%00000111
TRISB=0
PORTB=0
Dim i As Byte
Declare LCD_Type alpha
Declare LCD_Lines 2
Declare LCD_Interface 4
Declare LCD_DTPin PORTB.0
Declare LCD_ENPin PORTB.5
Declare LCD_RSPin PORTB.4
basla:
Dim saat As Byte
Dim dsaat As Byte
Dim dakika As Byte
Dim saniye As Byte
Dim ticks As Byte
Dim guncelle As Byte
DelayMS 500
saat = 0
dakika = 0
saniye = 0
ticks = 0
guncelle= 1
OPTION_REG = $55
INTCON = $a0
On Interrupt GoTo tickint
PORTB=0
TRISB=%00000000
PORTA=1
TRISA=%11111111
ana_dongu:
If PORTA.0=0 Then saat_arttir
If PORTA.1=0 Then saat_azalt
If PORTA.2=0 Then dak_arttir
' Cls
kontrol:
If guncelle = 1 Then
Print At 1,4
dsaat=saat
If (saat//12)=0 Then
dsaat=dsaat+12
EndIf
If saat<12 Then
Print Dec2 dsaat,":",Dec2 dakika,":",Dec2 saniye," AM"
Else
Print Dec2 (dsaat-12),":",Dec2 dakika,":",Dec2 saniye," PM"
EndIf
guncelle=0
EndIf
GoTo ana_dongu
saat_arttir:
Print At 2,1," *SAAT ILERI*"
saat=saat+1
If saat >=24 Then
saat=0
EndIf
GoTo ark_sondur
saat_azalt:
Print At 2,1," *SAAT GERI*"
saat=saat-1
If saat >=24 Then
saat=23
EndIf
GoTo ark_sondur
dak_arttir:
Print At 2,1," *DAK.ILERI*"
dakika=dakika+1
If dakika >= 60 Then
dakika=0
saat=saat+1
If saat >=24 Then
saat=0
EndIf
EndIf
GoTo ark_sondur
ark_sondur:
For i= 1 To 25
DelayMS 10
Next i
guncelle=1
Print At 2,1,Rep 32\16
GoTo kontrol
Disable
tickint:
ticks=ticks+1
If ticks < 61 Then tiexit
ticks=0
saniye=saniye+1
If saniye>=60 Then
saniye=0
dakika=dakika+1
If dakika>=60 Then
dakika=0
saat=saat+1
Sound PORTA.3,[110,20]
If saat>=24 Then
saat=0
EndIf
EndIf
EndIf
guncelle=1
tiexit:
INTCON.2=0
Resume
' Enable
End
Teşekkur ederim ETE hocam dediginiz gibi düzenledim çalıştı devre. Benim pic deneme kartında butona basınca HİGH oluyor, onlara göre düzenlemesini yaptım. Sonraki aşama alarm ekleme olacak. Biraz ugraşayım bakalım..
eğer alarm devresi ekleyeceksen bu sistem tam kararlı çalışmaz. gecikmeler yaşanabilir. bence sen RTC DS1302 veya DS1307 kullanmaya bak. eğer sadece basit bir devre istiyorsan veya kesmeyi öğrenmek istiyorsan eyvallah ona diyeceğim yok. nisan ayında yeni öğrenmeye başladığım zaman bu yöntemi öğrenmiştim ilk olarak. daha sonra bu yöntemin gecikmeler sebep olacağın gördüm ve RTC kullanmaya karar verdim. tabi karar yine senin...