...und am Kontrast-Eingang liegt auch eine regelbare Spannung?
Hallo zusammen!
Ich bin ein Einsteiger im Gebiet MCs (AVR).
Mein aktuelles Projekt beinhaltet, ein LCD (HD 44780-kompatibel) mit einem ATmega32 anzusteuern.
Ich verwende dazu ein WINTEK WD-C2704M-1HNN mit 4*27 Zeichen im 4-bit Modus.
Meine Verschaltung liegt dabei an PortC.
Die Pinbelegung ist wiefolgt:
Db4 = Portc.4
Db5 = Portc.5
Db6 = Portc.6
Db7 = Portc.7
E = Portc.1
E2 = Portc.0
Rs = Portc.3
DB0-DB3 liegen auf Ground
RW liegt ursprünglich auf PortC.2, habe ich aber testhalber derzeit auf Ground, es ergibt sich aber derzeit kein beobachtbarer Unterschied.
Ich habe im Programm das RN-Wissen genutzt. Der Code ist folgender:Was ich jetzt beobachte ist, dass das LCD alle Felder der jeweils Controllerbezogenen oberen Zeile (d.h. Zeile 1 und 3) komplett dunkel einfärbt und die jeweils untere Zeile (2 und 4) komplett hell.Code:'$lib "lcd4e2.lbx" $regfile = "m32def.dat" $crystal = 1000000 Config Lcd = 40 * 4 Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.1 , E2 = Portc.0 , Rs = Portc.3 Dim ___lcde As Byte ___lcde = 0 'Initlcd Cls Do Upperline Locate 1 , 3 Lcd "Hallo Welt" Waitms 1000 Locate 1 , 3 Lcd "Hello World" Waitms 1000 Loop End
Dies scheint der Zustand des LCDs zu sein, wenn schlichtweg nur Spannung anliegt, weil das LCD während des Programmierens und auch sonst immer das anzeigt.
Der ATmega32 an sich tut korrekt, denn ich habe an ihm schon andere Sachen (LED blinkend,..) vor kurzem ausgeführt. D.h. er wird auch korrekt programmiert und tut.
Was mache ich falsch?
Gruß
E. Hakennase
...und am Kontrast-Eingang liegt auch eine regelbare Spannung?
Ja, das funktioniert. Hatte den Kontrast erst zu niedrig, habe ihn jetzt aber so eingestellt, das man gut sehen kann
O.k., dann ist es das schon mal nicht.
Zu ____lcde hab ich einen interessanten Link gefunden:
https://www.roboternetz.de/phpBB2/ex...ode=txt&t=6676 - vielleicht liegt dort ja des Lösels Rätsung
Ich meine nach Tests nein. Denn einen wirklichen Unterschied kann ich nicht ausmachen.
Ich habe derzeit zwei Punkte, an denen ich eine Möglichkeit sehe, dass es hakt.
Die erste (und meine stärkste) ist, dass die Zuweisung von den Pins nicht richtig klappt. In der Hilfe zur lcd4e2.lbx steht, dass ich das nur an PortB mit Standardbelegung betreiben könnte. Für alles andere müsste ich die Source der lib ändern, was ich mit der Demoversion nicht kann.
Andererseits gibts diese config lcdpin = Port -Lösung, in der ich laut Hilfe alles festlegen kann.
Irgendwas passt nicht.
Ich habe jetzt mal mein Display von PortC nach PortB in Standardbelegung umgesteckt, leider noch ohne Erfolg.
Das nervige dabei ist aber, dass mein ISP-Adapter aber an MISO/MOSI hängt, der ja auf PortB Platz nimmt. Das ständige rumgestecke auf dem Steckbrett ist nervig, geht aber noch. Später auf der Platine nimmer.
Das zweite ist, dass ich den MC derzeit mit 1 MHz betreibe. In den Demos sond immer 4 MHz angegeben. Von meinem Verständnis von den Displays dürfte dieser Geschwindigkeitsunterschied aber eigentlich nichts ausmachen, weil ich ja im Zweifelsfall immer ein Busy-flag oder ein wait habe.
Hallo,
wenn man die "lcd4e2.lbx" verwendet ist es egal was man bei Config angibt, denn in der Lib sind die Ports fest auf PortB programmiert !
Beispiele dazu sind im Bascom-Verzeichnis unter Samples.Zitat von lcd4e2.lib
Mit ___lcde = 0 adressiert man den oberen Teil, mit ___lcde = 1 den unteren Teil des LCDs.
Mit 1MHz sollte es eigentlich schon gehen, hab das selber aber noch ned probiert. Bascom wertet das Busy-flag des LCD nicht aus, sondern wartet einfach eine gewisse Zeit.
Die Taktfrequenz ist völlig egal solange sie richtig angegeben wird. Der Compiler baut eine Verzögerung entsprechend der Taktfrequenz in den Code ein.Zitat von linux_80
Das Gegenteil von "gut" ist "gut gemeint"!
Ok. Das dachte ich mir fast.
Habe ich mit dem Bascom in der Freeware-Version die Möglichkeit, das ganze auf den PortC umzumodeln (andere Library?)
Zu Testzwecken würde mir notfalls auch erstmal ein Controller reichen. (Aber was mache ich dann später?)
Hi,
ich habe es eine Lib gemacht.
Dazu habe ich hier im Forum, oder im Mikrocontroller.net Forum folgendes gefunden und auch so erfolgreich eingesetzt.
Leider weis ich nicht mehr wer der Autor war.
Also falls der Autor ein Problem damit hat das ich es hier darstelle, bitte melden!
Gruß BerndCode:Also so wie's ich jetzt gemacht hab, ist die Verdrahtung eigentlich egal (im Gegensatz zur LBX!!). Man verdrahtet das Ganze wie ein "normales" LCD, nur dass man eben zwei Controllerleitungen hat. Dementsprechend bei "Config Lcdpin" auch den zweiten Controller beachten !! Wichtig ist, dass man, bevor das LCD konfiguriert wird eine Variable "___lcdno" als Bit definiert! (mit der alias-Funktion kann man dann noch einen schöneren Namen vergeben :-) ) Mit dieser Variablen steuert man dann das Display. Bei ___lcdno = 0 wird der Controller für die obere Hälfte ausgewählt, bei ___lcdno = 1 der Controller für die untere Hälfte. Beispiel: . . . Dim ___lcdno as Bit Config Lcdpin = Pin, E = Portb.0 , E2 = Portb.1 , Rs = Portb.2 ,usw... Config Lcd = 40*4 Initlcd Cursor Off . . . das war's dann eigentlich auch schon :-) Wenn man dann was auf's LCD schreiben will, zuerst den Controller auswählen und dann ganz "normal" schreiben... Beispiel: ___lcdno = 0 Locate 1 , 1 Lcd "dein Text" 'Text in Zeile 1 Locate 2 , 1 Lcd "Text" 'Text in Zeile 2 ___lcdno = 1 Locate 1 , 1 Lcd "dein Text" 'Text in Zeile 3 ... ------------------- es gibt jetz noch ne Ergänzung bzw. änderung zu meiner Beschreibung!! Es muss so lauten: ... Config Lcd 40*4 ___lcdno = 0 'ober Displayhälfte initialisieren Initlcd Cursor Off ___lcdno = 1 'untere Displayhälfte initialisieren Initlcd Cursor Off ... so funktioniert's 100%
Das Gegenteil von "gut" ist "gut gemeint"!
Handelt es sich dabei jetzt um Quellcode zur Standardlibrary, oder ist das für eine Lib, die du nur noch nicht hochgeladen hast?
Lesezeichen