mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD zeigt was falsches nach Reset; ATmega8 avrgcc


Autor: Werner (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich habe mir bei Conrad ein Display gekauft (ANAG VISION AV2020) 
welches den KS066 Controller (oder kombatibel) verwendet.
Ich befolge genau die Initialisierungsroutine wie sie gefordert ist.
Wenn man die Stromversorung aus und wieder einschaltet passt die 
Anzeige.

Nach einem Reset zeigt das 2 zeilige LCD manchmal nur eine Zeile, bzw 
lauter komische Sachen in einer oder 2 Zeilen.
Hab schon viele delays eingebaut und wird nicht besser.

// erzeugt den Enable-Puls
void lcd_enable(void) {

   LCD_STEUER_PORT |= (1 << LCD_EN);
    _delay_us(120);  // 100 nicht zu knapp warten
   LCD_STEUER_PORT &= ~(1 << LCD_EN);
}


// Initialisierung:
// Muss ganz am Anfang des Programms aufgerufen werden.

void lcd_init(void) {

  _delay_ms(50); _delay_ms(50);            // Verzögerung wegen 
Einschaltung notwendig
   LCD_DATEN_DDR |= (0x0F << LCD_DATEN_BIT1);  // Datenausgänge
  LCD_STEUER_DDR |= (1 << LCD_RS) | (1 << LCD_EN);
                            // Steuerausgänge
  LCD_STEUER_PORT &= ~(1 << LCD_RS | 1 << LCD_EN);// Ausgänge 
ausschalten


  // LCD_STEUER_PORT = ~(1 << LCD_RW);
  // Funktion einstellen
     // 3 mal senden zur Initialisierung laut Beschreibung
    _delay_ms(50); _delay_ms(50); _delay_ms(50); // Verzögerung wegen 
Einschaltung notwendig

  LCD_DATEN_PORT &= ~(0b00001111 << LCD_DATEN_BIT1);  // Datenausg. 
löschen


  // 4 Bit Modus, 5x8 Pixel, 2 Zeilen
     LCD_DATEN_PORT |= (1 << LCD_DB5);
     LCD_STEUER_PORT &= ~(1<<LCD_RS);    // RS auf 0
     lcd_enable();

   _delay_ms(50);      //
     lcd_enable();

  LCD_DATEN_PORT &= ~(0b00001111 << LCD_DATEN_BIT1);// Datenausg. 
löschen
    _delay_ms(50);    //
  LCD_DATEN_PORT |= (1 << LCD_DB7);    // DB6 dazu ?
     lcd_enable();

  // Display ON/OFF Controll
  // Display ein  Cursor aus  kein Blinken

  _delay_ms(50);          // Verzögerung laut Beschreibung
  lcd_befehl(0b00001100);      // siehe Beschreibung S14


  // Display Clear
  _delay_ms(50);          // Verzögerung laut Beschreibung
    lcd_befehl(0b00000001);      // siehe Beschreibung


  // Entry Mode Set
     // inkrement / kein Scrollen
  _delay_ms(50);          // Verzögerung laut Beschreibung
    lcd_befehl(0b00000110);      // siehe Beschreibung

  _delay_ms(50);          // 20
}

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das Display weiß ja nichts vom AVR-reset. Manche Funktionen lassen sich 
nur einmal nach dem Displaystart einstellen und der erfolgt ja nur beim 
PowerOn, nicht beim AVR-Reset.

Oben in den Kommentaren gibt es
// 3 mal senden zur Initialisierung laut Beschreibung
 da sendest Du nichts.
Ich weiß auch nicht, ob der KS0066 den Softwarereste des HD44780 kann 
(3x 0x30 senden), versuchen kannst Du es ja mal, im Datenblatt auf ich 
beim Überfliegen nichts dazu gefunden.

Gruß aus Berlin
Michael

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
o.k. das gilt ab dem Kommentar "4 Bit Modus", die 3 x lcd_enable() bis 
zum nächsten Kommentar "DISPLAY ON/OFF".
Werd ich mal versuchen, ich hab nämlich im Datenblatt leider auch keinen 
expliziten Reset Befehl gefunden.

Was mir auch noch aufgefallen ist, wenn ich Reset drücke und er zeigt 
was falschen an drücke ich erneut Reset und dann passt es wieder.
Wenn man den Reset genau richtig drückt (nicht zu kurz oder zu lang) 
zeigt er auch gleich das richtige.

Danke
Werner

Autor: Neubi (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
meine init sieht so aus (funktioniert) .....


void InitLCD(void)
{
  DisplayDataEnable();   // set all display-portpins first

  LCD_RS_CONTROL();      // write to control register
  LCD_RW_LOW();          // set to write function
  LCD_E_LOW();           // data-invalid
  delay(25000);          // wait 20ms after restart

  lcd_write(0x30);
  delay(6500);           // wait 5.2ms
  lcd_write(0x30);
  delay(6500);           // wait 5.2ms
  lcd_write(0x30);
  delay(100);            // 80µs

  lcd_write(0x38);       // display has 2lines
  delay(100);            // 80µs

  lcd_write(0x0C);       // display on, no cursor
  delay(100);            // 80µs

  lcd_write(0x01);       // clear display
  delay(6500);           // 80µs

  lcd_write(0x06);       // clear display
  delay(100);            // 80µs

  DisplayDataDisable();
}

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr lässig jetzt geht es , danke !!!!!!!!!!!

Autor: Alien (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

hatte das gleiche Problem mit nem anderen Atmega, aber auch dem KS0066 
Controller, die Lösung war an sich simpel.

Zumindest bei mir, bei mir musste ich nur den Controller nach dem 
einschalten einmalig auf den 8Bit Modus setzen. 0x30 auf die 
Datenleitungen.

Anschließend die im Datenblatt angegebene Initialisierung ausführen.

Ich hoffe es steinigt mich jetzt keiner dass ich hier meine Lösung 
angehängt hab.

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.