Impulszähler mit der Ping-Pong-Platine

von Hermann Nieder

Elektronik-Labor  Labortagebuch  ELO  Mikrocontroller


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


Elektronik-Labor  Labortagebuch  ELO  Mikrocontroller