Specjalnie napisałem, ze może podjąć "jakieś działania" bo nie musi zawsze resetować procesora.
Atmega8 tego nie potrafi, ale już ciut nowsze od tej babci mają możliwość by Watchdog, albo tylko uruchomił osobne przerwanie, albo uruchomił przerwanie po czym dopiero zresetował uC.
Opiszę jak oprogramować pierwszy z przypadków w Bascom.
Sprawa jest prosta. Konfigurujemy Watchdoga jak zwykle po czym włączamy obsługę przerwania od Watchdoga "Enable Watchdog". I to tyle.
Można w ten sposób wybudzić procesor z trybu Powerdown co może się przydać w urządzeniach zasilanych bateryjnie. Czas jest mierzony z dokładnością około 1kHz więc wpisanie "Config Watchdog = 8192" ustawia czas na około 8 sekund (wszystkie możliwe wartości można podejrzeć wciskając CTRL+Spacja).
Co ciekawe, jak większość poleceń konfiguracyjnych, Config Watchdog może otrzymać różne wartości podczas pracy całego układu. W prosty sposób możemy "przestawić" czas na 4s jeśli wyda się nam to potrzebne. Po poleceniu Config Watchdog zawsze trzeba użyć Start Watchdog.
Poniżej prosty przykład.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "attiny85.dat" 'FLASH 8K, SRAM 512B, EEPROM 512B
- $crystal = 1000000
- $hwstack = 40
- $swstack = 2
- $framesize = 32
- On Watchdog Wdt_isr Nosave
- Enable Interrupts
- Do
- 'tutaj może coś zrobić po czym pójdzie spać
- '-------------------------------
- Dim Adc_val As Word
- Select Case Adc_val
- Case Is <= 512
- Config Watchdog = 8192 '8s
- Case Else
- Config Watchdog = 4096 '4s
- End Select
- '-------------------------------
- Stop Ac
- Stop Adc
- Enable Watchdog
- Start Watchdog
- Config Powermode = Powerdown 'tutaj program stanie/pójdzie spać
- '->Tutaj program rozpocznie po przebudzeniu i wróci na początek pętli
- Loop
- End
- Wdt_isr:
- Return