Moin.
Ich habe ein Probem mit einem LC-Display (ANAG VISION AV0820) der einen
KS0066 Controller besitzt. Da ich jetzt seit fast zwei Tagen kein
Vortschritt mache bitte ich euch um hilfe.
Ich habe die Datenleitungen an den PORTC angeschlossen, die
Steuerleitungen an den PORTD. (E=PD0, R/W=PD1, RS=PD2). Kontrast und
Beleuchtung sind passend eingestellt, sodass ich bei anlegen der
Spannung die erste Zeile sehe. Nachdem ich den µController starte,
verschwindet diese wie gewollt. Mein Problem ist, dass ich gar nichts
sehe. Weder Zeichen noch den Cursor den ich vorher eingestellt habe.
Ich habe schon den Anschluss des LCD gerüft und die Zeiten variiert. Ich
würde ich freuen, wenn ihr mir helfen könntet das folgende Programm zu
verbessern.
Ich verwende einen Board von Pollin, einen Atmega16 und AVR Studio 5
falls das von Bedeutung ist.
PS:Ich habe die Funktion lcdwort irgendwo rauskopiert. Könnte mir jemand
kurz erklären was man da eigentlich macht?
MfG Nils
1 | /*
|
2 | */
|
3 | #ifndef F_CPU
|
4 | #define F_CPU 16000000
|
5 | #endif
|
6 |
|
7 | #include <avr/io.h>
|
8 | #include <util/delay.h>
|
9 |
|
10 |
|
11 | lcdenable()
|
12 | {
|
13 | _delay_ms(1);
|
14 | PORTD |= 0x01;
|
15 | _delay_ms(1);
|
16 | PORTD = 0x00;
|
17 | _delay_ms(1);
|
18 | }
|
19 |
|
20 |
|
21 | lcdinit ()
|
22 | {
|
23 |
|
24 | PORTC = 0x00;
|
25 | PORTD = 0x00;
|
26 |
|
27 | _delay_ms(40);
|
28 | PORTC = 0x30; //8bit
|
29 | lcdenable();
|
30 |
|
31 | PORTC = 0x30; //8bit
|
32 | lcdenable();
|
33 |
|
34 | PORTC = 0x30; //8bit
|
35 | lcdenable();
|
36 |
|
37 | PORTC = 0x38; //Funktion 8bit,number of lines,character front
|
38 | lcdenable();
|
39 |
|
40 | PORTC = 0x08; //Display off
|
41 | lcdenable();
|
42 |
|
43 | PORTC = 0x01; //clr
|
44 | lcdenable();
|
45 |
|
46 | PORTC = 0x06; //ENTRY MODE SET
|
47 | lcdenable();
|
48 |
|
49 | PORTC = 0x0F; //Display on
|
50 | lcdenable();
|
51 |
|
52 | PORTC = 0x01; //Display clr
|
53 | lcdenable();
|
54 |
|
55 | PORTC = 0x02; //home
|
56 | lcdenable();
|
57 |
|
58 | _delay_ms(20);
|
59 |
|
60 |
|
61 | }
|
62 |
|
63 | lcdout (char x)
|
64 | {
|
65 | PORTD = 0x04;
|
66 | _delay_ms(10);
|
67 | PORTC = x;
|
68 | _delay_ms(10);
|
69 | PORTD = 0x05;
|
70 | _delay_ms(10);
|
71 | PORTD = 0x00;
|
72 | }
|
73 |
|
74 |
|
75 | lcdwort( const char *data )
|
76 | {
|
77 | while( *data != '\0' )
|
78 | lcdout( *data++ );
|
79 | }
|
80 |
|
81 |
|
82 | int main(void)
|
83 | {
|
84 | DDRA = 0x00;
|
85 | DDRB = 0x08;
|
86 | DDRC = 0xFF;
|
87 | DDRD = 0xE7;
|
88 |
|
89 | PORTB = 0x08;
|
90 |
|
91 | lcdinit();
|
92 |
|
93 | lcdout(0x34);
|
94 | lcdout('s');
|
95 | lcdwort("Hallo");
|
96 |
|
97 |
|
98 | while (1)
|
99 | {
|
100 | lcdout('s');
|
101 | _delay_ms(1000);
|
102 |
|
103 | }
|
104 |
|
105 | return 0;
|
106 | }
|