Hallo,
ich hatte vor kurzen schon einmal hier geschrieben.
Display Controller ist der folgende:
UC1698
Glaube aber es ist ein semantisches Problem. Habe jetzt folgende
Funktionen erfolgreich realisiert:
In der negiere_pixel Funktion frage ich das jeweilige Bit ab. Wenn es
gesetzt ist wird es gelöscht, ansonsten gehe ich davon aus, dass es
nicht gesetzt ist und setze es.
Was ich jetzt beobachte, wenn ich ein ganzes Fenster negiere, dass immer
nur die ersten 4 Bits negiert werden und die darauffolgenden nicht.
Sieht jemand wo sich der Fehlerteufel eingeschlichen hat?
Danke
> Hast Du schon mal in Dein C-Buch gesehen, was % macht?
Ok ist editiert. Danke für den Verbesserungsvorschlag.
Jemand ne Idee wo das eigentliche Problem liegen könnte?
Luther B. schrieb:> Schon mal XOR (^) probiert?void neg_pixel(unsigned char zeile,> unsigned char spalte) // 1,0> {> unsigned char zahl = spalte % 8;> unsigned int hilf = spalte / 8;>> shadow_RAM[hilf + zeile * 240/8] ^= bitMask[zahl];> }
Ich bin wieder mal dumm.
Wesentlich eleganter und funktioniert tadellos.
Danke.
Verstehe trotzdem nicht 100% warum das vorherige Bsp (auch wenn es sehr
unschön ist) nicht funzt.
Pixel schrieb:> UC1698..
Nein, das Problem hat mit dem konkreten Controllertyp nix zu tun.
Du solltest lieber nicht mit void Funktionen wie PutPixel oder
DeletePixel arbeiten. Schreibe lieber sowas wie
PIXELTYPE Pixel ( int X, int Y, PIXELTYPE Farbe)
und laß diese Funktion einfach den vorherigen Zustand des Pixels
zurückliefern. Das ist universeller und läßt sich ohne wirkliche
Strukturänderungen auch auf Displays unterschiedlicher Farbauflösungen
verwenden. Nee.. nicht die konkrete Funktion, sondern die Headerdatei,
die die treiberinternen Dinge vom allgemeinen Programm abschirmt.
Guck die mal den angefügten Code an, speziell dort CgPixel_at (...
Dieses Stück Code ist für das Pollinsche Display
"https://www.pollin.de/shop/dt/MTYwOTc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Displays/LCD_Grafikmodul_VG_G120751_1WRNNA.html"
gedacht. Die Details, wo in welchem Byte denn nun das konkrete Pixel zu
finden ist, mußt du anhand deines konkreten Displays selber festlegen
und den Code entsprechend anpassen.
W.S.