PICAXE komunikace po I2C s RTC3231

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

PICAXE komunikace po I2C s RTC3231

Příspěvek od jova » 20 led 2015, 15:40

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: 322
Registrován: 25 úno 2013, 09:18

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od AlesH » 20 led 2015, 16:29

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: 268
Registrován: 16 pro 2013, 11:40

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od jova » 20 led 2015, 16:39

Díky za nakopnutí, na displeji už se začalo něco dít :)

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

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od jova » 02 bře 2016, 23:38

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: 322
Registrován: 25 úno 2013, 09:18

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od AlesH » 03 bře 2016, 08:28

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: 268
Registrován: 16 pro 2013, 11:40

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od jova » 03 bře 2016, 09:36

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: 268
Registrován: 16 pro 2013, 11:40

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od jova » 03 bře 2016, 12:52

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: 322
Registrován: 25 úno 2013, 09:18

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od AlesH » 03 bře 2016, 14:17

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: 652
Registrován: 04 led 2016, 17:18

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od fulda » 03 bře 2016, 14:21

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: 268
Registrován: 16 pro 2013, 11:40

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od jova » 03 bře 2016, 14:38

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

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti