Moze li neko da kaze sta nije u redu sa ovim kodom, podesavanja odradjuje dobro, ali vreme stoji zakucano na podesenu vrednost, ne odbojava? PIC16F877A i DS1337+
Code: Select all
'Sat sa RTC DS1337 kolom
Include "Modedefs.Bas"
DEFINE LCD_DREG PORTD 'I/O port za LCD -e
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 2 'Register select pin
DEFINE LCD_EREG PORTD
DEFINE LCD_EBIT 3 'Enable pin
DEFINE LCD_BITS 4 '4-bitni data bus
DEFINE LCD_LINES 2 'LCD ima dva reda karaktera
Symbol Taster0 = PORTB.0
Symbol Taster1 = PORTB.1
Symbol Taster2 = PORTB.2
Symbol Taster3 = PORTB.3
Symbol Alarm = PORTC.5
Symbol Dioda = PORTB.5
Symbol SCL = PORTC.3 ' I2C clock pin
Symbol SDA = PORTC.4 ' I2C data pin
I CON 254 'Kontrolni bajt LCD-a
Clr CON 1 'Brisi displej
Line1 CON 128 'Pocetak prve linije LCD-a
Line2 CON 192 'Pocetak druge linije LCD-a
RTC CON %11010000 'Adresa DS1337 kola za write
'--------Kontrolni registri DS1337 kola-------------
SecReg CON $00 'Registar sekunda (00 - 59)
MinReg CON $01 'Registar minuta (00 - 59)
HourReg CON $02 'Registar sati (00 - 23)
DayReg CON $03 'Registar dana (1 - 7)
DateReg CON $04 'Registar dana u datumu (01 - 28/29, 30, 31)
MonthReg CON $05 'Registar meseca u datumu (01 - 12)
YearReg CON $06 'Registar godine u datumu (00 - 99)
Alm1sec CON $07 'Registar sekunda u Alarmu1 (00 - 59)
Alm1min CON $08 'Registar minuta u Alarmu1 (00 - 59)
Alm1hr CON $09 'Registar sato u Alarmu1 (00 - 23)
Alm1Day CON $0A 'Registar dana u Alarmu1 (1 - 7)
Alm2min CON $0B 'Registar minuta u Alarmu2 (00 - 59)
Alm2hr CON $0C ' Registar sati u Alarmu2 (00 - 23)
Alm2Day CON $0D 'Registar dana u Alarmu2 (1 - 7)
ContReg CON $0E 'Kontrolni registar
StatusReg CON $0F 'Status registar
RTCflag CON 0 'RTC fleg lokacija 0 internog EEPROM-a
RTCset VAR BIT 'bit za proveru da li je RTC postavljen
cntrl CON %00000101 'postavi SQW/OUT na 1Hz
Sta CON %00000000
'Promenljive za citanje i upisivanje u DS1337
Sec VAR BYTE 'sekunde
Mins VAR BYTE 'minute
hr VAR BYTE 'sati
day VAR BYTE 'dani
date VAR BYTE 'dan
mon VAR BYTE 'mesec
yr VAR BYTE 'godina
B0 var byte
sat var byte
min1 var byte
dan var byte
mje var byte
god var byte
cif1 var byte
cif2 var byte
broj var byte
br var byte
'----Inicijalne vrenosti-----------------
TRISA =$1F
TRISB =$F0
TRISC.4 = 1
TRISD =%00000000
Lcdout $fe, 1 ' Izbrisi ceo LCD displej
Lcdout $fe, 2 ' Pozicioniraj se na prvi red prvi karakter
Lcdout " PROBA " 'Ispisi "PROBA" u prvom redu
Lcdout $fe, $C0 ' Podesi kursor na pocetak drugog reda
Lcdout " DS1337 " 'Ispisi "DS1337" u drugom redu
Pause 1000 ' Pauza 1 sec
Ciklus:
'- - - Pritisnut B0 ulaz u glavni meni- - - - - -
B0 = 0
button Taster0, 0, 100, 10, B0, 1, meni0
button Taster1, 0, 100, 10, B0, 1, iskljalarm
I2CRead SDA, SCL, RTC, SecReg, [sec,MINs,hr,day,date,mon,yr]
'-------Citanje Ds1337 -------------------------
LCDOut $fe,1
LCDOut $fe,2,"Vreme: ",HEX2 hr, ":", HEX2 MINs, ":", HEX2 sec
LCDOut $fe,$c0,"Datum: ",HEX2 date, "/", HEX2 mon, "/", HEX2 yr
Pause 500
If Alarm = 0 Then 'Ako je dostignut Alarm1 postavi RB0 na 1
Dioda = 0
EndIf
GoTo Ciklus
'--------meni namestanja sata-----------------------------
iskljalarm:
I2CWrite SDA, SCL, RTC, StatusReg,[0]
Goto Ciklus
'- - - - Meni izbora - - - - - - - - - - - - - - - -
meni0:
LCdout i,Clr
LCDout i, Line1," Vreme: "
LCDout i, Line2," "
Pause 200
button Taster0, 0, 100, 10, B0, 1, meni1
button Taster1, 0, 100, 10, B0, 1, menisat0
Goto Meni0
meni1:
LCdout i,Clr
LCDout i, Line1," Datum: "
LCDout i, Line2," "
Pause 200
button Taster0, 0, 100, 10, B0, 1, meni2
button Taster1, 0, 100, 10, B0, 1, menidatum0
Goto Meni1
meni2:
LCdout i,Clr
LCDout i, Line1," Alarm: "
LCDout i, Line2," "
Pause 200
button Taster0, 0, 100, 10, B0, 1, meni0
button Taster1, 0, 100, 10, B0, 1, menialarm1
Goto Meni2
'--------meni namestanja sata-----------------------------
menisat0:
sat=0
min1=0
menisat:
button Taster0, 0, 100, 10, B0, 1, upisivreme
button Taster1, 0, 100, 10, B0, 1, menisat1
button Taster2, 0, 100, 10, B0, 1, menimin
goto menisat:
menisat1:
sat=sat+1
If sat > 23 Then sat=0
LCDOut I,Line2," ",dec2 sat, ":", dec2 Min1
Pause 200
Goto menisat
menimin:
min1=min1+1
If min1 > 59 Then min1=0
LCDOut I,Line2," ",dec2 sat, ":", dec2 Min1
Pause 200
Goto menisat
upisivreme:
br=sat
Call Pretvori
sat=Broj
br=min1
Call pretvori
min1=Broj
I2CWrite SDA, SCL, RTC, SecReg,[0,min1,sat]
pause 500
Goto Ciklus
'--------meni namestanja datum--------------------------
menidatum0:
dan=1
mje=1
god=7
menidatum:
button Taster0, 0, 100, 10, B0, 1, upisidatum
button Taster1, 0, 100, 10, B0, 1, menidan
button Taster2, 0, 100, 10, B0, 1, menimje
button Taster3, 0, 100, 10, B0, 1, menigod
goto menidatum:
menidan:
dan=dan+1
If dan > 31 Then dan=1
LCDOut I,Line2," ",dec2 dan, "/", dec2 mje,"/", dec2 god
Pause 200
Goto menidatum
menimje:
mje=mje+1
If mje > 12 Then mje=1
LCDOut I,Line2," ",dec2 dan, "/", dec2 mje,"/", dec2 god
Pause 200
Goto menidatum
menigod:
god=god+1
If god > 99 Then god=0
LCDOut I,Line2," ",dec2 dan, "/", dec2 mje,"/", dec2 god
Pause 200
Goto menidatum
upisidatum:
br=dan
Call Pretvori
dan=broj
br=mje
Call Pretvori
mje=broj
br=god
Call Pretvori
god=broj
I2CWrite SDA, SCL, RTC, DateReg,[dan,mje,god]
pause 500
Goto Ciklus
'--------meni namestanja alarma----------------------------
menialarm1:
sat=0
min1=0
menialarm:
button Taster0, 0, 100, 10, B0, 1, upisivreme1
button Taster1, 0, 100, 10, B0, 1, menisata1
button Taster2, 0, 100, 10, B0, 1, menimina
goto menialarm:
menisata1:
sat=sat+1
If sat > 23 Then sat=0
LCDOut I,Line2," ",dec2 sat, ":", dec2 Min1
Pause 200
Goto menialarm
menimina:
min1=min1+1
If min1 > 59 Then min1=0
LCDOut I,Line2," ",dec2 sat, ":", dec2 Min1
Pause 200
Goto menialarm
upisivreme1:
br=sat
Call Pretvori
sat=Broj
br=min1
Call pretvori
min1=Broj
I2CWrite SDA, SCL, RTC, Alm1Sec,[0,min1,sat,$81]
I2CWrite SDA, SCL, RTC, ContReg,[cntrl]
pause 500
Goto Ciklus
'-----pretvori iz dec u BCD kod-----------
Pretvori:
cif1=br / 10
cif2=br // 10
broj=cif1 * 16 + cif2
Return
End