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
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 ;-)
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
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.
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.