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: 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.
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.
Tja, und aus diesem Grundprogramm können wir dann eine
kleine Y(t)-Schreiber-Software entwickeln.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:
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,
|
|