Als Workaround ist das wohl ok, weil alles ok ist, was funktioniert.
Aber die möglichen Side-effekts stell' ich mir schon grausig vor.
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
Als Workaround ist das wohl ok, weil alles ok ist, was funktioniert.
Aber die möglichen Side-effekts stell' ich mir schon grausig vor.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
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
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.Zitat von chr-mt
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
ich habe im bascom-code eine asmroutine zum ansprechen des display reingebaut. ist sogar schneller als mit dein trick.
mfg pebisoft
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!
Ist mir noch gar nicht aufgefallen...Bascom bietet von Haus aus auch die Möglichkeit das Busy-Flag auszulesen.
Werde es mir mal ansehen.
Ist warscheinlich auf jeden Fall eleganter als seinen Compiler anzuschwindeln
Danke für den Tipp
Gruß
Christopher
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.
Viele Grüße
Josef
-------------------------------------------------------------------------------------
DOS-File System für BASCOM-AVR auf http://members.aon.at/voegel
Lesezeichen