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.
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/ks0066-datasheet.html
Sind die delay Funtionen auch Quartz unabhängig geschrieben, oder kann hier das Timing möglicherweise verschieden sein ?
Nein, sie sind auf 4Mhz abgestimmt, wie im Tutorial. Ich verwende aber auch 4Mhz.
Display verrichtet nun endlich seinen Dienst. Habe nun alles nach http://www.myke.com/lcd.htm programmiert.
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
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
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
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
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
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?
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
Jup, 1x16; Nur das Datenblatt versteh ich nicht so recht. -> ich kann die LCD-Lib nicht anpassen.
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.
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
Versuchs doch mal mit dem Init laut Datenblatt, oder wie im dem Post über dir.
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?
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
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
THX, kann's aber leider nicht mehr ausprobieren, hab die LCDs zurückgegeben.
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;) ):
1 | /*
|
2 | * lcd162c.c
|
3 | *
|
4 | * Created: 25.08.2013 12:57:01
|
5 | * Author: Daniel
|
6 | */
|
7 | |
8 | |
9 | #include <avr/io.h> |
10 | #include <avr/delay.h> |
11 | |
12 | #define F_CPU 16000000UL
|
13 | |
14 | #define LCD_PORT PORTA
|
15 | #define LCD_DDR DDRA
|
16 | #define LCD_DB4 PA0
|
17 | #define LCD_DB5 PA1
|
18 | #define LCD_DB6 PA2
|
19 | #define LCD_DB7 PA3
|
20 | #define LCD_PIN_RS PA4
|
21 | #define LCD_PIN_E PA5
|
22 | |
23 | #define CMD_EMS (1<<2)
|
24 | #define EMS_CURSOR_BACKWARD 0
|
25 | #define EMS_CURSOR_FORWARD (1<<1)
|
26 | #define EMS_NODISPLAYSHIFT 0
|
27 | #define EMS_DISPLAYSHIFT 1
|
28 | |
29 | #define CMD_CLD 1
|
30 | |
31 | #define CMD_RTH 2
|
32 | |
33 | #define CMD_SHIFT (1<<4)
|
34 | #define SHIFT_CURSOR 0
|
35 | #define SHIFT_DISPLAY (1<<3)
|
36 | #define SHIFT_LEFT 0
|
37 | #define SHIFT_RIGHT (1<<2)
|
38 | |
39 | #define CMD_CONFIG (1<<5)
|
40 | #define CONFIG_8BIT (1<<4)
|
41 | #define CONFIG_4BIT 0
|
42 | #define CONFIG_2LINE (1<<3)
|
43 | #define CONFIG_1LINE 0
|
44 | #define CONFIG_5X10 (1<<2)
|
45 | #define CONFIG_5X7 0
|
46 | |
47 | #define CMD_DISPLAY (1<<3)
|
48 | #define DISPLAY_ON (1<<2)
|
49 | #define DISPLAY_OFF 0
|
50 | #define DISPLAY_CURSOR (1<<1)
|
51 | #define DISPLAY_NOCURSOR 0
|
52 | #define DISPLAY_BLINKING 1
|
53 | #define DISPLAY_NOBLINKING 0
|
54 | |
55 | |
56 | #define ENABLE_DURATION 1
|
57 | #define POWERUP_TIME 40
|
58 | |
59 | |
60 | void enable() |
61 | {
|
62 | LCD_PORT |= (1<<LCD_PIN_E); |
63 | _delay_ms(ENABLE_DURATION); |
64 | LCD_PORT &= ~(1<<LCD_PIN_E); |
65 | }
|
66 | |
67 | void sendNibble(uint8_t nibble) |
68 | {
|
69 | LCD_PORT &= 0xF0; |
70 | LCD_PORT |= nibble; |
71 | enable(); |
72 | }
|
73 | |
74 | void wd4(uint8_t data) |
75 | {
|
76 | uint8_t nibble = (data >> 4); // high nibble speichern |
77 | LCD_PORT |= (1<<LCD_PIN_RS); // Datenregister auswählen |
78 | sendNibble(nibble); |
79 | _delay_ms(5); |
80 | nibble = (data&0x0F); // low nibble speichern |
81 | sendNibble(nibble); |
82 | _delay_ms(5); |
83 | }
|
84 | |
85 | void cmd4(uint8_t cmd) |
86 | {
|
87 | uint8_t nibble = (cmd >> 4); // high nibble speichern |
88 | LCD_PORT &= ~(1<<LCD_PIN_RS); // Steuerregister auswählen |
89 | sendNibble(nibble); |
90 | _delay_ms(5); |
91 | nibble = (cmd&0x0F); // low nibble speichern |
92 | sendNibble(nibble); |
93 | _delay_ms(5); |
94 | }
|
95 | |
96 | void init() |
97 | {
|
98 | LCD_PORT = 0x00; |
99 | LCD_DDR = 0xFF; |
100 | _delay_ms(POWERUP_TIME); |
101 | /* 4-bit Modus konfigurieren ------Function-Set 1*/
|
102 | LCD_PORT |= (1<<LCD_DB5); |
103 | LCD_PORT &= ~(1<<LCD_DB4); |
104 | |
105 | _delay_ms(40); |
106 | /* 4-bit Modus konfigurieren ------Function-Set 2*/
|
107 | LCD_PORT |= (1<<LCD_DB5); |
108 | LCD_PORT &= ~(1<<LCD_DB4); |
109 | |
110 | _delay_ms(5); |
111 | /* 4-bit Modus konfigurieren ------Function-Set 3*/
|
112 | LCD_PORT |= (1<<LCD_DB5); |
113 | LCD_PORT &= ~(1<<LCD_DB4); |
114 | |
115 | /* 4-Bit Modus starten ... */
|
116 | LCD_PORT |= (1<<LCD_PIN_E); |
117 | LCD_PORT &= ~(1<<LCD_PIN_E); |
118 | _delay_ms(5); |
119 | |
120 | cmd4(CMD_CONFIG | CONFIG_2LINE); |
121 | cmd4(CMD_DISPLAY | DISPLAY_OFF); |
122 | cmd4(CMD_CLD); |
123 | cmd4(CMD_EMS | EMS_CURSOR_FORWARD); |
124 | cmd4(CMD_DISPLAY | DISPLAY_ON); |
125 | }
|
126 | |
127 | int main(void) |
128 | {
|
129 | init(); |
130 | while(1) |
131 | {
|
132 | wd4('T'); |
133 | _delay_ms(255); |
134 | wd4('e'); |
135 | _delay_ms(255); |
136 | wd4('s'); |
137 | _delay_ms(255); |
138 | wd4('t'); |
139 | _delay_ms(255); |
140 | _delay_ms(255); |
141 | _delay_ms(255); |
142 | _delay_ms(255); |
143 | cmd4(CMD_CLD); |
144 | cmd4(CMD_RTH); |
145 | //TODO:: Please write your application code
|
146 | }
|
147 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.