AVR i standby - czy da si? wybudzi? "programowo"?

Jan 03, 2008 10 Replies

Czy z trybów standby, power down itp. procesorów AVR da się wyjść inna metodą niż pobudzenie zewnętrznym przerwaniem? Potrzebuję zrobić coś, co będzie się samoistnie budziło np. co minutę, sprawdzało stan innego urządzenia (konkretnie termometru DS1620) i jeśli nie stwierdzi czegośtam, to ma dalej spać i ograniczać pobór prądu do minimalnej możliwej wartości. Idealne byłoby dla mnie, gdyby proc był w stanie się obudzić sam z siebie, np. po zadanym czasie "spania" - czy coś takiego jest możliwe?



Jeśli nie, to... no właśnie, to co? Logiczne byłoby wykorzystać sam DS1620, żeby po przekroczeniu zadanej temperatury "budził" procesor, ale jego pobór prądu wg datasheeta wynosi 1mA, co dla mnie jest niedopuszczalne (urządzenie ma być w założeniach zasilane raczej niewymienną bateryjką litową). Owszem, w datasheecie DS1620 jest linijka mówiąca, że pobór prądu w "standby mode" wynosi 1uA, co podoba mi się o wiele bardziej, ale nie znalazłem w tymże datasheecie ani słowa więcej na temat tego standby - jak jest uzyskiwany i wreszcie czy da się jakoś pogodzić ten stan z mierzeniem co jakiś czas temperatury.



Zostaje jeszcze rozwiązanie "młotkowe": jakiś generator "low power" wystawiający co minutę impuls, który będzie budził procesor, ale wydaje mi się to strasznie nieeleganckie...



J.


------- Czy z trybów standby, power down itp. procesorów AVR da się wyjść inna metodą niż pobudzenie zewnętrznym przerwaniem? Potrzebuję zrobić coś, co będzie się samoistnie budziło np. co minutę, sprawdzało stan innego urządzenia (konkretnie termometru DS1620) i jeśli nie stwierdzi czegośtam, to ma dalej spać i ograniczać pobór prądu do minimalnej możliwej wartości. Idealne byłoby dla mnie, gdyby proc był w stanie się obudzić sam z siebie, np. po zadanym czasie "spania" - czy coś takiego jest możliwe?

--------

Jedna z możliwości to taka że zapinasz do procka kwarc zegarkowy 32.768kHz i ustawiasz preskaler licznika (Timer 0) na max. dostajesz wówczas przerwanie które budzi procesor co 8sek. Do tego kawałek kodu który sprawdzi który to raz z kolei i co minutę wykona stosowne operacje, a jeśli nie to wejdzie w stan uśpienia ponownie.

Opisane to jest na stronie atmela :

AVR134: Real Time Clock (RTC) using the

Asynchronous Timer

Oczywiście można pewnie i inaczej, ale tak to będzie chyba najprościej.

Myślę że tą metodą średni prąd jaki można osiągnąć jest na poziomie 10uA Do tego dojdzie większy prąd na pomiar układem DS ale to co 1 min.

OK, dzięki

Swoją drogą - może ktoś podpowie, o co chodzi Dallasowi z tym trybem standby w DS1620?

J.

U?ytkownik "Jarek P." snipped-for-privacy@gmail.com napisa? w wiadomo?ci news: snipped-for-privacy@i29g2000prf.googlegroups.com...

Tak - wathdogiem

Zibias pisze:

Jeżeli chodzi o minimalny prąd to najlepsze wydaje się zastosowanie zewnętrznego układu RTC. Dobre współczesne scalaki (a nie stary PCF8583) ciągną około 1uA i mogą wygenerować np. cominutowy alarm. Wtedy procka budzisz zewnętrznym przerwaniem i jest OK. Zużyjesz pewnie mniej prądu niż wykorzystując wewnętrzny timer asynchroniczny procesora z doczepionym kwarcem 32k.

BTW: A może od razu użyj układu termometru z ustawianymi progami termostatu? Wtedy procek podczas śledzenia temperatury może cały czas spać - a obudzisz go dopiero po zmianie stanu wyjścia termostatu.

Pisałem o tym wyżej - tak jest taka możliwość, ale ten termometr ciągnie 1mA - non stop to dla mnie nie do przyjęcia. Póki co najrozsądniejszy wydaje mi się pomysł kol. Wiliama z wykorzystaniem watchdoga.

J.

Jarek P. pisze:

Chciałeś co minutę a watchdog w nowych AVRach może resetować procesor najrzadziej co 8 sekund. Obawiam się też (zobacz sam w PDFie), że włączony watchdog w procesorze ciągnie 10x tyle prądu, co zewnętrzny układ RTC.

A gdyby procesor pogonić z kwarca zegarkowego? Na jego prędkości mi nie zależy

Sprawdzałem, nie pamiętam dokładnie wartości, ale dla ATTINY13 stan power down z włączonym WD to pobór pradu chyba 3uA - do przyjęcia.

J.

Niestety watchdog ma wlasny generator niezależny od zegara procka. Wiec max kolo 8 sek dostaniesz, a wydaje mi sie ze nawet mniej, cos kolo

4sek ale to zależy pewnie od konkretnego modelu procka. Generalnie najprościej wydaje mi się z zewnętrznym zegarkowym zrobić ew. możnaby zrobić na cmosie generator do kwarca zegarkowego + dzielnik i to podać do procesora, tak dobierając ustawienia, żeby go budziło koło 1min Pamiętaj że i tak będziesz brał prąd na pomiar co jedną minutę, nie pamiętam ile czasu trwa przetwarzanie w tym dallasie, ale w DS1820 trwa mniej więcej 1sek. Wię i tak co minutę będziesz ciągnął przez 1sek 1mA co daje średnio 1/60mA=16uA A tyle średnio spokojnie zrobisz dla procka z kwarcem zegarkowym.

Zibias pisze:

Dlatego warto wziąć inny scalak termometru - jeżeli oczywiście nie każdy pomiar musi być z max. rozdzielczością. Taki np. DS1722 (na SPI) przy wybraniu rozdzielczości 1 stopnia (8 bitów) mierzy temperaturę kilka razy szybciej, niż DS1820. Dodatkowo komunikacja z nim przez SPI też zajmie znacząco mniej czasu, niż z DS1820 magistralą 1Wire.

To, ?e procesor zresetuje sie co 8 sekund nie oznacza, ?e np. siedem razy nie mo?e i?? spa? a tylko za ósmym razem co? zrobi?. Wystarczy np. w jedym rejestrze zrobi? licznik cyklu "u?pienia". Co wi?cej trzeba napisa? tak oprogramowanie, ?eby dobrze pracowa?o niezale?nie od tego czy jest to "reset" zamierzony czy przypadkowy. Nie twierdz?, ?e jest to propozycja najlepsza tylko najta?sza.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required