Arduino - dokonaly SLEEP mode - Re: trubka jako zvukovod
Jaroslav Lukesh (seznam IMAP)
lukesh na seznam.cz
Pátek Leden 6 14:23:37 CET 2017
Takže to probouzí něco jako tlačítko.
To fakt musí 200ms čekat, aby se to spolehlivě probralo? Já s tou lowpower
knihovnou to nechávám usínat i na zlomky ms (často se opakujících - třeba
čekání 250us na nrf24) a probuzené je to hned, hned jedu dál po SPI, žádné
tuhnutí. Ale používám 100n a 10uF (i 47uF) keramiku v 0805 všude kam jde
napájení, někdy i elyt. Případně ho přilepím na poschodí k už existujícímu
kondíku na desce.
Zapamatujte si jednoduše tohle C=I * t [uF, mA, ms] pro pokles o 1V
Hned budete odhadem vědět, jak velký blokovací kond budete potřebovat.
Dobrá fligna je i schottky dioda v propustném směru - její dynamický odpor s
kondem funguje na rušení z napájecí sběrnice nesrovnatelně líp, než samotný
kond. Chtělo by se mi říct, že i líp, než tlumivka s kondem.
----- Původní zpráva -----
Od: Halen na seznam.cz
Všechny piny, které nepoužívám jsou po startu nastavené jako input, aby byl
zaručen jejich stav a nezvyšovaly odběr arduina.
v cyklu projedu všechny nepoužívané piny a provedu:
pinMode(i, INPUT_PULLUP);
používané piny si potom nastavím extra, dle potřeby.
poté v loop pracuji s arduinem a v době kdy jej chci uspat a snížit odběr:
zavolám: sleepNow();
pozn. Je třeba mít definovanou globální proměnnou: bool usnulo = false;
void sleepNow() {
usnulo = false;
myDelay(200);
attachInterrupt(0, my_interrupt_handler, LOW);
sleep_enable(); // enables the sleep bit in the mcucr register
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
cli();
sleep_bod_disable();
usnulo = true;
sei();
sleep_cpu();
// THE PROGRAM CONTINUES FROM HERE AFTER WAKING UP
sleep_disable();
power_all_enable();
}
potom už jenom definice procedur:
void my_interrupt_handler()
{
if (usnulo) {
detachInterrupt(0);
}
}
void myDelay(unsigned long ms) {
unsigned long plannedMillis = millis();
plannedMillis = plannedMillis + ms;
while (plannedMillis > millis())
{
}
}
Tímto způsobem mě arduino mini usíná a probouzí zcela bez problémů. To
usínání jsem ladil možná týden, než to začalo korektně fungovat. Postupy co
jsou na netu jakoby fungují, ale po několika probuzeních se cpu zasekne v
nedefinovatelném stavu.
Honza
Další informace o konferenci Hw-list