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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren