www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik DOGM132-5 mit SPI ansteuern


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: munter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Erwin Reuss (er-tronik)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Thomas Otto (tarzanwiejane)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: yann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: yann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Raimund Reh (raimund)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat denn jetzt jemand ein DOGM128E-6 ans laufen bekommen?
Vielleicht mit BASCOM???
Bislang habe ich nichts finden können

Autor: Mark K. (marcellino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Philipp F. (nerdture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
void spi_master_transmit(char cData)
{

  PORTB &= ~CS_LCD;  
  PORTC &= ~LC_A0;
  
  SPDR = cData;
  while(!(SPSR & (1<<SPIF)));
  
  PORTC |= LC_A0;
  PORTB |= CS_LCD;
  
  _delay_us(10);
}
(Habe es auch schon ohne das aus und wieder anschalten von CS und A0 
vor/nach jedem Befehl probiert)
int main (void)
{  
  DDRB = 0xFF;
  DDRC = 0xFF; //output

  int cnt = 0;
  while(1) {
    cnt = cnt % 4;
    if(cnt == 0) {
      SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
    } else if(cnt == 1) {
      SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPHA);
    } else if(cnt == 2) {
      SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPOL);
    } else if(cnt == 3) {
      SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<CPHA)|(1<<CPOL);
    }
  
  
    //reset LCD
    PORTC &= ~0b100000;
    PORTC &= ~LC_RST;
    delay_hundredth(50);

    PORTC |= LC_RST;
    PORTC |= 0b100000;
    _delay_us(50);
    
    
    //Select LCD and turn off A0
    PORTB &= ~CS_LCD;
    PORTC &= ~LC_A0;
    _delay_us(50);
    
    
    //lcd internal reset
    //spi_master_transmit(0b11100010);
    //_delay_us(50);
    
    // sequence
    spi_master_transmit(0x40);
    spi_master_transmit(0xA1);
    spi_master_transmit(0xC0);
    spi_master_transmit(0xA6);
    spi_master_transmit(0xA2);
    spi_master_transmit(0x2D);
    spi_master_transmit(0x23);
    spi_master_transmit(0x81);
    spi_master_transmit(0x1F);
    spi_master_transmit(0xAC);
    spi_master_transmit(0x00);
    spi_master_transmit(0xAF);
    
    delay_hundredth(100);
    
    // all points on
    spi_master_transmit(0b10100101);
    delay_hundredth(100);

    // all points off
    spi_master_transmit(0b10100100);
    delay_hundredth(100);
    
    PORTC |= LC_A0;
    PORTB |= CS_LCD;
    delay_hundredth(200);
    
  }
}

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

Autor: Erwin Reuss (er-tronik)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?&dire...

Autor: Philipp F. (nerdture)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.