Forum: Mikrocontroller und Digitale Elektronik Grafikdisplay Grunsätzliche Frage zur Ansteuerung


von Patrick A. (Gast)


Lesenswert?

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

von Oliver (Gast)


Lesenswert?

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

von Patrick A. (Gast)


Lesenswert?

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

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

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
von Patrick A. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.