Das ist bekannt ,damit das LCD nicht vom Speed überfahren wird.
Wenn Du den Quarz viel langsamer angiebst wird schneller.
Testen was geht und bei den Baud berücksichtigen.
Gento
Hallo!
Wenn ich einfache Sachen über mein LCD ausgebe wird der uC extrem lahm!
Die LED toggelt gerade mal mit 50Hz! Ohne die Ausgabe an das Display sind es 670kHz.Code:$regfile = "m8def.dat" $crystal = 8000000 Config Portb.0 = Output Config Lcd = 16 * 1 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portd.5 , Rs = Portd.4 Config Lcdbus = 4 Cursor Off Cls Do Toggle Portb.0 Locate 1 , 1 : Lcd "1,22929" Loop End
Hat Jemand ne Ahnung wieso die Ausgabe den uC so langsam macht?
uC im Eimer? Oder gibt das Display irgendwas zurück?
Mit 50Hz kann mn ja nicht mehr viel anfangen
Gruss
Alex[/code]
Das ist bekannt ,damit das LCD nicht vom Speed überfahren wird.
Wenn Du den Quarz viel langsamer angiebst wird schneller.
Testen was geht und bei den Baud berücksichtigen.
Gento
Baudrate spielt dabei eine Rolle?
in einer loop schleife aufs display draufdonnern ist auch nicht sonderlich geschickt ... wie schnell willst du denn da änderungen wahrnehmen?
ein display braucht seine zeit und meldet wenn es nicht bereit ist "busy" zurück
hatte das mal versehentlich in einem c-code, da hat das display dann nur noch wirres zeug angezeigt
hi,
Dein Display hat dann auch eine Darstellungs-Frequenz von 50 Hz.
Das muß sicherlich nicht sein.
Für eine einfache Anzeige reicht ein kleines Unterprogramm welches man z.B: regelmäßig über Interrupt oder unregelmäßig bei Bedarf anspringt um das Display mit den neuen Daten zu füttern.
Dann verbleibt Dir mehr Rechenzeit für andere Aufgaben.
liebe Grüße,
Klingon77
Der kürzeste Weg zwischen zwei Menschen ist ein Lächeln - http://www.ad-kunst.de
Moin,
Wenn ich die Ausgabe in eine 100Hz Timerroutine packe, ändert sich nichts am Problem. Ist evlt das Display im eimer bzw gibt es etwas zurück?
Gruss
Alex
hoi,Zitat von Brantiko
nee, vermutlich ist gar nix kaputt, sondern das display einfach zu lang beschäftigt, und dann wird halt gewartet, bis es nicht mehr busy ist, und das dauert.
mfg jeffrey
Okay, aber wie kann ich in ein Zeitkritisches Porgramm ein Display implementieren ohne dass alles aus dem Ruder läuft?
Gruss
Alex
Hallo Alex!Zitat von Brantiko
Indem du alles Zeitunkritische in die Mainloop verlagerst und alles was zeitkritisch ist in Timer-Interrupthandler (Interrupt Service Routine, ISR).
Das LCD muss auf jeden Fall in der Mainloop angesteuert werden. So langsame Befehle haben in einer ISR nichts **absolut gar nichts** in einer ISR zu suchen.
Tausche deine Programmlogik um. Lasse die LEDs in einer ISR blinken und die LCD-Ansteuerung kommt in die Mainloop.
Achte darauf, dass die ISR nicht lange dauert. Alles was länger dauern kann, muss in die Mainloop.
mfg
Gerold
:-)
Hallo Alex,
Da die LCD langsam sind, muss man sich in der Programmlogik überlegen, was man anzeigen will.... wie kann ich in ein Zeitkritisches Porgramm ein Display implementieren ohne dass alles aus dem Ruder läuft?
Beispiel: Wenn das Display eine Uhr darstellt, wird es nur dann neu beschrieben, wenn sich die Sekunde ändert.
Genauso must du definieren, was dargestellt werden soll. Evtl. kann man auch nur einzelne Zahlen oder Zeichen aktualisieren und nicht das ganze LED neu beschreiben.
Gruß Dirk
Lesezeichen