Forum: Mikrocontroller und Digitale Elektronik Treiber für DOGM204 - A


von Niklas R. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich habe die letzten Wochen einen Treiber für das DOGM204-A LCD von 
Electronic Assembly programmiert. Ich musste dabei feststellen, dass ein 
paar Dinge weder im Datenblatt des Displays noch im Datenblatt des Chips 
im Display beschrieben wurden oder falsch beschrieben wurden. Dies 
sorgte für Frustration.

Um dies anderen Entwicklern zu vermeiden, veröffentliche ich hier nun 
meinen Treiber unter der GNU GPL.

Bei Fragen und Anmerkungen (sofern konstruktiv) einfach melden.

Der SPI Treiber ist nicht angehangen, das ist aber auch nur die typische 
08/15 Implementation. Für dieses display wird aber SPI wie folgt 
initialisiert:
1
  SPCR = 1<<SPE | 1<<DORD | 1<<MSTR | 1<<CPOL | 1<<CPHA | 1<<SPR1 | 1<<SPR0;
2
  SPSR = 0;

von spess53 (Gast)


Lesenswert?

HI

>Ich musste dabei feststellen, dass ein
>paar Dinge weder im Datenblatt des Displays noch im Datenblatt des Chips
>im Display beschrieben wurden oder falsch beschrieben wurden.

Wäre mal interessant, an welchen Stellen die Diskrepanzen aufgetreten 
sind.

MfG Spess

von Niklas R. (Gast)


Lesenswert?

Beispielsweise muss nach dem Wechseln der ROM ein clear Display 
ausgeführt werden, ansonsten friert das Display ein, sobald neuer Text 
geschrieben wird. Das musste ich empirisch herausfinden. Es kann sein, 
dass auch andere Befehle nach dem ROM-wechseln funktionieren würden.

Des weiteren ist im Datenblatt des Chips im Display (der ssd1803a) 
angegeben, dass man beim lesen des Busy-Flags zuerst die derzeitige 
Position im RAM kriegt und beim zweiten mal Lesen die ID des geräts. Was 
dort nicht steht, ist, dass diese Lesezugriffe direkt hintereinander 
ausgeführt werden müssen, man das display weder unselecten darf, noch 
darf man ein zweites mal die Leseanfrage senden. Das Datenblatt lässt es 
in den Beschreibungen des SPI-Modes aber so aussehen, als würde man für 
jedes Lesen eine Leseanfrage senden müssen. Täte man dies, bekäme man 
aber immer nur die derzeitige Poisition zurück.

Als drittes fällt mir noch ein, dass im Datenblatt steht, dass das Gerät 
keine Chipselect-Leitung hat. Das ist korrekt, aber als Work-Around 
dafür war im Datenblatt angegeben, man müsse einen AND-Bausteil einbauen 
mit Eingang SCK, CS und Ausgang an den SCK pin des Displays. Das ist 
zwar möglich, aber über SPI sit es üblich eine \CS Leitung zu haben und 
im Mode 3 ist der Ruhezustand bei aktiviertem Chip auf low. Demnach wäre 
es wesentlich intuitiver (meiner Meinung nach) ein OR aus SCK und \CS zu 
benutzen.

von Niklas R. (Gast)


Angehängte Dateien:

Lesenswert?

U_P_D_A_T_E

Es gab noch zwei Probleme:

1. Der wrap-around von Zeile 4 zu Zeile 0 beim Drucken von '\n' schlug 
fehl. Er funktioniert nun
2. Wenn das LCD im Busy-Modus war und man die derzeitige Position oder 
die ID abfrug, konnte es zu Fehlern kommen. Das sollte im realen Leben 
so gut wie nie passieren. Dennoch gefixt.

von Niklas R. (Gast)


Lesenswert?

U_P_D_A_T_E

Es gab ein Problem in
1
dog_writeByte(uint8_t mask,uint8_t data)

Dort muss das select um eine Zeile verschoben werden. Es muss natürlich 
heißen:
1
void dog_writeByte(uint8_t mask,uint8_t data){
2
    dog_waitForReady();
3
    dog_select(1);
4
    spi_transceive((mask&0xE0)|0x1F);   //Send 5 synchronisation bits,
5
    spi_transceive(data & 0x0F);        //send lower data bits
6
    spi_transceive((data>>4) & 0x0F);   //send higher data bits
7
    dog_select(0);
8
}

von Andreas V. (Firma: IGL) (andreas_va)


Lesenswert?

Hat jemand von Euch inzwischen mal etwas mit I2C beim DOGM204A versucht? 
Ich bleibe schon bei der Initialisierung hängen! Es wäre echt hilfreich!

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.