|
LPTKing
aus Berchtesgaden offline
OC Newbie 19 Jahre dabei !
Intel Pentium IV 2000 MHz @ 2530 MHz 55°C mit 3 Volt
|
Hallo, will ein LCD Display von einem AVR Microcontroller ansteuern. Ehe ich das machen wollte, wollte ich das Ding auch mal vom PC aus via LPT- Port ansteuern. Da ich da bereits I2C und SPI emuliert hab, dachte ich das kann ja nicht so schwer sein, ein paar Bytes rüber zu schieben... Jedenfalls, nachdem ich die Initialisierungsroutine durchfahren habe, genau so wie es in diesem windigen Conrad Datenblatt beschrieben ist, sieht man gar nichts auf dem Display. Hier die gesendeten Initialisierungsbytes (RS jeweils 0 RW jeweils 0) (D7....D0) 1.: 00110000 Funktionset 2.: 00110000 Funktionset 3.: 00110000 Funktionset 4.: 00111000 Funktionset 5.: 00111100 Display on 6.: 00000001 Display clear 7.: 00000110 Entry mode set Der 5te Befehl wundert mich. Da hier im Datenblatt im HD44780 Befehlssatz ein anderes Kommando für Display On/off steht... Aber diese Bytefolge steht für die Initialisierung im Conrad Datenblatt, und mit dem anderen Byte geschieht auch nichts anderes.... Timing wurde wohlwollend berücksichtigt, sprich wenn es heißt länger als 4.1 ms warten, habe ich ein Delay von 5ms ins Programm eingebaut. Zu guter letzt habe ich die Byterate so weit runter gedreht, daß man es mit dem Auge verifizieren kann, was da am Modul anliegt... ohne Erfolg... Meine Vermutung: entweder stimmt was mit dem Timing nicht, oder das Ding ist schon immer kaputt gewesen... Aja: Das Enablepin wird von mir immer von High nach Null und nach 1ms wieder nach High gelegt, um dem Modul die gültigkeit der Daten zu signalisieren... Kann sich jemand vorstellen warum es nicht funzt? Werd mir jetz erst mal ein zweites Modul kaufen, und dann mal den 4Bit Modus probieren... abschließend laß ich dann noch den AVR drauf los, vielleicht kriegt der es ja hin... Gruß LPTKing (Geändert von LPTKing um 10:15 am Feb. 24, 2005)
Bruzel Schmor!
|
Beiträge gesamt: 16 | Durchschnitt: 0 Postings pro Tag Registrierung: Feb. 2005 | Dabei seit: 7231 Tagen | Erstellt: 10:13 am 24. Feb. 2005
|
|
|
LPTKing
aus Berchtesgaden offline
OC Newbie 19 Jahre dabei !
Intel Pentium IV 2000 MHz @ 2530 MHz 55°C mit 3 Volt
|
Ich denke Verkabelungsfehler ausschließen zu können, nobody is perfect - ok, aber : Habe da einen alten 486er mit nem Dos neben meinem Laptop stehen (wichtig da damit sichergestellt sein sollte das da nicht Multitasking in die Suppe spucken kann). Auf der alten Kiste hab ich ein schon oftmals eingesetztes Parallelporttestprogramm drauf. Von da aus kann ich jedes Bit am Parallelport einlesen und setzen... Damit und einem Multimeter kann ich verifizieren, daß wenn ich z.B. D0 (PC Seite) setze, auch Pin 7 Am Modul den Zustand ändert... damit habe ich alle Pins verifiziert, weshalb ich einen Verdrahtungsfehler meinerseits ausschließen will. Das Programm sieht in den prozeduralen Aufrufen folgendermaßen aus: {Start der Initialisierung für 8Bit Interface} Kommando($30); Enabledata ; delay(5); Kommando($30); Enabledata; delay(1); Kommando($30); Enabledata; {Display 8bit Konfiguration abgeschlossen} Kommando($38); Enabledata; Kommando($3d); Enabledata; Kommando($01); Enabledata; Kommando($07); Enabledata; Zeichen($12); Enabledata; Hierin wird in Kommando das RS Bit auf Null gezogen und dann die als Argument übergebene hex Zahl auf den Port gegeben. Zeichen ist im Prinzip das gleiche wie Kommando nur daß hier eben RS high gemacht wird. Enabledata generiert schließlich ein toggeln des Enable Bits (HLH), mit jeweils einer Milisekunde zwischen den Übergängen. Das heißt, das Display sieht sowohl einen HL als auch einen LH Übergang mit gültigen Daten. Ok... Ich werd nun meine LED Box anschließen, und mir wirklich zusätzlich nochmal jedes Byte ansehen. Ist es wirklich normal, daß ich nichtmal ein blinzeln der Anzeige sehe, wenn ich Sie ein/Ausschalte? denn egal was ich bisher gemacht habe, ich sehe da gar nichts.... die Anzeige is total tot... ich teste weiter...
Bruzel Schmor!
|
Beiträge gesamt: 16 | Durchschnitt: 0 Postings pro Tag Registrierung: Feb. 2005 | Dabei seit: 7231 Tagen | Erstellt: 13:38 am 24. Feb. 2005
|
|
LPTKing
aus Berchtesgaden offline
OC Newbie 19 Jahre dabei !
Intel Pentium IV 2000 MHz @ 2530 MHz 55°C mit 3 Volt
|
Das Display lebt!!!! Sieeg! ... ... naja, nicht zu früh freuen, hab grad festgestellt, wieso das Display keinen funz macht... hab das Poti für den Kontrast auf 50% gestellt (nach guter Elektronik Sitte) aber das war wohl zu wenig! Nun hab ichs höher gestellt, (ca 90%, ), nun seh ich zumindest die einzelnen Buchstabenfelder wenn ichs einschalte, wenn ichs dann von meinem Programm initialisieren lasse, dann dann rührt sich schon mal was... immerhin.... Mal sehen, ob ich dem Drecksteil nicht doch noch ein paar Worte entlocken kann... Für die Zukunft mal ne andere Frage, gibt es keine vergleichbaren Module mit I2C Schnittstelle (sorry daß ich das bereits neu gepostet hab, nur der jetzige Startpunkt lies sich nicht umändern...) Gruß Tyson
Bruzel Schmor!
|
Beiträge gesamt: 16 | Durchschnitt: 0 Postings pro Tag Registrierung: Feb. 2005 | Dabei seit: 7231 Tagen | Erstellt: 13:48 am 24. Feb. 2005
|
|
|
|
|
|
|
MinniMan
offline
OC Newbie 18 Jahre dabei !
|
Hallo bin hier gerade in der Arbeit und versuche auch schon seit ein paar Tagen ein Anag Vision AV2020 Display anzusteuern. bzw. zuersteinmal initialisieren damit es 2 Zeilen bekommt. Aber ich weiß einfach nicht weiter. Habe mit ein paar Beispielprogrammen (welche allerdings auch nicht funktionieren) und dem Datenblatt mein eigenes Programm zusammengebastelt.
Code#include <dos.h> #include <stdio.h> //#include <stdlib.h> //#include <string.h> #include "TCPIPAPI.H"//für Warteschleidr API_SLEEP static union REGS rein;//für Softwareinterrupts werden Datensätze benötigt, static union REGS raus;//die später die Register des Prozessors beeinflussen //die beiden Datensätze rein und raus werden //hier definiert #define TCPIPVECT0xAC //definiert einen Softwareinterrupt #define Ausgang0x600//0X600 ist die Hardwareadresse der Ausgabekanäle void warte(int ms);//kündigt ein Unterprogramm "Warteschleife" an int main() { // Damit man folgendes Programm nachvollziehen kann, muss man die Wertigkeit // der einzelen Bits am LCD-Display kennen. Das LCD-Display soll im Beispiel im // 4-Bit-Daten-Modus betrieben werden. // Die Bedeutung der einzelnen Bits im Betriebsartenmodus können in der Unterlage // "Hardwarenahme Schnittstellenprogrammierung" (s.Seiten 25-27) nachgelesen werden //Ausgänge initialisieren // Damit wird über den PCS6(Programable Chip Select) rein.h.ah=0x83; // der "Ein- Ausgabe-Baustein" freischaltet rein.x.dx=0x40; // int86(0xA2,&rein,&raus); warte(15); // outportb(0x600, 0x31); // warte(5); outportb(0x600, 0x3); // warte(5); // outportb(0x600, 0x31); warte(5); outportb(0x600, 0x3); // warte(5); // outportb(0x600, 0x31); warte(5); outportb(0x600, 0x3); warte(5); outportb(0x600, 0x21); warte(5); outportb(0x600, 0x20); warte(5); outportb(0x600, 0x21); warte(5); outportb(0x600, 0x20); warte(5); outportb(0x600, 0x81); warte(5); outportb(0x600, 0x80); warte(5); outportb(0x600, 0x01); warte(5); outportb(0x600, 0x00); warte(5); outportb(0x600, 0xC1); warte(5); outportb(0x600, 0xC0); warte(5); outportb(0x600, 0x01); warte(5); outportb(0x600, 0x00); warte(5); outportb(0x600, 0x11); warte(5); outportb(0x600, 0x10); warte(5); outportb(0x600, 0x01); warte(5); outportb(0x600, 0x00); warte(5); outportb(0x600, 0x41); warte(5); outportb(0x600, 0x40); warte(5); outportb(0x600, 0x45); warte(5); outportb(0x600, 0x44); warte(5); outportb(0x600, 0x15); warte(5); outportb(0x600, 0x14); return 0; } //Unterprogramm(e) //Programm für Wartezeit void warte(int ms) //Warteschleifenprogramm ist ein Softwareinterrupt //und wird hier eigentlich nur initialisiert { rein.h.ah = API_SLEEP; rein.x.bx = ms;//Zeitangabe in ms int86(TCPIPVECT,&rein,&raus); } | ist sehr viel falsch oder warum geht nichts?
|
Beiträge gesamt: 1 | Durchschnitt: 0 Postings pro Tag Registrierung: März 2006 | Dabei seit: 6855 Tagen | Erstellt: 8:37 am 7. März 2006
|
|
|
|