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.