Servus! Die Ansteuerung des Grafikdisplays geht einwandfrei. Ich habe in einem externen EEPROM (Controller hat keines) den Zeichensatz für das Display abgelegt. Ich kann auch einzeln Buchstaben anzeigen - das ist gar kein Problem. Jetzt möchte ich eine Funktion schreiben, dass ich Texte ausgeben kann. Hier habe ich aber das Problem, dass ich nebenher noch andere "zeitkritische Dinge" mit dem Controller machen muss. Also möchte ich ihn nicht in einer Schleife festhängen lassen, bis er die Zeichen ausgelesen hat und anschließend noch warten, bis er diese auch auf das Display gespielt hat. Das TWI und das SPI laufen mit Interrupts. Also eigentlich kein Problem. Wenn ich jetzt aber z.B. zwei mal etwas schreiben lasse: write_lcd("Test"); cursor_lcd(2,33); write_lcd("Test2"); Dann geht er ja bereits zu cursor_lcd weiter, obwohl er mit dem ersten Schribvorgang noch nicht fertig ist. Irgendwie stehe ich grade auf dem Schlauch, wie ich das richtig lösen kann. Grüße Thomas
Hallo Thomi, das ist aber frech von dem bösen, bösen Controller. Wenn er wieder mal sowas macht, mußt Du ihn unbedingt bestrafen. Laß Dir das keineswegs gefallen! Mein Vorschlag, wenn er wieder mal einfach weitergeht, dann schick ihn auf der Stelle zu write_lcd("Test"); zurück. Wenn er einfach nicht verstehen will, was Du von ihm willst, kannst Du ihn auch foltern, indem Du ihm für 5 Minuten die Spannung nimmst. Das mit diesen ungehörigen Controllern kommt mir immer öfter zu Ohren! Man soll es nicht glauben. Olaf
Hm - danke für die tolle Antwort! Wenn dich die Frage nervt, dann überles sie doch einfach. Zwingt dich doch keiner dazu - zu antworten! Für alle anderen. Ich wäre für eine kleine Idee, wie sowas gemacht wird sehr dankbar. Ich bin inzwischen selbst auf eine Lösung gekommen. Ich kann ja das Warten doch in einer Schleife machen. Die wichtigen zeitkritischen Funktionen kann ich dann über den Timerinterrupt machen. Danke! thomas
Laß Dich nicht irritieren ... manche Leute haben einen eigenartigen Humor ... (-; Es gibt -- wie so oft -- mehrere Möglichkeiten, die je nach Anwendungsfall besser oder schlechter geeignet sein können. Ich kenne die "Vorgeschichte" nicht, aber vermute, daß Du ein I2C-EEPROM und einen Graphik-Controller über SPI hast und beide Interfaces hardwaremäßig im Controller. Was ich nicht weiß: hat Dein Controller unterschiedliche Interruptprioritäten und wie kritisch sind die Antwortzeiten für die zeitkritischen Funktionen. Die vier Kombinationen: 1. Ohne Interrupts: I2C-Zugriff und SPI-Übertragung haben ein konstantes Timing. Anstelle einer Warteschleife könnte man die zeitkritischen Routinen aufrufen lassen, ggf. in Häppchen korrekter Länge aufgeteilt. Das muß gut geplant sein, ist nicht immer hilfreich und ist fast nie der sinnvollste Weg. 2. Displayansteuerung mit Warteschleifen, Realtimefunktionen mit Interrupts: so hast Du es wohl jetzt gemacht und so ist es in der Regel ausreichend. Wenn es aber z.B. auf Energieeffizienz ankommt, will man den Controller lieber mal schlafen legen, anstatt ihn in Schleifen zählen zu lassen. 3. Displayansteuerung mit Interrupts, Realtimefunktionen im main. Klingt vielleicht seltsam, ist aber oft der einfachste Weg, wenn es einen Haufen Dinge gibt, die "jede Runde" abgearbeitet werden müssen. Die Displaysachen werden dabei in einen Puffer geschrieben, die verschiedenen Interrupts geben einander das Staffelholz in die Hand: wenn Bitmaps aus dem EEPROM gelesen werden, wird ein Interrupt auf das Ende des Ladevorgangs gesetzt, das die Bitmap dann ans Display überträgt und wieder die andere aufruft, solange der Puffer noch nicht leer ist. Ist eigentlich einfacher als es klingt. 4. Beides mit Interrupt. Geht natürlich nur, wenn es entweder Interruptprioritäten gibt oder die Displayinterruptroutinen so kurz sind, daß die Echtzeit nicht gefährdet wird. Bei komplexen Aufgaben wird man mit einer solchen Lösung später den wenigsten Ärger haben. Soweit meine Erfahrung!
Hallo Philipp! Vielen Dank für deine super - ausführliche Antwort. Du hast Recht. Es handelt sich um einen Grafik-Controller über SPI und ein I2C EEPROM. Beide Interfaces sind im Controller hardware integriert. Ich glaube, dass die zweite Lösung in meinem Fall am Besten ist. Die Displayroutinen sind absolut zeitunkritisch (wie auch der Zugriff auf das EEPROM). Die zeitkritischeren Dinge werde ich dann über die Interrupts erledigen lassen. Sollten die Interrupts des TWI oder des SPI die zeitkritischen stören, habe ich bei dem Controller auch die Möglichkeit, Interruptprioritäten zu vergeben. Vielen Dank nochmals für deine Antwort! Liebe Grüße Thomas
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.