www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Problem


Autor: Thomas Bittner (datom)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

seit ein paar Tagen versuche ich ein 4*20 Zeichen LCD (Controller IC
KS0066U) zum laufen zu bekommen, aber es funktioniert nicht.
Als uC verwende ich einen ATMega8, den ich per STK500 programmiere. Das
LCD habe ich per Adapterkabel direkt über einen Erweiterungsstecker des
STK500 mit dem Mikrocontroller verbunden und möchte es im 4-Bit-Modus
betreiben.

Verbunden habe ich:
DB4  mit  PB0
DB5  mit  PB1
DB6  mit  PB2
DB7  mit  PB3
RS   mit  PB4
R/W  mit  PB5
E    mit  PB6

Zum Ansteuern des Displays habe ich ein C Programm geschrieben, das ich
hier mit angefügt habe. Irgendwo muss sich aber ein Fehler
eingeschlichen haben, da nach dem Flashen des ATMega8 keine Reaktionen
auf dem Display zu sehen sind.

Bin für jede Hilfe dankbar!

Thomas

Autor: phagsae (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas

Erhöhe mal den Kontrast auf maximium.
2 Balken init -> ok

Wo ist die Übertrage() ??

Autor: Thomas Bittner (datom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

erstmal danke für deine Antwort :).

Das mit den Kontrast habe ich auch schon ausprobiert, aber das ändert
gar nix. Die 2 Balken bleiben dann einfach da :).

Die Daten/Befehle werden mit der Funktion lcd_write ans Display
übertragen, oder was meinst du mit übertrage()?

Grüße Tom

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
also wenn dein display HD44780 kompatibel ist fehlt auf jeden fall noch
ne Funktion die den Cursor positioniert.

mfg
Stefan

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal,
außerdem musst du das Display beim initialisieren zuerst so behandeln
als wäre es am 8 bit bus. Also nur ein nibble übertragen. Hier mal mein
Code zum init, der funktioniert einwandfrei.

//********************************************************************
//---------------------------------------------------------------------- 
------
void LCD_instr(unsigned char daten)
{
 unsigned char daten2;
 daten2 = daten / 16;
 LCD_RS_0;                   //Register Select = Instrunction Register
Warte(lcdzeit);
 PORTD = PORTD & 0xF0;
 PORTD = PORTD | daten2;
Warte(lcdzeit);
 LCD_E_1;                   //Enable auf high
Warte(lcdzeit);
 LCD_E_0;                   //Enable=low -> Daten übernehmen
 PORTD = PORTD & 0xF0;
 PORTD = PORTD | daten;
Warte(lcdzeit);
 LCD_E_1;                   //Enable auf high
Warte(lcdzeit);
 LCD_E_0;                   //Enable=low -> Daten übernehmen
Warte(lcdzeit);
}


//---------------------------------------------------------------------- 
------
void init_LCD(void)
{
unsigned char daten;
LCD_E_0;                       //Enable auf low
LCD_RS_0;
Warte(60000);
 daten = 0x03;
 PORTD = PORTD & 0xF0;
 PORTD = PORTD | daten;
Warte(60000);
LCD_E_1;
Warte(60000);
LCD_E_0;
Warte(60000);
 daten = 0x03;
 PORTD = PORTD & 0xF0;
 PORTD = PORTD | daten;
Warte(60000);
LCD_E_1;
Warte(60000);
LCD_E_0;
Warte(60000);
 daten = 0x03;
 PORTD = PORTD & 0xF0;
 PORTD = PORTD | daten;
Warte(60000);
LCD_E_1;
Warte(60000);
LCD_E_0;
Warte(60000);
 daten = 0x02;
 PORTD = PORTD & 0xF0;
 PORTD = PORTD | daten;
Warte(60000);
LCD_E_1;
Warte(60000);
LCD_E_0;
Warte(60000);
LCD_instr(0x28);  //LCD Function Set
Warte(60000);
LCD_instr(0x0C);  //LCD initialisieren
Warte(60000);
LCD_instr(0x01);  //LCD löschen
Warte(60000);


mfg
Stefan

Autor: Thomas Bittner (datom)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,

meinst du nach der Initialisierung? Hab ich gerade versucht, hat aber
auch nix gebracht.

Ich kann mir eigentlich nur vorstellen, dass irgendwas an der
Initialisierungsroutine falsch ist.
Wie teile ich dem display eigentlich mit dass ich im 4-bit modus
übertrage? Ich kann ja per befehl einstellen, ob ich ein 8bit oder ein
4 bit interface verwende (siehe datenblatt "set function"). Bei der
Initialisierung muss man laut vorgegebener Routine aber angeben dass
man ein 8 bit interface verwendet. Kann das der Fehler sein?

Grüße

Autor: Thomas Bittner (datom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,

hab deinen Code gerade erst gesehen, werde ihn gleich mal
ausprobieren.

Grüße

Autor: Thorsten (Gast)
Datum:
Angehängte Dateien:
  • lcd.zip (759 Bytes, 20 Downloads)

Bewertung
0 lesenswert
nicht lesenswert
tag

hier mal mein code. funktioniert bei >10 displays die ich schon verbaut
hab.
portpins kannst du in der header-datei einstellen. die datenpins
sollten allerdings immer die unteren 4 portpins sein, sonst klappt das
ganze so wie es jetzt geschrieben ist nicht.
steuerleitungen können auf dem gleichen port sonst frei gewählt werden.

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.