- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 7 von 7

Thema: LCD 40*4 zeigt nur in 3. Zeile ein Block

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162

    Frage LCD 40*4 zeigt nur in 3. Zeile ein Block

    Anzeige

    Praxistest und DIY Projekte
    Hallo Leute!

    Hatte an meinem atmega8 ein 16*2 lcd hängen und bin nun seit heute auf eine 40*4 lcd umgestiegen. Das LCD ist ein Displaytech 404B und ist im 4-Bit-Modus angeschlossen.

    Mit der nachfolgenden Programmierung blinkt nur in Zeile 3 an der 16. Stelle ein Block mit optisch Cursor on.

    Irgendwas sinnvolles anzeigen geht gar nicht. Liegt es an der Programmierung oder am Aufbau? Wenn ihr bitte mal über den Code schauen könntet, dass ich den evetuell ausschließen könnte.

    Danke im voraus!

    Code:
    ' =================== CONTROLLER-KONFIG ===================
    $regfile = "m8def.dat"
    $framesize = 24
    $swstack = 8
    $hwstack = 32
    $crystal = 16000000                                         ' 16 MHz
    
    ' =================== PORT-KONFIG ===================
    Config Portb.0 = Output                                     ' LCD: DB7
    Config Portb.1 = Output                                     ' LCD: DB6
    Config Portb.2 = Output                                     ' LCD: DB5
    Config Portb.3 = Output                                     ' LCD: DB4
    Config Portb.4 = Output                                     ' LCD: E
    Config Portb.5 = Output                                     ' LCD: E2
    Config Portd.5 = Output                                     ' LCD: RS
    Config Portd.6 = Output                                     ' LED2
    
    ' =================== LCD ===================
    $lib "lcd4e2_rb.lib"                                           ' Einbindung der LCD-Bibliothek für ein 2-Prozessor-Display (_rb = Kopie der Originalen mit angepassten Pins)
    Dim ___lcde As Byte                                         ' Systemvariable der LCD-Bibliothek (wichtig, bloß nicht ändern)
    Config Lcd = 40 * 4
    Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , E2 = Portb.5 Rs = Portd.5
    ' Config Lcdbus = 4
    Cursor Off
    
    ' =================== STARTUP-ROUTINE ===================
    Gosub Lcdinit                                               ' LCD initialisieren
    
    ' =================== HAUPTSCHLEIFE ===================
    Do
     ' NIX
    Loop
    
    ' =================== LCDINIT ===================
    Lcdinit:
     Cls
     ___lcde = 0
     Locate 1 , 1
     Lcd "Zeile 1"
     Locate 2 , 1
     Lcd "Zeile 2"
    
     ___lcde = 1
     Locate 3 , 1
     Lcd "Zeile 3"
     Locate 4 , 1
     Lcd "Zeile 4"
     Wait 2                                                     ' 2 Sekunden warten
    Return
    
    End
    Geändert von CapSob (11.04.2011 um 16:49 Uhr)

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.07.2009
    Beiträge
    405
    Schau mal HIER
    Da steht im Beispielprogramm nichts von:
    Config Lcdbus = 4
    Hast Du Dir die Bibliothek
    $lib "Lcd4e2.lbx"
    runtergeladen und in Bascom eingebunden (bzw. ist sie im richtigem Verzeichnis?)?

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    Ich habe jetzt testweiße die Zeile mit "Config Lcdbus = 4" auskommentiert.
    Und: $lib "lcd4e2_rb.lib" genommen. lib ist im richtigen ordner und die ports in der lib sind nun wie die im Programmcode (Kopie von der Originalen, deswegen "_rb").

    Fazit: Selber Fehler wie zuvor...

    Könnte es Programm-technisch noch etwas sein?

    Edit: Habe gerade mal versucht, die "lcd4e2_rb.lib" zu kompilieren.. Kam Fehlermeldung mit Errors found... wie müsste den die "lcd4e2.lib" aussehen, dass ich mein LCD mit der obigen Pin-Konfig betreiben kann?
    Geändert von CapSob (11.04.2011 um 16:55 Uhr)

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    54
    Beiträge
    1.258
    Hallo CapSob,

    Config Lcdbus = 4 ist natürlich Quatsch bei einem AVR ohne Speicherbus.
    Ein Lib wird auch nicht benötigt.
    Da das Display aber eigentlich aus 2 parallelen "Displays" besteht, muß jedes für sich initialisiert werden:
    ___lcdno = 0
    Initlcd
    ___lcdno = 1
    Initlcd

    Gruß, Michael

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    Hab jetzt nachfolgenden Code (auch aus einem Beispiel im Bezug auf Michaels Post).

    Beim Code komplilieren komt nun folgende Fehlermeldung:

    Code:
    Error 31 / Line 43 / Invalid Datatype [[0011] 0]
    Error 93 / Line 43 / Variable not dimensioned [0 -> 0]
    Error 31 / Line 43 / Invalid Datatype [[0011] 0]
    Error 93 / Line 43 / Variable not dimensioned [0 -> 0]
    -> Line 43 wäre "End"... kP ?!?

    Code:
    $regfile = "m8def.dat"
    $framesize = 24
    $swstack = 8
    $hwstack = 32
    $crystal = 16000000                                         ' 16 MHz
    
    Config Portb.0 = Output                                     ' LCD: DB7
    Config Portb.1 = Output                                     ' LCD: DB6
    Config Portb.2 = Output                                     ' LCD: DB5
    Config Portb.3 = Output                                     ' LCD: DB4
    Config Portb.4 = Output                                     ' LCD: E
    Config Portb.5 = Output                                     ' LCD: E2
    Config Portd.5 = Output                                     ' LCD: RS
    
    Config Lcd = 40 * 4
    Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , E2 = Portb.5 , Rs = Portd.5
    
    Dim ___lcdno As Byte
    
    ___lcdno = 0
    Initlcd
    Cursor Off
    Cls
    ___lcdno = 1
    Initlcd
    Cursor Off
    Cls
    
    ___lcdno = 0
    Cls
    Locate 1 , 1
    Lcd "Zeile 1"
    Locate 2 , 1
    Lcd "Zeile 2"
    
    ___lcdno = 1
    Cls
    Locate 1 , 1
    Lcd "Zeile 3"
    Locate 2 , 1
    Lcd "Zeile 4"
    
    End
    Geändert von CapSob (11.04.2011 um 20:45 Uhr) Grund: "Komma vergessen"

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Mach mal ein Komma vor
    Rs = PortD.5

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.06.2004
    Beiträge
    162
    Zitat Zitat von for_ro Beitrag anzeigen
    Mach mal ein Komma vor
    Rs = PortD.5
    lool.. Danke. Das wars.

    Wie heißts so schön: Manchmal sieht man vor lauter Bäumen den Wald nicht...

Ähnliche Themen

  1. Multipurpose Block (Handmade)
    Von Brantiko im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 24
    Letzter Beitrag: 06.09.2010, 15:30
  2. Antworten: 8
    Letzter Beitrag: 19.06.2009, 22:30
  3. Ladeschaltung für 9V-Block Akkus
    Von Michael 123 im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 29.10.2007, 18:19
  4. 2x 16 Zeichen-LCD zeigt nur eine Zeile an
    Von Der_Anfänger im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 20.07.2007, 20:14
  5. atmega8 mit 9v Block betreiben.?
    Von Luppi im Forum Elektronik
    Antworten: 24
    Letzter Beitrag: 12.05.2006, 11:14

Berechtigungen

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

Solar Speicher und Akkus Tests