-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: [Probleme mit] HD44780-LCD ansteuern

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    01.06.2008
    Beiträge
    17

    [Probleme mit] HD44780-LCD ansteuern

    Anzeige

    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:
    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
    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.

    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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    ...und am Kontrast-Eingang liegt auch eine regelbare Spannung?

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    01.06.2008
    Beiträge
    17
    Ja, das funktioniert. Hatte den Kontrast erst zu niedrig, habe ihn jetzt aber so eingestellt, das man gut sehen kann

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    O.k., dann ist es das schon mal nicht.

    Zu ____lcde hab ich einen interessanten Link gefunden:

    http://www.roboternetz.de/phpBB2/exp...ode=txt&t=6676 - vielleicht liegt dort ja des Lösels Rätsung

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    01.06.2008
    Beiträge
    17
    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.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    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 !

    Zitat Zitat von lcd4e2.lib
    ;Rs = PortB.0
    ;RW = PortB.1 we dont use the R/W option of the LCD in this version so connect to ground
    ; E = PortB.2
    ;E2 = PortB.3 for lcd with 2 chips
    ;Db4 = PortB.4 the data bits must be in a nibble to save code
    ;Db5 = PortB.5
    ;Db6 = PortB.6
    ;Db7 = PortB.7
    Beispiele dazu sind im Bascom-Verzeichnis unter Samples.
    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.

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.01.2005
    Alter
    45
    Beiträge
    294
    Zitat Zitat von linux_80
    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.
    Das Gegenteil von "gut" ist "gut gemeint"!

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    01.06.2008
    Beiträge
    17
    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?)

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    29.01.2005
    Alter
    45
    Beiträge
    294
    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!

    Code:
    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%
    Gruß Bernd
    Das Gegenteil von "gut" ist "gut gemeint"!

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    01.06.2008
    Beiträge
    17
    Handelt es sich dabei jetzt um Quellcode zur Standardlibrary, oder ist das für eine Lib, die du nur noch nicht hochgeladen hast?

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •