ATtiny202 im Batteriebetrieb         


Elektronik-Labor   Projekte   AVR


TinyAVR Serie 0 und 1 im Einsatz Kap 6

Einfache Hilfsgeräte wie ein Küchen-Timer sollten möglichst jahrelang mit einer Batterie funktionieren. Der ATtiny202 ist dafür geeignet, weil er mit seinem Ultra Low Power (ULP) RC-Oszillator mit 32,768 kHz betrieben werden kann. Laut Datenblatt braucht der Controller bei 32 kHz und 3 V nur noch 10 µA. Die Frequenzgenauigkeit wird mit 3% angegeben, was für einfache Aufgaben ausreicht. Hier wird der interne Ultra Low Power RC-Oszillator mit 32 kHz (OSCULP32K) verwendet. Voreingestellt verwendet der Controller einen Vorteiler durch 6, den man bei Bedarf abschalten kann, wie das bei allen Anwendungen mit einem Takt von 20 MHz getan wurde.  Durch den Vorteiler reduziert sich die Taktfrequenz in diesem Fall auf ca. 5,5 kHz. Die Stromaufnahme im aktiven Betrieb beträgt dabei nur noch ca. 2 µA.  Das liegt deutlich unter der Selbstentladung einer Batterie. Deshalb kommt man ganz ohne einen Hauptschalter aus.

In diesem Fall soll die Küchenuhr fünf Minuten laufen. Ein Druck auf den Tastschalter an PA2 startet die Zeit. Der Controller liefert zur Bestätigung einen kurzen Signalton am Ausgang PA3. Nach Ablauf der Zeit ertönt ein längerer Ton. Parallel kann am Port PA3 auch noch eine LED für die optische Kontrolle angeschlossen werden.

Wichtig ist, dass kein Port mehr als offener Ausgang stehen bleibt, weil sich dieser auf eine mittlere Spannung aufladen könnte, die zu einem höheren Stromverbrauch führt. In diesem Fall werden alle Ports bis auf PA2 als Ausgänge geschaltet. PA2 ist ein Eingang mit Pullup für den Anschluss des Tasters.

 //5Min202  Küchenuhr
#define F_CPU 32768UL/6

#include <avr/io.h>
#include <util/delay.h>
#include <avr/sleep.h> 

int main(void){
  _PROTECTED_WRITE (CLKCTRL_MCLKCTRLA, 1); //32 kHz
  PORTA.DIRSET = 253;   

  for (uint16_t n = 0;n<100; n++){
    PORTA.OUT = PIN3_bm;
    _delay_ms(1);
    PORTA.OUT &= ~PIN3_bm;
    _delay_ms(1);
  } 

  _delay_ms(300000); //5 min
  for (uint16_t n = 0;n<1000; n++){
    PORTA.OUT = PIN3_bm;
    _delay_ms(1);
    PORTA.OUT &= ~PIN3_bm;
    _delay_ms(1);
  }
  while(1);
}

 


Tiny202 Watchdog-Blitzer

TinyAVR Serie 0 und 1 im Einsatz Kap 6

Der „Ewige Blinker“ ist eine besonders energiesparende Schaltung, die eine LED mit kurzen Lichtblitzen über Jahre mit nur einer Batterie betreibt. Für Werbetafeln gab es den LM3909, die nur eine einzelne 1,5-V-Zelle benötigte. Vergleichbare Schaltungen wurden mit Einzeltransistoren oder mit kleinen Mikrocontrollern gebaut.

Hier wird der Tiny202 für die Aufgabe eingesetzt, der bis herunter auf 1,8 V arbeitet. Damit eine weiße LED auch bei solch kleiner Spannung betrieben werden kann, wird eine Spannungsverdopplung der Port-Impulse verwendet. Ein Elko mit 100 µF wird in den Ruhephasen über 100 kΩ geladen und dann während des Blitzimpulses in Reihe zur Betriebsspannung gelegt. Der Elko wird in den Pausen langsam geladen und gibt die gewonnene Energie in einem kurzen Moment an die LED ab.

Für einen möglichst sparsamen Betrieb wird der Controller mit dem internen 32-kHz-Oszillator getaktet. Außerdem wird er nach jedem LED-Impuls mit einer Länge von nur 1 ms in den Power-Down-Modus geschaltet. Der Watchdog-Timer weckt ihn nach jeweils 2 s wieder auf, erzeugt einen Reset und startet das Programm damit neu.

Im Schlafmodus verbraucht der Tiny202 nur ca. 1 µA. Im aktiven Modus, der aber nur 1 ms dauert, werden bei einem Takt von 32 kHz etwa 10 µA gebraucht. Wichtig ist, dass kein Port einen offenen Eingang hat, was zu einem zusätzlichen Verbrauch führen würde. Deshalb werden alle Ports als Ausgänge geschaltet. Der tatsächliche Verbrauch wird durch den Ladestrom über 100 kΩ und den kurzen Impulsstrom bestimmt, der im Durchschnitt noch einmal den gleichen Strom benötigt. Im Durchschnitt ergibt sich dabei ein mittlerer Verbrauch von etwa 30 µA.


//Watchdog202 Blitzlicht
#define F_CPU 32000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/sleep.h> 

int main(void){
  _PROTECTED_WRITE (CLKCTRL_MCLKCTRLA, 1); //32 kHz
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  _PROTECTED_WRITE (WDT_CTRLA,PERIOD_2KCLK_gc); // 2 s)
  RTC.CTRLA=1;
  PORTA.DIRSET = 255;  
  PORTA.OUT = PIN3_bm;
  _delay_ms(1);
  PORTA.OUT &= ~PIN3_bm;
  _delay_ms(2000);
 
sleep_mode();
}

 
Zur Bestimmung des mittleren Verbrauchs wurde die Schaltung über einen 1000-µF-Elko betrieben, der auf 3,3 V geladen wurde. Nach einer Minute wurde die Untergrenze von 1,7 V erreicht, bei der das Blitzen aufhörte. Aus der Kapazität von 1 mF, der Spannungsabnahme um 1,6 V und der Entladedauer von 60 s kann der mittlere Strom von 27 µA bestimmt werden. Mit einer kleinen Li-Batterie mit 500 mAh könnte man eine Betriebsdauer von rund zwei Jahren erreichen. Die Watchdog-Zeit kann bis auf 8 s erhöht werden. Mit längeren Blitz-Intervallen lässt sich auch die Betriebsdauer entsprechend erhöhen.

 

Elektronik-Labor   Projekte   AVR