PICAXE komunikace po I2C s RTC3231

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

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od jova » 26 říj 2017, 22:10

Zdravím, zase jsem se zasekl v tom DS3231. Tentokrát bych potřeboval naprogramovat alarmy tak, aby se výstup sepnul jednou za hodinu. V datasheetu píší, že by to mělo být možné. Předpokládal bych že se to nastavuje zhruba tímto příkazem, nastvením čehosi v A1sec A1min A1hou A1day A2min A2hou A2day, ale mě se ty alarmy vůbec nepodařilo rozchodit zatím vůbec. :(
Netušíte co by se tam mělo napsat?

Kód: Vybrat vše

i2cslave %11010000, i2cslow, i2cbyte
'            secs  min  hrs  dow  date  mon   yr  A1sec  A1min  A1hou A1day  A2min  A2hou A2daydat ctrl ctrlstat aging,TempMSB,TempLSB)
writei2c 0, ($55,  $59, $23, $07, $18,  $06, $11,  $00,   $00,  $00,   $00,   $00,   $00,   $00,    $04)

DavidO
Příspěvky: 604
Registrován: 01 kvě 2013, 21:27

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od DavidO » 27 říj 2017, 07:47

Nejsem expert ani na PICAXE ani na tenhle konkrétní RTC obvod, ale jako správnej kibic k tomu zkusím něco podotknout ;)
Jestli dobře chápu datasheet, tak je potřeba nastavit řídící bity podle tabulky 2. Jestli to má spínat každou hodinu, tak bych nastavil, ať se nekontroluje datum ani hodina, tj. A1M1=0, A1M2=0, A1M3=1, A1M4=1 (jinak když tam budou nuly, tak se bude kontrolovat všechno, takže to sepne jednou za týden nebo měsíc). No a pak ještě ten alarm povolit nahozením A1IE v Control register.
Možná takhle: (bez nastavování času RTC)

Kód: Vybrat vše

writei2c 7, (0, 0, $80, $80)
readi2c $0e, (b0)
setbit b0, 0
writei2c $0e, (b0)
Control register $0e jsem si v tomhle radši přečetl a nastavil jen ten jediný bit A1IE, jinak by se tam samozřejmě dal nastřelit rovnou celý byte bez čtení, jestli víš, jak mají být všechny ty příznaku nastavené (v tvém příkazu to byl ten poslední byte, takže ten by měl být $05 místo $04).

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

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od jova » 27 říj 2017, 07:52

Jdu to otestovat.

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

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od jova » 27 říj 2017, 08:12

Tak stále nic. Jediné na co to reaguje je změna na pozici CTRL a to tak, že se mi změní výstupní úroveň z log. 0 na 1 případně tím zapnu na výstupu sekundové pulzy. Nemohl by jsi mi to zkusit rozepsat přímo do té řádky co jsem uvedl, například pro změnu jedné minuty?

DavidO
Příspěvky: 604
Registrován: 01 kvě 2013, 21:27

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od DavidO » 27 říj 2017, 08:34

V těch prvních několika bytech jen nastavíš aktuální čas (teda myslím), takže třeba takhle
writei2c 0, ($55, $59, $08, $05, $27, $10, $17, $00, $00, $80, $80, $00, $00, $00, $05)
by ti ten alarm měl zazvonit za 5 vteřin a pak každou celou. Interrupt je negovaný, takže na výstupu ~INT/SQW (pin 3 čipu, ale jak to je na tvém modulu označené, nevím) bys měl při alarmu uvidět nulu, za klidu tam bude 1.

DavidO
Příspěvky: 604
Registrován: 01 kvě 2013, 21:27

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od DavidO » 27 říj 2017, 08:36

Jo a nevím, cos myslel tou změnou jedné minuty, sorry. Jako alarm každou minutu? Pak možná takhle:
writei2c 0, ($55, $59, $08, $05, $27, $10, $17, $00, $80, $80, $80, $00, $00, $00, $05)

DavidO
Příspěvky: 604
Registrován: 01 kvě 2013, 21:27

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od DavidO » 27 říj 2017, 08:45

Jak dlouhej je ten impuls budíčku jsem ale z datasheetu nevyčetl. Nevím, jak to testuješ, ale tipl bych si, že bude dost krátký na to, abys to viděl multimetrem nebo LED.

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

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od jova » 27 říj 2017, 08:49

No myslel jsem to tak, že by se mi ten alarm zpustil každou minutu. Já potřebuji teda konkrétně jednou za hodinu, ale kdo by tak dlouho čekal :roll:
Jestli jsem tě dobře pochopil tak by to mělo na vteřinu fungovat třeba takto:

Kód: Vybrat vše

'            secs  min  hrs  dow  date  mon   yr  A1M1   A1M2   A1M3  A1M4   A2M2  A2M3  A2M4   ctrl ctrlstat aging,TempMSB,TempLSB)
writei2c 0, ($55,  $59, $23, $07, $18,  $06, $11,  $80,   $80,  $80,  $80,   $00,  $00,   $00,  $05)
Ale nefunguje to, ani tvůj poslední příkaz s tou minutou. Výstup je pořád v 0.
Testuji to na displeji co mám připojený na ten picaxe a nezdá se že by blikal.
Oprava kódu.

DavidO
Příspěvky: 604
Registrován: 01 kvě 2013, 21:27

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od DavidO » 27 říj 2017, 09:10

Tak mě napadají dvě věci: Máš tam pullup? A za druhé, není to tak, že výstup bude od zazvonění držený v nule dokud budík nezaplácneš shozením bitu A1F ve stavovém registru? (vedl by mě k tomu popis u A1F: "If the A1IE bit is logic 1 and the INTCN bit is set to logic 1, the INT/SQW pin is also asserted. A1F is cleared when written to logic 0." Takže ten můj naposled poslaný řádek by měl způsobit, že 5 vteřin od poslání bude výstup 1, pak se změní na 0 a už tak zůstane.

Jak to testuješ (na) displeji? Že si necháš vypisovat hodnotu, kterou přečteš z toho výstupu INT/SQW? To by chtělo spíš záznamovou logickou sondu, abys viděl, jak se to mění v čase.

Mimochodem, teď ten tvůj popisek v kódu není dobře, tam je vždycky kombinace např. A1M1 a vteřiny, A1M2 a minuty atd. A čísla jsou v BCD, takže rok by měl být $17 a ne $11 podobně jako minuty jsou $59 a ne $3b. Ale to na fungování alarmu nic nemění.

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

Re: PICAXE komunikace po I2C s RTC3231

Příspěvek od jova » 27 říj 2017, 09:36

DavidO píše:
27 říj 2017, 09:10
Tak mě napadají dvě věci: Máš tam pullup?..Jak to testuješ (na) displeji? Že si necháš vypisovat hodnotu, kterou přečteš z toho výstupu INT/SQW? To by chtělo spíš záznamovou logickou sondu, abys viděl, jak se to mění v čase..
výstup je ošetřen a pokud do registru CTRL napíšu $00 (což by mělo zapnout na výstupu sekundové impulzy), tak se na LCD zobrazují ty sekundové stavy jak mají. Ano testuji to na LCD + mám led diodu přímo na tom výstupu. Dále si to můžu programově "zachytit" a v případě rychlé změny stavu zobrazit delší dobu na LCD.

DavidO píše:
27 říj 2017, 09:10
...Takže ten můj naposled poslaný řádek by měl způsobit, že 5 vteřin od poslání bude výstup 1, pak se změní na 0 a už tak zůstane.
Jestli myslíš tento:

Kód: Vybrat vše

writei2c 0, ($55, $59, $08, $05, $27, $10, $17, $00, $80, $80, $80, $00, $00, $00, $05)
Tak je při něm na výstupu pořád 0.

Ještě mě napadlo, že asi dělám něco úplně špatně. Já ty alarmové proměnné běžně používám v jiném projektu na ukládání hodnot aktuálního času rafiček při výpadku napájení. To tam zapisuji aktuální hodnotu času a pak jí zase vytahuji, abych tak udržel aktuální polohu rafiček, které jsou poháněny z nezálohovaného napětí. Pokud tady ale potřebuji získat jeden impuls, dejme tomu jednou za tu hodinu (minutu, sekundu), tak by se to asi mělo nastavovat trochu jinak.
Naposledy upravil(a) jova dne 27 říj 2017, 10:28, celkem upraveno 1 x.

Odpovědět

Kdo je online

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