Hallo!
Dieses Thema wurde schon min. 1000x behandelt, jedoch bekomme ich das
o.g. Display einfach nicht ans laufen... vielleicht seht ihr ja meinen
Fehler und könnt mir helfen.
Zu den Randbedingungen: Ein "Anag Vision 0820"-Display mit
KS0066-Controller ist an einen ATMega32 über 8-Bit-Interface
angeschlossen.
Die Datenbits liegen an PORTC0-7. PORTB0 = Enable, PORTB1 = R/W, PORTB2
= RS.
Der Quelltext, mit dem ich versuche das Display zu betreiben:
1 | int main(void){
|
2 |
|
3 | //Initialization
|
4 |
|
5 | //Configure I/Os
|
6 | DDRA = 0b00000000;
|
7 | PORTA = 0b00000000;
|
8 |
|
9 | DDRB = 0b00000111;
|
10 | PORTB = 0b11111000;
|
11 |
|
12 | DDRC = 0b11111111;
|
13 | PORTC = 0b00000000;
|
14 |
|
15 | DDRD = 0b11111111;
|
16 | PORTD = 0b00000000;
|
17 |
|
18 | //Configure Timers
|
19 | TCCR0 = 0b00000101;
|
20 |
|
21 | pause(100);
|
22 |
|
23 | init_display();
|
24 |
|
25 | lcd_send(1, 0x66);
|
26 | lcd_send(1, 0x66);
|
27 | lcd_send(1, 0x66);
|
28 | lcd_send(1, 0x66);
|
29 |
|
30 | while(1){
|
31 |
|
32 | }
|
33 | }
|
34 |
|
35 | //Function definitions
|
36 |
|
37 | //Initialize the LCD
|
38 | void init_display(void){
|
39 | lcd_send(0, 0x30);
|
40 | lcd_send(0, 0x30);
|
41 | lcd_send(0, 0x30);
|
42 | lcd_send(0, 0x38);
|
43 | lcd_send(0, 0x08);
|
44 | lcd_send(0, 0x02);
|
45 | lcd_send(0, 0x0F);
|
46 | return;
|
47 | }
|
48 |
|
49 | //lcd send command
|
50 | void lcd_send(int type, int value){
|
51 | PORTB |= 1;
|
52 | PORTB &= 0b11111001;
|
53 | if(type == 1)
|
54 | PORTB |= 0b100;
|
55 | PORTC = value;
|
56 | PORTB &= 0b11111110;
|
57 | pause(30);
|
58 | PORTB |= 1;
|
59 | pause(30);
|
60 |
|
61 | return;
|
62 | }
|
63 |
|
64 | //Pause
|
65 | void pause(uint8_t length){
|
66 | uint8_t stop;
|
67 | stop = TCNT0 + length;
|
68 | while(TCNT0 < stop);
|
69 | return;
|
70 | }
|
Ist es richtig, dass die "Enable"-Leitung des Displays immer high ist
und zur Übernahme eines neuen Befehls auf low gezogen wird?
(=Ändern der Werte auf den Datenleitung bei EN = high?)
Was passiert ist folgendes: Beide Zeilen des Displays werden vollständig
eingeschaltet. Es ist weder ein Zeichen noch ein Cursor sichtbar...
Kann mir vielleicht jemand helfen?
Das Tutorial habe ich mir durchgelesen. Da wird leider nur die
Ansteuerung im 4-bit-Modus besprochen.
In Zahlreichen anderen Threads, bei denen es um das gleiche Problem
ging, wurden keine Lösungen gefunden?! Irgendwann waren die Threads dann
einfach tot...
Vielen Danke & schöne Grüße,
Alex