RTC DS3231 - podivné chování při ukládání změn
Re: RTC DS3231 - podivné chování při ukládání změn
Při resetu i při odpojení napájení USB to posouvá jen o hodinu. O dvě pouze při uploadu (i stejného programu beze změny).
Re: RTC DS3231 - podivné chování při ukládání změn
Aby jsi mohl program nahrávat jednoduše pomocí USB, tak v mikroprocesoru je program tzv bootloader. Procesor po nastartování spustí první instrukci, která spustí bootloader. Ten nějakou dobu vyčkává jestli nepřichází data, pokud ano, začne je ukládat do paměti procesoru, pokud ne, tak teprve tehdy spustí samotný program. Proto je nezbytně nutné procesor restartovat.
Ono i při programování procesoru bez bootloaderu pomocí programátoru je třeba procesor restartovat. Tady není důvod spuštění bootloaderu, ale je třeba ukončit činost procesoru.
Napadá mě, že po dokončení uploadu toho sketche a ještě před závěrečným restartem procesoru dojde k tomu, že se stihne vykonat kousek právě nahraného programu. Proto tam ten delay pomáhá.
Re: RTC DS3231 - podivné chování při ukládání změn
Takže - jestli to chápu správně - stačilo by nastavit v setupu příznak a tu pauzu vložit podle příznaku až ve funkci posunCas(), aby to nezdržovalo načítání pokaždé, nebo to spustit na začátku loop() podle příznaku i s pauzou. Je to tak? Děkuji.
Re: RTC DS3231 - podivné chování při ukládání změn
Příznak by se ti vždy vymazal, takže by to vždy čekalo ... leda bys ho uložil do EEPROM, jenže tam by zůstal, takže by to čekalo jen jednou a pak už nikdy. Musel bys před každým uploadem projektu tuto EEPROM vymazat jiným "projektem".
Tohle se řeší programovacím jumperem, nebo DIP přepínačem. Před programováním ho vytáhneš, uploadneš, odpojíš, nasadíš, zapojíš. V setupu hned na začátku spustíš nekonečnou smyčku podmíněnou nepřítomností onoho jumperu ...
něco jako
setup(){
//pin jako input pullup
while(digitalRead(pin)){//tohle zasekne program dokud na pin nebude GND, takže jumper mezi pin a GND}
Tohle se řeší programovacím jumperem, nebo DIP přepínačem. Před programováním ho vytáhneš, uploadneš, odpojíš, nasadíš, zapojíš. V setupu hned na začátku spustíš nekonečnou smyčku podmíněnou nepřítomností onoho jumperu ...
něco jako
setup(){
//pin jako input pullup
while(digitalRead(pin)){//tohle zasekne program dokud na pin nebude GND, takže jumper mezi pin a GND}
Re: RTC DS3231 - podivné chování při ukládání změn
Tomu už moc nerozumím - přímo s hw jsem nikdy nepracoval. Nicméně takhle mi to funguje:
Kód: Vybrat vše
#include <DS3231.h> // hodiny
DS3231 rtc; // inicializace RTC z knihovny
RTCDateTime datumCas; // vytvoření proměnné pro práci s časem
bool jeSetup = true; // pro pauzu při setupu pro bootloader
void setup() {
Serial.begin(9600);
Serial.println();
rtc.begin();
datumCas = rtc.getDateTime();
Serial.println(datumCas.hour);
}
void posunHod(int oKolik) {
if (jeSetup) {
delay(5000);
jeSetup = false;
}
unsigned int x;
x = oKolik + int (datumCas.hour);
rtc.setDateTime(datumCas.year, datumCas.month, datumCas.day, x, datumCas.minute, datumCas.second);
datumCas = rtc.getDateTime();
Serial.println(datumCas.hour);
}
void loop() {
if (jeSetup) posunHod(-1);
}
Re: RTC DS3231 - podivné chování při ukládání změn
Tos mohl rovnou nechat delay na začátku setupu .... ten se provádí jen jednou a to při spuštění. Programovací jumper není žádná věda, jen na začátku setupu donekonečna testuješ jestli to že tam není je fakt pravda. To ti zabrání nechtěnému spuštění programu.
Re: RTC DS3231 - podivné chování při ukládání změn
Takhle ano, jenže já mám v setupu další kontroly - v eeprom hodin je příznak, zda čas hodin je letní nebo zimní a pokud to odpovídá období, tak se posun vůbec neprovede (a nedochází ke zbytečnému delay) - nastavím příznak na false.
To, proč to řeším, je případný výpadek proudu v čase, kdy má dojít k posunu.
To, proč to řeším, je případný výpadek proudu v čase, kdy má dojít k posunu.
Naposledy upravil(a) ivo_mu dne 18 bře 2022, 16:13, celkem upraveno 1 x.
Re: RTC DS3231 - podivné chování při ukládání změn
Víš, kdybys na začátku popsal rovnou co potřebuješ ... tím mám na mysli přechod letního a zimního času ... neprobádali bychom tady záhady restartů a bootloaderu arduina ...
Osobně mi to nevadí, ale mohl jsi dostat odpověď dříve a přímo k jádru pudla.
Osobně mi to nevadí, ale mohl jsi dostat odpověď dříve a přímo k jádru pudla.
Re: RTC DS3231 - podivné chování při ukládání změn
To je sice pravda, ale nedozvěděl bych se, proč se to chová jinak, než očekávám. A příště bych to neuměl řešit sám. Já to mám tak, že vždycky chci porozumět tomu co dělám, a jsem perfekcionista. Proto si myslím, že jsem dobrý programátor, i když v posledních letech dělám jen PHP a JavaScript (takže kodér) a už se tím ani neživím. Takže mockrát děkuji všem za pomoc a vysvětlení.
Re: RTC DS3231 - podivné chování při ukládání změn
Však není problém popsat problém který vzniká, požádat o vysvětlení a zároveň i napsat co vlastně vůbec řeším v praxi. My jsme tady hodní
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host