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. Ingesamt 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.
Ein ansprechen eines bestimmten Teilnehmers wird bei I2C Bus übrigens mit Adressen realisiert. So kommt dieser 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.
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.
Guten Tag.
Ich bin ein Anfänger. Hilf mir wie zu ändern Zeichensätze.
Peter
Hallo Peter,
am Besten geht das, wenn Du einen Beitrag im Forum eröffnest.