picbasic i RTC

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
User avatar
sasa45
Odlično uznapredovao
Odlično uznapredovao
Posts: 518
Joined: 19-01-2007, 07:42
Location: Subotica - Srbija
Contact:

picbasic i RTC

Post by sasa45 »

hteo bi da prosirim znanje i na ovu oblas ali imam malih tehnickih problema....

-koristim pic16f877
-RTC PCF8583
-picbasic

evo cod i shema

Code: Select all

'************************************************* ***************
' Ime programa: RTC.BAS
' Opis: program ilustruje primenu sata realnog vremena PCF8583.
' Za povezivanje sa mikrokontrolerom se koristi I2CREAD 
' naredba. 
'************************************************* ***************

DEFINE LCD_DREG PORTD ' I/O port na kome se nalazi LCD
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 SCL = PORTC.3 ' I2C data pin
symbol SDA = PORTC.5 ' I2C clock pin

Sec var bit
B0 var byte
S var byte ' Sekunde
M var byte ' Minuti
H var byte ' Sati
D var byte ' Dan
Mn var byte ' Mesec
Y var byte ' Godina

OPTION_REG = $7f ' Omoguci PORTB pullup otpornike
lcdout $fe,1 ' Obrisi ekran displeja
Main:

I2CREAD SDA,SCL,%10100001,2,[S]
I2CREAD SDA,SCL,%10100001,3,[M]
I2CREAD SDA,SCL,%10100001,4,[H]
I2CREAD SDA,SCL,%10100001,5,[D]
I2CREAD SDA,SCL,%10100001,6,[Mn]
I2CREAD SDA,SCL,%10100001,6,[Y]



lcdout $fe,1 ' Obrisi displej 
lcdout $fe,2 ' Prvi red prvi karakter
lcdout "Time: ", hex(H),":", hex(M)," ", hex(S)
lcdout $fe,$c0 ' Drugi red, prvi karakter 
lcdout "Date: ", hex(D),".", hex(Mn),".20",hex(Y)

Pause 500
goto Main ' Ponovi sve

End ' Kraj programa
problem je sto mi se na displeju pojavi

Time: 0:0 0
Date: 0.0.200

i nista se ne desava da li je problem u kodu ili nisam dobro napravio shemu pa mi RTC ne radi...Sta prvo da proveravam?
Attachments
rtc.rar
(29.3 KiB) Downloaded 414 times
User avatar
sasa45
Odlično uznapredovao
Odlično uznapredovao
Posts: 518
Joined: 19-01-2007, 07:42
Location: Subotica - Srbija
Contact:

Re: picbasic i RTC

Post by sasa45 »

za sada je proradilo pa cu da vidim da odradim i ostatan greska je bila u kodu

symbol SDA = PORTC.5

sda je na pinu c4

sad odo da gledam film a sutra cu da nastavim... ostalo mi je da resim zasto mi trepce displej i zasto mi ispisuje

Time: 0:0 0
Date: 1.1.201

zasto mi godina nije cetvorocifren broj...kad to sredim onda jos samo da vidi kako da podesim tacno vreme i onda mogu poceti sa ozbiljnijim programiranjem...
User avatar
sasa45
Odlično uznapredovao
Odlično uznapredovao
Posts: 518
Joined: 19-01-2007, 07:42
Location: Subotica - Srbija
Contact:

Re: picbasic i RTC

Post by sasa45 »

sve reseno i sve radi ok resio sam i podesavanje vremena ali mi treba mala idejna pomoc...

kako da resim podesavanje vremena posto sam za sada stavio nepoznate


sat=10
minut=50

i tako dalje

e sad kako da resim da tasterima podesavam te promenljive... i da mi bude vizuelno ok na lcd displeju...
User avatar
sasa45
Odlično uznapredovao
Odlično uznapredovao
Posts: 518
Joined: 19-01-2007, 07:42
Location: Subotica - Srbija
Contact:

Re: picbasic i RTC

Post by sasa45 »

hmmm sad sam se pogubio i treba mi pomoc...

u data sheetu pise da je recimo na lokaciji 02 sekunde 10 sec i 1sec...koliko sam ja ukapirao to su desetice za sekunde i jedinice za sekunde... a ovde u kodu mi pise hex te vrednosti na lokaciji 02...

zar tu vrednost sa lokacije 2 ne bi trebalo odvojiti na prva cetiri bira i druga cetiri bita i onda ocitati desetice i jedinice i tako dobiti koliko je to stvarno sekundi...

o ovo me sam poceo razmisljati kad sam dosao u problem da kad mi sat odradi 24h onda mi datum skroz pobrka...
User avatar
dejanmaksa
Napredujem
Napredujem
Posts: 159
Joined: 28-10-2008, 22:15
Location: Velika Plana

Re: picbasic i RTC

Post by dejanmaksa »

Ovako mi ne blinka displej.
Sto brljavi datum nisam jos sredio i treba da ubacim kod za podesavanje.

Code: Select all

lcdout $FE, $80,"Time: ", hex(H),":", hex(M),":", hex(S)
lcdout $fe,$c0, "Date: ", hex(D),".", hex(Mn),".20",hex(Y)   ' Drugi red, prvi karakter

goto Main ' Ponovi sve
User avatar
sasa45
Odlično uznapredovao
Odlično uznapredovao
Posts: 518
Joined: 19-01-2007, 07:42
Location: Subotica - Srbija
Contact:

Re: picbasic i RTC

Post by sasa45 »

da li neko ima predlog oko izbora rtc-a....ja koristim PCF8583 ali koliko sam ukapirao iz data sheeta ima samo 2 bita tj od 0 do 3 binarno...

video sam ds1337 ima od 0-99 za ispis godina ali nemam gde da ga kupim u subotici,da li neko zna gde moze kupiti u srbiji nije problem narucicu ga telefonom...

ili predlog nekog treceg RTC-a
User avatar
sasa45
Odlično uznapredovao
Odlično uznapredovao
Posts: 518
Joined: 19-01-2007, 07:42
Location: Subotica - Srbija
Contact:

Re: picbasic i RTC

Post by sasa45 »

he he ova tema na kraju ispasi samo moja tema...

resio sam probleme sto brljavi datum...sve podatke koje salje RTC su binarni i u data sheetu pise sta koji znaci..odvojim ih po toj tabeli i sve radi kako treba...a i problem sa godinom sam ukapirao broji samo od 0 do 3 zbog toga da RTC zna koja je prestupna a koja ne...ta dva bita za godinu nisam uspeo da ocitam ali ako ja upisem ta dva bita u RTC onda mi on promeni 28 i 29 dana u februaru...
Sad jos ne znam da li ta dva bita RTC sam omera sa istekom godine ili ta dva bita moram ja svaki put menjati kad istekne godina...
User avatar
dejanmaksa
Napredujem
Napredujem
Posts: 159
Joined: 28-10-2008, 22:15
Location: Velika Plana

Re: picbasic i RTC

Post by dejanmaksa »

Ja sam uzimao DS1307 u ITCElectronic narucis stize za 3 nedelje. Probaj kod njih.
http://www.itcelectronic(dot" onclick="window.open(this.href);return false;)com/kontakt/kontakt.htm
User avatar
dejanmaksa
Napredujem
Napredujem
Posts: 159
Joined: 28-10-2008, 22:15
Location: Velika Plana

Re: picbasic i RTC

Post by dejanmaksa »

Ja sam odradio ovako sa DS1307.
Njega imam pa cu da probam da napravim konkretno uredjaj.
Za sada sam stao ovde imam neka posla pa cu sutra ili prekosutra da doradim sa tasterima za podesavanje.
Sema je ista kao i tvoja samo izbacis prikljucak za RB0.
Lepo cita sve i nebrljavi.

Code: Select all

'************************************************* ***************
' Ime programa: RTC.BAS
' Opis: program ilustruje primenu sata realnog vremena DS1307.
' Za povezivanje sa mikrokontrolerom se koristi I2CREAD 
' naredba. 
'************************************************* ***************

DEFINE LCD_DREG PORTD ' I/O port na kome se nalazi LCD
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 SCL = PORTC.3 ' I2C data pin
symbol SDA = PORTC.4 ' I2C clock pin

Sec var bit
B0 var byte
Mi var byte ' Minuti
Sa var byte ' Sati
Me var byte ' Meseci
Se var byte ' Sekunde
Go var byte ' Godine
Da var byte ' Dani

OPTION_REG = $7f ' Omoguci PORTB pullup otpornike
lcdout $fe,1 ' Obrisi ekran displeja

Main:
I2CREAD SDA,SCL,%11010001,1,[Mi] 'Cita minute i smesta u S
I2CREAD SDA,SCL,%11010001,2,[Sa] 'Cita sate i smesta u M
I2CREAD SDA,SCL,%11010001,0,[Se] 'Cita sekunde i smesta u D
I2CREAD SDA,SCL,%11010001,5,[Me] 'Cita mesece i smesta u H
I2CREAD SDA,SCL,%11010001,6,[Go] 'Cita godine i smesta u Mn
I2CREAD SDA,SCL,%11010001,4,[Da]  'Cita dane i smesta u Y

lcdout $FE, $80,"Time:", hex2(Sa),":", hex2(Mi),":", hex2(Se)
lcdout $fe,$c0, "Date:", HEX2(Da),".", HEX2(Me),".20",HEX2(Go)   ' Drugi red, prvi karakter

goto Main ' Ponovi sve

End ' Kraj programa
User avatar
dejanmaksa
Napredujem
Napredujem
Posts: 159
Joined: 28-10-2008, 22:15
Location: Velika Plana

Re: picbasic i RTC

Post by dejanmaksa »

Tu bih mogli jos da ubacimo merac temperature, brojac obrtaja, eventualno pokazivac nivoa goriva u rezervoaru posto vec ima A/D, eventualno i pokazivac temperature spolja. Moglo bi da se iskoristi i da posluzi kao alarm za auto sa tim informacijama.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7882
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: picbasic i RTC

Post by pedja089 »

nisam citao celu temu, ali sto ti pise da su gornja 4 bita po 10s a donja po 1s, tu ti ne treba razdvajanje.
vec prikazivanje tog broja u heksadecimalnom obliku.
i to samo pises lcdout hex(sekunde)
User avatar
dejanmaksa
Napredujem
Napredujem
Posts: 159
Joined: 28-10-2008, 22:15
Location: Velika Plana

Re: picbasic i RTC

Post by dejanmaksa »

Ako samo stavim HEX (Se) bez broja 2, onda mi pokazuje kada je jednocifren broj bez nule, a nekako mi je lepse da uvek pisu dve cifre. 01, 02, 03 ...09, 10, 11...
Ako sam lepo razumeo na to si mislio.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7882
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: picbasic i RTC

Post by pedja089 »

na to sam mislio...
a sto se tice formata, stvar licnog izbora...
User avatar
dejanmaksa
Napredujem
Napredujem
Posts: 159
Joined: 28-10-2008, 22:15
Location: Velika Plana

Re: picbasic i RTC

Post by dejanmaksa »

Prvo sam stavio bez te 2 ali mi je ovako ok bar meni.
User avatar
sasa45
Odlično uznapredovao
Odlično uznapredovao
Posts: 518
Joined: 19-01-2007, 07:42
Location: Subotica - Srbija
Contact:

Re: picbasic i RTC

Post by sasa45 »

sta sam mogao da zabrljam u RTC kad mi sad sat u vremenu i dan u datumu ispisuje isti broj...tj u samim registrima RTC-a se upise isti broj tj onaj koji je zadnji upisan ostane upisan na oba mesta...
User avatar
sasa45
Odlično uznapredovao
Odlično uznapredovao
Posts: 518
Joined: 19-01-2007, 07:42
Location: Subotica - Srbija
Contact:

Re: picbasic i RTC

Post by sasa45 »

evo ja sam nasao svoje resenje ovog sto sam poceo u ovoj temi...mozda je malo komplikovano i cudno ali ja sam takvo resenje nasao u skladu sa mojim znanjem programiranja...

radi sat i datum i ima mod za podesavanje istih

tasterom na pinu a1 se ulazi u mod podesavanja
tasterom na pinu a5 se smanjuje vrednost
tasterom na pinu a3 se povecava vrednost
a tasterom na pinu a4 se potvrdjuje vrednost i prelazi na podesavanje sledece vrednosti...

Code: Select all

DEFINE LCD_BITS 4      ' LCD broj Bita na liniji 4 ili 8
DEFINE LCD_DREG PORTD  ' LCD data port
DEFINE LCD_DBIT 0      ' LCD pocetni bit podataka 0 ili 4(od kojeg pina na mikrokontroleru pocinje 0 bit podataka)
DEFINE LCD_RSREG PORTD ' LCD registar select port
DEFINE LCD_RSBIT 4     ' LCD registar select bit (na koji pin na mikrokontroleru je povezan RS bit)
DEFINE LCD_EREG PORTD  ' LCD enable port
DEFINE LCD_EBIT 5      ' LCD enable bit(na koji pin na mikrokontroleru je povezan E bit)
DEFINE LCD_LINES 2 





symbol SCL = PORTC.3 ' I2C data pin
symbol SDA = PORTC.4 ' I2C clock pin


Sec var bit
B0 var byte
S var byte ' Sekunde
sp var byte
M var byte ' Minuti
H var byte ' Sati
D var byte ' Dan
Mn var byte ' Mesec
Mnp var byte
Y var byte ' Godina
minut var byte
sat var byte
dan var byte
mesec var byte
godina var byte
god var byte
hj var byte
hd var byte


trise.3=1
trise=%111
trisa=%11111111
adcon1=7





Main:

I2CREAD SDA,SCL,%10100001,2,[S]
I2CREAD SDA,SCL,%10100001,3,[M]
I2CREAD SDA,SCL,%10100001,4,[H]
I2CREAD SDA,SCL,%10100001,5,[D]
I2CREAD SDA,SCL,%10100001,6,[Mn]
I2CREAD SDA,SCL,%10100001,10,[Godina]
I2CREAD SDA,SCL,%10100001,11,[god]

hj=0
hd=0

hj.0=s.0
hj.1=s.1
hj.2=s.2
hj.3=s.3

hd.0=s.4
hd.1=s.5
hd.2=s.6
hd.3=s.7

s=hd*10+hj


hj=0
hd=0

hj.0=m.0
hj.1=m.1
hj.2=m.2
hj.3=m.3

hd.0=m.4
hd.1=m.5
hd.2=m.6
hd.3=m.7

m=hd*10+hj

hj=0
hd=0

hj.0=h.0
hj.1=h.1
hj.2=h.2
hj.3=h.3

hd.0=h.4
hd.1=h.5

h=hd*10+hj


hj=0
hd=0

hj.0=d.0
hj.1=d.1
hj.2=d.2
hj.3=d.3

hd.0=d.4
hd.1=d.5

d=hd*10+hj

hj=0
hd=0

hj.0=Mn.0
hj.1=Mn.1
hj.2=Mn.2
hj.3=Mn.3

hd.0=Mn.4

Mn=hd*10+hj

if s<>sp then
lcdout $fe,2,"Sat:", dec2(H),":", dec2(M),":", dec2(S)
lcdout $fe,$c0,"Datum:",dec2(D),".",dec2(Mn),".20",dec2(godina)
Pause 500
sp=s
endif

if (mnp=1) and (mn=1) then

 godina=godina+1
 god=god+1
I2CWRITE SDA,SCL,%10100001,10,[Godina]
I2CWRITE SDA,SCL,%10100001,11,[god]
 mnp=0

 endif
 if mn<>1 then mnp=1



if porta.1=1 then
 gosub podesavanja
 mnp=0
 endif


goto Main ' Ponovi sve

podesavanja:
sat=h
minut=M
dan=d
mesec=Mn

po1:
if porta.5=1 then
if sat=0 then sat=24 
sat=sat-1
pause 300
sp=0
endif
if porta.3=1 then 
sat=sat+1
if sat=24 then sat=0
pause 300
sp=0
endif
if porta.4=1 then
pause 300
goto po2
endif


lcdout $fe,2,"Sat:", dec2(sat),":", dec2(minut),":", dec2(S)
lcdout $fe,$c0,"Datum:",dec2(dan),".",dec2(mesec),".20",dec2(godina)
pause 200
lcdout $fe,2,"Sat:","  ",":", dec2(minut),":", dec2(S)
lcdout $fe,$c0,"Datum:",dec2(dan),".",dec2(mesec),".20",dec2(godina)

goto po1
po2:
if porta.5=1 then
if minut=0 then minut=60 
minut=minut-1
pause 300
sp=0
endif
if porta.3=1 then 
minut=minut+1
if minut=60 then minut=0
pause 300
sp=0
endif
if porta.4=1 then
pause 300
goto po5
endif


lcdout $fe,2,"Sat:",dec2(sat),":", dec2(minut),":", dec2(S)
lcdout $fe,$c0,"Datum:",dec2(dan),".",dec2(mesec),".20",dec2(godina)
pause 200
lcdout $fe,2,"Sat:",dec2(sat),":","  ",":", dec2(S)
lcdout $fe,$c0,"Datum:",dec2(dan),".",dec2(mesec),".20",dec2(godina)


goto po2

po3:
if porta.5=1 then
if (dan=1) and ((mesec=1) or (mesec=3) or (mesec=5) or (mesec=7) or (mesec=8) or (mesec=10) or (mesec=12)) then dan=32 
if (dan=1) and ((mesec=4) or (mesec=6) or (mesec=9) or(mesec=11)) then dan=31
if (dan=1) and (mesec=2) and (god=0) then dan=30
if (dan=1) and (mesec=2) and (god>0)  then dan=29
dan=dan-1
pause 300
sp=0
endif
if porta.3=1 then 
dan=dan+1
if (dan=>32) and ((mesec=1) or (mesec=3) or (mesec=5) or (mesec=7) or (mesec=8) or (mesec=10) or (mesec=12)) then dan=1 
if (dan=>31) and ((mesec=4) or (mesec=6) or (mesec=9) or(mesec=11)) then dan=1
if (dan=30) and (mesec=2) and (god=0) then dan=1
if (dan=29) and (mesec=2) and (god>0)  then dan=1
pause 300
sp=0
endif
if porta.4=1 then
pause 300
goto po6
endif


lcdout $fe,2,"Sat:", dec2(sat),":", dec2(minut),":", dec2(S)
lcdout $fe,$c0,"Datum:",dec2(dan),".",dec2(mesec),".20",dec2(godina)
pause 200
lcdout $fe,2,"Sat:",dec2(sat),":", dec2(minut),":", dec2(S)
lcdout $fe,$c0,"Datum:","  ",".",dec2(mesec),".20",dec2(godina)

goto po3

po4:
if porta.5=1 then
if mesec=1 then mesec=13 
mesec=mesec-1
pause 300
sp=0
endif
if porta.3=1 then 
mesec=mesec+1
if mesec=13 then mesec=1
pause 300
sp=0
endif
if porta.4=1 then
pause 300
goto po3
endif


lcdout $fe,2,"Sat:", dec2(sat),":", dec2(minut),":", dec2(S)
lcdout $fe,$c0,"Datum:",dec2(dan),".",dec2(mesec),".20",dec2(godina)
pause 200
lcdout $fe,2,"Sat:",dec2(sat),":", dec2(minut),":", dec2(S)
lcdout $fe,$c0,"Datum:",dec2(dan),".","  ",".20",dec2(godina)

goto po4


po5:
if porta.5=1 then
if godina=0 then godina=100 
godina=godina-1
if god=0 then god=4
god=god-1
pause 300
sp=0
endif
if porta.3=1 then 
godina=godina+1
god=god+1
if god=4 then god=0
if godina=100 then godina=0
pause 300
sp=0
endif
if porta.4=1 then
pause 300
goto po4
endif


lcdout $fe,2,"Sat:", dec2(sat),":", dec2(minut),":", dec2(S)
lcdout $fe,$c0,"Datum:",dec2(dan),".",dec2(mesec),".20",dec2(godina)
pause 200
lcdout $fe,2,"Sat:",dec2(sat),":", dec2(minut),":", dec2(S)
lcdout $fe,$c0,"Datum:",dec2(dan),".",dec2(mesec),".20","  "

goto po5
po6:



M = (minut/10)*16+minut//10 
H = (sat/10)*16+sat//10
D = god*64+(dan/10)*16+dan//10                                       
Mn =(mesec/10)*16+mesec//10

'sinhronizacija godine
'godina=08
'god=0

I2cwrite SDA,SCL,%10100001,2,[0]
I2Cwrite SDA,SCL,%10100001,3,[M]
I2Cwrite SDA,SCL,%10100001,4,[H]
I2CWRITE SDA,SCL,%10100001,5,[D]
I2CWRITE SDA,SCL,%10100001,6,[Mn]
I2CWRITE SDA,SCL,%10100001,10,[Godina]
I2CWRITE SDA,SCL,%10100001,11,[god]

return




End ' Kraj programa
eto da dam i ja nesto ovom forumu da ne bude da samo uzimam od vas...
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: picbasic i RTC

Post by electron »

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
User avatar
electron
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 225
Joined: 28-02-2009, 19:20
Location: Serbia

Re: picbasic i RTC

Post by electron »

Izgleda sam se malo zzzz stavio sam kristal na DS1337 od 3,2768MHz, moram nabaviti drugi
Post Reply