Bei dem EA DOGS handelt es sich um ein besonders kompaktes LCD-Display von Electronic Assembly  Das Display ist mit einem UC1701 Controller ausgestattet und unterscheidet sich in der Ansteuerung kaum von großen Bruder dem EA DOGL mit dem ST7565  Controller, das ich Euch in einem anderen Artikel bereits vorgestellt habe. Bei dem Display handelt es sich um ein Grafikfisplay mit 102×64 Pixel, welche in 7 Seiten (Pages) in der Höhe und in 64 Spalten (Columns) in der Breite aufgeteilt werden. Es gibt das Display in verschiedenen Ausführungen. Die Varianten unterscheiden sich in Art der Darstellung sowie der passenden Hintergrundbeleuchtung. Ich habe von Reichelt das EA DOGS 102N-6 entschieden. Dies wird ohne Beleuchtung betrieben. Zusätzlich kann man das Display mit einer Touchscreen-Folie versehen, was ich jedoch bei der Größe eher als Spielerei empfinde.

Technisches

Das Display wird über den SPI-Bus angesteuert.  Hierfür benötigt Ihr zwei Pins des MSSP Moduls Eures PIC. Zusätzlich wird eine Chip Select, eine Reset sowie eine Daten- bzw. Befehlsleitung notwendig. Insgesamt werden also fünf Pins des Mikrocontrollers benötigt.

Als Versorgung dient eine einfache 2,5 … 3,3 Volt Gleichspannung. Zusätzlich werden extern drei 1 µF Kondensatoren an das Display angeschlossen wie es in der oben stehenden Grafik gezeigt ist. Leser berichten, dass man hierfür auch Elkos verwenden kann. Im Zweifel würde ich jedoch zu einfachen Folienkondensatoren greifen.

Ansteuerung

Das Display wird, wie ich es bereits erwähnt habe, mit dem SPI Bus angesteuert. Hierbei wird der Bus im Modus 3 betrieben. Das bedeutet die Daten werden bei steigender Flanke des Takts gelesen, der im Ruhezustand auf High Potential liegt.

Dabei beginnt die Übertragung beim MSB (most significant bit), also dem höchstwertigsten Bit (7). Der Display-Controller unterscheidet zwischen Daten und Befehlen. Den Wunsch hierüber teilt man ihm mit dem CD Signal mit.

  • CD = 0 : Befehle
  • CD = 1 : Daten

Ebenfalls muss vor dem Übertragen von Daten die CS0 Leitung, welche am Display angeschlossen ist auf Low gezogen werden. Nur so reagiert das Display auf die Informationen, die nachfolgend auf dem SPI Bus übertragen werden. Die allgemeine Bezeichnung ist Chip select und dient dazu entsprechende Teilnehmer am SPI Bus gezielt anzusprechen. Es können ja schließlich auch mehrere Slaves am Bus angeschlossen sein. Das Ansprechen eines bestimmten Teilnehmers wird beim I2C-Bus übrigens mit Adressen realisiert. So kommt der I2C-Bus mit lediglich zwei Leitungen aus, während beim SPI-Bus für jeden weiteren Teilnehmer eine CS Leitung hinzu kommt.

Initialisierung

Wie bei LCD-Displays üblich muss auch das DOGS zunächst einer solchen Routine unterzogen werden. Ich habe mich hier an das Datenblatt des Controllers bzw. des Displays gehalten. Mit einer Ausnahme: Den Kontrast habe ich nicht wie von EA empfohlen eingestellt, sondern mit einem, meiner Meinung nach besserem Wert justiert. Eventuell liegt es aber auch an meinem Modell, dass ich den Kontrast etwas anpassen musste.

void initDOGS(void)
{
   /*Display Reset*/
   RST = 0;
   __delay_ms(1);
   RST = 1;
   __delay_ms(5);

   CD = COMMAND; // Die folgenden Bytes sind Befehle

   sendSPI(0x40); // Display start line 0
   sendSPI(0xA1); // SEG reverse
   sendSPI(0xC0); // COM Direction normal
   sendSPI(0xA4); // Set all Pixel on
   sendSPI(0xA6); // Display inverse off
   sendSPI(0xA2); // Set Bias 1/9 (Duty 1/65)
   sendSPI(0x2F); // Booster, Regulator and Follower on
   sendSPI(0x27); // Set Contrast
   sendSPI(0x81); // ..
   sendSPI(0x07); // .. *
   sendSPI(0xFA); // Temperature compensation
   sendSPI(0x90); // ..
   sendSPI(0xAF); // Display on

   clearDOGS();

   // * At 3,3V Supply better Contrast than 0x10
}

Meine Routinen sind für den XC8 Compiler geschrieben, sollten sich jedoch ohne größeren Aufwand auch übertragen lassen. Zum Beispiel für die Anwendung auf dem C18 Compiler. Bei der Initialisierung habe ich einen Hardware-Reset durchgeführt. Diesen könnt Ihr aber evtl. auch weglassen. Bei mir funktioniert das Display auch ohne (Zeilen 4-7). Stellt dann aber sicher, dass die RST Leitung auf High Potential liegt. Falls Ihr die Reset Durchführung jedoch drin lassen möchtet, dann müsst Ihr dem Compiler mitteilen mit welche Frequenz Ihr den PIC betreibt. Denn um solche Funktionen nutzen zu können:

__delay_ms(1); // Wait 1 ms

Ist der Compiler auf die Information der Taktgeschwindigkeit angewiesen. Und das geht denkbar einfach:

#define _XTAL_FREQ  4000000

Dieses Makro haut Ihr einfach in eine Headerdatei und tragt die Frequenz in Hz ein (hier am Beispiel 4 MHz).

Download

Ich möchte Euch hier die Routinen zur Ansteuerung zur Verfügung stellen sowie kurz auf die enthaltenen Dateien eingehen.

Download Version 1.1 

Das Archiv enthält folgende Dateien:

  • spi.c und spi.h
    In diesen Dateien wird der SPI Bus initialisiert und es stehen entsprechende Funktionen zur Datenübertragung bereit. Am Beispiel des PIC18LF45K22
  • dogs.c und dogs.h
    In diesen beiden Dateien geht es, wie der Name vermuten lässt um die eigentlichen Ansteuerungroutinen.
  • font.c und font.h
    Hier findet Ihr den Zeichensatz, welche mit den Funktionen in den dogs Dateien zusammen arbeitet. Selbstverständlich könnte Ihr auch eure eigenen Zeichensätze realisieren.
  • main.c und main.h
    Hier geht es mehr ums Verständnis der Anwendung der Ansteuerungsroutinen. Außerdem ist in der Headerdatei das Makro untergebracht, welches dem Compiler die Taktgeschwindigkeit mitteilt.

Leave a Comment