PICAXE komunikace po I2C s RTC3231

jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

PICAXE komunikace po I2C s RTC3231

Příspěvek od jova »

Zdravím, potřeboval bych poradit s takovou triviálností.
Mám obvod přesného času RTC3231 a potřeboval bych ho připojit k obvodu např. picaxe 14M2. Na netu jsem si našel řadu příkladů jak zběrnu I2C nastavit, ale pořád mi nějak uniká jak tomu 14M2 říct kterým výstupem a jak má konkrétně s tím časovým obvodem komunikovat, přesněji, jaký pin s kterým propojit?
Naposledy upravil(a) jova dne 03 bře 2016, 09:39, celkem upraveno 2 x.
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od AlesH »

Ahoj. Myslím, že u PICAXE se rozumně dají použít jen hardwarové I2C piny, takže u PICAXE 14M2 by to měly být vývody 9 a 10 (B.4/hi2c sda a B.3/hi2c scl). K modulu RTC to připojíš tak, že zapojíš zem (GND), napájení (Vcc) a pak data přes dva dráty (sda k SDA a scl k SCL). Ještě to asi bude chtít dva pushup odpory cca 2 - 4 kOhm k Vcc (z SDA a SCL). Viz. schéma níže.

Obrázek
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od jova »

Díky za nakopnutí, na displeji už se začalo něco dít :)
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od jova »

Zdravím.
Chtěl jsem se optat, nevíte jak po té sběrnici zapsat do časové základny jen jednu hodnotu?
Konkrétně mi jde o toto: používám například program viz níže a nyní bych chtěl zapsat a měnit jen jednu hodnotu, například minutu. Jde to nějak udělat abych tam zapsal jen tuto novou hodnotu a nezměnil ty ostatní naprogramované?

Kód: Vybrat vše

i2cslave %11010000, i2cslow, i2cbyte
let day     = $2    ; den v týdnu   
let year    = $16   ; rok
let month   = $2    ; měsíc 
let date    = $2    ; den
let hour    = $21   ; hodiny
let mins    = $49   ; minuty
let seconds = $00   ; sekundy 
    
writei2c 14, ($0) ' DS3231 turn on $0 1hz pin3, turn off $4
writei2c 0,(seconds,mins,hour,month,day,date,year,control )
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od AlesH »

Předpokládám, že příkaz "writei2c 0,(seconds,mins,hour,month,day,date,year,control)" prostě zapíše řadu hodnot do obvodu postupně na adresy, začínající nulou, ale pak se postupně zvyšující (po bytech). Takže by mělo stačit jen změnit počáteční adresu a počet parametrů. Např.:

Kód: Vybrat vše

writei2c 1,(mins)  ; zapis jen mins do RTC obvodu (bez zmeny ostatnich hodnot), v BCD formatu
writei2c 6,(year)  ; zapis jen year do RTC obvodu (bez zmeny ostatnich hodnot), v BCD formatu
Prakticky to ale vyzkoušené nemám, takže je to jen moje domněnka. Je možné, že ta adresa se bude zvětšovat po dvou bytech (podle toho, že ten control se ve tvém příkladu zapisuje na adresu 14), takže pak by to pro jednotlivé časové hodnoty bylo 0 až 12 (místo 0 až 6). Snad to půjde ověřit experimentálně.
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od jova »

Děkuji za nasměrování, funguje to skutečně jak píšeš.
Stačí změnit první hodnotu na konkrétní číslo (0 sekundy, 1 minuty, 2 hodiny, 3 dny v týdnu, 4 dny, 5 měsíc, 6 rok), do závorky pak pouze tu požadovanou hodnotu a ta se pak zapíše beze změny ostatních.
Pokud se mění dvě data jdoucí po sobě, můžou se zapsat za sebou, pokud dvě data v různém pořadí, musí se napsat na samostatný řádek.

Kód: Vybrat vše

writei2c 2,(hour) ; změní  hodiny

Kód: Vybrat vše

writei2c 1,(mins,hour) ; změní minuty a hodiny

Kód: Vybrat vše

writei2c 1,(mins) ; změní minuty
writei2c 4,(month) ;změní měsíc
Naposledy upravil(a) jova dne 03 bře 2016, 12:52, celkem upraveno 1 x.
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od jova »

Ještě jsem koukal, že by se z toho měla dát vytáhnout teplota. Jestli jsem to dobře pochopil, tak stupně vytáhnu přímo v číselné hodnotě příkazem " readi2c 17,(teplota) " ale ty desetiny musím nějak přepočítat? Strana 15. http://datasheets.maximintegrated.com/en/ds/DS3231.pdf
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od AlesH »

Podle toho dokumentu je na adrese 18 hodnota ve "čtvrtstupních", takže přepočet na desetiny by měl být "hodnota * 2,5". Na setiny by to bylo "hodnota * 25".
Uživatelský avatar
fulda
Příspěvky: 1359
Registrován: 04 led 2016, 17:18

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od fulda »

Je trochu zbytečné si hrát s desetinami, když přesnost toho teploměru je "Digital Temp Sensor Output: ±3°C Accuracy".
Ale pokud si opravdu chceš hrát, tak jsou to "čtvrt stupně"
readi2c 18,(desetiny)
Obsah registru 0x12 (18) ~ desetiny
00000000b = 0x00 = 0dec ~ teplota,0 °C
01000000b = 0x40 = 64dec ~ teplota,25 °C
10000000b = 0x80 = 128dec ~ teplota,5 °C
11000000b = 0xC0 = 192dec ~ teplota,75 °C

Teplota se vyhodnocuje jednou za 64sec, pokud neřekneš jinak pomocí bitu 5 v registru 0x0E = 14.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od jova »

Díky všem. Je to na věž k hodinám a tak ta teplota i s tou přesností ±3°C by byla občas zajímavá :-)
Odpovědět