PICAXE komunikace po I2C s RTC3231
PICAXE komunikace po I2C s RTC3231
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?
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.
Re: PICAXE komunikace po I2C s RTC3231
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.
Re: PICAXE komunikace po I2C s RTC3231
Díky za nakopnutí, na displeji už se začalo něco dít
Re: PICAXE komunikace po I2C s RTC3231
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é?
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 )
Re: PICAXE komunikace po I2C s RTC3231
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ř.:
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ě.
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
Re: PICAXE komunikace po I2C s RTC3231
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.
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.
Re: PICAXE komunikace po I2C s RTC3231
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
Re: PICAXE komunikace po I2C s RTC3231
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".
Re: PICAXE komunikace po I2C s RTC3231
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.
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.
Re: PICAXE komunikace po I2C s RTC3231
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á