Mini-TPS mit Ping-Pong-Anzeige
von Hermann Nieder
Neulich sah ich mir auf
den Seiten von Burkhard Kainka die
Beiträge über eine
Tasten-programmierbare Steuerung TPS genauer an, die ich mir einschließlich der
Dateien zur Programmierung der Mikrocontroller
heruntergeladen hatte.
Da ich gerade einen Atmega8 sowie ein Steckboard zur Hand
hatte, baute ich darauf die Schaltung
einer Mini-TPS mit Atmega8 nach
den Angaben in dem oben erwähnten Artikel sowie den Hinweisen im
Programmlisting in Bascom AVR auf.
Meine Version einer TPS ist daher in der praktischen
Ausführung „etwas“ größer geworden als
diejenige der ursprünglichen Version auf
einer kleinen Lochraster-Platine.
Auf dem Bild sind oben zwei Trimmpotenziometer zu sehen, die
zum Anlegen einer einstellbaren Spannung an die beiden Analog-Eingänge ADC4 und
ADC5 dienen.
Rechts daneben befinden sich die 4 Eingänge der TPS, die mit
Vorwiderständen von je 2,2 k gegen
Überlastung geschützt sind.
Darunter sind die 4 Ausgänge der TPS angeordnet, die mit
Widerständen von jeweils 1 k gegen
Überlastung geschützt sind.
Als Anzeige der Ausgangszustände dienen rote
Leuchtdioden (Low Current-Typen), die über ein Widerstandsnetzwerk mit 4
Widerständen von je 4,7 k an Masse liegen.
Zwischen den Leuchtdioden und dem Atmega8 befindet sich der
Reset-Taster der TPS.
Rechts neben dem Mikrocontroller ist ein Adapter angeordnet,
der aus einer kleinen Präzisions-IC-Fassung besteht, an
deren 6 Pins eine 3-polige zweireihige Stiftleiste
angelötet wurde, nachdem ihre Stifte auf einer Seite passend
zurechtgebogen
worden waren. Die Pins des Adapters sind mit den entsprechenden Pins
des
Amtmega8 verbunden, damit dieser über eine 6-adrige flache Leitung
an ein
Programmiergerät (z. B. ein STK 500 o. ä.)
angeschlossen werden kann, um ihn in der Schaltung zu programmieren.
Rechts neben dem oben erwähnten Adapter befinden sich
die Taster S1 und S2, mit denen im Zusammenwirken mit dem Reset-Taster
nach den Angaben von Burkhard Kainka in seinen oben
erwähnten Beiträgen zur TPS die Programmierung
derselben erfolgt. Rechts oben im Bild sind
zwei weitere Leuchtdioden über einen Vorwiderstand von jeweils 2,2
k mit
Masse verbunden. Ihre Anoden sind an die beiden PWM-Ausgänge der
TPS
angeschlossen.
Für die anschauliche
Darstellung von Adressen und Befehlen nach dem Programmieren der
Mini-TPS mit dem Atega8 wurden das Listing in Bascom AVR für
den Mikrocontroller an einigen
Stellen geringfügig ergänzt.
Der Atmega8 verwendet den noch freien Pin PORTB.0 und
sendet bei der Übertragung eines
Adressbytes zuerst eine 1 und dann das Byte, während bei der
Übertragung eines Datenbytes zuerst
eine 2 gesendet wird und darauf das
entsprechende Byte.
Da das vollständige Programmlisting für die Mini-TPS mit
Atmega8 bereits von Burkhard Kainka veröffentlicht wurde, und ich nur
geringfügige Änderungen daran vornahm, ist dies hier ein kurzer Auszug aus der
ergänzten Version:
...
'PortB.0 soll als Sendeleitung (TXD) dienen, um Bytes an den
Atmega8 auf einer Ping-Pong-Platine übertragen zu können
Open
"comb.0:9600,8,n,1" For Output As #1
...
Programmieren:
Adrs = 0
Prog = 0
Do
Adrlo = Adrs And
15
'Adresse
anzeigen
Portd = Adrs Or &HF0
Waitms 300
Portd = 0 Or &HF0
'3 neue Zeilen
Put #1 , 1
Waitms 5
' ein Adressbyte
zur Ping-Pong-Platine übertragen
Put #1 , Adrs
Waitms 200
Readeeprom Eebyte , Adrs
'4 neue Zeilen
Put #1 , 2
Waitms 5
'Ein Datenbyte zur
Ping-Pong-Platine übertragen
Put #1 , Eebyte
Waitms 5
…
Der Atmega8 auf einer Ping-Pong-Platine wartet stets darauf,
dass ihm zwei Bytes
gesendet werden und entscheidet darüber,
ob er gerade ein Adressbyte oder ein Datenbyte
erhalten hat.
Dann stellt er den Inhalt desselben im HEX-Format auf den
oberen 5 Zeilen des LED-Displays der
Ping-Pong-Platine oder auf den unteren 5 Zeilen
dar, wie dies hier mit dem abgebildeten Screenshot veranschaulicht
wird. Im ersten Bild oben sieht man den Mikrocontroller der TPS
und denjenigen auf der Ping-Pong-Platine
gerade in Betrieb.
Der praktische Nutzen der zusätzlichen Verwendung einer
Ping-Pong-Platine in Verbindung mit einer TPS mit einem Atmega8 besteht darin, dass man sich unmittelbar nach
erfolgter Programmierung der TPS nacheinander zur Überprüfung des erstellten
kleinen Programms die Adressbytes und
Datenbytes im HEX-Format auf dem LED-Display anzeigen lassen kann, um
eventuell Programmänderungen vorzunehmen
oder Fehler zu verbessern.
Die Ping-Pong-Platine wird wie die Schaltung mit der
Mini-TPS aus einer Batterie mit drei
Mignonzellen versorgt.
Zusätzlich ist der freie Pin PortD.0 (RXD) zur Übertragung
der Adress- und der Datenbytes der Platine mit dem Pin PortB.0 des
Mikrocontrollers der TPS zu verbinden.
Das Programmlisting ist zu umfangreich, um es hier an dieser
Stelle darzustellen, daher ist hier ein Auszug daraus:
...
Do
Starten:
Inputbin Ausw_byte
Select Case
Ausw_byte
Case Is
> 2 : Goto Starten
Case 1 :
Inputbin Adr_byte
Case 2 :
Inputbin Dat_byte
End Select
'Zeichen für Datenbytes bestimmen
Gosub Hex_dat
Dat = Adr_byte
Gosub
Hex_ad
Loop
Hex_dat:
Dt_h2 =
Dat_byte And 240
Shift Dt_h2
, Right , 4
Dt_h1 =
Dat_byte And 15
Zeichen_u = Dt_h2
Gosub Zeichen_zu
Leds7u = Splt1u
Leds8u = Splt2u
Leds9u = Splt3u
Zeichen_u = Dt_h1
Gosub Zeichen_zu
Leds10u = Splt1u
Leds11u = Splt2u
Leds12u = Splt3u
Return
'Zeichen für Adressbytes bestimmen
Hex_ad:
'2 HEX-Stellen, rechts
' In den ersten sechs Spalten oben „A :“
und unten „D :“ darstellen
Gosub Zeichen_zo
Leds(1) = 30 + 960
Leds(2) = 5 + 576
Leds(3) = 30 + 384
Gosub Zeichen_zo
Leds(4) = 0
+ 0
Leds(5) =
20 + 640
Leds(6) = 0
+ 0
'Zeichen oben und Zeichen unten im HEX-Format darstellen
H2 =
Adr_byte And 240
Shift H2 ,
Right , 4
Zeichen_o = H2
'Punkte für das anzuzeigende Zeichen oben, z. B. „Splt1o“
' sowie das Zeichen unten, z. B. „Leds7u“ in der Spalte
Leds(7)
' High-Nibble in den Spalten 7, 8 und 9
Gosub Zeichen_zo
Leds(7) =
Splt1o + Leds7u
Leds(8) =
Splt2o + Leds8u
Leds(9) =
Splt3o + Leds9u
H1 =
Adr_byte And 15
Zeichen_o = H1
Gosub Zeichen_zo
' Low-Nibble in den Spalten 10,11 und 12
Leds(10) =
Splt1o + Leds10u
Leds(11) =
Splt2o + Leds11u
Leds(12) =
Splt3o + Leds12u
Return
Die Muster für die Zeichen (Ziffern der Anzeige) wurden mit dem Programm Mustergenerator2a entwickelt
und die Werte daraus jeweils in die Programmzeilen Splt1..Splt4
übernommen. Ähnliche Möglichkeiten bietet das
Programm
Supermustergenerator,
das auf den Seiten www.elo-web.de heruntergeladen werden
kann.
Angeregt durch Burkhard Kainkas Ausführungen in seinen
Beiträgen zur TPS habe ich mir inzwischen auch eine TPS-Programmiertabelle
erstellt, die mir ab sofort neben der Tabelle mit den Befehlen als Programmierhilfe für meine selbst
aufgebaute TPS dienen wird. Dies hier ist ein Auszug aus der oben erwähnten
Tabelle
Wird das kleine
Programm eingetippt und mit der Reset-Taste gestartet, leuchten die beiden
rechten (an den Ausgängen PD0 und PD1) der vier Leuchtdioden für 500 ms, dann die
beiden linken (an den Ausgängen PD2 und PD3) für 500 ms, darauf wieder die
beiden rechten für 500 ms usw.
Die Programmiertabelle im Word-Format, die zum Beitrag
heruntergeladen werden kann, enthält selbstverständlich noch keine
Eintragungen.
Download:
TPSm8_5.ZIP
Ping_ad_Dat1.ZIP
TPS-Tabelle01.ZIP