mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD Probleme KS0076


Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: Mich würde interessieren, was dort in der _lcd_ready() eigentlich 
Schritt für Schritt abläuft

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.