| Autor |
Nachricht |
Taxi4110
Hält's aus hier
Beiträge: 9 Dabei seit: 31.12.2005
|
Hallo Jungs und Mädels,
heute will ich euch zeigen, wie Ihr mit Hilfe des .NET Frameworks unc C# ein Lcd über den LPT-Port ansteuern könnt. Als erstes brauchen wir natürlich ein paar Sachen:
- Ein LCD mit HD44780 kompatiblen Controller
- Druckerkabel das wir "zerlegen"
- Potentiometer 10k
- Strom
- etwas Geduld und eine ruhige Hand
Ich hab mir für meine Zwecke ein WD-C2704M-1HNN LCD von Pollin Elektronik geholt. Darauf kann man 4x27 Zeichen darstellen und kostet NUR 4,95 € --> www.pollin.de
An dieser Stelle möchte ich anmerken, dass es mir bei diesem Artikel mehr um die Programmierung geht, als auf den Hardware-Umbau! Trotzdem werde ich dies kurz erläutern.
Mit dem Display kommt dementsprechend die Anschlußbelegung:
Ich habe in mehreren Foren gelesen, dass je nachdem welche software ihr benutzt, pins vertauschen sollt bzw. es im 4bit Modus benutzen sollt. Schmarn! Wenn ich schon eine 8Bit Ansteuerung habe! Außerdem bauen wir uns ja hier unser Programm selber. An dieser Stelle nochmal MERCI an die Delphi User im Forum, die mir den Delphi-Source erläutert haben.
Solltet ihr alles richtig angelötet haben, schaut das ganze ungefähr so aus:
Wichtig: auf Pin3 den Schleifer vom Poti, um den Kontrast des Displays einzustellen!
Den Strom hole ich mir vom Netzteil --> 5V. Wenn Ihr alles richtig gemacht habt, dann stecker an den lpt-port und Strom ans Display. Dann solltet Ihr folgendes auf dem LCD sehen:
Die zwei scharzen Balken zeigen, das beide Controller des Displays (ja, es hat zwei!! controller) laufen und Strom haben. Soweit, so gut!
Kommen wir zum wichtigen Teil - Wir programmierung uns eine Applikation zur Ansteuerung des Disp.
So, bevor wir starten haben wir noch ein kleines Problem. Ab WinNT ist es leider nicht mehr so einfach, Daten über den LPT-Port zu schicken. Dafür brauchen wir noch eine .dll, die inpout32.dll. ---> www.logix4u.net/inpout32.htm
Jenachdem welche IDE ihr benutzt, legt ihr als erstes ein neues Projekt an bzw. erstellt euch eine .cs Datei. Wir fangen mit dem einbinden der inpout32.dll an:
Wie ihr seht habe ich die Funktionen in einer extra Klasse abgelegt, der Übersicht halber! Über Output können wir über den lpt senden. Als nächstes folgen die Funktionen, um Einstellungen und Daten in das LCD zu schreiben. Erst noch ein paar Variablen...
So, ihr braucht jetzt nicht verzweifeln und euch fragen was das für Arrays sind. Ist im Prinzip ganz einfach... Jedes Zeichen das Ihr auf dem Display darstellen wollt, bekommt ja eine gewisse Adresse z. B. bei dem Namen "Taxi" soll das T an die erste Stelle, a an die zweite... usw. Dafür brauchen wir das cCharAdr Array. Ihr seht das aber alles noch im kompletten Source. Da ist es noch einfacher zu verstehen!
Da das Display ja zwei Controller hat, ist ein Controller für die obere, der andere für die untere Display Hälfte zuständig. Dafür ist das cCharCtrl da. Mit dem Array prüfen wir, welchen Controller wir ansteuern müssen, um ein Symbol an eine bestimmte Stelle zu schreiben.
Jetzt geht es ans eingemachte: Wir haben hier drei Funktionen WriteDirect, WriteControl und WriteData. In jeder Funktion ist ein switch eingebaut. 0 steht für den ersten Controller, 1 für den zweiten. Außerdem seht ihr, dass ich an bestimmten stellen einen Thread.Sleep eingefügt habe. Das ist wichtig, denn sonst könnte es zu Überschneidungen der Befehle kommen, falls euer LCD nicht so schnell reagieren kann -> Stichwort: Busyflag! Jetzt fragt Ihr euch natürlich, was da für komische Zahlen übermittelt werden... ganz einfach... werfen wir einen Blick in die Dokumentation des LCD:
Schaut kompliziert aus... ist es aber nicht  Ich erläutere euch das an einem Beispiel: Wir wollen das Display einschalten und den Cursor blinken lassen. Schauen wir in der Zeile, wo der Befehl "Display on/off" steht. Wir müssen also BIN 1101 -- AN AN AUS AN an das Display senden. Also schnell umrechnen in Dezimal bin:1101 = dez:13. Heißt, wir übertragen dez:13 an das LCD über den entsprechenden Port und das Disp führt unsere Funktion aus. Jetzt könnt ihr ja selber sehen, was für Daten bei den Befehlen gesendet werden. Natürlich ist jedes Display anders aber das Prinzip ist das selbe!
Endspurt: Es fehlen uns noch zwei wichtige Funktionen. Einmal um das Display zu initialisieren und eine Funktion um einen beliebigen Text an das Display zu übertragen.
Bevor auf das Display geschrieben werden kann, muss es immer zuerst initialisiert werden:
Was genau passiert, könnt ihr einfach aus der Doku weiter oben entnehmen. Wichtige Sachen habe ich nochmal kommentiert. Jedes Display, muss nach einer bestimmten Reihenfolge initialisiert werden. Steht aber auch in der Doku.
So, werfen wir den FormDesigner an:
Ich hab hier vier Textboxen auf meiner Form plaziert. Jede TextBox steht für eine Zeile im Display. Ihr könnt das natürlich auch anders regeln. Der Button "Schreibe auf LCD" ruft folgende Funktion auf:
Ihr lest ja immernoch.. das ist schön  Ich möchte im kurzen den Ablauf erklären, was passiert, wenn der Button "Schreibe auf LCD" gedrückt wird. Als erstes wird jede TextBox für sich eingelesen und mit Leerzeichen aufgefüllt. Dann wird der Variablen allLines Zeile 1 bis 4 zugewiesen. Der Rest erklärt sich eigentlich von selbst. Jedes Zeichen der Variable allLines wird umgewandelt und dann an das LCD geschickt. Fertig!!
Rächtsschraibfeler dürft ihr behalten.
//EDIT: Im Anhang hab ich den kompletten Source mit Beispiel, wie Ihr z.B. Uhrzeit auf dem LCD ausgeben könnt. Moderiert von raziel: Topic aus Open Source Projekte verschoben am Di 03.01.2006 um 14:46
Einloggen, um Attachments anzusehen!
|

|
|
cAs70R
Hält's aus hier
Beiträge: 1 Dabei seit: 26.02.2006
|
hey super echt geniales tutorial! super erklärt und daher leicht verständlich!
ich bin zurzeit nämlich so auf den hardware-programmieren trip und da wir sowas in der schule nicht machen, bin ich froh,
über google das board gefunden zum haben  ...
mfg
castor
|

|
|
zumo
Hält's aus hier
Beiträge: 1 Dabei seit: 11.07.2006
|
Hi, tolles Tutorial. Allerdings hakt es bei mir gerade bei den Prozeduren WriteDirect, WriteCtrl und WriteData.
Kann mir jemand erklären, was bei:
usw. passiert bzw. wo die Daten davon hingeschrieben werden? Scheint ja um die Initialisierung/Adressierung der zuvor über LptAccess.Output(data, cdisp); eingegebenen Daten zu gehen.
Und warum werden die Daten so langsam übertragen/dargestellt? Liegt das an der LPT-DLL? Ich schreibe mit folgender Prozedur testweise das ganze Display voll und dies dauert mehrere Sekunden:
Moderiert von Tino: Code- durch C#-Tags ersetzt
|

|
|
lord_fritte
       
Beiträge: 24 Dabei seit: 24.12.2007
|
bekommt man die inpout32.dll auch für XP? wenn ich das display initalisieren möchte bekomme ich die meldung das ein externes Modul also die inpout32.dll einen Fehler verursacht.
|

|
|
larsss
Hält's aus hier
Beiträge: 1 Dabei seit: 16.06.2008
|
kann der threadersteller oder irgend jemand die bilder neu hochladen?
|

|
|
Skiller-1988
        
Beiträge: 100 Dabei seit: 21.08.2008
Win XP | Debian | Ubuntu C# | PHP | VB.NET
|
Hi finde das Tutorial auch sehr gut wäre daher dankbar wenn die Bilder irgentwie neu hochgeladen werden könnten.
_________________ ~ Wer Rechtschreibfehler findet darf sie behalten ~
|

|
|
Taxi4110
Hält's aus hier
(Threadstarter)
Beiträge: 9 Dabei seit: 31.12.2005
|
Schande über mich. Hab das Tutorial ganz vergessen. Die Bilder gibt es leider nicht mehr 
|

|
|
KainPlan
       
Beiträge: 27 Dabei seit: 09.12.2008
Vista Buisness, Windows 7 C/C++, C#, PHP...
|
Also ich will ja echt niemandem auf die Füße treten aber: www.codeproject.com/KB/cs/cspplcds.aspx *hust*
|

|
|
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
Werbung ausblenden? Dann registriere Dich kostenlos.
Weitere Gründe für eine Registrierung.
|
|
|
|
|