Hallo,
ich habe folgendes Problem:
Ich rufe die Zeit über eine RTC über I2c ab und möchte sie auf dem
Display (Displaytech 404B / KS0076) ausgeben. Alles läuft wie geschmiert
nur wenn die Sekunden von 19 auf 20 oder von 29 auf 30 springen, also
immer wenn Sek mod 10 = 0 ist, dann bleibt mein µC hängen.
Ein weiters Phänomen ist, dass wenn ich es in der dritte und viert Zeile
laufen lasse (egal welcher x-Wert) sich der µC nicht aufhängt. In der
ersten und zweiten Zeile muss ich einen x-Wert von 20 überschreiten,
damit sich der µC nicht aufhängt. Ich habe das ganze an zwei neuen und
baugleichen Displays getestet und bei beiden der gleiche Fehler.
Mit einem andern Display (Poltech) läuft es ohne Problme.
Nun habe ich mir mal die lcd.h und lcd4x40.h von CodeVison vorgenommen
und mal hier und da ein paar Änderungen vorgenommen und siehe da durch
ein kleines delay_ms(1) konnte ich das Problem beheben. Leider ist das
Ganze mehr oder weniger nach dem "try and error"-System abgelaufen und
daher weiss ich leider nicht wieso und weshalb gerade an dieser Stelle
das delay zur Problemlösung beigetragen hat hier ein Auszug der
modifizierten (also schon mit meinem zusätzlichen delay_ms(1) )
lcd4x40.lib:
void _lcd_ready(void)
{
#asm
ldi r26,0xf ;set as input
out __lcd_direction,r26
sbi __lcd_port,__lcd_rd ;RD=1
cbi __lcd_port,__lcd_rs ;RS=0
in r26,__lcd_port
lds r27,__en1_msk
__lcd_busy:
#endasm
_lcd_delay();
#asm
or r26,r27
out __lcd_port,r26 ;EN=1
#endasm
_lcd_delay();
#asm
in r30,__lcd_pin
andi r26,0xf3
out __lcd_port,r26 ;EN=0
#endasm
_lcd_delay();
#asm
or r26,r27
out __lcd_port,r26 ;EN=1
#endasm
_lcd_delay();
#asm
andi r26,0xf3
out __lcd_port,r26 ;EN=0
#endasm
_lcd_delay();
//***************************************************
delay_ms(1);
//**************************************************
#asm
sbrc r30,__lcd_busy_flag
rjmp __lcd_busy
#endasm
}
Vielleicht lönnt Ihr mir ja helfen. Übrigens 900µS sind schon wieder
zuwenig.
Gruß
Olli
PS: Mich würde interessieren, was dort in der _lcd_ready() eigentlich Schritt für Schritt abläuft
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.