mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD (Ks0066) initialisieren


Autor: Dantor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich bekomme ein LC Display von Conrad mit KS0066 Controller nicht 
initialisiert.
Angeblich ist der Controller kompatibel zum HD44780, aber dann frage ich 
mich, warum um Datenblatt eine völlig andere Initialisierung beschrieben 
wird als im Tutorial.

Tutorial:

0000 0011
5ms
0000 0011
5ms
0000 0011
5ms

0000 0010
5ms
0000 0010
0000 1000
50us
0000 0000
0000 1100
50us
0000 0000
0000 0100

Datenblatt:

0000 0010
0000 0010
0000 11xx
39u

0000 0000
0000 11CB

39u

0000 0000
0000 0001

1.53ms
0000 0000
0000 00IS

Das Display funktioniert leider weder mit der einen, noch mit der 
anderen Version.



Autor: Dantor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls es weiterhilft, hier der von mir entsprechend geänderte 
Programmabschnitt:

lcd_init:
           ldi  temp3,50
powerupwait:
           rcall  delay5ms
           dec  temp3
           brne powerupwait
           ldi temp1, 0b00000010
           out PORTD, temp1
           rcall lcd_enable
           rcall lcd_enable
           ldi temp1, 0b00001100
           out PORTD, temp1
           rcall delay50us
           ldi temp1, 0b00000000
           out PORTD, temp1
           rcall lcd_enable
           ldi temp1, 0b00001111
           out PORTD, temp1
           rcall lcd_enable
           rcall delay50us
           ldi temp1, 0b00000001
           rcall lcd_command
           rcall delay5ms
           ldi temp1, 0b00000111
           rcall lcd_command

           ret

Das Datenblatt gibt es hier: 
http://www.datasheets.org.uk/pdf/ks0066-datasheet/...

Autor: Problemlöser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind die delay Funtionen auch Quartz unabhängig geschrieben, oder kann 
hier das Timing möglicherweise verschieden sein ?

Autor: Dantor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, sie sind auf 4Mhz abgestimmt, wie im Tutorial.
Ich verwende aber auch 4Mhz.

Autor: Dantor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Display verrichtet nun endlich seinen Dienst.
Habe nun alles nach http://www.myke.com/lcd.htm programmiert.

Autor: Neubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hey,

stehe jetzt genau vor dem selben problem ... leider funktionierts bei 
mir nach myke-lcd nicht

könntest du mir bitte einen source-schnippsel der lcd-init posten ?!?


danke
neubi

Autor: Faxe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich habe grad das selbe Problem und kriege dieses Ding einfach nicht 
zum Laufen!
Bei http://www.myke.com/lcd.htm wird zur Initialisierung dreimal ein 
0x03 auf den Datenbus gelegt und dann ein 0x02 um 4-Bit-Modus 
einzustellen und das sollte dann zur Initialisierung doch reichen, 
oder??
Kannst du kurz posten wie dus hingekriegt hast?
Grüß Peter

Autor: Patrick P. (radio)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du dein Display auch von Pollin gekauft?

Autor: avrlex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi.
Ich habe auch genau dasselbe Problem.
Hab ein Display von Conrad AV1624YFBY.

Ich habe schon versucht das Display mit Bascoms Lcd routinen zum laufen 
zu kriegen, genauso wie mit Peter Fleurys lib in c.

Hat jemand von euch schon dieses Display zum laufen gekriegt?

mfg alex

Autor: Dantor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es kann schlicht am Kontrastregler liegen. So war es bei mir.
Dreht man ihn zu sehr in die eine Richtung, sieht man einfach garnichts.
Im anderen Fall sieht man nur schwarze Balken.
Diese müssen also nicht zwangsläufig bedeuten, dass die Initialisierung 
noch nicht abgeschlossen ist.

Mfg, falls das Thema noch aktuell sein sollte,
Dantor

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich habe das Driverprogramm für ein Display mit dem Controller KS0066, 
jedoch finde ich bei keinem Elektronic ein Display mit diesem 
Kontroller. Habe bis jetzt lediglich LCD-Displays mit KS0070B gefunden. 
Ist dieser auch Kompatibel?

Danke
Jürgen

Autor: Alan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
buddel
Ist es normal, dass bei keiner Initialisierung nur die ersten 8 Zeichen 
schwarz sind?
PS: Wie muss ich die LCD-Lib aus dem AVRgcc Tutorial anpassen, damit sie 
auch mit dem KS0066 funktioniert?

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ist dann normal, wenn es z.B. ein 1x16 Display ist, daß intern als 2x8 
organisiert ist. Muß dann auch 2-zeilig initialisiert werden und bei der 
Ausgabe ab dem 9. Zeichen die Adresse auf den Beginn von Zeile 2 gesetzt 
werden.

Gruß aus Berlin
Michael

Autor: Alan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jup, 1x16; Nur das Datenblatt versteh ich nicht so recht. -> ich kann 
die LCD-Lib nicht anpassen.

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
habe nun beruflich 1 1/2 Tage mit einem 20x2 Display rumgekämpft. Es 
wird intern der Controller KS0066U verwendet.
Die Initialisierung schien nicht zu funktionieren und ich schaffte es 
nicht auch nur irgend etwas anzuzeigen.

Folgende Dingen haben dem Abhilfe geschafft:

1. Poti an Pin3 hängen um Kontrast einstellen zu können. Die Displays 
sind nur in einem sehr schmalen Band "sehbar" justierbar. Wenn der Pin 
gegen GND oder 5V geschalten wird, sieht man in beiden Fällen gar 
nichts.

2. Mein Datenblatt war in Punkto Initialisierung falsch. Ich habe dann 
nach KS0066U gegoogelt und mir das Samsung Datenblatt heruntergeladen. 
Siehe da, ein komplett anderer Initialisierungsablauf mit dem es dann 
funktionierte.
   2.1. Power ON
   2.2. Wait > 30ms
   2.3. Function Set & wait > 39us   (nicht 3x wie so oft angegeben)
   2.4. Display on/off control & wait > 39us
   2.5. Display clear & wait > 1.53ms
   2.6. Entry Mode Set

3. Das blaue Display (RS Part Numer 532-6593). Hat einen Fehler im 
Function Set Register. Das Bit DB3 (Line Mode) ist hier entgegen allen 
Datenblättern invertiert. Schreibt man eine 1, so erhält man nicht zwei 
sondern nur eine Zeile initialisiert!!!
Das grüne/gelbe Display zeigt diesen Fehler nicht.

Nach Behebung dieser Fehler laufen beide Displays einwandfrei.

Hoffe das hilft einigen weiter.

Autor: Michael K. (aemkai)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bekomme auch mein LCD nicht zum laufen. Es ist ein L2432 von Seiko, 
laut Datenblatt mit KS0066-Controller.

Die delay-Zeiten sollten nach dem Datenblatt eigentlich hinhauen, die 
anderen Funktionen habe ich vom HD44780 übernommen.

Kann mir jemand sagen wo mein Fehler liegt, ich such und probier jetzt 
schon mehrere Tage und finde nix.

Danke schonmnal.

Micha

Autor: roflmeister (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuchs doch mal mit dem Init laut Datenblatt, oder wie im dem Post 
über dir.

Autor: Michael K. (aemkai)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
uuups, hab vergessen den Dateianhang mit hochzuladen...

Also die Init wie im Datenblatt habe ich davor schon versucht - funzt 
auch nicht.
Genauso die Init im Post darüber, ging genauso wenig - allerdings weiß 
ich auch nicht, was der Unterschied zwischen KS0066 und KS0066U (im Post 
darüber) ist und was er bewirkt.
Sind denn die anderen Funktionen soweit richtig (lcd_data, lcd_command, 
...) oder muss man da was verändern gegenüber den HD44780-Funktionen?

Autor: R. B. (rabis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

mein 8x2-LCD (Conrad, Art.-Nr. 183512-62) funktioniert auch nicht 
richtig.
Ich bekomme es initialisiert (nur 1. Zeile ???) und kann z.B. den Cursor 
hin und her bewegen. Zeichen zeigt es keine an (habe LCD_RS schon 
überprüft) und wenn ich die DDRAM-Adresse auf 40H setze ist alles aus, 
bei 00H blinkt das 1. Zeichen in der 1.Zeile, was ja auch richtig ist. 
Wenn ich den Port zurücklese, stimmen die Daten.
Das BUSY habe ich auch länger abgewartet, ohne Erfolg.
Das Ganze läuft auf einem AT89S8253 mit SDCC programmiert.

Hat evtl. noch jemand eine Idee?

RABIS

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Micha K. schrieb:
> uuups, hab vergessen den Dateianhang mit hochzuladen...
>
> Also die Init wie im Datenblatt habe ich davor schon versucht - funzt
> auch nicht.
> Genauso die Init im Post darüber, ging genauso wenig - allerdings weiß
> ich auch nicht, was der Unterschied zwischen KS0066 und KS0066U (im Post
> darüber) ist und was er bewirkt.
> Sind denn die anderen Funktionen soweit richtig (lcd_data, lcd_command,
> ...) oder muss man da was verändern gegenüber den HD44780-Funktionen?

Hey, besser spät als nie:

Bei der init Funktion musst du noch das DDR vom RW bit auf 1 setzen! Es 
ist anscheinend nämlich nicht egal was du da dran hast, sondern es muss 
eine 0 sein

Autor: Micha K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
THX, kann's aber leider nicht mehr ausprobieren, hab die LCDs 
zurückgegeben.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mich auch länger mit der Initialisierung des KS0066U 
rumgeschlagen...
und habe es nach hirnzermürbendem ausprobieren dann noch hinbekommen :D
so siehts aus ( vlt. nicht der schönste Code aber naja bin kein Profi;) 
):
/*
 * lcd162c.c
 *
 * Created: 25.08.2013 12:57:01
 *  Author: Daniel
 */ 


#include <avr/io.h>
#include <avr/delay.h>

#define F_CPU 16000000UL

#define LCD_PORT PORTA
#define LCD_DDR DDRA
#define LCD_DB4 PA0
#define LCD_DB5 PA1
#define LCD_DB6 PA2
#define LCD_DB7 PA3
#define LCD_PIN_RS PA4
#define LCD_PIN_E PA5

#define CMD_EMS (1<<2)
#define EMS_CURSOR_BACKWARD 0
#define EMS_CURSOR_FORWARD (1<<1)
#define EMS_NODISPLAYSHIFT 0
#define EMS_DISPLAYSHIFT 1

#define CMD_CLD 1

#define CMD_RTH 2

#define CMD_SHIFT (1<<4)
#define SHIFT_CURSOR 0
#define SHIFT_DISPLAY (1<<3)
#define SHIFT_LEFT 0
#define SHIFT_RIGHT (1<<2)

#define CMD_CONFIG (1<<5)
#define CONFIG_8BIT (1<<4)
#define CONFIG_4BIT 0
#define CONFIG_2LINE (1<<3)
#define CONFIG_1LINE 0
#define CONFIG_5X10 (1<<2)
#define CONFIG_5X7 0

#define CMD_DISPLAY (1<<3)
#define DISPLAY_ON (1<<2)
#define DISPLAY_OFF 0
#define DISPLAY_CURSOR (1<<1)
#define DISPLAY_NOCURSOR 0
#define DISPLAY_BLINKING 1
#define DISPLAY_NOBLINKING 0


#define ENABLE_DURATION 1
#define POWERUP_TIME 40


void enable()
{
  LCD_PORT |= (1<<LCD_PIN_E);
  _delay_ms(ENABLE_DURATION);
  LCD_PORT &= ~(1<<LCD_PIN_E);
}

void sendNibble(uint8_t nibble)
{
  LCD_PORT &= 0xF0;
  LCD_PORT |= nibble;
  enable();  
}

void wd4(uint8_t data)
{
  uint8_t nibble = (data >> 4); // high nibble speichern
  LCD_PORT |= (1<<LCD_PIN_RS); // Datenregister auswählen
  sendNibble(nibble);
  _delay_ms(5);
  nibble = (data&0x0F); // low nibble speichern
  sendNibble(nibble);
  _delay_ms(5);
}

void cmd4(uint8_t cmd)
{
  uint8_t nibble = (cmd >> 4); // high nibble speichern
  LCD_PORT &= ~(1<<LCD_PIN_RS); // Steuerregister auswählen
  sendNibble(nibble);
  _delay_ms(5);
  nibble = (cmd&0x0F); // low nibble speichern
  sendNibble(nibble);
  _delay_ms(5);
}

void init()
{
  LCD_PORT = 0x00;
  LCD_DDR = 0xFF;
  _delay_ms(POWERUP_TIME);
  /* 4-bit Modus konfigurieren ------Function-Set 1*/
  LCD_PORT |= (1<<LCD_DB5);
  LCD_PORT &= ~(1<<LCD_DB4);

  _delay_ms(40);
  /* 4-bit Modus konfigurieren ------Function-Set 2*/
  LCD_PORT |= (1<<LCD_DB5);
  LCD_PORT &= ~(1<<LCD_DB4);
  
  _delay_ms(5);
  /* 4-bit Modus konfigurieren ------Function-Set 3*/
  LCD_PORT |= (1<<LCD_DB5);
  LCD_PORT &= ~(1<<LCD_DB4);

  /* 4-Bit Modus starten ... */
  LCD_PORT |= (1<<LCD_PIN_E);
  LCD_PORT &= ~(1<<LCD_PIN_E);
  _delay_ms(5);
  
  cmd4(CMD_CONFIG | CONFIG_2LINE);
  cmd4(CMD_DISPLAY | DISPLAY_OFF);
  cmd4(CMD_CLD);
  cmd4(CMD_EMS | EMS_CURSOR_FORWARD);
  cmd4(CMD_DISPLAY | DISPLAY_ON);
}

int main(void)
{
  init();
    while(1)
    {
    wd4('T');
    _delay_ms(255);
    wd4('e');
    _delay_ms(255);
    wd4('s');
    _delay_ms(255);
    wd4('t');
    _delay_ms(255);
    _delay_ms(255);
    _delay_ms(255);
    _delay_ms(255);
    cmd4(CMD_CLD);
    cmd4(CMD_RTH);
        //TODO:: Please write your application code 
    }
}

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.