Forum: Mikrocontroller und Digitale Elektronik attiny2313 und lcd - problem mit ansteuerung


von Björn (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

Björn schrieb:
> Damit eure Glaskugel in der Orginalverpackung bleiben kann, hier noch
> ein paar Infos:
> ...
> Lcd_Init();

Informationsgehalt gleich null.
Also doch Glaskugel auspacken.

Wichtig wäre, wie sieht denn der Code der Lcd_Init aus?


Peter

von Björn (Gast)


Lesenswert?

Das ist eine Funktion aus der microPascal lib.

(Wie gesagt, die Software habe ich nur neu übersetzt, nicht modifiziert)

von Peter D. (peda)


Lesenswert?

Björn schrieb:
> Das ist eine Funktion aus der microPascal lib.

Meine Erfahrung ist, daß viele LCD-Inits fehlerhaft oder zumindest 
unsicher sind.
Der Grund ist, daß das HD44780-Datenblatt im 4Bit-Init einen Fehler 
enthält, der auch in allen Nachfolgern so steht.
Es fehlt die Wartezeit (100µs) nach dem dritten 8Bit-Mode Befehl (Figure 
24 4-Bit Interface).


Peter

von Krapao (Gast)


Lesenswert?

Du kannst auch testweise in den AVR Fuses die Startzeit nach dem 
Power-On Reset hochsetzen und den Brownout-Level hoch setzen. Die 
maximale Zeit ist beim POR und externem Quarz IMHO 64ms.

Das kann bei einigen schnellen LCDs bereits reichen, dass deren 
Power-On-Reset fertig ist und so eine an sich zu knappe Wartezeit vor 
einem Softreset-Versuch in einer lcd_init() übertüncht wird.

von Björn (Gast)


Lesenswert?

Danke für die Unterstützung!

Jetzt funktioniert es wieder...

Im Prinzip hatte Peter recht.
Ich habe mal die Software "gedowngraded" und nochmal mit den alten lib's 
übersetzt.

Ich bin eigentlich nicht davon ausgegangen, dass die Software keine 
Bananaware ist und die neue Version ausreichend getestet wurde.

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
Noch kein Account? Hier anmelden.