Hallo alle zusammen, ich bin gerade dabei ein Radio um den SI4735 zu entwickeln. Nun hab ich auch ein Grafikdisplay dafür vorgesehen, wo sich mir jetzt die Frage stellt: Wie sollte man das Display am Besten aktualisieren? Also, ich hab bis jetzt in die Richtung entwickelt, dass ich immer nur Teile des Displays innerhalb einer while Schleife aktuallisiere, wenn noch Zeit ist. While(1){ ...... ...... ...... ...... While(zyklus==0) { Sender Name schreiben; RDS Text...etc. } } Zyklus wird per Timer alle 20ms aus 1 gesetzt. Da das aber hin und wieder dazu führt, dass sich der I2C, mit dem das Display angesteuert wird, auf hängt, hab ich mir jetzt überlegt: Ich lege ein Daten Array vom gesamten Display an und ändere die Daten dann erstmal nur in diesem. Dann brauch ich nicht entscheiden was wann aktuallisiert wird, sondern schreibe immer nur den den gesamten Inhalt neu. Was meint ihr, ist dass die bessere Lösung? Gruß Patrick
Da wird sich der I2C genauso aufhängen. Solange du den Fehler nicht gefunden hast, bringen Änderungen, die damit gar nichts zu tun haben, nichts. Oliver
Danke für die schnelle, Anwort. Ich kann den Fehler schon ganz gut eingrenzen. Der I2C hängt in der Stop Anweisung. Meiner Ansicht nach wird unter ganz bestimmten Abbruch-Bedingungen, die auftreten, wennn sich Zyklus ändert, die Stop Anweisung zwei mal ausgeführt. Wenn ich nur noch ein Array hab, ist die Anzahl an möglichen Abbruch-Bedingungen deutlich geringer. Was ich aber gerne wissen möchte ist, ob man es grundsätzlich immer so machen sollte, dass man den gesamten Inhalt des Display aktualisiert oder bereichsweise? Gruß Patrick
Patrick A. schrieb: > Ich lege ein Daten Array vom gesamten Display an und ändere die Daten > dann erstmal nur in diesem. Dann brauch ich nicht entscheiden was wann > aktuallisiert wird, sondern schreibe immer nur den den gesamten Inhalt > neu. > Was meint ihr, ist dass die bessere Lösung? Ja, genau so macht man es besser. Wobei - du brauchts niucht alle 20 ms den unveränderten Inhalt übertragen - warum auch? Wenn sich was im Display-Puffer ändert, dann setze ein flag. In deiner Interupt-Routine schaust du nach, OB sich was geändert hat. Wenn nicht - dann wieder raus. Wenn ja: Inhalt zum display übertragen, Flag zurücksetzen und dann wieder raus. Wenn du es machen kannst, kannst du natürlich noch geeignet mitnotieren, WO sich was geändert hat, und nur diesen Teil zum Display bringen (wenn sich das Display so geeignet ansteuern läßt)
:
Bearbeitet durch User
Hallo, Vielen Dank erst mal für eure Antworten!!! Hab es jetzt so umgesetzt, dass ich immer den gesamten Inhalt übertrage. Funktioniert jetzt einwandfrei. Keine Fehler mehr mit I2C. Gruß Patrick
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.