Ein Tipp von mir, wie ich es auch immer gemacht habe und immer noch mache bis die Displays Leben zeigen:
Baue zunächst eine "lange" Warteschleife die "mit Sicherheit" mindestens 100ms dauert.
Dann benutze diese "überall". So kannst Du zunächst mal ein Timing Problem ausschliessen,
wenn es dann noch nicht geht, liegt das Problem bei der Ansteuerung selbst.
Bis das Display läuft, solltest Du generell die Lange Wartezeit benutzen.
Auch bei den Signalen von Enable RS usw, LAAAAANGE Schleifen zum Testen, das tut ja keinem weh....
Man verheddert sich sonst. Schnelligkeit Optimierung erst wenn das Display läuft.
Es scheint ja noch nicht einwandfrei geklärt zu sein, wie lange deine Funktionen wirklich warten
Dann fällt mir grade noch auf:
Du initialsierst dein Display dauernd neu:
ich würde die Initialisierung wohl eher so machen:
Code:
rcall lcd_init ; Initialisierung nur EINMAL
DSP_MOD:
....
rjmp dsp_mod ; Hauptschleife ohne neue Inititialisierung
Das SPH Register in deinem Tiny24 existiert tatsächlich nicht, hat wkrug recht, das gibts erst beim Tiny84 mit 512 KByte RAM
Die Initialisierung gleich beim Start für den Stack scheint okay und somit universell. Ich denke das kann bleiben.
Es gibt jedoch Controller die bei derartigen Zugriffen (auf Registern die nicht existieren) mit einer Speicherschutzverletzung reagieren und das System anhalten,
ich glaub aber nicht bei deinem.
Mich wunderte zudem noch der "OUT" Befehl für den Stackpointer:
Aber der Stackpointer liegt tatsächlich im IO Bereich, ungewöhnlich aber völlig korrekt.
Siro
Lesezeichen