Forum: Mikrocontroller und Digitale Elektronik LCD Initialisierung


von Poseidonius (Gast)


Lesenswert?

Ok, auch wenn das Thema schon hundert mal durchgezogen wurde ...

Ich versuche mit vier Bit ein LCD anzuwerfen. Dazu sende ich das
bekannte Muster 3 x und warte dann darauf, dass das Busy flag wieder
low wird. Und dafuer habe ich mir folgende Zeilen zusammengebastelt:

// enable Impuls
void lcd_doit()
{
  E_PORT |=(1<<E_BIT);
  _delay_ms(1);
  E_PORT &=~(1<<E_BIT);
  _delay_ms(1);
}

// Busy abwarten
void lcd_ready()
{
  //Befehl Busy flag und Adresse auslesen
        RW_PORT|=(1<<RW_BIT);
  // absenden
        lcd_doit();
        // lcd 7 als Eingang
  LCD_7_DDR &=~(1<<LCD_7_BIT);
        // solange warten bis busy flag=low
  while(LCD_7_PIN & (1<<LCD_7_BIT));
        // R/W und LCD_7 zuruecksetzen
  RW_PORT&=~(1<<RW_BIT);
  LCD_7_DDR |=(1<<LCD_7_BIT);
}

Von der Idee her richtig?

von Poseidonius (Gast)


Lesenswert?

Ok vielleicht sollte ich es noch ein bisschen konkretisieren: Wenn
dieser erste Schritt der Initialisierung durchgelaufen ist und ich dann
einzelne der beteiligten Bits von 0 auf 1 oder anders herum setze,
bleibt das Programm haengen.

Vielen Dank

von SiO2 (Gast)


Lesenswert?

du liest das busyflag aus, vielleicht haegt er an dieset stelle. gibt
doch einfach zwischen jeder zeile ein signal nach dausen (rs232/led...)
und teste wie weit er kommt, und wo er genau haengt)

von Poseidonius (Gast)


Lesenswert?

Aber grundsätzlich ist der Ablauf richtig für das Abfragen des Busy
Flag

RW auf high
E  Impuls senden
D7 auslesen

?

Danke

von roty (Gast)


Lesenswert?

Hilft dir das weiter ? So geht's bei mir.

unsigned char LCD_Read_Busy(void)/* Read Busy Flag     */
{
unsigned char busy;

  LCD_RS_Register();        // set to instruction
  LCD_RW_Read();            // set to read
        P3DIR=0xD0;
    lcdena_on;      // E on
  busy = P3IN & 0x08;    // get LCD data
  lcdena_off;            // E off
  busy >>= 3;          // shift Busy Flag
        P3DIR=0xDF;
  return( busy );
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.