Otázka:
Bootup na nižší energii nefunguje
Adam Haile
2014-03-13 07:17:12 UTC
view on stackexchange narkive permalink

Mám vlastní desku Arduino ATMega328, která obvykle běží na 5V @ 8MHz (pomocí profilu Arduino Pro 3.3V 8MHz a bootloaderu). Hlavním důvodem, proč používám toto nastavení, je to, že můžu uvést desku do režimu spánku, když je odpojeno hlavní napájení a začne docházet energie z baterie (3 V z knoflíkové baterie). Zdroje 5V a 3V jsou dioda OR'ed dohromady a vstup 5V je spojen s INT0. V kódu, když zjistí, že INT0 klesl na minimum, inicializuje režim spánku a vše se vypne, s výjimkou časovače hlídacího psa, který udržuje cyklus 1 Hz, aby udržel interní počet a zkontroloval, že by čip měl být probuzen zpět. To funguje krásně , když je nejprve připojeno 5V napájení, poté je vložena baterie, pak je odpojeno 5V. Spí a když se přivede 5V, probudí se a vidím, že neztratil počet.

Problém však nastane, když je 3V použito první . Upřímně si nejsem jistý, jestli je to dokonce bootování. Ale to, co má dělat, je boot, zkontrolujte, zda je INT0 (Digital 2) nízký, a pokud ano, jděte přímo spát. Sledováním aktuálního odběru vidím, že na pár sekund napájí až několik mA, poté klesne na přibližně 0,3 mA (stále vyšší, než by mělo být v režimu spánku). Ale když znovu použiji 5V, nic . Příkon se vrací zpět, ale nereaguje (přes sériové rozhraní FTDI).

Existuje něco, co mi chybí, že jej nelze spustit na 3 V ... teoreticky by to mělo fungovat dobře .

Aktualizace: Upustil jsem LED na D13 a zkusil jsem mrknutí. Funguje dobře, když začíná na 3V nebo 5V. Když však spustím svůj firmware a spustím jej z 3V, LED začne divoce blikat. Nemám tušení, co to způsobuje, protože jsem v mém kódu nikdy nenastavil D13 jako nic. Ale dělá mě to tím, že to má něco společného s bootloaderem ...

Na co je nastaven BOD a jaké je aktuální čerpání při spuštění?
Je nastaveno na 2,7 V. Aktuální odběr, zatímco na 3V je asi 4mA po dobu prvních několika sekund, pak poklesne a LED se zblázní.
Zkusili jste to bez bootloaderu, tj. Přes ISP?
Ne, to jsem ještě nezkoušel. Co je divné, je to v pořádku, když právě spustíte blikající náčrt
ISTR, že bootloader způsobí, že D13 bude mít podivný pulzní vzor, ​​který bliká LED, která je tam normálně, ale protože vlastně nemám Arduino (** jo, řekl jsem to **), nejsem si jistý načasováním / vzor.
Jsem zvyklý na blikání D13, ale pouze při nahrávání firmwaru.
Můžete přidat diagram, který „přesně“ ukáže, jak je zapojeno vaše vedení, včetně jakéhokoli senzoru nebo zátěže na baterii. Jaký typ knoflíkové baterie používáte, je to lithium-iontový (dobíjecí) nebo alkalický?
Pokud Blink funguje, pak je pravděpodobnější váš kód a ne bootloader. Pravděpodobně budete muset zveřejnit svůj kód a schéma, abyste dostali odpověď. Také jste se pokusili deaktivovat BOD?
Jak měříte proud? Je možné, že „zátěžové napětí“ vašeho měřicího přístroje klesne příliš nízko pro spolehlivé spuštění?
čtyři odpovědi:
Adam Haile
2014-03-20 23:57:59 UTC
view on stackexchange narkive permalink

Takže ... ukázalo se, že to, co se dělo, bylo vše v kódu. Ukázalo se, že jsem inicializoval přerušení na INT0, když bylo nízké, na samém začátku mého kódu. Problém byl v tom, že když se spouštěl na záložní napájení 3V, INT0 byla vždy nízká, protože INT0 je vázána na linku 5V (tak ví, jak jít spát). Protože INT0 byla nízká a přerušení se spouštělo na nízké úrovni, způsobovalo to, že docházelo k neustálému přerušení a zbytek programu nebyl nikdy spuštěn. Přepnutí na povolení tohoto přerušení pouze poté, co jsem vstoupil do režimu úplného probuzení, a nyní to funguje dobře.

imjosh
2014-03-20 23:03:24 UTC
view on stackexchange narkive permalink

Přesně to, co se děje a proč nelze určit na základě množství poskytovaných informací. Vidím však alespoň jeden potenciální problém, který by alespoň částečně vysvětlil popsané příznaky.

Řekli jste, že k výběru zdroje napětí používáte diody a jedním zdrojem je 3V baterie. Pokud používáte standardní diody, které klesnou o ~ 0,6 V, pak je napájecí napětí pro MCU pouze ~ 2,4 V. Pokud používáte Schottkyho diody s poklesem napětí mezi 0,15-0,45, je napájecí napětí potenciálně nízké až 2,5V. Máte napětí BOD nastaveno na 2,7 voltu, takže teoreticky se MCU nikdy nespustí s baterií.

Pokud jde o důvod, proč jej můžete spustit na 5 V, poklesnout na 3 V a vrátit ji zpět nahoru - nejsem si jistý. Mohli byste deaktivovat BOD v kódu ... možná ... nejste si jisti, proč to funguje, ale pravděpodobně to nebude zaručeně fungovat.

Nastavuji obvod diodového spínače s 5v a 3,3v, abych viděl, jak to vypadá jako na mém osciloskopu, když se přepne napětí. Když při přepínání 3,3 V na 5 V napětí zpočátku docela osciluje. To může potenciálně způsobit určité problémy, když se MCU pokusí vyjít ze spánku. Vložení víčka mezi VCC a GND velmi příjemně vyhladilo signál. Při přepnutí z 5V na 3,3V skutečně nedošlo k žádnému oscilaci, pouze k čistému poklesu.

Z těchto informací se zdá, že byste měli snížit prahovou hodnotu BOD nebo vypnout BOD a dát oddělovací čepička mezi VCC a GND. Pravděpodobně byste se také měli ujistit, že máte na INT0 roztahovací rezistor, a přečíst si části datového listu MCU vysvětlující různé režimy spánku, všechny úvahy týkající se spánku a bdění - je to docela zapojené. Na zdraví

TheDoctor
2014-03-16 20:18:54 UTC
view on stackexchange narkive permalink

Myslím, že problém je s vaším bootloaderem, ale ne tak, jak si myslíte.

Když se spustí Arduino, bootloader těží z několika úkolů, jako je hledání sériového hostitele nebo načítání dat programu z flash bude trvat mnohem více energie než spící Arduino.

Myslím, že důvod, proč se vaše Arduino nespustí, je ten, že bootloader vyžaduje přesný zdroj hodin, ale jeho použití 3v to pokazí ty hodiny a možná se zhroutí nebo počká, až bude pro stabilní zdroj použito 3,3 V.

Při pohledu na datový list:

copyright ATMEL

My vidět, že aktuální odběr při probuzení (spuštění bootloaderu) bude pravděpodobně kolem 2mA, zatímco spací proud je asi 0,8 mikroamps . To by jistě mohlo vést k výpadku proudu při spuštění bez správného proudu.

Možná byste jej měli zapínat pouze při napájení 5 V, nebo možná potřebujete baterii s vyšším proudem a vyšším napětím.

Neznamenalo by to, že ani Blink nebude fungovat? Také běžím více než několik Arduino z knoflíkových buněk bez problémů. Mohou na krátkou dobu poskytnout velké množství proudu.
DeveloperACE
2014-03-21 21:33:38 UTC
view on stackexchange narkive permalink

Zkuste znovu načíst arduino v nabídce Nástroje> Vypálit bootloader

Můžete prosím přidat další podrobnosti, jak to dále udělat? Není to příliš konkrétní: Co můžete připojit k Arduinu? Existují nějaká rizika? Dík!
Odpojil bych vše, abych byl v bezpečí, ale nemělo by tu být žádné riziko
Zde je návod, jak vypálit bootloader: http://arduino.stackexchange.com/a/474/37. Vaše odpověď nevysvětluje vše, jak na to.


Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...