PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD Ausgaben beschleunigen



chr-mt
31.05.2005, 09:16
Ich weiß nicht, ob das schon mal hier besprochen wurde...
Kleiner Trick um die LCD Ausgaben von Bascom zu beschleunigen:

Bascom steuert die LCDs im 4-Bit Mode ja ohne Abfrage des Busy-Bits an (WR =0)
Das Timing ist "sicher" gewählt, also recht langsam, um das Display nicht zu überfordern.
Man kann die Ausgaben aber beschleunigen, indem man Bascom "anlügt" was die Quarzfrequenz angeht.
Dadurch ändern sich allerdings auch alle anderen Timings, also betrifft das zB. die Wait Befehle und die Baudrate.
Ich habe gute Erfahrungen mit einigen Schaltungen gemacht, die mit 16MHz liefen (MEGA32)

Das sieht dann zB. für die Baudrate so aus:

$crystal=8000000 'tatsächlich ist es 16 MHz
Baud=9600 'tatsächlich ist die Baudrate 19200

Bis jetzt gab's keine Probleme, weder mit dem Display, noch mit der Schnittstelle.


Gruß
Christopher

PicNick
31.05.2005, 09:23
Als Workaround ist das wohl ok, weil alles ok ist, was funktioniert.
Aber die möglichen Side-effekts stell' ich mir schon grausig vor.

chr-mt
31.05.2005, 12:07
Hi,
läuft zB. in einer Fernsteuerung die ich gebaut habe perfekt seit über einem Jahr. Ohne Side-Effects. Bei knapp 2800 Zeilen Bascom Quellcode .... ;)
Und in meinen anderen Projekten läuft's auch perfekt so.
Ich mache das mittlerweile standardmäßig.

Wo siehst du Probleme mit Side Effects ?
Solange man im Kopf hat daß man die Zeiten ändern muß, sehe ich eigentlich keine Probleme.. aber man weiß ja nie.

Gruß
Christopher

PicNick
31.05.2005, 12:16
Solange man im Kopf hat daß man die Zeiten ändern muß, ..
Genauso hab ich's gemeint. Immerhin stimmt kein einzige Waitms. Aber wie ich vorher dazusagte, ein funktionierendes Programm ist ein recht gutes Argument, da sag' ich ja eh nix mehr.
:-({|=

pebisoft
31.05.2005, 17:08
ich habe im bascom-code eine asmroutine zum ansprechen des display reingebaut. ist sogar schneller als mit dein trick.
mfg pebisoft

Marco78
31.05.2005, 19:31
BASCOM bietet von Haus aus auch die Möglichkeit das Busy-Flag auszulesen.
Nix gegen deine Lösung. Ich glaube das es funktioniert! Und wenn man im Hinterkopf behält die waitms zu verdoppeln und sonst alles was Zeiten benötigt beachtet ist es auch ok.

Ich wollte es nur der Vollständigkeit halber erwähnen. LCD4BUSY.LBX und LCD4BUSY.BAS mit Beispielen die Dateien dafür.
Der Nachteil ist da nur, das wieder eine Leitung mehr benötigt wird!

chr-mt
31.05.2005, 21:37
BASCOM bietet von Haus aus auch die Möglichkeit das Busy-Flag auszulesen.
Ist mir noch gar nicht aufgefallen...
Werde es mir mal ansehen.
Ist warscheinlich auf jeden Fall eleganter als seinen Compiler anzuschwindeln ;)

Danke für den Tipp

Gruß
Christopher

oe9vfj
02.06.2005, 10:27
Es gibt auch die Library LCD4.LIB. Diese arbeitet ohne die zusätzlichen Status - Leitung. Der resultierende Code ist kürzer, da die Daten pro Nibble (4 Bit) in einem auf das Port geschrieben werden und nicht von einer ungeordneten Zuordnung der Daten-Bits auf die LCD-Pins ausgegangen wird.
Dabei müssen die 4 LCD-Datenleitungen in einem Nibble des Ports verdrahtet sein. Etwas Anpassung an das eigene Equipement ist nötig.
Dort sind auch die Wartezeiten hardcodiert enthalten wie z.B. Waitms oder @genus(100), welches eine ASM-Compiler Directive darstellt, um eine Codesequenz für 100µSec zu erzeugen.

Da kannst Du dann die Zeiten soweit verkürzen, solange das LCD sicher arbeitet.