Forum: Mikrocontroller und Digitale Elektronik SSD1289 Portrait/Landscape Mode Frage


von Joel B. (Firma: µGFX) (tectu)


Lesenswert?

Hallo Leute,

Ich habe auf der Seite 43 im Datenblatt (link unten) des SSD1289 Display 
Controllers gesehen, dass ich über die drei Bits ID[1:0] sowie AM ganz 
einfach die Orientierung (Portrait/Landscape) ändern kann, um somit 
nicht meine Library Softwareseitig zum "Schreiben auf der Seite" bringen 
erweitern muss.
Da dachte ich, mache ich das mal so:
1
    void lcdSetOrientation(uint8_t orientation) {
2
        uint16_t temp;
3
     
4
        temp = lcdReadReg(0x0011);
5
     
6
        switch(orientation) {
7
            case 0:
8
                lcdWriteReg(0x0011, temp | 0x0038); // Portrait (default)
9
                break;
10
            case 1:
11
                lcdWriteReg(0x0011, temp | 0x0030); // Landscape
12
                break;
13
            case 2:
14
                lcdWriteReg(0x0011, temp | 0x0000);
15
                break;
16
            case 3:
17
                lcdWriteReg(0x0011, temp | 0x0000);
18
                break;
19
        }
20
    }

Leider passiert da nicht viel, im Gegenteil: selbst wenn ich 2 oder 3 
als Paramter übergebe, wird ein Zeichnen auf dem LCD unmöglich.

Hat jemand von euch Erfahrung damit? Muss ich noch etwas anderes machen, 
als die drei Bits zu manipulieren? Etwas neu Initialisieren?


Danke für euere Hilfe!

~ Tectu


Datenblatt: 
http://www.google.ch/url?sa=t&rct=j&q=ssd1289%20datasheet&source=web&cd=1&ved=0CGQQFjAA&url=http%3A%2F%2Fwww.gpegint.com%2Ffiles%2Flibrary%2Ffiles%2Fsupportpdf%2FDriver%2520IC%2520SSD1289.pdf&ei=hVvBT7W5C8WD8gPd7LG8Cg&usg=AFQjCNGDEAcVE6pHj-K7APljFkYfrCSxWw&cad=rja

von g457 (Gast)


Lesenswert?

> lcdWriteReg(0x0011, temp | 0x0038); // Portrait (default)
                                  ^                ^^^^^^^
> lcdWriteReg(0x0011, temp | 0x0030); // Landscape
                           ^      ^

∗hust∗

Für die Fälle 2 und 3 analog.

HTH

von Joel B. (Firma: µGFX) (tectu)


Lesenswert?

Danke für deine Antwort, doch ich kann dir nicht ganz folgen.

Wo ist das Problem?


Zudem:
1
lcdWriteReg(0x0011, temp | 0x0000);

das sollte ja wohl ganz einfach dass, was über lcdReadReg ausgelesen 
wird, wieder zurück schreiben -> keine Änderung.
Warum sollte da also etwas nicht mehr gehen?

von Joel B. (Firma: µGFX) (tectu)


Lesenswert?

Hat denn nie jemand einen SSD1289 controller benutzt?

von klaus (Gast)


Lesenswert?

doch sicher haben hier schon einige mit dem display gearbeitet, aber 
entweder haben sie den thread nicht gelesen, oder sind zu eingebildet, 
dir ne ordentliche antwort zu geben, siehe Autor: g457.

was dein problem angeht: wenn wirklich garnichts passiert, wo doch mit 
sicherheit etwas passieren müsste, wird das register vielleicht an 
anderer, späterer stelle nochmals überschrieben. so wars bei mir :)

von Patrick W. (pawi777)


Lesenswert?

Im default sind bits gesetzt, die es in den anderen Modi nicht sein 
sollen. Du liest also das Register und erhälst etwas, das 0x0038 
enthält. Nun VERODERST du das mit etwas, um diese Bits zu löschen. Dafür 
müsstest du aber eine andere logische Operation nehmen, zum besipiel & 
(and). Wenn du das register schreibst, ist 0x0038 immernoch enthalten!!

Beispiel : 0101 //was du gelesen hast
        OR 0011 // was du schreiben willst
        _____
           0111 //was dabei herauskommt

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.