Gast
#186393
Bei der Entwicklung braucht man gelegentlich einen Funktionsgenerator um ein einfaches (niederfrequentes digitales) Signal wie die TTL-Pulse einer Lichtschranke zu simulieren, weil die Hardware nicht immer vefügbar ist oder nicht in den Raum passt (z. B. Schaufelradbagger). Dafür braucht man nicht extra einen mehr oder minder teuren Funktionsgenerator sondern nur einen Stecker für den Parallelport, 8 330 Ohm-Widerstände (+ irgendein Anschluß-Kabel und Lötzinn), also um zwei Euro, und ein kleines Programm zum Ansteuern. Das spart nicht nur Geld sondern auch Platz und Strom. Die Widerstände werden einfach zwischen dem Ausgang und jeden Datenpin gelötet. Damit hat man einen ganz einfachen 3-Bit-DA-Wandler, der kurzschlußfest ist und nur rund 50 Ohm Ausgangswiderstand hat (41 Ohm von den Widerständen, um 10 Ohm vom Parallelport selbst). Die Ansteuerung per Software (Programm parda.c) ist sehr einfach: Nachdem der Parallelport in den Schreib-Modus versetzt wurde, werden einfach Bytes über die Daten-Pins ausgegeben. 0xff (=255) bedeutet 100 % (alles an), 0 bedeutet 0 (aus), 0x0f (=15) bedeutet 50 % usw.. Von parda.c werden einfache Rechteck-Pulse produziert, deren Amplitude mit dem zweiten Parameter vorgegeben wird. Wichtig ist dabei der erste Parameter; wenn der falsch ist, wird irgendwo anders (evtl. Bios oder IDE-Controller oder ...) hingeschrieben, so dass man damit vorsichtig sein sollte. Der Wert 888 ist aber problemlos, wenn man den onboard-Parallelport im Bios nicht verstellt hat. Bei einer PCI-Karte muß man mit lspci -vvv die Basis-Adresse raussuchen (oder die entsprechenden PCI-Funktionen in den Sourcecode reinschreiben). Man kann mit wenig Aufwand auch komplizierteres wie Sinus-Kurven ausgeben und die Frequenz abhängig von der Tages-Zeit oder komplizierterem machen oder über eine Web-Seite steuern und auch mehrere Parallelports gleichzeitig, z. B. über Posix-Threads und Parallelport-PCI-Karten, ansteuern. Hier zwei Bilder von meinem 3-Bit-DA-Wandler, den ich mit großen Lüsterklemmen, die auch Bananenstecker aufnehmen können, verwende; einmal ohne und einmal mit Gehäuse: http://random.linux-site.net/files/unsorted/par/par_0.jpg http://random.linux-site.net/files/unsorted/par/par_1.jpg Die Leitungen/Widerstände in dem metallisierten Gehäuse sind einfach mit Gewebe-Klebeband isoliert. Durch die 1 %-Widerstände sollte das Signal halbwegs genau DA-gewandelt werden (relativ zu den 3 Bit Auflösung entsprechend 12,5 % Genauigkeit), aber weil ich bisher nur einen Kanal mit TTL-Pulse brauchte, habe ich das nicht überprüft. Zudem hängt die Ausgangssignal-Amplitude vom konkreten Parallelport und dem Netzteil ab. D. h. ob der Parallelport in TTL oder CMOS realisiert ist und welche Spannung auf der 5 V-Leitung des ATX-Netzteils ist. Wenn man nur TTL-Pulse braucht, kann man statt nur einen Ausgang pro Parallelport natürlich auch 8 verwenden und wenn man die Kontroll-Pins hinzu nimmt, kommt man auf 12 Ausgänge pro Parallelport. Die andere Richtung, also das Einlesen (Programm parad.c) ist einfacher, weil dort keine Spannungsteilung erfolgt. Dadurch hat man aber auch nur 1-Bit-AD-Wandlung, also eigentlich nur einen digitalen Eingang. Nutzt man jeden Eingang, also auch die Status-Pins, und die auch separat, so kommt man auf 13 Eingänge pro Parallelport. Die angehängten kleinen Beispiel-Programme (für PC + Linux) können leicht auf andere Plattformen portiert werden.