Oszczędzanie energii przy pomocy Watchdog`a

Proste przykłady do częstych pytań.
ODPOWIEDZ
Awatar użytkownika
niveasoft
Posty: 1207
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Oszczędzanie energii przy pomocy Watchdog`a

Post autor: niveasoft » 24 lut 2019, 15:44

Watchdog to, w największym skrócie, niezależny od taktowania procesora, osobny układ który zlicza swoje własne impulsy w czasie i może podjąć jakieś działania kiedy licznik mu się skończy.
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.
  1. $regfile = "attiny85.dat"                                   'FLASH 8K, SRAM 512B, EEPROM 512B
  2. $crystal = 1000000
  3. $hwstack = 40
  4. $swstack = 2
  5. $framesize = 32
  6.  
  7. On Watchdog Wdt_isr Nosave
  8. Enable Interrupts
  9.  
  10.  
  11. Do
  12.   'tutaj może coś zrobić po czym pójdzie spać
  13.  
  14.  
  15. '-------------------------------
  16.   Dim Adc_val As Word
  17.  Select Case Adc_val
  18.   Case Is <= 512
  19.    Config Watchdog = 8192                                   '8s
  20.   Case Else
  21.    Config Watchdog = 4096                                   '4s
  22.  End Select
  23. '-------------------------------
  24.  
  25.  
  26.   Stop Ac
  27.   Stop Adc
  28.    Enable Watchdog
  29.    Start Watchdog
  30.    Config Powermode = Powerdown                             'tutaj program stanie/pójdzie spać
  31.  
  32.  '->Tutaj program rozpocznie po przebudzeniu i wróci na początek pętli
  33. Loop
  34. End
  35.  
  36. Wdt_isr:
  37. Return
Press
Posty: 65
Rejestracja: 21 sty 2018, 23:08

Re: Oszczędzanie energii przy pomocy Watchdog`a

Post autor: Press » 24 lut 2019, 17:42

Rzecz a i owszem przydatna.
W skrzynce na listy mam czujnik otwarcia klapki właśnie na takich przerwaniach co 4s.
Na dwóch bateriach AA działa około 7 - 8 miesięcy co 8s krótko błyskając diodą LED.
Nie wiem jak jest w ATTiny na którym tu jest przykład, ale w ATmega88 przy każdym wywołaniu przerwania z Watchdoga trzeba przepisać kilka bitów konfiguracyjnych, które samoczynnie po przerwaniu ustawiają się na reset.
Jeśli się tego nie zrobi to po kolejnym interwale czasowym zostanie wykonany reset.
W przykładzie powyżej się tego nie dopatrzyłem. (Może w Tiny nie trzeba)
Konkretnie mam na myśli bity
Wdtcr.4
Wdtcr.3
Wdtcr.6
Trzeba je też skonfigurować w ciągu określonej liczby taktów generatora, bo w innym przypadku też kolejny będzie reset.
Awatar użytkownika
niveasoft
Posty: 1207
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Oszczędzanie energii przy pomocy Watchdog`a

Post autor: niveasoft » 24 lut 2019, 17:54

Czytałem lekturę noty katalogowej i wiem że jeśli włączysz przerwanie od WD to w jego rejestrze kontrolnym to "włączenie" jest kasowane przy wejściu w przerwanie.
Bascom ma swoje wady, ale ma też wygodne zalety. Tutaj nie martwię się o to by coś zrobić w cztery takty zegara.
Napisałem "Enable Watchdog" i nie interesuje mnie już jak Bascom to zrobi, ale robi :D

To jest kolejna ciekawostka.
Można wyłączyć JTAG programowo, bez przestawiania FuseBitów. Piszesz "Disable JTAG" u góry w kodzie i załatwi to też w cztery takty ;)
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
ODPOWIEDZ