Impulszähler mit der Ping-Pong-Platine
von Hermann Nieder
Beim
Experimentieren mit der Ping-Pong-Platine fand ich heraus, dass es
möglich ist, in BASCOM AVR einen Impulszähler zu programmieren. Es
werden nur wenige zusätzliche Bauteile benötigt. Die Schaltung
passt auf ein kleines Steckboard.
Alle
Schmiit-Trigger des Bausteins CD4093 sind als Inverter geschaltet. Die
Eingänge der beiden mit den Pins 1,2 und 3 bzw. 5,6 und 4 sind
jeweils mit Widerständen von 10 k an Vcc angeschlossen. Außerdem sind
sie über Taster mit Masse verbunden. Diese sind zur Entprellung beim
Schalten jeweils mit einem Kondensator von 100nF überbrückt. Ist
z. B. Taster S1 nicht betätigt, wird High-Pegel an seinem Eingang an
seinem Ausgang zu Low-Pegel. Da dieser (Pin 3) mit dem Eingang einer
weiteren Inverterstufe (Pins 13,12) verbunden ist, ergibt
sich aus Low-Pegel an ihrem Eingang High-Pegel am Ausgang (Pin
11).
Das Anschließen eines Tasters mit oder ohne
Kondensator unmittelbar an einen der Eingänge INT0 oder INT1 der
Ping-Pong-Platine führte in dem Projekt, das in diesem Beitrag
beschrieben wird, nicht zum gewünschten Erfolg. Darstellungen der
Signale auf dem Oszilloskop halfen mir weiter, und es entstand
die oben dargestellten Schaltung. Der Baustein CD4011 ist als
RS-Flip-Flop geschaltet, dessen Eingangssignale von PB6 bzw. PB7
invertiert werden. An die Ausgänge des Flip-Flops sind LEDs über
Widerstände nach Masse angeschlossen.
Das Programmlisting in BASCOM AVR lautet im Initialisierungsteil in Auszügen folgendermaßen:
...
Sub Initialisierung
...
'PD2/INT0 und PD3/INT1 sind Eingänge
Ddrd = &B11110010
...
'Festlegungen für ADC-Wandlung
Config Adc = Single , Prescaler = 64 , Reference = Off
Start Adc
'Festlegungen für INT0, fallende Flanke löst Interrupt aus
Config Int0 =
Falling
Enable Int0
On Int0 Int0_isr
'und INT1, Interrupt-Auslösung ebenfalls bei fallender Flanke
Config Int1 =
Falling
Enable Int1
On Int1 Int1_isr
End Sub
…
'Festlegung, dass ein Z_bit gesetzt wird und die Variable Dat_temp bei jedem
'Aufruf um 1 erhöht wird, bis 999 erreicht wird, da dies die größtmögliche
'Anzeige auf den LEDs der Ping-Pong-Platine ist.
Int0_isr:
Z_bit = 1
Incr Dat_temp
If Dat > 999 Then
Dat = 999
End If
Disable Int0
Return
'Auch bei Auslösung von INT1 wird das Z_bit gesetzt, allerdings wird hier die Variable
'Dat_temp jeweils um 1 erniedrigt, wobei als unterste Grenze 0 festgelegt ist.
Int1_isr:
Z_bit = 1
Decr Dat_temp
If Dat < 0 Then
Dat = 0
End If
Disable Int1
Return
Hier ist ein weiterer Auszug aus dem Listing des Programms in BASCOM AVR.
...
'LED am zugeordneten Flip-Flop-Ausgang leuchtet.
Z_bit = 0
Portb.6 = 0
Portb.7 = 1
Wait 1
' Solange keiner der beiden Interrupts INT0 und INT1 ausgelöst wird,
' wird fortwährend mit einer Pause von 1 Sekunde die Spannung am AD-Eingang ADC6 eingelesen
' und der dafür ermittelte Wert mit den LEDs der Platine angezeigt. Dies ermöglicht eine Voreinstellung des Impulszählers
' mit einem der Potenziometer des Ping-Pong-Bausatzes.
' Es kann je nach Stellung des Potenziometerschleifkontakts ein Wert zwischen 0 und 999 eingestellt werden.
Anfang:
'Jetzt ist das Z_bit 1, der an ADC6 eingelesene Wert liegt fest, und das Programm wird bei Weiter 'fortgesetzt .
If Z_bit = 1 Then
Portb.6 = 1
Portb.7 = 0
Goto Weiter
End If
Dat = Getadc(6)
Dat_temp = Dat
Gosub Dez_darst
Portb.6 = 0
Portb.7 = 1
Waitms 1000
Goto Anfang
Weiter:
Do
Enable Int0
Enable Int1
Dat = Dat_temp
'Es erfolgt nun ständig für den momentanen Wert der Variablen
'Dat_temp die Darstellung als Dezimalzahl.
Gosub Dez_darst
Waitms 20
Loop
…
'Die Muster für die Zeichen (Ziffern der Anzeige) wurden mit dem Programm
' "Mustergenerator"[4] entwickelt und die Werte daraus jeweils in die Programmzeilen
' Splt1..Splt4 übernommen.
Zeichen_z:
Select Case Zeichen
Case 0:
Splt1 = 0
Splt2 = 124
Splt3 = 68
Splt4 = 124
Case 1:
Splt1 = 0
Splt2 = 0
Splt3 = 8
Splt4 = 124
…
Die
in diesem Beitrag vorgestellte Zusatzschaltung für die
Ping-Pong-Platine lässt sich mit dem oben in Auszügen vorgestellten
Programm in BASCOM AVR z. B. zur Zählung von Gegenständen oder Objekten
verwenden. Eine andere Einsatzmöglichkeit ist in der Skizze
dargestellt. Es handelt sich um das Bild einer einfachen
Wickelmaschine für Spulen.
Die
Anzahl der Windungen lässt sich jeweils beim Wickeln, Abwickeln und
Umwickeln zählen und mit den LEDs auf der Ping-Pong-Platine darstellen,
wenn z. B. pro Umdrehung ein an der linken Scheibe angebrachter Magnet
(in der Skizze rot dargestellt) einen Reed-Kontakt (Schließer)
betätigt.
Es gelingt dies auch, wenn die Scheibe eine Form wie die
im folgenden Bild dargestellte besitzt. Ein dazu passender
Mikroschalter mit Rollenhebel ermöglicht dann beim Betrieb der
Wickelmaschine eine sichere Kontaktgabe.
Für
die oben skizzierte Wickelmaschine sind die Eingänge 1,2 sowie 5,6 des
Bausteins CD4093 wie im Schaltplan mit dem Wechselschalter
S2 anzuschließen. Bei der linken Stellung von S2 wird bei jeder
Umdrehung aufwärts (Wickeln) gezählt und bei der rechten (Abwickeln)
abwärts.
Download: 1002PingpongCounter.zip