Treiber für DOGM204 - A

Gast #4387899
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;
Angehängte Dateien:
Gast #4387910
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
Gast #4387932
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.
Gast #4388582
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.
Angehängte Dateien:
Gast #4411251
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
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.