Hallo,
ich kämpfe hier gerade mit dem ATTiny und einem HD44780 kompatiblen LCD
(2x16 Zeichen).
Kurz vorab:
Vor einiger Zeit habe ich ein kleines Test-Programm geschrieben was
das LCD im 4bit Modus ansteuert und ein paar Texte anzeigt.
Soweit so gut... hat auch funktioniert.
Nun wollte ich nach einiger Zeit daran weiterwerkeln:
- Neuen ATTiny2313 aufs (Pollin) AVR Board gelegt
- LCD angeschlossen
- Software nochmal neu übersetzt (microPascal)
- Mit PonyProg geflasht
Jetzt habe ich folgenden Fehler:
Wenn ich den µC starte, habe ich meistens Müll auf dem LCD.
Sobald ich die Stomzufuhr kappe (ohne die Platine zu bewegen) und wieder
Saft drauf gebe passiert es in manchen Fällen, dass die Zeichen richtig
angezeigt werden.
Allerdings wird manchmal auch der "Zeilenumbruch" nicht interpretiert
und ich habe statt
Testausgabe
Zeile 2
nur
Testausgabe&Zeile2
da stehen.
Ich habe schon alle möglichen Verbindungen und Software geprüft und weiß
echt nicht woran es noch liegen könnte. - Denn so hat es ja schonmal
problemlos funktioniert.
Damit eure Glaskugel in der Orginalverpackung bleiben kann, hier noch
ein paar Infos:
Anschluss:
RS -> PORTD 0
EN -> PORTD 1
D4 -> PORTD 2
D5 -> PORTD 3
D6 -> PORTD 4
D7 -> PORTD 5
Software (microPascal)
1 | program lcdtest;
|
2 |
|
3 | var LCD_RS : sbit at PORTD0_bit;
|
4 | var LCD_EN : sbit at PORTD1_bit;
|
5 | var LCD_D4 : sbit at PORTD2_bit;
|
6 | var LCD_D5 : sbit at PORTD3_bit;
|
7 | var LCD_D6 : sbit at PORTD4_bit;
|
8 | var LCD_D7 : sbit at PORTD5_bit;
|
9 |
|
10 | var LCD_RS_Direction : sbit at DDD0_bit;
|
11 | var LCD_EN_Direction : sbit at DDD1_bit;
|
12 | var LCD_D4_Direction : sbit at DDD2_bit;
|
13 | var LCD_D5_Direction : sbit at DDD3_bit;
|
14 | var LCD_D6_Direction : sbit at DDD4_bit;
|
15 | var LCD_D7_Direction : sbit at DDD5_bit;
|
16 |
|
17 |
|
18 | begin
|
19 | DDRB := 0x00;
|
20 | PORTB := 0x7F;
|
21 |
|
22 | Lcd_Init();
|
23 | Lcd_Cmd(_LCD_CLEAR);
|
24 | Lcd_Cmd(_LCD_CURSOR_OFF);
|
25 |
|
26 | LCD_Out(1,1, 'Testausgabe');
|
27 | LCD_out(2,1, 'Zeile 2');
|
28 |
|
29 | Delay_ms(4000);
|
30 | LCD_Out(2,1, 'neue Zeile 2');
|
31 |
|
32 | Delay_ms(4000);
|
33 |
|
34 | Lcd_Cmd(_LCD_CLEAR);
|
35 | end.
|