Spannungsmessung mit der Ping-Pong-Platine

von Hermann Nieder

Elektronik-Labor  Labortagebuch  ELO  Mikrocontroller



In diesem Beitrag beschreibe ich, wie sich mit dem Mikrocontroller auf der  Ping-Pong-Platine das Modell eines Parkhauses ansteuern lässt , wie dies im Bild dargestellt ist. Die Widerstände und Kondensatoren vor den Eingängen der Schmitt-Triggerstufen des CD4093 dienen der Entprellung der Schließerkontakte. Zu jeweils einer Prüftaste ist der „Bodenkontakt“ für die „Einfahrt ins Parkhaus“  bzw. derjenige für die „Ausfahrt“  parallel geschaltet. Es handelt sich um Reedkontakte unter der Platine, die beim „Überfahren“von kleinen Magneten in den Automodellen betätigt werden. Die Ausgangssignale werden durch je eine weitere Schmitt-Triggerstufe invertiert und stehen an den Eingängen INT0/Portd.2 sowie INT1/Portd.3 an.
Die NAND-Gatter des Bausteins CD4011 sind zu einem RS-Flip-Flop mit negierten Eingängen verbunden. Dabei sind die beiden restlichen NAND-Gatter als Inverter geschaltet, und ihre Eingänge sind an Portb.6 bzw. Portb.7 angeschlossen. An den Ausgängen des Flip-Flops sind über Vorwiderstände die Leuchtdioden auf dem Steckboard sowie diejenigen auf der Platine des Parkhausmodells angeschlossen.





Im Initialisierungsteil des Programms in BASCOM AVR wird u. a. festgelegt, dass Portd.2 und Portd.3 Eingänge sind

Sub Initialisierung
...
Ddrd = &B11110010 
...

Außerdem werden  die Interrupts INT0 sowie INT1 zugelassen, und zwar jeweils bei fallender Flanke.

Config Int0 = Falling                                    
  Enable Int0
  On Int0 Int0_isr

  Config Int1 = Falling                                    
  Enable Int1
  On Int1 Int1_isr

  End Sub






Bei Interrupt INT0 wird die Variable Z_byte auf 1 gesetzt und die Variable Dat inkrementiert (jeweils um 1 erhöht), bis sie den Wert 8 erreicht hat, da 8 „Parkplätze vorhanden“ sind.
Bei Interrupt INT1 wird die  Variable Z_byte auf 2 gesetzt und die Variable Dat dekrementiert(jeweils um 1 verringert bis 0, was bedeutet, dass alle 8„Parkplätze wieder frei“ sind.


Int0_isr:
  Z_byte = 1
  Disable Int1
  Incr Dat
  If Dat > 8 Then
  Dat = 8
  End If
  Disable Int0
  Return

  Int1_isr:
  Z_byte = 2
  Disable Int0
  Decr Dat
  If Dat < 0 Then
  Dat = 0
  End If
  Disable Int1
  Return




Im Haupttiel des Programms wird die Variable Dat auf 8 gesetzt und die Variable Dat_temp mit dem gleichen Wert geladen. Die grüne LED auf der Platine des Parkhausmodells leuchtet, da Portb.6 0 und Portb.7=1 sind. Außerdem wird mit den LEDs der Ping-Pong-Platine  angezeigt, dass 8 Plätze frei sind, und veranschaulicht, dass beide „Schranken“ geschlossen sind. Je nach Wert der Variablen Z_byte, die zu Beginn 0 ist, erfolgt ein Sprung in das Unterprogramm, in dem die Öffnung der linken „Schranke“ und nach Ablauf einer Wartezeit wieder die „Schließung“ derselben simuliert wird. Zudem erfolgt  auch die um 1 verringerte Anzeige der noch „freien Parkplätze“

Anfang:
Dat = 8
Dat_temp = Dat
Z_byte = 0
Portb.6 = 0
Portb.7 = 1
Gosub P120_sch00                                            'Schr00 allein
Gosub Dez_darst                                             'jetzt mit Ziffer
Weiter:
Enable Int0
Enable Int1
Select Case Z_byte







Die Darstellung auf der LED-Anzeige der Ping-Pong-Platine für die einzelnen Schritte der Simulation  der „Grundstellung“ sowie diejenige für die „Bewegung einer der Schranken“ wurden vor der Entwicklung des Programmlistings  mit dem Programm „Super-Mustergenerator“, einer Weiterentwicklung des Visual Basic Programms „Mustergenerator“, entworfen und die einzelnen Dateien dazu gespeichert. In einem ELO-Beitrag [4] wurde bereits das letztere und seine Verwendung bei der Programmierung in BASCOM AVR erläutert. Dies sind z. B. die Programmschritte für die „Bewegung der linken Schranke“. In ähnlicher Weise ist der Teil des Listings für die andere „Schranke“ gestaltet.


Case 2:
Gosub P120_sch00                                            'Beide Schranken geschlossen
Gosub P120_sch10                                            'Schr10 allein
Gosub Dez_darst                                             'Schr10 mit Ziffer
Wait 2                                                      'warten
Gosub P120_sch10                                            'Schr10 allein

Gosub P120_sch20                                            'Schr20 allein
Gosub Dez_darst                                             'Schr20 mit Ziffer
Wait 5                                                      'warten
Gosub P120_sch20                                            'Schr20 allein

Gosub P120_sch10                                            'Schr10 allein
Gosub Dez_darst                                             'Schr10 mit Ziffer
Wait 2                                                      'Warten
Gosub P120_sch10                                            'Schr10 allein

Gosub P120_sch00                                            'Schr00 allein
Gosub Dez_darst                                             'Schr00 mit Ziffer
Wait 1                                                      'Warten
Gosub P120_sch00                                            'Schr00 allein
Dat_temp = Dat                                              'Dat_temp = momentaner Wert Dat
Gosub Dez_darst                                             'Schr00 mit neuem Wert Dat_temp
Z_byte = 0
Select Case Dat_temp
Case 1 To 8:
Portb.6 = 0
Portb.7 = 1
Case 0:
Portb.6 = 1
Portb.7 = 0







Für die Darstellung im Bild lautet das Listing  für die halb „geöffnete Schranke“ ohne eine Ziffer folgendermaßen:

P120_sch01:
'Datei: P120_Psch001
Leds(1) = 896
Leds(2) = 128
Leds(3) = 128
Leds(4) = 128
Leds(5) = 128
Leds(6) = 896
Leds(7) = 896
Leds(8) = 0
Leds(9) = 32
Leds(10) = 64
Leds(11) = 128
Leds(12) = 896
Return
...
Berücksichtigt werden muss allerdings auch jeweils die korrekte Anzeige der „Anzahl der  Parkplätze“,  was beim Durchlaufen der folgenden Programmschritte geschieht:
...
'Darstellung im Dezimalformat
Dez_darst:
Zeichen = Dat_temp
Gosub Zeichen_z
Leds(6) = Leds(6) + Splt1
Leds(7) = Leds(7) + Splt2
Leds(8) = Leds(8) + Splt3
Return
...
Dies sind  z. B. für die Ziffer 7 die Werte  für die Variablen Splt1, Splt2 und Splt3 
...
Case 7:
Splt1 = 1
Splt2 = 1
Splt3 = 31
...
Diese wurden mit dem o. a. Programm in Visual Basic bestimmt. Im folgenden Bild ist zu erkennen, wie z. B. für die Ziffer 7 die Werte für Splt1, Splt2 und Splt3 bestimmt werden.





Wenn das 8. „Auto“ die „Schranke an der Einfahrt zum Parkhaus passiert“ hat, wird die grüne LED der dortigen „Ampel“ aus- und die rote eingeschaltet, um anzuzeigen, dass keine „Parkplätze mehr verfügbar“ sind, und die LED-Anzeige auf der Ping-Pong-Platine zeigt 0 an.
Wird bei der  „Ausfahrt eines Autos“ der Bodenkontakt der zugeordneten „Schranke überfahren“, wird dies nach der Simulation des „Öffnens“ und  „Schließens“ der Schranke auch in der Anzeige berücksichtigt. Sie zeigt wieder 1 „freien Parkplatz“ an usw.   
 

Download:  1003Parkhaus.zip


Elektronik-Labor  Labortagebuch  ELO  Mikrocontroller