Mini-TPS mit Ping-Pong-Anzeige          

von Hermann Nieder                    
Elektronik-Labor  Projekte   TPS

 
 
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
 
 


Elektronik-Labor  Projekte   TPS