Spannungsmessung mit der Ping-Pong-Platine
von Hermann Nieder
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