Da li mi neko moze pomoci oko DS 1307 imam kod za komunikaciju I2C ali ne mogu da shvatim iz dadasheet-1 kako se pozivaju registri DS-a i kako mogu u njh da upisem svreme koje ja zelim? Unapred mnogo mnogo HVALA!!!
Pic 18f ili 16f pomoc oko DS 1307
Zaključano
Zakačeno
Vrlo prosto,
Mors znati adresu periferije na I2C, za DS1307 ona je binarno: 1101000.
Prvo saljes bajt koji ima adresu (7 bita) a iza nje: bit 0 ako zelis upis, odnosno bit 1 ako zelis citanje iz periferije.
Dakle prvi bajt je ili 11010000 ili 11010001. Posle slanja ovih 8 bita, periferija salje potvrdu uspesnosti kao log. 0,
ili neuspesnosti kao log. 1. Za ovo se dakle generisu 9 kloka na I2C magistrali.
Iza ovoga saljes 8 bita adrese registra periferije (i tad se vraca bit potvrde uspesnosti, kao i za svako slanje podataka
u bilo kom smeru), a zatim bajt namenjen upisu u tu adresu. Ako nastavis slanje bajtova oni ce biti upisivani
na svaku sledecu adresu. Ovo je najkrace za slucaj upisa u periferiju.
Za citanje treba poslati 11010000 pa adresu koju zelis da citas. Ovim ce adresni pointer u periferiji biti postavljen
na zeljenu adresu. Potom saljes novu sekvencu: 11010001 na sta ti periferija vraca podatak sa adrese svog pointera.
Sada ti saljes potvrdu ispravnosti, i ako posaljes 0 dobices bajt sa sledece adrese, sve dok kao potvrdu ispravnosti
ne posaljes 1.
Predpostavljam da znas kako se generise start i stop za svaku poruku na I2C magistrali.
Nadam se da sam pomogao.
Pozdrav.
Mors znati adresu periferije na I2C, za DS1307 ona je binarno: 1101000.
Prvo saljes bajt koji ima adresu (7 bita) a iza nje: bit 0 ako zelis upis, odnosno bit 1 ako zelis citanje iz periferije.
Dakle prvi bajt je ili 11010000 ili 11010001. Posle slanja ovih 8 bita, periferija salje potvrdu uspesnosti kao log. 0,
ili neuspesnosti kao log. 1. Za ovo se dakle generisu 9 kloka na I2C magistrali.
Iza ovoga saljes 8 bita adrese registra periferije (i tad se vraca bit potvrde uspesnosti, kao i za svako slanje podataka
u bilo kom smeru), a zatim bajt namenjen upisu u tu adresu. Ako nastavis slanje bajtova oni ce biti upisivani
na svaku sledecu adresu. Ovo je najkrace za slucaj upisa u periferiju.
Za citanje treba poslati 11010000 pa adresu koju zelis da citas. Ovim ce adresni pointer u periferiji biti postavljen
na zeljenu adresu. Potom saljes novu sekvencu: 11010001 na sta ti periferija vraca podatak sa adrese svog pointera.
Sada ti saljes potvrdu ispravnosti, i ako posaljes 0 dobices bajt sa sledece adrese, sve dok kao potvrdu ispravnosti
ne posaljes 1.
Predpostavljam da znas kako se generise start i stop za svaku poruku na I2C magistrali.
Nadam se da sam pomogao.
Pozdrav.
Nadam se da ti je ovo jasno (pisem napamet):
citanje:
>START >D0 <ACK >00 <ACK >REPEATED START >D1 <ACK <SS >ACK <MM >ACK <HH >ACK <DAY >ACK <DD >ACK <mm >ACK <YY >NACK >STOP
upis:
>START >D0 <ACK >00 <ACK >SS <ACK >MM <ACK >HH <ACK >DAY <ACK >DD <ACK >mm <ACK <YY <ACK >STOP
citanje:
>START >D0 <ACK >00 <ACK >REPEATED START >D1 <ACK <SS >ACK <MM >ACK <HH >ACK <DAY >ACK <DD >ACK <mm >ACK <YY >NACK >STOP
upis:
>START >D0 <ACK >00 <ACK >SS <ACK >MM <ACK >HH <ACK >DAY <ACK >DD <ACK >mm <ACK <YY <ACK >STOP
Potpis
O_o
Hvala mislim da sam nesto shvatio iz ovih odgovora. Probacu pa cu videti. Hvala vam!!