www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Initialisierung


Autor: Poseidonius (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Poseidonius (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: SiO2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Poseidonius (Gast)
Datum:

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

RW auf high
E  Impuls senden
D7 auslesen

?

Danke

Autor: roty (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 );
}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.