Fatburn-Timer
von Ralf Beesner
Elektronik-Labor
Projekte
AVR
Überblick
Viele Leser werden die alte Faustregel kennen: wenn man(n) - aufrecht
stehend - den Kopf senkt (ohne sich vorzubeugen) und dann seine Füße
nicht mehr sieht, wird es eigentlich Zeit, etwas zu unternehmen ;-)
Vor einigen Monaten blieb ich beim "Zappen" in der populärwissenschaftlichen ZDF-neo-Sendung "Die Wahrheit über Fett" hängen.
In der Sendung ging es nicht nur um die (vermeintliche)
Schädlichkeit des Fettkonsums (Kernaussage: nicht alle Fette sind
schädlich, die ungesättigten Fettsäuren sind sogar notwendig und für
die Gesundheit förderlich, aber auch gesättigte aus Milchprodukten
werden neuerdings rehabilitiert), sondern um die Energiebilanz des
Körpers. Führt man dauerhaft etwas mehr an Energie zu als man
verbraucht, nimmt man halt langsam zu.
Wenn man sich zu wenig bewegt, speichert der Körper die
Überschuss-Energie im Fettgewebe und schreit nach Ende des
Verdauungsprozesses sofort wieder "Hunger", statt die Fettreserven
abzurufen. Die werden leider erst bei starker körperlicher Belastung
angegangen, und parallel zur einsetzenden Fettverbrennung bleibt dann
auch das Hungergefühl aus, so dass sich die Energiebilanz auf zwei
Wegen verbessert.
So weit ist das ja alles bekannt, aber in oben genannten
Sendung wurde dargestellt und auch über Messungen an Versuchspersonen
belegt, dass sich die Fettverbrennung besonders nachhaltig "ankurbeln"
lässt und sogar bis zu 24 Stunden nach dem Training weiterläuft, wenn
man nach folgendem Schema trainiert:
- zwei Minuten äußerste Anstrengung
- eine Minute Ausruhen bzw. geringe Belastung
- das ganze sechs mal wiederholen, so dass man auf 21 Minuten Trainingszeit kommt
Das klingt etwas nach "Spökenkiekerei", wie man auf
Plattdeutsch sagt, aber hey - würde uns die altehrwürdige Tante BBC
belügen (die Sendung wurde ursprünglich für die BBC produziert und
deutsch synchronisiert)?
Ob ich das tatsächlich mal ausprobieren werde, weiß ich noch
nicht so recht, aber auf alle Fälle schrie der komplizierte Ablauf
danach, in eine ATtiny13-Timerschaltung gegossen zu werden. Und da man
neben der akustischen Signalisierung mit einem Piezoschwinger auch zwei
Taster und zwei LEDs gut gebrauchen kann, ist das Projekt ideal für den
Sparrow.
Hardware
Man kann einen Sparrow
plus Piezoschwinger und Batterie einsetzen (eine 3,3V-Knopfzelle CR
2032 sollte etliche Stunden halten) oder die kleine Schaltung komplett
auf einer Streifenleiter-Lochrasterplatine aufbauen. Da die Software
den Controller in Powerdown schickt und er über Pin Change Interrupts
geweckt wird, verbraucht die Schaltung nur einige µA Ruhestrom und kann
ohne Ein-Ausschalter an der Batterie verbleiben. Beim Sparrow darf man
nur den eigentlichen Controller mit Strom versorgen; die Plusleitung
für die Programmierschaltung darf nicht angeschlossen werden. Der
Piezoschwinger hängt an PB4 (oben nicht eingezeichnet).
Nicht ganz einfach dürfte es sein, die Schaltung so an der
Kleidung anzubringen, dass man die LEDs sieht und das Piezo-Signal
hört.
Software
Die Software ist aus dem
Sparrow-Kurzzeit-Timer
entstanden.
Um versehentliches Einschalten des Timers zu verhindern, müssen
zum Einschalten beide Taster gedrückt werden. Der Taster an PB2 weckt
den Controller per Pin Change Interrupt, und als erstes schaut dieser
nach, ob der Taster an PB0 auf "Low" liegt (man muss also den Taster an
PB0 kurz vor dem Taster an PB2 drücken). Wenn nicht, fällt der
Mikrocontroller sofort wieder in den Tiefschlaf.
Bei Erfolg ertönt ein kurzer Piepton und Timer0 wird
gestartet. Er ist so konfiguriert, dass er 20 Interrupts pro Sekunde
auslöst. Bei einem der zwanzig Interrupts wird eine der LEDs kurz
eingeschaltet, so dass sie im Sekundentakt nur kurz aufblitzt (so wird
Strom gespart). Der Trainingszyklus (Anstrengungs- oder Ruhephase) wird
durch Blinken in unterschiedlichen Farben signalisiert.
Nach jeweils einer Minute ertönt ein kurzer Trillerton, nach
zwei Minuten zwei Trillertöne (Beginn der Ruhephase), nach drei Minuten
drei Trillertöne (Beginn der neuen Anstrengungsphase). Sind sieben
Drei-Minuten-Zyklen um, ertönt ein langer tiefer Ton und die Schaltung
geht in Powerdown.
Man kann den Timer auch zwischendurch mit einem langen Druck (über 2 Sekunden) auf den Taster an PB0 ausschalten.
Der RC-Taktoszillator des ATtiny ist für diese Anwendung
ausreichend genau, meiner war auf 21 Minuten 16 Sekunden zu langsam
(1,2 %).
Beim Sparrow signalisiert die linke (rote) LED die
Anstrengungsphasen, die rechte (grüne) die Ruhephasen. Die
Start-Stop-Taste ist links, die Aufwecktaste rechts.
Download des Bascom-Quelltextes: 0117-fatburn-timer.zip
' FatBurn-Timer
' Eine nachhaltige Fettverbrennung auch Stunden nach dem Training
' soll folgender Trainingsablauf bewirken:
' - sich 2 Minuten lang "verausgaben"
' - 1 Minute Erholung
' das ganze 6 mal wiederholen; Gesamtdauer also 21 Minuten
'
' Die Schaltung wird durch Druck auf die beiden Taster aufgeweckt,
' erst Taster 2 druecken, dann zusaetzlich Taster 1
' Trainingsphase wird durch blinken von LED2 (rot) angezeigt
' Ruhephase durch blinken von LED1 (grün)
' Nach 1 Minute erfolgt 1 Signalton, nach 2 Minuten 2 Signaltoene (Beginn Ruhephase),
' Nach 3 Minuten 3 Signaltoene (Ende Ruhephase)
' nach 7 Zyklen langer Ton
' vorzeitiges Beenden durch Druecken von Taster1 > 2 Sekunden
' Compiler Bascom 2.0.7.5 DEMO
'----------------------------------------------------------
$Regfile = "attiny13.dat"
$Crystal = 1200000
$Hwstack = 32
$Swstack = 8
$Framesize = 8
' Sicherstellen, dass Controller-Takt 1,2 MHz betraegt
Clkpr = 128 ' Aenderung Clockteiler vorbereiten
Clkpr = 3 ' 9600000 / 8
Clkpr = 3
'Variablen
Dim Ti As Byte
Dim Sekunde As Byte
Dim Minute As Byte
Dim Cntr As Byte
Dim N As Byte
Buzzer Alias Portb.4
Led1 Alias Portb.1 ' gruen, rechts
Led2 Alias Portb.3 ' rot, links
Taster1 Alias Pinb.0 ' links
Taster2 Alias Pinb.2 ' rechts
' Konstanten
Const Dit1 = 60 ' Laengen Sounds
Const Dit2 = 30
Const Dit3 = 600
Const Tonhoehe1 = 120
Const Tonhoehe2 = 160
Const Tonhoehe3 = 320
' Register
Didr0 = &B00011010 ' digitale Inputs abschalten (spart Strom, da anstelle Pullups high)
Portb = &B00000101 ' Pullups fuer die beiden Taster
Ddrb = &B00011010
Acsr.7 = 1 ' Analog-Komparator ausschalten, spart etwas Strom
Pcmsk.2 = 1 ' Pin Change Interrupt PB2 auswählen
Sreg.7 = 1 ' Global Interrupt Enable
Gimsk.5 = 1 ' Pin Change Interrupt Enable
Config Timer0 = Timer , Prescale = 256 ' Ergibt 20 Überläufe pro Sekunde, wenn der Tomer nicht bei 0, sondern
' bei 22 startet
On Timer0 Ontimer0 'Interrupt-Routine
'----------------------------------------------------------
Do
Gimsk.5 = 0
If Taster1 = 0 Then
Ti = 0 : Sekunde = 0: Minute = 0 : Cntr = 0
Enable Timer0
Start Timer0
Sound Buzzer , Dit1 , Tonhoehe1
Do 'Hauptschleife
If Ti > 18 Then ' Sekunde um
Ti = 0
Incr Sekunde
End If
If Sekunde > 59 Then
Sekunde = 0
Incr Minute
For N = 1 To Minute
Gosub Snd1
Waitms 200
Next
If Minute > 2 Then
Minute = 0
Incr Cntr
End If
If Cntr > 6 Then
Gosub Snd2
Goto Schlafen
End If
End If
If Taster1 = 0 Then
Wait 2
If Taster1 = 0 Then
Gosub Snd2
Goto Schlafen
End If
End If
Idle
Loop
End If
Schlafen:
Led1 = 0 : Led2 = 0
Stop Timer0
Gimsk.5 = 1
Powerdown
Loop
Snd1:
Sound Buzzer , Dit1 , Tonhoehe1
Sound Buzzer , Dit2 , Tonhoehe2
Return
Snd2:
Sound Buzzer , Dit3 , Tonhoehe3
Return
'----------------------------------------------------------
Ontimer0: 'Timer0-Overflow-Interrupt-Routine
Tcnt0 = 22 ' Preset auf 22, damit er 234 Takte bis Ueberlauf zählt
Incr Ti
If Ti = 1 Then
If Minute = 2 Then
Led1 = 1
Else
Led2 = 1
End If
Else
Led1 = 0
Led2 = 0
End If
Return