Jarek P.
Guest
Thu Jan 03, 2008 1:49 pm
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.
Zibias
Guest
Thu Jan 03, 2008 1:49 pm
-------
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.
Jarek P.
Guest
Fri Jan 04, 2008 1:06 am
Zibias <qwaterka@poczta.onet.pl> wrote:
Quote:
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.
OK, dzięki
Quote:
Do tego dojdzie większy prąd na pomiar układem DS ale to co 1
min.
Swoją drogą - może ktoś podpowie, o co chodzi Dallasowi z tym
trybem standby w DS1620?
J.
William
Guest
Fri Jan 04, 2008 9:01 am
Użytkownik "Jarek P." <jarekprzybyl@gmail.com> napisał w wiadomości news:b596e40e-2aae-41e3-8d2f-ba33e84ec886@i29g2000prf.googlegroups.com...
Quote:
Czy z trybów standby, power down itp. procesorów AVR da się wyjść inna
metodą niż pobudzenie zewnętrznym przerwaniem? Potrzebuję zrobić coś,
Tak - wathdogiem
Adam Dybkowski
Guest
Fri Jan 04, 2008 11:47 pm
Zibias pisze:
Quote:
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.
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.
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
Jarek P.
Guest
Sat Jan 05, 2008 1:04 am
Adam Dybkowski <adybkows12@45wp.pl> wrote:
Quote:
BTW: A może od razu użyj układu termometru z ustawianymi
progami
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.
Adam Dybkowski
Guest
Sun Jan 06, 2008 12:57 am
Jarek P. pisze:
Quote:
BTW: A może od razu użyj układu termometru z ustawianymi progami
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.
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.
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
Jarek P.
Guest
Sun Jan 06, 2008 1:06 pm
Adam Dybkowski <adybkows12@45wp.pl> wrote:
Quote:
Chciałeś co minutę a watchdog w nowych AVRach może resetować
procesor
najrzadziej co 8 sekund.
A gdyby procesor pogonić z kwarca zegarkowego? Na jego prędkości
mi nie zależy
Quote:
włączony watchdog w procesorze ciągnie 10x tyle prądu, co
zewnętrzny
układ RTC.
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.
Zibias
Guest
Sun Jan 06, 2008 2:09 pm
Użytkownik "Jarek P." <jarek[kropka]p@gazeta.pl> napisał w wiadomości
news:flqg82$g5v$1@node2.news.atman.pl...
Quote:
Adam Dybkowski <adybkows12@45wp.pl> wrote:
Chciałeś co minutę a watchdog w nowych AVRach może resetować procesor
najrzadziej co 8 sekund.
A gdyby procesor pogonić z kwarca zegarkowego? Na jego prędkości mi nie
zależy
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.
Adam Dybkowski
Guest
Sun Jan 06, 2008 8:42 pm
Zibias pisze:
Quote:
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
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.
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
William
Guest
Mon Jan 07, 2008 8:49 am
Quote:
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.
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.