Guten Morgen zusammen.... Ich habe ein bisschen ein merkwürdiges Problem. Auf meinem Print habe ich einen Atmega16 mit einem 12Mhz Quarz. Dazu ein Display mit einem KS0066 Controller welches ich im 4Bit Mode betreibe. Nun das Problem. Wenn ich Aus Eclipse mit AVRDude den uC Flashe, so funktioniert das Display zu 90% einwandfrei. Wenn ich danach jedoch den ISP anschluss entferne und wieder anstecke (Power Off -> On) dann geht das Display nicht mehr. Es initialisiert sich (Balken sind weg) aber es zeigt keinen Text an. Flashe ich den Controller wieder dann geht es wieder. Jedoch nur direkt nach dem Flashen. Am Controller liegt es nicht, denn der macht den Rest welcher nach dem LCD Init kommt problemlos. Das Display ist auch nicht defekt, habe es auf einem Anderen Print getestet. Hoffe ihr habt tipps... Anbei der Schaltplan Hier die Initialisierung
1 | #define LCD_RW_1 PORTC |= (1<<PC3)
|
2 | #define LCD_RW_0 PORTC &= ~(1<<PC3)
|
3 | #define LCD_RS_1 PORTC |= (1<<PC2)
|
4 | #define LCD_RS_0 PORTC &= ~(1<<PC2)
|
5 | #define LCD_E_1 PORTB |= (1<<PB4)
|
6 | #define LCD_E_0 PORTB &= ~(1<<PB4)
|
7 | |
8 | ///////////////////Port Konfiguration
|
9 | // Ist in wirklichkein im main drinn
|
10 | |
11 | DDRA = 0x00; |
12 | DDRB = 0x1C; |
13 | DDRC = 0xFF; |
14 | DDRD = 0xB0; |
15 | |
16 | |
17 | void send_char(unsigned char ucData) |
18 | {
|
19 | LCD_RW_0; //Write |
20 | LCD_RS_1; //Daten |
21 | |
22 | PORTC = (PORTC & 0x0F) | (ucData & 0xF0); //High Nibble |
23 | _delay_us(100); |
24 | LCD_E_1; |
25 | _delay_us(500); |
26 | LCD_E_0; |
27 | _delay_us(500); |
28 | |
29 | _delay_ms(5); |
30 | |
31 | PORTC = (PORTC & 0x0F) | ((ucData << 4) & 0xF0); //High Nibble |
32 | _delay_us(100); |
33 | LCD_E_1; |
34 | _delay_us(500); |
35 | LCD_E_0; |
36 | _delay_us(500); |
37 | }
|
38 | |
39 | void send_cmd(unsigned char ucData) |
40 | {
|
41 | LCD_RW_0; //Write |
42 | LCD_RS_0; //Command |
43 | |
44 | PORTC = (PORTC & 0x0F) | (ucData & 0xF0); //High Nibble |
45 | _delay_us(100); |
46 | LCD_E_1; |
47 | _delay_us(500); |
48 | LCD_E_0; |
49 | _delay_us(500); |
50 | |
51 | _delay_ms(5); |
52 | |
53 | PORTC = (PORTC & 0x0F) | ((ucData << 4) & 0xF0); //High Nibble |
54 | _delay_us(100); |
55 | LCD_E_1; |
56 | _delay_us(500); |
57 | LCD_E_0; |
58 | _delay_us(500); |
59 | }
|
60 | |
61 | void lcd_zeile(unsigned char ucZeile, unsigned char ucPos) |
62 | {
|
63 | send_cmd(0x80 + ((ucZeile * 0x40) - 0x40) + ucPos); |
64 | _delay_ms(10); |
65 | }
|
66 | |
67 | void lcd_init(void) |
68 | {
|
69 | _delay_ms(1000); |
70 | |
71 | send_cmd(0x20); |
72 | _delay_ms(50); |
73 | |
74 | send_cmd(0x28); |
75 | _delay_ms(50); |
76 | |
77 | send_cmd(0x28); |
78 | _delay_ms(50); |
79 | |
80 | send_cmd(0x28); |
81 | _delay_ms(50); |
82 | |
83 | send_cmd(0x0C); |
84 | _delay_ms(50); |
85 | |
86 | send_cmd(0x01); |
87 | _delay_ms(50); |
88 | |
89 | send_cmd(0x06); |
90 | _delay_ms(50); |
91 | |
92 | send_cmd(0x28); |
93 | _delay_ms(50); |
94 | |
95 | send_cmd(0x02); |
96 | _delay_ms(10); |
97 | |
98 | lcd_zeile(1,1); |
99 | send_char('T'); |
100 | send_char('e'); |
101 | send_char('s'); |
102 | send_char('t'); |
103 | |
104 | }
|
Danke schonmal