Zurück zum Menü 5
5.2.9 Y(t)-Schreiber mit TLC549 am LPT

Erstellt ab 30.04.2012



Viele Leser wollen oder können sich kein Oszilloskop kaufen und möchten aber trotzdem die Möglichkeit haben, analoge Signalverläufe auf dem Bildschirm sichtbar zu machen.

Daher habe ich mir überlegt, einmal solch ein System zu entwickeln, dass mit nur einem einzigen IC auskommt und ganz einfach auf einer Lochrasterkarte aufgebaut werden kann.

Zunächst habe ich mir einen Bausatz für ein "LPT-Klemmbrett" besorgt, den ich zusammengelötet habe:


Diesen Bausatz gibt es hier:

http://www.pollin.de/shop/dt/NDQ5OT...satz_SUB_D_Anschlussplatine.html

Die Füßchen, die an dieser Platine zu sehen sind, habe ich hier her:

http://www.voelkner.de/products/204...mit-Spreizbefestigung-Fsr-1.html

Jetzt muss man sein Windows erstmal auf die Verwendung eines LPT vorbereiten.

Dazu kann man auf dem strippenstrolch.de die Datei Userport 2.0 herunterladen:


Userport 2.0 ZIP


Der Inhalt ist dieser:




Jetzt geht man wie folgt vor:

Die Datei UserPort.sys muss in C:/windows/system32/drivers/ kopiert werden. Nun kann man daran gehen und den Treiber starten. Unter Windows 7 gibt es dabei ein kleine Hürde zu meistern:  Man muss die Datei userport.exe als Administrator starten.

Dazu klickt man mit der rechten Maustaste auf die Datei:




Ganz oben im Po-Up-Menü ist dann die Auswahl "Als Administrator ausführen" zu sehen. Daraufhin erscheint ein kleines Fensterchen, mit dem man den Treiber für den LPT starten kann:




Hier entfernt man alle vorgegebenen Einträge und trägt die Adresse der Druckerschnittstelle "LPT 1" ein. Diese Adresse findet man in der Systemsteuerung und dort im Gerätemanager.

Wenn man den Adressbereich eingegeben hat, klickt man auf "START" und der Treiber ist dauerhaft gestartet.


Jetzt kann man schon das Profan installieren.

Ich biete auf dem strippenstrolch.de eine Freeware dazu an:
  XProfan 8.0a

Wenn Du bis hierher alles richtig gemacht hast, kannst Du jetzt bereits mit einem einfachen Befehl den LPT ansprechen:



declare zaehler% 'Variable deklarieren

zaehler%=0      'Auf Null setzten


Whileloop 0,255 'Schleife von 0 bis 255 hochzählen

        outpb 888,zaehler% 'Zählerwert am LPT1 ausgeben
        inc zaehler% 'Zählerwert um 1 erhöhen

        whileloop 0,10000 'Zeitschleife
        endwhile 'Zeitschleife


endwhile 'Ende der Zählschleife
 
Der Wert "888" im Befehl "outpb" ist der dezimale Wert der LPT-Adresse.

Du kannst die Ausgabe mit diesem Schaltplan visualisieren:



Es gibt einen Artikel, der sich mit dem IC TLC549 befasst:   

Zum Artikel 


Hieraus möchte ich dann am LPT den Y-t-Schreiber entwickeln.

Jetzt könnte man ja sagen: "Ach, das mit dem Ports habe ich schon 1000 mal gesehen." Aber wir benötigen ja noch eine Eingabe, um die Bits aus dem TLC549 lesen zu können.

Dazu muss man wissen, dass die Basisadresse (hier 888) plus eins (889) als Eingabeport dient.

Wir stecken also einmal folgende kleine Schaltung:




Jetzt können wir mit dem folgenden Miniprogramm schon die Eingangsports visualisieren:


declare test%,test1%

while test%=0

test1%=@inpb(889)

print test1%

endwhile


Das war jetzt vielleicht alles ein wenig verwirrend, deshalb gibt  es hier zwei Tabellen:

Basisadresse (0378) Ausgänge, Befehl "outpb Adresse, Wert" ==>

Pin9 ==> D7
Pin8 ==> D6
Pin7 ==> D5
Pin6 ==> D4
Pin5 ==> D3
Pin4 ==> D2
Pin3 ==> D1
Pin2 ==> D0

Basisadresse plus 1 (0379) Eingänge, Befehl "Variable=@inpb(Basisadresse plus 1) ==>

Pin 11 ==> negiert
Pin 10 ==> 1 zu 1
Pin 12 ==> 1 zu 1
Pin 13 ==> 1 zu 1
Pin 15 ==> 1 zu 1

 Wir haben uns jetzt also 8 Ausgänge und 5 Eingänge gebastelt.

Schließlich berauchen wir den TLC549 nur noch richtig anzuklemmen und wir können unser erstes Testprogramm laufen lassen:


Wie Du hier siehst, wird der Pin 4 als Versorugungsspannung benutzt, denn der TLC549 ist ein CMOS-Baustein und benötigt sehr wenig Strom. Also können wir hin aus einem Port des LPT speisen. Natürlich dürfen wir im Programm nicht vergessen, diesen Port auch auf logisch "1" zu schalten.

Zur besseren Übersicht hier noch einmal das Pinout des TLC549:



Nachdem wir alles richtig "verlabelt" haben, können wir ein erstes Testprogramm in den Profan-Editor laden:


declare test%,test1%,ergebnis% 'Variablen deklarieren

outpb 888,4 'Speisespannung für den TLC549 einschalten


while test%=0 'Beginn Endlosschleife
outpb 888,5 'CS auf 1
outpb 888,4 'CS auf 0


ergebnis%=0 'Ergebnisvariable löschen

whileloop 0,7 'Zählschleife für 8 Durchgänge

ergebnis% = ergebnis%*2 'Schiebe die Bits um 1 nach links

outpb 888,6 'Clock auf 1

test1%=@inpB(889) 'Lese ein Bit aus dem TLC549

if @equ(test1%,126) then 'Wenn das Bit logisch 1 ist
ergebnis% = @add(ergebnis%,1) 'dann addiere eine 1 an der rechten Position
else ' sonst
ergebnis%=@add(ergebnis%,0) 'addiere eine 0 an der rechten Position
endif 'If-Bedingung Ende

outpb 888,4 'Clock auf Null

endwhile 'Zählschleife Ende


print ergebnis% 'Schreibe das Ergebnis-Byte auf den Bildschirm

endwhile ' Endlosschleife Ende


Diesem Programm liegt folgendes Timing zugrunde:


Tja, und aus diesem Grundprogramm können wir dann eine kleine Y(t)-Schreiber-Software entwickeln.

Bei meinem ersten Test hat sich ergeben, dass starke Störungen im Analog-Signal vorhanden sind.

Deshalb habe ich noch einen Glättungskondensator spendiert:



Jetzt habe ich ein einfache Programm geschrieben, das mit eine einfache Punktfolge auf den Bildschirm malt:


declare test%,test1%,ergebnis%,x% 'Variablen deklarieren

outpb 888,4 'Speisespannung für den TLC549 einschalten

baue_bildschirm_auf

while test%=0 'Beginn Endlosschleife

byte_einlesen

SetPixel x%,255-ergebnis%,@rgb(0,0,0)

x%=x%+1
if @equ(x%,600) then
cls
x%=0
endif

endwhile ' Endlosschleife Ende


proc baue_bildschirm_auf

cls

endproc


proc byte_einlesen


outpb 888,5 'CS auf 1
outpb 888,4 'CS auf 0


ergebnis%=0 'Ergebnisvariable löschen

whileloop 0,7 'Zählschleife für 8 Durchgänge

ergebnis% = ergebnis%*2 'Schiebe die Bits um 1 nach links

outpb 888,6 'Clock auf 1

test1%=@inpB(889) 'Lese ein Bit aus dem TLC549

if @equ(test1%,126) then 'Wenn das Bit logisch 1 ist
ergebnis% = @add(ergebnis%,1) 'dann addiere eine 1 an der rechten Position
endif 'If-Bedingung Ende

outpb 888,4 'Clock auf Null

endwhile 'Zählschleife Ende



endproc


Schließlich erweiterte ich das Programm noch ein wenig, so dass man es schon ganz gut als Übersicht benutzen kann:

Download Y-t-Versuch1.exe

Download Y-t-Versuch1.prf

Das laufende Programm sieht bislang so aus:



Hierbei stellte ich fest, dass es doch besser ist, den Chip mit einer externen Spannungsquelle zu versorgen. Die Spannungsmessungen sind dann sehr genau. Hier also das geänderte Schaltbild:



Jetzt könnte man das Progamm noch mit ein paar Einstellungen verfeinern.


Ich wünsche frohes Programmieren unter Profan,





Nach oben            Zurück zum Menü 5