PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt stört Grafik-LCD-Darstellung. Abhilfe möglich?



malthy
08.04.2007, 19:32
Hallo zusammen!

ich habe folgendes Problem: ich löse per timer0 in festen zeitlichen Abständen einen Interrupt aus, in dem dann ein Unterprogramm ausgeführt wird. Das klappt soweit auch tedellos. Allerdings schreibe ich im Hauptprogramm mittels der von BASCOM zur Verfügung gestellten Befehle permanent etwas auf ein Grafik-LCD (240*128 Pixel, Controller T6963). Der Interrupt stört nun augenscheinlich die Darstellung auf dem LCD, denn dieses zeigt nur noch sich ständig ändernden Müll ("Karomuster", wilde Zeichenfolgen). Kann mir 1.) jemand erklären, was da überhaupt vor sich geht und kennt 2.) jemand eine Möglichkeit, wie ich das unterbinden kann? Wollte zumindest mal gefragt haben, bevor ich mich damit abfinde...

Vielen Dank!
malthy

bertl100
08.04.2007, 21:21
Die Übertragung vom µC zum Display kann nie so schell sein wie der Controller selbst. Muss denn permanent etwas dargestellt werden?
Wenn zwischen den Übertragungen etwas Zeit wäre, so 30 mS oder so
dann wär das doch akzeptabel.
Kürzere Darstellungen kannst du mit dem Auge doch gar nicht wahrnehmen.
Es gibt in Bascom eine .lib mit der diese zeitkritische Anwendung ertschärft werden kann
lcd4busy oder so.

MFG

Bertl

malthy
09.04.2007, 12:03
Hallo,

eigentlich will ich nur exakt alle 250 ms ein Unterprogramm anspringen. Währenddessen kann auf dem LCD alles mögliche passieren. Es würde im Prinzip genügen, das LCD seltener (1/sec) upzudaten. Da die LCD-Ausgabe abhängig ist von Benutzerreaktionen (Tastendruck u.ä.), könnte es aber sein, dass der Interrupt dennoch gerade angesprungen wird, während das Hauptprogramm auf dem LCD was ändern möchte. Und dann würde sich wiederrum Chaos ergeben (sorry, wenn ich mich nicht sonderlich klar ausgedrückt habe...). Ggf. muss ich die Sache doch ohne Interrupts lösen, und alles sauber sequentiell abgearbeiten, vielleicht mit Waitms das Timing einstellen...

Dank&Gruß,
malthy

linux_80
09.04.2007, 12:51
Zur Not könntest Du während den LCD-Befehlen global die Interrupts sperren, dann kann da nix passieren, und die inzwischen aufgetretenen IRQs werden anschliessend ausgeführt.

Mit Wait irgendwas Timen ist noch ungünstiger, da in dieser Zeit der AVR überhaupt nix anders machen kann, ausser IRQs !

@bertl100
Die GrafikLCDs arbeiten standardmässig mir der Busy-Abfrage (falls vorhanden), die lcd4busy ist nur für TextLCDs.