LCD-Display ansteuern

Gast #2781804
Lesenswert?
• ▲
▼
Hallo,
ich bin verzweifelt. Ich versuche seit Tagen ein 2x16 Zeichen 
LCD-Display anzusteuern, aber irgendwie will es einfach nicht 
funktionieren. Ich glaube das Problem liegt schon in der 
initialisierung, da wenn ich die Kontrastspannung verändere nur die 
obere Zeile "erscheint". Kann mir bitte jemand helben? Danke!!

LG
Angehängte Dateien:
Gast #2781905
Lesenswert?
• ▲
▼
Seltsame Programmiersprache ist das C???

Aber hier scheint der hund begraben zu sein.

LCD_DATA = LCD_DATA & 0x0F; // Höherwertigeres Nibble löschen
SWAPF(befehl,1);  // Höherwertige- und Niederwertige Nibbles vertauschen
temp = befehl & 0xF0; // Niederwert. Nibble ausmaskieren
LCD_DATA = LCD_DATA | temp; // High-Nibble an LCD übergeben

Du wolltest sicherlich das höher wertige Nibble ausgeben.
Dann solltest dies nicht löschen.

vllt hilft dir das.

temp = befehl;

LCD_DATA = LCD_DATA & 0xF0;   //Höherwertigeres Nibble zuerst senden
LCD_DATA = LCD_DATA | befehl

LCD_DATA = LCD_DATA & 0x0F;  // dann Niederwertigeres Nibble senden
LCD_DATA = LCD_DATA | befehl
Gast #2781906
Lesenswert?
• ▲
▼
Natalie

Propier das mal in deinem Code aus Mußt allerdings etwas anpassen.

// Ausgabe eines Kommandos
void LCD_Command ( uint8_t data )
{
    uint8_t d = data;

    LCD_Busy();

  LCD_DDR |= ((1 << LCD_D7 ) | (1 << LCD_D6 ) |(1 << LCD_D5 ) | (1 << 
LCD_D4 ) );   // D4 - D7 als Ausgang
    LCD_PORT &= ~((1 << LCD_D7 ) | (1 << LCD_D6 ) |(1 << LCD_D5 ) | (1 
<< LCD_D4 ) ); // D4 - D7 Zurücksetzen

  // Erst High-Byte senden
    data >>= 4;

    if (data & 0x01 )
    {
        LCD_PORT |= (1 << LCD_D4);
    }
    if (data & 0x02)
    {
        LCD_PORT |= (1 << LCD_D5);
    }
    if (data & 0x04)
    {
        LCD_PORT |= (1 << LCD_D6);
    }
    if (data & 0x08)
    {
        LCD_PORT |= (1 << LCD_D7);
    }

    LCD_PORT |= (1 << LCD_EN  );        // Daten stehen an
     _delay_us(50);
    LCD_PORT &= ~(1 << LCD_EN  );       //  Übernahme mit fallender 
Flanke


    LCD_Busy();

    LCD_DDR |= ((1 << LCD_D7 ) | (1 << LCD_D6 ) |(1 << LCD_D5 ) | (1 << 
LCD_D4 ) );   // D4 - D7 als Ausgang
    LCD_PORT &= ~((1 << LCD_D7 ) | (1 << LCD_D6 ) |(1 << LCD_D5 ) | (1 
<< LCD_D4 ) ); // D4 - D7 Zurücksetzen

    // Low-Byte senden
    data = d;
    data &= 0x0F;

    if (data & 0x01 )
    {
        LCD_PORT |= (1 << LCD_D4);
    }
    if (data & 0x02)
    {
        LCD_PORT |= (1 << LCD_D5);
    }
    if (data & 0x04)
    {
        LCD_PORT |= (1 << LCD_D6);
    }
    if (data & 0x08)
    {
        LCD_PORT |= (1 << LCD_D7);
    }

    LCD_PORT |= (1 << LCD_EN  );        // Daten stehen an
     _delay_us(50);
    LCD_PORT &= ~(1 << LCD_EN  );       //  Übernahme mit fallender 
Flanke


}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.