ATMEGA88: Nekorektně nabíhá
Moderátor: Moderátoři
ATMEGA88: Nekorektně nabíhá
Měl jsem na nepájivém poli odlaďenou konstrukci s ATMEGA88čkou. K té býl přímo připojený třímístný multiplexně řízený display, pár diskrétních vstupů a výstupů a přes SPI devítimístný maličký display, řízený taky AVRkem /MEGA8/.
Už na tom poli se mi občas po zapnutí, /nebo po flashování/ stávalo, že místo toho, aby processor začal vykonávat program, tak na jendom, nebo dvou digitech rozsvítil všechny segmenty a nereagoval na nic ... pomohl jen reset. Když to ale přežilo zapnutí napájení, nebo reset, bylo to schopné běžet třeba 12 hodin v kuse.
Teď jsem si udělal tišťák, osadil ho a výšezmíněná situace nastává tak v polovině případů a to ešte v případě, že je ten devítimístný SPI dispaly odpojený. Pokud je připojený, skoro nikdy to nenaběhne. Pokud už se to ale rozjede, můžu ho klidně připojit a chodí to zase až do vypnutí OK.
Ta konstukce má takovou vymyšlenost, že na log. 1 na jednom pinu se to uspí ( asm(sleep) - myslim, že to jednoho z těch režimů "tvrdšího" spánku). Probouzení se děje log. 0 na stejném pinu, resp. INT1, které se v tomto pžípadě zavolá-. Na bastdesce to fungovalo bez problémů, na plošňáku to snad naběhlo třirkát ... v drtivé většině případů se to "sekne", jak jsem popsal výše.
BOD je nastavený na střední úroveň. Když ho nastavím na tu nejvyšší (4,5V), processor je v RESETu i když ho napájím napětím 5,01V přímo ze 78M05. Ta má mimochodem z obou stran 100nF blokovací kondík, stejně jako ta MEGA. Na výstupu té 78M05tky je ještě 100uF kondík. Processor začne něco delat, až když zvýším externím zdrojem napětí na cca 5.5 - 6V. SUT (delay po resetu ... možná se ten FUSE menuje trochu jinak) je taky na maximu.
Už fakt nevím, co s tím ... nezdá se mi, že by ta MEGA byla vadná .. to by snad nejela vůbec a nedělala takový kraviny. Eště mě napadlo, jestli to nedělá ten interní RC oscillátor ... ale nidky jsem s ním problémy neměl.
Napadá vás někoho něco?
Instrukce sleep neříká, do jakého sleep režimu procesor přejde, to říká nastavení registru SMCR. Pokud jsi po resetu SMCR nenastavil, tak je sleep zakázaný (instrukce sleep nedělá nic).
Jinak co se týká toho sleepu, tak to s tím registrem vím. Proto sem tam napsal, že se to uspává do jednoho z těch režimů "tvrdšího spánku", to mám právě nastavený v tom registru, jak píšeš.
Nicméně mám pocit, že problémy s rozběhem při takovém nastavní BOD měl i ten processor na bastldesce (-jinej kousek než teď na plošňáku).
Nemá ten BOD někde nastavitelnej offset napětí, nebo tak?
Zkoušel jsem na různá místa kodu vkladat 5s delay s tím, že budu pozorovat, jestli se to sekne hned po zapnutí, nebo až po těch pěti sekundách.
Místem zlomu bylo sei(); - které je v kodu až po inicializaci periferií. Když jsem dal delay před sei, sekalo se to až po té prodlevě. Když jsem to dal za sei, sekalo se to hned po zapnutí napájení.
Stejně jako když jsem dal cli() jako první věc po probuzení, probouzelo se to v pohodě i z toho spánku ....
Napadá vás někoho, co bych měl konkrétněji hledat?