Forum: Mikrocontroller und Digitale Elektronik PIC 32 EA DOG XL 160/7 Ansteuerung


von christian_ri (Gast)


Angehängte Dateien:

Lesenswert?

Guten Tag liebe Mikrocomputergemeinde,

Mein Name ist Christian und ich studiere Elektronik. Ich verzweifle seit 
einiger Zeit an der Ansteuerung eines EA DOG XL 160/7 Grafikdisplay 
mittels SPI und einem PIC 32.
Das Display zeigt gar nichts an, an VLCD wird jedoch eine Spannung von 
circa 12 Volt generiert. Die Initialisierung habe ich bereits mit 
mehreren anderen Beiträgen verglichen und ich habe sie identisch.
Als mögliche Fehlerquellen sehe ich meinen Schaltplan (Ich bin Anfänger, 
habe wenig Erfahrung was dies angeht) und weiterhin meine Senderoutine. 
Beide habe ich als Anhang hinzugefügt. Den Schaltplan habe ich 
eigentlich nach dem Beispiel in dem Datenblatt des Displays von EA 
erstellt. Bei der Senderoutine bin ich mir zum Beispiel nicht sicher ob 
es stimmt dass CS low bleiben muss wenn ein 2 Byte Kommando gesendet 
wird, oder ob ich es bezügliche Flankenwechsel in diesem Modus trotzdem 
nach abgeschlossenem Senden wieder high setzen sollte.

Ich bedanke mich jetzt schon einmal für die Hilfe.
Mit freundlichen Grüßen
Christian

von WehOhWeh (Gast)


Lesenswert?

versuche zunächst einmal, die Initroutine nach dem Datenblatt EXAKT 
umzusetzen. Diese funktioniert, nimm das Datenblatt von z.B. Reichelt.

Da du schreibst, dass VLCD da ist, muss das Display eigentlich schon 
laufen, denn die charge pump muss man über die SPI einschalten. Daher 
denke ich, dass der Fehler an der initroutine oder dahinter liegt, nicht 
an der SPI-Funktion an sich.

Siehtst du ein willkührliches Pixelmuster auf dem Display?
Wartest du nach dem Einschalten der Versorgung lange genug, bevor du das 
Ding anquatscht?

Poste doch mal deine initroutine...

Das Ding läuft mit einem PIC32, ich verwende es schließlich auch ;-)

von christian_ri (Gast)


Angehängte Dateien:

Lesenswert?

Hey WehohWeh,

Danke für die schnelle Antwort. Das mit dem nach dem Einschalten der 
Versorgungsspannung lang genug warten werde ich morgen mal Überprüfen, 
da bin ich mir nicht sicher.
Im Anhang ist der Sourcecode zu meiner Initroutine. Die Frage ist nur 
wie überprüfe ich ob diese richtig funktioniert hat? Eigentlich ja nur 
durch eine Ausgabe, deren Implementierung dann wiederum Fehlerpotenzial 
bietet.
Das Display zeigt gar nichts an, keine willkürlichen Pixel, nichts, es 
ist blank.
Grüße Christian

von WehOhWeh (Gast)


Angehängte Dateien:

Lesenswert?

Hmm, ich hab das anders gemacht.
Meine Initroutine sieht so aus:
1
void init_display()
2
{
3
    init_hardware();
4
    //reset module
5
    wait(16000);
6
    oDISP_NCSN = 1;     //display is not selected
7
    oDISP_CD = 1;       //CD is set to data
8
    oDISP_NRST = 1;     //disable reset
9
    wait(16000);
10
11
    //routine according to datasheed
12
    write_command(0xF1);
13
    write_command(0x67);  //set com electrodes to 103
14
    write_command(0xC0);  //SEG column and COM to normal
15
    write_command(0x40);
16
    write_command(0x50);  //set display startline to 0
17
    write_command(0x2B);  //set panelloading to 28..38nF
18
    write_command(0x2F);  //set panelloading to 28..38nF
19
    write_command(0xEB);  //set BIAS to 1/12
20
    write_command(0x81);  //set RAM fill behaviour;
21
    write_command(0x5F);  //set contrast
22
    write_command(0x89);  //set RAM addr to autoincrement
23
    write_command(0xAF);  //switch display on
24
    #ifdef USE_DMA
25
        dma_spi_init();
26
    #endif
27
}

Die habe ich irgendwo geklaut, vor langer langer Zeit. Jedenfalls gehts.

Ich hab noch die dogxl_hardware.c angehängt, da sind auch die SPI-Sachen 
drin, allerdings als Software SPI pfusch. Bei der Platine mit PIC32 
hatte ich ein kleines Missverständniss beim Peripheral Remapping - das 
geht bei meinem PIC für SCK nämlich nicht.

Auf das Timing mit wait() bin ich nicht stolz, es geht aber. Das war 
"mal schnell testweise" portiert und es läuft seit dem sehr zuverlässig. 
Daher hab ich es nie wieder angeschaut.

von christian_ri (Gast)


Lesenswert?

Wenn ich das richtig sehe haben wir die Init Routine ja identisch bis 
auf den Befehl:
write_command(0x2F);  //set panelloading to 28..38nF
Habs auch mal mit diesem versucht klappt auch nicht. Ich habe jetzt 
einige Delays eingebaut aber es klappt immer noch nicht.
Und zu guter letzt habe ich vorhin nochmal VLCD gemessen.
Nichts :/ aus welchem Grund auch immer, es liegen auf einmal nur noch 0V 
an obwohl ich eigentlich nichts geändert habe.

von WehOhWeh (Gast)


Lesenswert?

In dem Fall kann es noch sein dass du ein Timingproblem bei der SPI 
hast. Oder natürlich ein Hardwareproblem. Oder falsch gemappte Pins. 
Oder ein TRISx-bit ist noch gesetzt. Auch ANSELx ist eine spassige 
Fehlerquelle, weil nicht alle immer auf 0x0 initialisiert werden.
Oder die Bedienung der CD-Leitung oder CS passen nicht.

Besorg dir auch das echte Datenblatt vom Display, also das hier:
http://www.lcd-module.de/eng/pdf/zubehoer/uc1610.pdf

Daher wäre es Sinnvoll, sich die Schnittstelle mal mit einem Oszillop 
anzuschauen, und das dort gesehene mit dem Datenblatt zu vergleichen. 
Sehr schön triggern kann man die SPI ja mit dem Chipselect. Damit kann 
man das sogar mit einem uralten analogen Oszi anschauen (in einer 
Schleife immer das Gleiche schicken).

Wichtig wäre:
Passt CPOL / CPHA?
Wie sehen die Signale aus (Pegel, Flanken)?
Stimmen die Hilfssignale (CS, NRES, CD)?
Passen Setup / Holdzeiten?
Mit welcher Frequenz sendest du Befehle?
Schon versucht, die Wartezeit nach dem Start auf z.B. 100ms zu erhöhen?

Nimm doch testweise mal die Software-SPI her.

von Christian Rieckmann (Gast)


Lesenswert?

Hey,

Sorry die lange Zeitverzögerung, ich hatte Ferien und brauchte mal eine 
Auszeit von der ganzen Lernerei.
Könntest du mir bitte mal deine  "display_dogxl.h" zukommen lassen. Mir 
geht es vorallem um die Realisierung des FONTS.
Die Chargepump ist an, das lag an einem delay das ich geändert hatte. 
Doch auf dem Display steht immer noch gar nichts :/

Vielen Dank
Christian

von Christian Rieckmann (Gast)


Lesenswert?

Achja, sende momentan mit 2,5 Mhz

von WehOhWeh (Gast)


Angehängte Dateien:

Lesenswert?

anbei mal die Sachen für die Fonts.

Die Fonts habe ich hier aus dem Forum, es gibt nur 2:
einen mit 12x8 und einen mit 8x6. Mehr habe ich nicht gebraucht.

Es gibt Optimierungsmöglichkeiten:
Die Funktion SetPixel(); wird naturgemäß oft verwendet. Und die ist 
etwas lahm.

Ich hätte noch mehr Grafikfunktionen (Bitmaps, Kreise, 
Zeigerinstrument), aber die sind bisher nur auf einem DOGS getestet. Die 
Dinger basteln macht zwar spass, ist aber schon viel Arbeit.

Ich würde mir an deiner Stelle eine offene Grafiklibrary suchen. Für 
DOGXL gibts hier eine:
Beitrag "Library für EA-DOGM Grafikdisplays inkl. Font-Generator"

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
Noch kein Account? Hier anmelden.