Hallo, ich versuche ein EA DOGM132-5 132x32 Pixel Grafikdisplay über SPI anzusteuern. Doch nicht mal die Initialisierung geht. Ich verwende die Schaltung auf Seite 4 unten "Low Voltage" mit 9 Volt Kontrastspannung: http://www.lcd-module.de/deu/pdf/grafik/dogm132-5.pdf Reset halte ich dauerhaft auf high über 10 kOhm. A0 ist dauerhaft auf GND (=Command) Zur Ansteuerung nehme ich einen PIC18F452 mit 10 MHz Hier der C-Code. Die Initialisierung ist direkt aus dem Datenblatt übernommen. //Alle Pins als Ausgang set_tris_a(0); set_tris_b(0); set_tris_c(0); set_tris_d(0); set_tris_e(0); //SPI einstellen setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_16); delay_ms(100); //Initialisierung "low voltage" SPI_WRITE(0x40);delay_ms(1); SPI_WRITE(0xA1);delay_ms(1); SPI_WRITE(0xC0);delay_ms(1); SPI_WRITE(0xA6);delay_ms(1); SPI_WRITE(0xA2);delay_ms(1); SPI_WRITE(0x2D);delay_ms(1); SPI_WRITE(0x23);delay_ms(1); SPI_WRITE(0x81);delay_ms(1); SPI_WRITE(0x1F);delay_ms(1); SPI_WRITE(0xAC);delay_ms(1); SPI_WRITE(0x00);delay_ms(1); SPI_WRITE(0xAF);delay_ms(1); delay_ms(1000); //all on SPI_WRITE(0b10100101); delay_ms(1000); //all off SPI_WRITE(0b10100100); while(1) {} Achso, das Problem: 1. Nichts passiert. 2. Hab kein Oszi. Ein paar Fragen habe ich schon mal: 1. Kann das delay_ms zwischen den Befehlen beliebig groß sein? 2. Muss ich den SPI Dout vom PIC an den SPI Din vom Display verbinden? An der Leitung ist ein Pullup mit 10k: gut, schlecht, egal? Die Clock-Leitung hat keinen Pullup. 3. Für die Kondensatoren nehme ich 1µF Elkos, ist das OK? Funktion der Pins ist laut Datenblatt "LC Drive". Mit 100nF Kerkos passiert auch nichts. 4. Sonst noch Ideen wo der Fehler liegen könnte? Besten Dank, Gruß, Thomas
Eins vorweg, ich kenn mich mit GLCDs nicht aus. > 2. Muss ich den SPI Dout vom PIC an den SPI Din vom Display verbinden? Ich denke: Ja > 3. Für die Kondensatoren nehme ich 1µF Elkos, ist das OK? Funktion der > Pins ist laut Datenblatt "LC Drive". Mit 100nF Kerkos passiert auch > nichts. Im Datenblatt steht, man soll einen 1µ C nehmen, nix von Elko, also warum nimmst Du einen Elko? Woher hast Du die 1ms delays? Schau mal hier: http://www.lcd-module.de/eng/pdf/zubehoer/st7565r.pdf Ab Seite 51 steht was zur initialisierung. Da steht was von insgesamt 5ms...die überschreitest Du...evtl. liegst daran, dass die 1ms zu lang sind?
Ich habe das Display bisher zwar mit AVR und STM32 angesteuert, aber sollte beim PIC ja so ähnlich gehen. 1. Zwischen den Befehlen muß überhaupt kein Delay sein. Die Zeit für die SPI-Übertragung reicht als Delay aus. 2. Wenn deine PIC-Pins als PushPull-Ausgänge geschaltet sind, brauchst Du keine Pullup-Widerstände. Das Display hat keinen Daten-Ausgang, die MISO-Leitung am Controller bleibt also frei. 3. Es ist egal, was für 1 µF Kondensatoren Du benutzt. Ich hab zunächst Elkos mangels Kerkos eingesetzt, beides klappt hervorragend. Nur bei Elkos auf die Polarität achten (CAP1N/1P/3N/3P). 4. Sehr wichtig ist die Reset-Leitung. Bitte das Display unbedingt nach dem Power-On kurz resetten. Also die Reset-Leitung kurz auf Low, dann wieder auf High. Erst danach die Init-Sequenz starten. Ich hatte auch zunächst die Reset-Leitung fest auf High gelegt und keinerlei Erfolge erziehlt. 5. Und A0 mußt Du natürlich auch ansteuern. Für die Initialisierung muß die natürlich auf Low sein, aber wenn Du Daten zum Display schicken willst, muß die natürlich auf High liegen. 6. Die Initialisierungssequenz, die Du benutzt hast, ist für die "Low-Voltage" version. Funktioniert natürlich nur, wenn Du eine externe 9-12 Volt Spannung für das Display hast (Siehe Schalbild im Datenblatt Seite 4 "LOW VOLTAGE"). Wenn Du die Schaltung nach "LOW POWER" oder "WIDE RANGE" aufgebaut hast, dann unbedingt auch die dazu passende Initialiserungssequenz benutzen. Als Anhang habe ich mal ein Projekt von mir mit einem DOGM128, also der größeren Version dieses Displays, das aber identisch angesteuert wird. Der Controller ist übrigends ein STM32F101C8 Cortex-M3. Erwin
A0 dauerhaft auf GND ist nicht empfehlenswert. Da kannst du nur Kommandos rueberschicken, aber keine Displaydaten die dann angezeigt werden. Siehe dazu Punkt (6) in der Tabelle auf Seite 5 deines Datenblattes... Ich vermute auch das eines oder zwei deiner Delays zu kurz sind. Zumindest bei den DOG Textdisplays brauchen da einige Befehle ein laengeres. Schau mal in das Datenblatt des Controllers, da findest du dazu anstaendige Infos. cu Tarzanwiejane
Danke an alle für die Tipps, es geht aber immer noch nicht. @ munter (Gast) "Im Datenblatt steht, man soll einen 1µ C nehmen, nix von Elko, also warum nimmst Du einen Elko?" Weil ich nur 100 nF Kerkos habe. "Woher hast Du die 1ms delays? Schau mal hier: http://www.lcd-module.de/eng/pdf/zubehoer/st7565r.pdf Ab Seite 51 steht was zur initialisierung. Da steht was von insgesamt 5ms...die überschreitest Du...evtl. liegst daran, dass die 1ms zu lang sind?" OK, habe die Delays rausgenommen, hilft aber nicht. @ Erwin Reuss Gut zu wissen, dass es auch mit Elkos geht. Danke für den Hinweis mit der Reset Leitung, steht ja auch im ausführlichem Datenblatt (vom Controller, das Datenblatt vom Display enthält auch die Initialisierung aber ohne die Details). Ich verwende natürlich die passende Beschaltung mit 9 Volt für die Kontrastspannung. A0 habe ich (noch) nicht genutzt um die Schaltung einfach zu lassen. Display initialisieren und alle Pixel an/aus geht auch so (also es sollte gehen... ) @ Thomas Otto Zum testen erst mal ohne A0. Der lange Delay bei den Textdisplays ist mir bekannt, scheint hier aber anders zu sein. Eher anders rum, dass die Initialisierung nur 5ms dauern soll. Also, ich werde doch mal 1 µF Kerkos kaufen und schauen ob ich noch einen anderen SPI-IC zum testen habe, vielleicht läuft da ja auch was schief. Ist mein erster Versuch mit SPI. Gruß, Thomas
hi thomas, ich sehe,du hast dich schon mit dem LCD DOGM132-5 beschäftigt.ich möchte auch dieses Display einsteuern aber ich weiss nicht wie ich anfangen soll.kannst du mir vielleicht einen Schaltplan oder so was schicken damit ich erstmal sehen kann wie ich überhaupt das ganze aufbauen kann. Danke im Voraus
hi Erwin, ich möchte ein DOGM132-5 LCD mit AVR (Assembler) über SPI einsteuern.ich sehe dass du dich mit diesem LCD schon beschäftigt hast.kannst du mir vielleicht einen Schaltplan erreichen damit ich sehe wie ich anfangen kann. danke
hat denn jetzt jemand ein DOGM128E-6 ans laufen bekommen? Vielleicht mit BASCOM??? Bislang habe ich nichts finden können
Hallo Gibt es inzwischen etwas Neues zum Thema Dogm 132? Seit einiger Zeit wird das Dogm 128x64 von Bascom unterstützt. Ich habe es auch erfolgreich zum Laufen gebracht. Nun habe ich hier ein 132-5 und habe zwei oder drei Werte in der Initialisierung des Displays aus der Bascom Library angepasst. Jetzt bekomme ich wenigstens schon mal einen Text angezeigt. Nun bin ich aber kein Programmierer und bräuchte Hilfe bei der Anpassung der Library bezüglich der anderen Displayauflösung (132x32 statt 128x64). Kann mir da jemand helfen? Viele Grüße
Hi, ich habe nun schon einige threads durchgewühlt um häufige Fehler bei der Ansteuerung zu finden. Bei mir will mein DOGM132 am ATmega8 nicht funktionieren. Habe nun sogar schon mit dem Oszilloskop überprüft ob die SPI daten zusammen mit der clock richtig ankommen. Vielleicht stimmt aber einfach an der Software was nicht. Ich wäre euch total dankbar wenn da mal jemand kurz drüberschaut:
1 | void spi_master_transmit(char cData) |
2 | {
|
3 | |
4 | PORTB &= ~CS_LCD; |
5 | PORTC &= ~LC_A0; |
6 | |
7 | SPDR = cData; |
8 | while(!(SPSR & (1<<SPIF))); |
9 | |
10 | PORTC |= LC_A0; |
11 | PORTB |= CS_LCD; |
12 | |
13 | _delay_us(10); |
14 | }
|
(Habe es auch schon ohne das aus und wieder anschalten von CS und A0 vor/nach jedem Befehl probiert)
1 | int main (void) |
2 | {
|
3 | DDRB = 0xFF; |
4 | DDRC = 0xFF; //output |
5 | |
6 | int cnt = 0; |
7 | while(1) { |
8 | cnt = cnt % 4; |
9 | if(cnt == 0) { |
10 | SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); |
11 | } else if(cnt == 1) { |
12 | SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPHA); |
13 | } else if(cnt == 2) { |
14 | SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPOL); |
15 | } else if(cnt == 3) { |
16 | SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPHA)|(1<<CPOL); |
17 | }
|
18 | |
19 | |
20 | //reset LCD
|
21 | PORTC &= ~0b100000; |
22 | PORTC &= ~LC_RST; |
23 | delay_hundredth(50); |
24 | |
25 | PORTC |= LC_RST; |
26 | PORTC |= 0b100000; |
27 | _delay_us(50); |
28 | |
29 | |
30 | //Select LCD and turn off A0
|
31 | PORTB &= ~CS_LCD; |
32 | PORTC &= ~LC_A0; |
33 | _delay_us(50); |
34 | |
35 | |
36 | //lcd internal reset
|
37 | //spi_master_transmit(0b11100010);
|
38 | //_delay_us(50);
|
39 | |
40 | // sequence
|
41 | spi_master_transmit(0x40); |
42 | spi_master_transmit(0xA1); |
43 | spi_master_transmit(0xC0); |
44 | spi_master_transmit(0xA6); |
45 | spi_master_transmit(0xA2); |
46 | spi_master_transmit(0x2D); |
47 | spi_master_transmit(0x23); |
48 | spi_master_transmit(0x81); |
49 | spi_master_transmit(0x1F); |
50 | spi_master_transmit(0xAC); |
51 | spi_master_transmit(0x00); |
52 | spi_master_transmit(0xAF); |
53 | |
54 | delay_hundredth(100); |
55 | |
56 | // all points on
|
57 | spi_master_transmit(0b10100101); |
58 | delay_hundredth(100); |
59 | |
60 | // all points off
|
61 | spi_master_transmit(0b10100100); |
62 | delay_hundredth(100); |
63 | |
64 | PORTC |= LC_A0; |
65 | PORTB |= CS_LCD; |
66 | delay_hundredth(200); |
67 | |
68 | }
|
69 | }
|
Das Display ist im Low-power-mode mit zwei spannungen betrieben (10V an VOUT und 3,3V an VDD,VDD2 und SPI). An PortC pin 5, hängt eine LED, daher diese befehle. Am Display tut sich einfach gar nichts. Das bleibt komplett schwarz (ist en weiß auf schwarz display). Sollte sich da nicht wenigstens schon irgendwas ein bisschen verändern, wenn man eine Spannung anlegt? Viele Grüße, Philipp
In der aktuellen Elektor-Ausgabe September-2009 findet ihr ein Projekt "OBD2-Analyser NG". Hier ist das DOGM132 an einem AT90CAN128 angeschlossen. Der komplette Sourcecode kann über folgenden Link heruntergeladen werden: http://www.er-forum.de/obd-diag-dl/index.php?&direction=0&order=&directory=DXM%20-%20Diamex-OBD2-Modul/open-source%20handheld
Hi, also auch bei mir geht das Display nun. Was ich geändert habe: Nicht mehr im Dual-Power mode sondern mit den zusätzlichen Kondensatoren betreiben. Jetzt gehts... (Die Initialisierung muss dann natürlich auch entsprechend angepasst werden) Komische Sache trotzdem...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.