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

Thema: LCD-Probleme

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.473

    LCD-Probleme

    Hallo

    Ich sitze jetzt schon einige Tage an meinem Code und es stellt sich allmählich eine gewisse Betriebsblindheit ein.
    Findet jemand den Fehler in meinem Code?


    Folgendes Problem: Ich habe hier ein 2x16-LCD, das jedoch keine Zeichen anzeigen will.
    Ich kann es zwar initialisieren (obere Balkenreihe verschwindet), jedoch zeigt es keine Zeichen an.

    Kann mal wer über den Code rüberschauen?

    Code:
    .equ LCD_DAT_PORT       =PORTC    ;Port für Datenleitungen definieren
    .equ LCD_STRG_PORT      =PORTA    ;Port definieren, an dem RS, RW und E angeschlossen sind
    .equ LCD_DDR            =DDRC     ;Datenrichtungsregister LCD-Datenport
    .equ LCD_PIN            =PINC     ;Pin-Register LCD-Datenport
    .equ LCD_E              =7        ;Enable-Pin definieren
    .equ LCD_RS             =5        ;Register-Select-Pin definieren
    .equ LCD_RW             =6        ;Read-Write-Pin definieren
    .equ Schlussmarke       =0        ;Schlussmarke für längeren Text, ASCII-Wert
    .def LCD_Puffer			=R16      ;Register für Daten/Befehlübergabe
    .def LCD_TMP1			=R17      ;Arbeitsregister für LCD-Routinen, wird bei Verwendung auf dem Stack gesichert
    .def LCD_TMP2			=R18      ;Arbeitsregister für LCD-Routinen, wird bei Verwendung auf dem Stack gesichert
    .equ LCD_FunctionSet    =0b00101110    ;FunctionSet: 0b001 DL N F * *     DL=8/4-Bit, N=1/2 Zeilen, 5x8/5x10  
    .equ LCD_Display        =0b00001000    ;Display Ein/Aus: 0b00001 D C B    D=Display Ein/Aus, C=Kursor Ein/Aus, B=Blinken Ein/Aus
    .equ LCD_EntryMode      =0b00000110    ;Entry Mode Set: 0b000001 I S      I=Kursor Laufrichtung, S=Shift Ein/Aus
    
    
    ;============
    ;Ports konfigurieren
    ;Stack initialisieren, usw
    ;============
    
    
    rcall LCD_initialisieren
    rcall Warte_50ms
    rcall Warte_50ms
    
    ldi LCD_Puffer, 'W'
    rcall LCD_Befehluebergabe
    rcall Warte_50ms
    
    Ende:
    rjmp Ende
    
    
    ;==================================================================
    ;..................................................................
    ;LCD initialisieren - 8-Bit-Modus
    ;..................................................................
    ;==================================================================
    
    LCD_initialisieren:
    
         push LCD_TMP1
         
         ldi LCD_TMP1, 0b00110000
         out LCD_DAT_PORT, LCD_TMP1
         rcall LCD_Enable
         rcall Warte_1ms
         rcall Warte_1ms
         rcall Warte_1ms
         rcall Warte_1ms
         rcall Warte_10us
         
         ldi LCD_TMP1, 0b00110000
         out LCD_DAT_PORT, LCD_TMP1
         rcall LCD_Enable
         rcall Warte_100us
         
         ldi LCD_TMP1, 0b00110000
         out LCD_DAT_PORT, LCD_TMP1
         rcall LCD_Enable
         
         ldi LCD_TMP1, LCD_FunctionSet      ;Function Set
         out LCD_DAT_PORT, LCD_TMP1
         rcall LCD_Enable
         rcall Warte_10us
         rcall Warte_10us
         rcall Warte_25us
         
         ldi LCD_TMP1, LCD_Display          ;Display und Kursor einstellen
         out LCD_DAT_PORT, LCD_TMP1
         rcall LCD_Enable
         rcall Warte_10us
         rcall Warte_10us
         rcall Warte_25us
         
         ldi LCD_TMP1, LCD_EntryMode       ;Entry Mode Set
         out LCD_DAT_PORT, LCD_TMP1
         rcall LCD_Enable
         rcall Warte_1ms
         rcall Warte_1ms
    
    	 pop LCD_TMP1
    
         ret
    
    
    ;==================================================================
    ;..................................................................
    ;LCD Befehl uebergeben
    ;..................................................................
    ;==================================================================
    
    LCD_Befehluebergabe:
         out LCD_DAT_PORT, LCD_Puffer
         cbi LCD_STRG_PORT,LCD_RS
    	 nop
    	 nop
    	 nop
         rcall LCD_Enable
         rcall LCD_BusyFlag
         ret 
    
    
    ;==================================================================
    ;..................................................................
    ;LCD Daten uebergeben
    ;..................................................................
    ;==================================================================
    
    LCD_Datenuebergabe:
         out LCD_DAT_PORT, LCD_Puffer
         sbi LCD_STRG_PORT,LCD_RS
    	 nop
    	 nop
    	 nop
         rcall LCD_Enable
         rcall LCD_BusyFlag
         cbi LCD_STRG_PORT,LCD_RS
         ret 
    
    
    ;==================================================================
    ;..................................................................
    ;LCD Enable-Routine
    ;..................................................................
    ;==================================================================
    
    LCD_Enable:
         sbi LCD_STRG_PORT, LCD_E
    	 nop
    	 nop
    	 nop
         cbi LCD_STRG_PORT, LCD_E
         ret
    
    
    ;==================================================================
    ;..................................................................
    ;LCD Busyflag abwarten
    ;..................................................................
    ;==================================================================
    
    LCD_BusyFlag:
         push LCD_TMP1
         ldi LCD_TMP1, 0b00000000           ;Portpin 7 als Eingang konfigurieren um das BF auszulesen
    	 cbi LCD_STRG_PORT,LCD_RS
         sbi LCD_STRG_PORT,LCD_RW
         out LCD_DDR, LCD_TMP1
         
    LCD_WarteBF:                            ;Warteschleife, wird verlassen sobald Pin 7 gesetzt wird
         sbic LCD_PIN, 7
         jmp LCD_WarteBF
         
         ldi LCD_TMP1, 0b11111111
         out LCD_DDR, LCD_TMP1
         pop LCD_TMP1
         ret

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    47
    Beiträge
    456
    Was für ein Kontroller ist es denn?

    KS0073? HD47780?

    Welcher Mode? 4Bit? (ok, wohl 8 bit)

    Hast du die Kontrastspannung richtig eingestellt?

    Edit: Passt N? muss es 1 sein? 2 zeilen .. richtig?
    .equ LCD_FunctionSet =0b00101110 ;FunctionSet: 0b001 DL N F * * DL=8/4-Bit, N=1/2 Zeilen, 5x8/5x10

    Stimmt die Startadresse an die du schreibst?
    Geändert von schorsch_76 (14.09.2014 um 18:39 Uhr)

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.473
    Danke für deine Antwort

    Was für ein Kontroller ist es denn?
    Das ist die Preisfrage.
    Ich hatte mal vor einigen Jahren das gleiche Display, und da schien es ein KS0066U zu sein, allerdings hat das gleiche Programm bei einem neugekauften LCD nicht mehr funktioniert. Der funktionierenden Init nach muß es allerdings ein HD44780 sein.

    Welcher Mode? 4Bit? (ok, wohl 8 bit)
    Genau, 8 Bit.

    Hast du die Kontrastspannung richtig eingestellt?
    Definitiv ja, habs mit nem Poti auch mehrmals durchprobiert.

    Edit: Passt N? muss es 1 sein? 2 zeilen .. richtig?
    Was meinst du mit den ersten beiden Fragen?
    Ja, es ist ein 2x16-LCD. Falsche Verdrahtung/Lötbrücken/fehlerhafte Leitung kann ich ebenso ausschliessen.

    Stimmt die Startadresse an die du schreibst?
    Die wird doch nach "Cursor auf Anfang" automatisch auf die erste Position gesetzt, oder? Den Befehl hab ich auch schon mehrmals ausprobiert.

Ähnliche Themen

  1. riesige LCD Probleme
    Von Ineedhelp im Forum AVR Hardwarethemen
    Antworten: 8
    Letzter Beitrag: 23.05.2008, 15:53
  2. Probleme mit LCD
    Von Mr Bean im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 25.10.2007, 09:10
  3. Probleme mit LCD
    Von Jigger im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 18.02.2007, 13:56
  4. LCD Probleme
    Von dpressedp im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 11.01.2007, 13:56
  5. harte LCD-Probleme
    Von Lemonsquash im Forum Elektronik
    Antworten: 3
    Letzter Beitrag: 21.10.2006, 21:55

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad