Sparrow-Ereigniszähler       

von Ralf Beesner                  
Elektronik-Labor  Projekte  AVR  Sparrow 



 



Im Beitrag T13-Vorteiler hatte ich eine kleine Schaltung beschrieben, die dann doch nicht zum Einsatz kam. aber sie lieferte die Idee für einen Ereigniszähler mit minimalem Hardwareaufwand. Die Ausgabe erfolgt (statt mit einem LCD) akustisch und/oder optisch (Blinken).

Da der Code in einen ATtiny13 paßt und für die optische Ausgabe zwei LEDs verwendet werden, bot es sich an, die Hardwarebeschaltung am Sparrow zu orientieren; man kann einen Sparrow einsetzen, kann aber auch die Schaltung um einen "normalen" ATtiny 13 herum bauen.

Das Zählsignal hat auch hier 24V-Pegel und der Controller wird ebenfalls aus einer 3V-Quelle gepeist; man kann aber auch den Spannungsteiler am Zähleingang auf andere Spannungen abändern oder z.B. einen Optokoppler verwenden.


Hardware

Ein Sparrow muß lediglich mit dem Piezo-Schallgeber (sofern man nicht auf die akustische Ausgabe verzichtet), dem Eingangsspannnungsteiler R1/R2 und dem Elko C1 beschaltet werden.

Die Sparrow-Kompatibilität erfordert eine kleine Schaltungsänderung gegenüber dem T13-Vorteiler: beim Sparrow ist PinB.0 mit einem 10 kOhm-Pullup-Widerstand beschaltet. Würde man den längere Zeit auf "low" ziehen, wäre die Lebensdauer der Batterie spürbar verkürzt, auch wenn nur ca. 300 µA Strom fließen.

Der Spannungsteiler ist daher von der Mikrocontrollerschaltung durch den Kondensator C1 entkoppelt, der nur die Impulsflanken überträgt und die Gleichspannung sperrt.

Seine Größe hängt von der Software ab; da sie in der Interrupt-Routine Impulse ausfiltert, die kürzer als 10 msec sind, muß er etwa 2,2µF betragen. Bei kürzeren Entprellzeiten kann er verkleinert werden (ohne Entprellung müßten 10 nF reichen).

Baut man die Schaltung ohne Verwendung eines Sparrow nach, kann man R4 und R5 weglassen, da bereits die internen Pullups des ATtiny in der Software aktiviert sind, und C1 auf etwa 20 % verkleinern.


Software

Durch direkte Konfiguration der Register werden die Ausgänge bestimmt, die Pullups aktiviert, nicht benötigte Digitaleingänge abgeschaltet und für PinB.0 und PinB.2 Pin Change Interrupts aktiviert.

In der Interrupt-Routine "Onpcint" wird die Zählvariable "Event" um 1 erhöht, wenn der Controller geweckt wurde und an PinB.0 "low" für länger als 10 msec vorfindet.

In der Hauptroutine wird nach dem Aufwachen geprüft, ob der Taster an PinB.2 gedrückt wurde. Falls nicht, geht der Controller gleich wieder in Powerdown. Falls doch, wird die Ausgabe des Zählerstandes angestoßen.

Das Programm verzweigt dann in die Subroutine "Ausgabe" und wandelt in einer Schleife den Zählerstand "Event" jeweils in seine Einzelziffern um und gibt diese als Blink- und Tonsignale aus.

Eine "0" wird durch langes rotes Blinken und einen langen tiefen Ton signalisiert. Ziffern > 0 werden als kurze grüne Blinksignale und kurze hohe Piepstöne signalisiert. Zwischen den Ziffern wird jeweils eine Sekunde Wartezeit eingelegt.

Um den Zähler auf "0" zurückzusetzen, muß man entweder die Betriebsspannung unterbrechen oder Reset-Eingang des ATiny 13 (den unbeschalteten Pin 1) provisorisch mit Masse verbinden.

Für Leser, die der Morsesprache mächig sind, ist auch eine Variante beigefügt, die den Zählerstand in Morse ausgibt. Nullen werden als "T" abgekürzt, um die Ausgabe zu beschleunigen.

Download des Bascom-Quelltextes:  0116-sparrow-ereigniszaehler.zip

Direkt laden: http://tiny.systems/categorie/cheepit/Ereignisz%C3%A4hler.html

Morse-Version: http://tiny.systems/categorie/cheepit/MorseEreignisz%C3%A4hler.html

' Sparrow-Ereigniszaehler 0 - 99999

' Zaehleingang PinB.0
' Abfragetaster an PinB.2
' Buzzer an PortB.4
' rote LED an PortB.3
' gruene LED an PortB.1
' Ergebnis wird ziffernweise als eine Reihe von Blinksignalen und Piepstoenen ausgegeben
' Ziffer 0: rote LED / langer tiefer Ton
' Ziffern 1-9:  gruene LED /kurze hoehere Toene

' Compiler: BASCOM 2.0.7.5 Demo


$Regfile = "Attiny13.dat"
$Crystal = 1200000
$Hwstack = 32
$Swstack = 4
$Framesize = 4

DDRB =  &B00011010
PORTB = &B00000101
DIDR0 = &B00011010
GIMSK.PCIE = 1 PCMSK.PCINT0 = 1 PCMSK.PCINT2 = 1 SREG.7 = 1 On PCINT0 Onpcint

Buzzer Alias PortB.4 Zaehleing Alias PinB.0 Abfrage Alias PinB.2 Rot Alias PortB.3 Gruen Alias PortB.1 Const Lang = 200 ' Laenge Sound Const Kurz = 100 Const Tief = 300 ' Tonhoehe Sound Const Hoch = 100 Dim I As Byte
Dim M As Byte
Dim N As Long
Dim K As Byte
Dim MS As Byte

Dim Event As Long
Dim Carry As Long
Dim Divisor As Long


Do If Abfrage = 0 Then Gosub Ausgabe
Powerdown End If Loop ' Ausgabe des Zaehlerstandes Ausgabe: Carry = Event
Divisor = 10000 For K = 1 to 5 N = Carry / Divisor
Gosub Beep
Carry = Carry Mod Divisor
Divisor = Divisor / 10 Next Return 'Tonerzeugung Beep: If N = 0 Then Rot = 1 Sound Buzzer , Lang , Tief
Rot = 0 End If For I = 1 To N
Gruen = 1 Sound Buzzer , Kurz , Hoch
Gruen = 0 Waitms Kurz
Next Wait 1 Return End '---------------------------------------------------------- Onpcint: If PinB.0 = 0 Then Waitms 10 If PinB.0 = 0 Then Incr Event
End If End If Return



Elektronik-Labor  Projekte  AVR  Sparrow