mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe bei KS0076B


Autor: Dominik Boine (dominik123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
habe ein Probelm bei der Initialisierung des KS0076B(LCD Modul von 
Reichelt) Controllers. Möchte das Display mit 8Bit betreiben. Es besitzt 
5*7 Dots und 2 Zeilen.
 Verwende einen ATmega162 mit einem externen 8MHz Quarz. Die Init laut 
Datenblatt ist wie folgt:
- POWER On
- Wait for more then 15ms
- RS=0, R/W=0, DB7=0, DB6=0, DB5=1, DB4=1
- Wait for more then 4,1ms
- RS=0, R/W=0, DB7=0, DB6=0, DB5=1, DB4=1
- Wait for more then 100us
- RS=0, R/W=0, DB7=0, DB6=0, DB5=1, DB4=1
- RS=0, R/W=0, DB7=0, DB6=0, DB5=1, DB4=1, DB3=N, DB2=F
- RS=0, R/W=0, DB7=0, DB6=0, DB5=0, DB4=0, DB3=1, DB2=0 (Display off)
- RS=0, R/W=0, DB7=0, DB6=0, DB5=0, DB4=0, DB3=0, DB2=0,DB1=0, DB0=1
 (Clear)
-RS=0, R/W=0, DB7=0, DB6=0, DB5=0, DB4=0, DB3=0, DB2=1, DB1=I/D, DB0=Sh
 (Entry mode set)


Quelltext:

void Display_Init(void)
{
//-----Enable Display-------//
_delay_ms(5000);
Display_Enable = 1;
_delay_ms(200);

//--------1--Fset------------------//
  Display_DB4 = 1;
  Display_DB5 = 1;
_delay_ms(500);

  Display_DB4 = 0;
  Display_DB5 = 0;
_delay_ms(500);

//---------2-----Fset-----------------//
  Display_DB4 = 1;
  Display_DB5 = 1;
_delay_ms(500);

  Display_DB4 = 0;
  Display_DB5 = 0;
_delay_ms(500);

//---------3-----Fset-----------------//
  Display_DB4 = 1;
  Display_DB5 = 1;
_delay_ms(500);

  Display_DB4 = 0;
  Display_DB5 = 0;
_delay_ms(500);

//------------SET Funktion-------------//
  Display_DB3 = 1;
  Display_DB4 = 1;
  Display_DB5 = 1;
_delay_ms(500);

  Display_DB3 = 0;
  Display_DB4 = 0;
  Display_DB5 = 0;
_delay_ms(500);

//---------------Display Off-------------------------//
/*  Display_DB3 = 1;
_delay_ms(15);

  Display_DB3 = 0;
_delay_ms(15);*/
//--------Display on------//

  Display_DB3 = 1;
  Display_DB2 = 1;
  Display_DB1 = 1;
  Display_DB0 = 1;
_delay_ms(15);

  Display_DB3 = 0;
  Display_DB2 = 0;
  Display_DB1 = 0;
  Display_DB0 = 0;
_delay_ms(15);

//-----------Display clear------------//
  Display_DB0 = 1;
_delay_ms(15);

  Display_DB0 = 0;
_delay_ms(15);

//----------Entrymode set-------//
  Display_DB2 = 1;
  Display_DB1 = 1;
  Display_DB0 = 0;
_delay_ms(15);

  Display_DB2 = 0;
  Display_DB1 = 0;
  Display_DB0 = 0;
_delay_ms(15);

//--------Display on------//

  Display_DB3 = 1;
  Display_DB2 = 1;
  Display_DB1 = 1;
  Display_DB0 = 1;
_delay_ms(15);

  Display_DB3 = 0;
  Display_DB2 = 0;
  Display_DB1 = 0;
  Display_DB0 = 0;
_delay_ms(15);
}



Gruß

Dominik

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Enable-Impuls fehlt, nur dann werden auch die angelegten Daten vom 
Display übernommen, so z.B.:

Display_Enable = 0;
  Display_DB4 = 1;
  Display_DB5 = 1;
  Display_DB4 = 0;
  Display_DB5 = 0;
  RS = 0; // oder 1
  WR = 0;
Display_Enable = 1;
_delay_ms(xxx); // einige µS, je nach Datenblatt
Display_Enable = 0;
_delay_ms(xxx); // Wartezeit bis Befehl ausgeführt, Zeit steht im 
Datenblatt
... nächste Befehlssequenz

Autor: Dominik Boine (dominik123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ist das genau gemeint mit dem Enable PIN?

Wenn ich dem Display Daten Sende dann muss Enable = 0 sein und wenn der 
Befehl abgeschlossen ist dann geht Enable wieder auf 1 Delay wird 
gesetzt oder wie??

Gruß
Dominik

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

E auf L lassen, Daten und Steuerleitungen passend setzen.
Dann E auf H, mindestens minimale Impulsdauer laut Datenblatt auf H 
lassen, dann wieder auf L.
Wartezeit für die Befehlsausführung und dann nächste Daten usw.

So ist es mir am übersichtlichsten.

Man kann auch E auf H setzen, dann Daten und Steuerleitungen setzen, 
dann E wieder auf L.
Spart meist die Wartezeit für die Impulsbreite, übernommen wird mit der 
H/L-Flanke.

Genaues muß man sich aus den Impulsdiagrammen und Tabellen des 
Controller-Datenblattes raussuchen.

Gruß aus Berlin
Michael

Autor: Dominik Boine (dominik123)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe es so mal Programmiert und getestet geht auch leider nicht.
Hat einer noch eine Idee oder ev. sogar schon mal die „Init“ für so ein 
Display geschrieben und könnte es mir zur Verfügung stellen? ^^

Autor: Thomas S. (thomass)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Dominik,

ich habe ein 4x40 Display im Einsatz also eigentlich sind es 2 Displays 
2x40.
Ich fahre über 4 Datenleitungen daher könnte sich der INIT Code etwas 
anderst sein als bei 8 Datenleitungen.
void lcd_init(void)
{
   LCD_DDR = LCD_DDR | 0x0F | (1<<LCD_RS) | (1<<LCD_EN1) | (1<<LCD_EN2);   // Port auf Ausgang schalten
 
   // muss 3mal hintereinander gesendet werden zur Initialisierung
  Display = 0x03;            // beide Displays init
  _delay_ms(15);
   LCD_PORT &= 0xF0;
   LCD_PORT |= 0x03;            
   LCD_PORT &= ~(1<<LCD_RS);      // RS auf 0
   lcd_enable();
 
   _delay_ms(5);
   lcd_enable();
 
   _delay_ms(1);
   lcd_enable();
   _delay_ms(1);
 
   // 4 Bit Modus aktivieren 
   LCD_PORT &= 0xF0;
   LCD_PORT |= 0x02;
   lcd_enable();
   _delay_ms(1);
 
   // 4Bit / 2 Zeilen / 5x7
   lcd_command(0x28);
    
   // Display ein / Cursor aus / kein Blinken
   lcd_command(0x0C); 
 
   // inkrement / kein Scrollen
   lcd_command(0x06);
   Display = 0x00;      //Display deaktivieren
 
   lcd_clear(0x01);
   lcd_clear(0x02);
}

Ich hoffe es hilft Dir etwas weiter.

Thomas

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.