Minimalizacja pobieranego prądu.
-
atelszewski
- Użytkownik
- Posty: 143
- Rejestracja: 12 sie 2005, 9:36
- Lokalizacja: Banie
Przerwanie od Watchdoga to właśnie Reset i/lub tgz. Time out. Znaczy to że są 2 przerwania od watchdoga. W nocie pisze że można uzyskać w ten sposób 3 rodzaje przerwań od watchdoga. Zwykłe przerwanie tak jak był to zwykły timer (time out), Reset MPU, oraz obydwa naraz, choć akurat nie wiem do czego to by było przydatne 
Time out jest zazwyczaj stosowny do kontrolowania procesów które mogły by sie z jakiegoś powodu zawiesić, jeżeli dany proces nie zresataruje Watchdoga w zadanym czasie to ten zgłasza przerwanie i jest to sygnał że ten proces się zawiesił, lub nie skończył swojego zadania z jakiś przyczyn.
Time out jest zazwyczaj stosowny do kontrolowania procesów które mogły by sie z jakiegoś powodu zawiesić, jeżeli dany proces nie zresataruje Watchdoga w zadanym czasie to ten zgłasza przerwanie i jest to sygnał że ten proces się zawiesił, lub nie skończył swojego zadania z jakiś przyczyn.
a) Procesor się wybudza i leci dalej program od miejsca w którym skończył (od instrukcji sleep ... power down).
b) Procesor się wybudza, wykonuje przerwanie i wraca do miejsca w którym skończył (patrz punkt a).
Ja myślałem o włączeniu watchdoga i wyłączeniu procesora. Watchdog nie wybudzi tylko po kilku sekundach zresetuje procka.
W teorii powinno działać, w praktyce bywa różnie.
Możesz też użyć zewnętrznego przerwania, wyzwalanego zewnętrznym obwodem RC
b) Procesor się wybudza, wykonuje przerwanie i wraca do miejsca w którym skończył (patrz punkt a).
Ja myślałem o włączeniu watchdoga i wyłączeniu procesora. Watchdog nie wybudzi tylko po kilku sekundach zresetuje procka.
W teorii powinno działać, w praktyce bywa różnie.
Możesz też użyć zewnętrznego przerwania, wyzwalanego zewnętrznym obwodem RC
-
keruseykaryu
Prosta sprawa. Jak pisze w notce: najpierw przerwanko potem reset. Czyli program się zaklapućkał, przerwanie może wykonać operacje porządkowe i program może iść dalej bo zostanie napisany tak, że jego praca powróci do normy i znów ustawić tryb Interrupt. Jeśli praca będzie tak wadliwa, że przerwanie się nie wykona to nie ma szans, po drugim razie już nastąpi normalny strzał z liścia w procesor.kayron pisze:oraz obydwa naraz, choć akurat nie wiem do czego to by było przydatne
Skompiluj sobie i popatrz co się będzie działo.
Kod: Zaznacz cały
.include "m168def.inc"
.org 0x00
rjmp reset
.org WDTaddr
rjmp watchgod
reset:
ldi R16, low(RAMEND)
out SPL, R16
ldi R16, high(RAMEND)
out SPH, R16
ldi R16, (1<<WDIE)|(1<<WDE)
sts WDTCSR, R16
sei
loop:
nop
nop
nop
nop
nop
nop
rjmp loop
watchgod:
nop
nop
nop
retiWektor 7. Po takim przerwaniu program wskakuje pod PC=0x000c. (strona 57 pdf-a)Kulpina pisze:Co to znaczy?
Można napisać jakąś obsługę tego przerwania tak jak dla timera? Czy procesor po prostu się wybudza i zaczyna w jakimś miejscu program? W jakim miejscu wtedy?
Ja ci opiszę na przykładzie mojej pracy na 3 zmianie (nocka). Wtryskarki do tworzyw sztucznych mają taką faja funkcje w panelu zarządzania produkcją, jak licznik paczek, który będzie odpowiednikiem WatchDoga w realu.
Otóż jeżeli licznik ten osiągnie zadaną liczbę wtrysków/detali, to maszyna w następnym cyklu podczas zamykania formy, będzie sygnalizować dźwiękiem syreny alarmu że paczka została osiągnięta i zaczyna się produkcja następnej.
Teraz przychodzimy do roboty na 10 (22:00) i algorytm wygląda tak:
1 - sprawdzić zasyp i ewentualnie uzupełnić do full, wywalić koszyk na detale do pusta, ustawić sobie licznik paczek tak aby jak koszyk będzie prawie pełny zawył alarm licznik paczek (konfiguracja WatchDoga).
2 - przygotować stanowisko dozorowe i rozpocząć procedurę drzemki (nasz PowerDown)
3 -
pobudka (przerwanie od WatchDoga), zawył alarm, koszyk pełny wykonać czynności
3.a - opróżnić koszyk na detale.
3.b - sprawdzić czy w zasypie nie trzeba uzupełnić tworzywa.
3.c czy godzina 2:00 rano TAk- przerwa na posiłek regenujący i skok do punktu 2..
3.d czy godzina 5.30 rano - ups, koniec leberki, za 5 minut będzie się schodzić 1 zmiana trzeba sprzątać, wyłączyć nieznane innym funkcje maszyny, umyć się i do domu.
4. koniec algorytmu pracy na 3 zmianę z funkcją Power Down.
Otóż jeżeli licznik ten osiągnie zadaną liczbę wtrysków/detali, to maszyna w następnym cyklu podczas zamykania formy, będzie sygnalizować dźwiękiem syreny alarmu że paczka została osiągnięta i zaczyna się produkcja następnej.
Teraz przychodzimy do roboty na 10 (22:00) i algorytm wygląda tak:
1 - sprawdzić zasyp i ewentualnie uzupełnić do full, wywalić koszyk na detale do pusta, ustawić sobie licznik paczek tak aby jak koszyk będzie prawie pełny zawył alarm licznik paczek (konfiguracja WatchDoga).
2 - przygotować stanowisko dozorowe i rozpocząć procedurę drzemki (nasz PowerDown)
3 -
3.a - opróżnić koszyk na detale.
3.b - sprawdzić czy w zasypie nie trzeba uzupełnić tworzywa.
3.c czy godzina 2:00 rano TAk- przerwa na posiłek regenujący i skok do punktu 2..
3.d czy godzina 5.30 rano - ups, koniec leberki, za 5 minut będzie się schodzić 1 zmiana trzeba sprzątać, wyłączyć nieznane innym funkcje maszyny, umyć się i do domu.
4. koniec algorytmu pracy na 3 zmianę z funkcją Power Down.
-
keruseykaryu
Owszem. Tylko nie stare i zdezelowane SIGNAL(). Jak już to ISR().Kulpina pisze:Zrozumiałem, ale nie o to mi chodzi...
To może krótkie pytanie.
Czy można napisać coś takiego jak obsługa przerwania od watchdoga?
SIGNAL(przerwanie_od_watchdoga)
{
//
//
}
Kod: Zaznacz cały
#include <avr/io.h>
#include <avr/interrupt.h>
ISR(WDT_vect)
{
WDTCSR = (1<<WDIE);
PORTB ^= 0xff;
}
int main(void)
{
DDRB = 0xFF;
WDTCSR = (1<<WDIE)|(1<<WDE);
sei();
while(1);
return 0;
}-
keruseykaryu
-
keruseykaryu
No wtedy mam 8khz, faktycznie może nie nadążyć
Zapewne masz rację, a w praktyce sprawdzę to jutro, bo jak narazie oderwały siędwa kabelki i nie mam jużna to siły
[ Dodano: 2010-09-29, 18:53 ]
Dzięki wielkie keruseykaryu, za pomoc przy tym watchdogu
Koniec końców chyba zostanę przy moim T0
Pozatym mam wogle jakieś problemy z watchdogiem ^^ czemu on nie respektuje mojego polecenia co do dzielnika? Wyraźnie ustawiłem WDP3 i WDP0 w WDTCSR, do powinno dawac przerwanie co ~8s (nota, str. 49), natomiast przerwanie jest kilkadziesiąt razy na sekundę...
Ostatnie moje pytanie - ile prądu pobiera procek podczas wybudzania?
Zapewne masz rację, a w praktyce sprawdzę to jutro, bo jak narazie oderwały siędwa kabelki i nie mam jużna to siły
[ Dodano: 2010-09-29, 18:53 ]
Dzięki wielkie keruseykaryu, za pomoc przy tym watchdogu
Koniec końców chyba zostanę przy moim T0
Pozatym mam wogle jakieś problemy z watchdogiem ^^ czemu on nie respektuje mojego polecenia co do dzielnika? Wyraźnie ustawiłem WDP3 i WDP0 w WDTCSR, do powinno dawac przerwanie co ~8s (nota, str. 49), natomiast przerwanie jest kilkadziesiąt razy na sekundę...
Ostatnie moje pytanie - ile prądu pobiera procek podczas wybudzania?