-         
Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte
Ergebnis 21 bis 30 von 53

Thema: LCD-Probleme

  1. #21
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    43
    Beiträge
    451
    Anzeige

    Hast du mal zwischen den Schritten richtig lange Zeiten rein gemacht? So ne Sekunde? Häng mal an die Ports noch ne Batterie von 11 LEDs dran. Insbesonders an die 3 Ctrl Pins (E/RS/RW) . Ich habs auch an den Datenpins gehabt. Mit den langen Zeiten konnte ich dann sehen ob das so auf der Hardware so passiert wie ich mir das vorstelle. Evtl ist dein Strobe auch zu kurz mit nur 3 Taktzyklen für diesen Kontroller.

    Ich hab dann noch einen Pin genommen (mit Treiber Transistor) um das Display an und aus zu schalten. So stelle ich sicher dass das Display immer im Start Zustand ist, wenn ich meine Sequenz starte.

    Edit: So hab ich meins ageschlossen.
    Klicke auf die Grafik für eine größere Ansicht

Name:	2014-09-15_16:49:14.jpg
Hits:	17
Größe:	43,2 KB
ID:	29049

    - - - Aktualisiert - - -

    Ach ja: Ich warte dann nach "Power On" für das Display noch 1s bis sicher die Spannung aufgebaut ist. Nicht nur ein paar ms wie im Datasheet beschrieben.

  2. #22
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.316
    Code:
    .include"m644PAdef.inc"
    
    ;Ports als Ausgang konfigurieren
    ldi R16, 0b11111111
    out DDRC, R16
    out DDRA, R16
    out DDRB, R16
    ldi R16, 0b00000000
    out PORTC, R16
    out PORTA, R16
    out PORTB, R16
    
    ;Stack
    ldi R16, LOW(RAMEND)
    out SPL, R16
    ldi R16, HIGH(RAMEND)
    out SPH, R16
    
    ;Initialisierungszeit
    rcall Warte_1s
    
    ;Function Set
    ldi R16, 0b00100100
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    ldi R16, 0b00100100
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    ;Display on/off Controll
    ldi R16, 0b00001111
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    ;Display clear
    ldi R16, 0b00000001
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    ;Entry Mode Set
    ldi R16, 0b00000111
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    ;Cursor Home
    ldi R16, 0b00000010
    out PORTC, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    ;Sende Daten an LCD
    rcall Warte_1s
    ldi R16, 0b01010101
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 5
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    cbi PORTA, 5
    
    E:
    rjmp E
    Sind in dem Code doch noch Fehler? Ich habe 8 LEDs an Port B gehängt und sehe, was das LCD empfangen soll. Soweit passt das auch. Wartezeit generell eine Sekunde-kommt auch ungefähr hin. Das LCD...rührt sich nicht. Die Balken verschwinden, ja, aber kein Zeichen.

  3. #23
    RN-Premium User Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    49
    Beiträge
    523
    Blog-Einträge
    17
    Hallo White_Fox

    zwei Sachen sind mir in deinem letzten Code aufgefallen:
    1. Es wird Entry Mode 0b00000111 verwendet, also Display Shift Left, damit wird das Display nach dem Schreiben nach links verschoben -> und die Zeichen verschwinden wenn du links geschrieben hast. Hast du andere Entry Mode ausprobiert, versuch's mal mit diesem abgespeckten Code mit Entry Mode 0b00000110.
    2. sehe ich das richtig, dass du jetzt beim Initialisieren den Function Set 0b00100100 sendest? 3x 0b00110000 wäre glaub ich richtig. Mit der Sekunde Wartezeit hast du vielleicht übertrieben? Ist zwar gut, um die Abfolge zu kontrollieren, aber in der Reality reichen 5ms. Hier ein Bild zu der 8-Bit Initialisierung eines anderen 1602 LCD.
    Klicke auf die Grafik für eine größere Ansicht

Name:	Unbenannt.GIF
Hits:	11
Größe:	20,9 KB
ID:	29052

    Gruß
    witkatz
    Geändert von witkatz (16.09.2014 um 00:44 Uhr)

  4. #24
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.044
    Zitat Zitat von White_Fox Beitrag anzeigen
    ... Sind in dem Code doch noch Fehler? ... Die Balken verschwinden, ja, aber kein Zeichen.
    Ohh Mann. Ich hab jetzt mal versucht meine (gut funktionierende) Routine für ein 2x16-LCD, Code in C, mit Deinem Code zu vergleichen. Ich habe ja den lauffähigen Code als Assembler im File compilat.lls. Aber zehn vor Mitternacht die Bedienung des LCDs aus 12764 Zeilen rauszufisseln krieg ich nicht hin.

    Aber dann fiel mir ein, vielleicht kannst Du das selbst (vernünftiger als ich) machen: eine Kurzroutine in C schreiben - nur grad Initialisierung und zwei drei Zeichen senden. Und dann die entstandene LLS-Datei durchschauen ? Wär das ein Weg für Dich ? Du kannst auch gerne meine LCD-Bibliothek bekommen . . .
    Ciao sagt der JoeamBerg

  5. #25
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    43
    Beiträge
    451
    Bei
    Code:
    ;Sende Daten an LCD
    rcall Warte_1s
    ldi R16, 0b01010101
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 5
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    cbi PORTA, 5
    Sehe ich kein gesetztes RS... oder ist PortA, bit 5 das RS?

    - - - Aktualisiert - - -

    So würde ich die Sequenz in C machen. Falls du noch sagst, du hast keinen C Compiler, dann sag an welches Target (CPU) und CPU Takt, dann lade ich auch noch das hex file hoch...

    Code:
    #include <avr/io.h>
    #include <util/delay.h>
    
    int main(int argc, char** argv)
    {
        DDRB = 0b1111111;
        DDRC = 0b1111111;
        DDRD = 0b1111111;
    
        PORTB = 0x00;
        PORTC = 0x00;
        PORTD = 0x00;
    
        // Belegung: Port B: Databits
        //           Port C: 5=E / 6=RW / 7=rs
    
        // wait until display power is on
        _delayms(1000);
    
        // function set
        PORTB = 0b00111000;
    
        // toggle E
        PORTC |= (1<<5);
        _delayms(1000);
        PORTC &= ~(1<<5);
    
        _delayms(1000);
    
        // display on
        PORTB=0b00001111; // everything on, that we see the most
    
        // toggle E
        PORTC |= (1<<5);
        _delayms(1000);
        PORTC &= ~(1<<5);
    
        _delayms(1000);
    
        // display clear
        PORTB=0b00000001;
        _delayms(1000);
    
        // toggle E
        PORTC |= (1<<5);
        _delayms(1000);
        PORTC &= ~(1<<5);
    
        _delayms(1000);
    
        // entry mode set
        PORTB=0b00000110;
    
        // toggle E
        PORTC |= (1<<5);
        _delayms(1000);
        PORTC &= ~(1<<5);
    
        _delayms(1000);
    
        // cursor home
        PORTB=0b00000010;
        _delayms(1000);
    
        // toggle E
        PORTC |= (1<<5);
        _delayms(1000);
        PORTC &= ~(1<<5);
    
        _delayms(1000);
    
        // try to write character
        PORTC |= (1<<7);
        _delayms(1000);
    
        PORTB = 'W';
        _delayms(1000);
    
        // toggle E
        PORTC |= (1<<5);
        _delayms(1000);
        PORTC &= ~(1<<5);
    
        while(1);
    Gruß
    Georg

  6. #26
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.316
    @schorsch:
    Boah, das wäre prima.
    Besagter AVR ist ein ATMega644PA, rennt mit 8MHz über einen Quartz.

    Pinbelegung:
    Code:
    LCD     AVR
    DB0     PC0
    DB1     PC1
    DB2     PC2
    DB3     PC3
    DB4     PC4
    DB5     PC5
    DB6     PC6
    DB7     PC7
    
    RS      PA5
    RW     PA6
    E        PC7
    Vielen Dank schon mal.


    @witkatz:
    Hoppla...danke für den Hinweis mit dem Entrymode. Habs mal geändert und nach einem Powerdown-Reset durchlaufen lassen...leider ohne Ergebnis.

    @oberallgeier:
    Welche Bibliothek benutzt du denn? Die von Fleury?

    Wenn das Hex-File von schorsch nicht funktioiert werde ich mir einen C-Compiler besorgen und dann mal verschiedene Bibliotheken ausprobieren.

  7. #27
    RN-Premium User Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    49
    Beiträge
    523
    Blog-Einträge
    17
    Und hast du auch die Initialisierung entspr. des Flußdiagramms abgeändert?
    3 mal (!) 0b00110000 senden und danach erst Function Set mit Lines und Font -> Display Off -> Display Clear -> Entry Mode.
    Meine chinesischen 1602 LCDs funktionieren damit, sind aber, was diese Abfolge angeht ziemlich pingelig.

  8. #28
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.316
    Ja, ganz am Anfang. Habs wieder rausgenommen weil es in einem anderen Datenblatt gefehlt hat.
    Ich werds aber gern nochmal versuchen.

    Edit:
    Nix passiert.
    Code:
    .include"m644PAdef.inc"
    
    ;Ports als Ausgang konfigurieren
    ldi R16, 0b11111111
    out DDRC, R16
    out DDRA, R16
    out DDRB, R16
    ldi R16, 0b00000000
    out PORTC, R16
    out PORTA, R16
    out PORTB, R16
    
    ;Stack
    ldi R16, LOW(RAMEND)
    out SPL, R16
    ldi R16, HIGH(RAMEND)
    out SPH, R16
    
    ;Initialisierungszeit
    rcall Warte_1s
    
    ldi R16, 0b00110000 
    out PortC, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    
    
    ;Function Set
    ldi R16, 0b00100100
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    ;Display on/off Controll
    ldi R16, 0b00001111
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    ;Display clear
    ldi R16, 0b00000001
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    ;Entry Mode Set
    ldi R16, 0b00000110
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    
    ;Cursor Home
    ldi R16, 0b00000010
    out PORTC, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    ;Sende an LCD
    rcall Warte_1s
    ldi R16, 0b01010101
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 5
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    cbi PORTA, 5
    
    E:
    rjmp E

  9. #29
    RN-Premium User Roboter-Spezialist Avatar von witkatz
    Registriert seit
    24.05.2006
    Ort
    NRW
    Alter
    49
    Beiträge
    523
    Blog-Einträge
    17
    Und wie kommst du jetzt auf den Wert b00100100 für Function Set? Willst du jetzt auf einmal 4-Bit Modus einzeilig?
    Wie wär's mit 0b00111000 für 8 bit, 2 Zeilen 5x8 dots?

  10. #30
    Erfahrener Benutzer Roboter Genie Avatar von White_Fox
    Registriert seit
    04.10.2011
    Beiträge
    1.316
    Hm...eigenartig warum das da so steht. Das war wohl der späten Stunde gestern geschuldet, als ich das geschrieben habe.
    Danke für den hinweis...ich werds gleich mal korrigieren. Obwohl ich da schon mit Sicherheit den eigentlich richtigen Wert drin hatte in den letzten vier Tagen.

    Edit: Immer noch nichts.
    Code:
    .include"m644PAdef.inc"
    
    ;Ports als Ausgang konfigurieren
    ldi R16, 0b11111111
    out DDRC, R16
    out DDRA, R16
    out DDRB, R16
    ldi R16, 0b00000000
    out PORTC, R16
    out PORTA, R16
    out PORTB, R16
    
    ;Stack
    ldi R16, LOW(RAMEND)
    out SPL, R16
    ldi R16, HIGH(RAMEND)
    out SPH, R16
    
    ;Initialisierungszeit
    rcall Warte_1s
    
    ldi R16, 0b00110000 
    out PortC, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    
    
    ;Function Set
    ldi R16, 0b00111000
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    ;Display on/off Controll
    ldi R16, 0b00001111
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    ;Display clear
    ldi R16, 0b00000001
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    ;Entry Mode Set
    ldi R16, 0b00000110
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    
    ;Cursor Home
    ldi R16, 0b00000010
    out PORTC, R16
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    rcall Warte_1s
    
    ;Sende an LCD
    rcall Warte_1s
    ldi R16, 0b01010101
    out PORTC, R16
    out PORTB, R16
    sbi PORTA, 5
    sbi PORTA, 7
    rcall Warte_1s
    cbi PORTA, 7
    cbi PORTA, 5
    
    E:
    rjmp E

Seite 3 von 6 ErsteErste 12345 ... LetzteLetzte

Ähnliche Themen

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

Berechtigungen

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