mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EA DOGL - Befehlsaufbau


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo miteinander

Ich sitze hier vor einem DOGL Display. Initialisiert ist es wie im 
Datenblatt, das sollte soweit stimmen.

Hier noch der Link: http://www.lcd-module.de/pdf/grafik/dogl128-6.pdf

Erste Frage:
Kann ich mit dem Befehl "(10) Display all points" aus dem Datenblatt 
alle Punkte aufleuchten lassen, also so zu sagen als Test?
Dazu müsste ich ja einfach ein 0xA5 senden nach der Initialisierung, 
wenn A0 auf Masse liegt?

Zweite Frage:
Nun stellt sich mir aber die Frage, wie ich z.B einen Punkt zeichnen 
kann an Position "x,y".

Konkret stelle ich mir das so vor:

- A0 auf Masse
- (2) Display start line set: 01000000
- (3) Page address set:       10110000
- A0 auf +3V3
- (6) Display data write:     11111111 (als Test)

Ist dieser Ablauf soweit korrekt?

Vielen Dank und Gruss
Tom

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Erste Frage:

Ja.

>Zweite Frage:

Nein. Deine X-Position legst du mit 'Column Address Set' fest. Die 
Y-Position eines Pixels setzt sich aus der Page-Adresse (Y/8) und der 
Bitposition im adressierten Byte (Y mod 8) zusammen. '11111111 (als 
Test)' erzeugt einen 8 Pixel langen senkrechten Strich.

MfG Spess

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für deine Antwort.

Leider funktioniert nicht einmal der Testmodus, hier sonst mal die 
relevanten Stellen:
//DOGL - Graphic LCD (Software SPI)
#use spi(MASTER, DI=PIN_D7, DO=PIN_D8, CLK=PIN_D6, BITS=8, stream=dogl)

.
.
.
.

output_bit (a0_glcd,0);
output_bit (cs_glcd,0);
delay_us (5);

//Initialisierung
spi_xfer (dogl,0x40,8);
spi_xfer (dogl,0xA1,8);
spi_xfer (dogl,0xC0,8);
spi_xfer (dogl,0xA6,8);
spi_xfer (dogl,0xA2,8);
spi_xfer (dogl,0x2F,8);
spi_xfer (dogl,0xF8,8);
spi_xfer (dogl,0x00,8);
spi_xfer (dogl,0x27,8);
spi_xfer (dogl,0x81,8);
spi_xfer (dogl,0x10,8);
spi_xfer (dogl,0xAC,8);
spi_xfer (dogl,0x00,8);
spi_xfer (dogl,0xAF,8);
delay_us (5);

//Testmodus
spi_xfer (dogl,0xA5,8);
delay_ms (1000);

//"Normaler" Modus
spi_xfer (dogl,0xA4,8);

//8 Pixel langer Strich (als Test)
spi_xfer (dogl,0x40,8);
spi_xfer (dogl,0xB0,8);
output_bit (a0_glcd,1);
spi_xfer (dogl,0xFF,8);
output_bit (a0_glcd,0);

//Slave deaktivieren
output_bit (cs_glcd,1);

Wo könnte hier der Fehler liegen?
Die Pins sind sicher richtig gemappt beim PIC24FJ256GB106.

Danke und Gruss
Tom

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Du kannst dir den 'Testmode' sparen. Nach erfolgreicher Initialisierung 
sollten zufällig verteilte gesetzte Pixel zu sehen sein.

MfG Spess

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In Ordnung, werd ich noch rausnehmen.
Aber die zufälligen Pixel sehe ich nicht, das heisst dass die 
Initialisierung nicht korrekt/komplett war?
Irgend eine Idee wo der Fehler liegen könnte?

Gruss
Tom

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich hatte mit dem DogL auch das Problem, dass die Initialisierung 
nicht funktionierte. Was ich machen musste war, dass ich den Reset Pin 
des LCD zu Beginn erst auf 0 setzen, kurz warten (~5ms) und dann wieder 
auf 1 setzen musste damit das LCD einen internen Reset ausführt. Leider 
hatte es mit einer kürzeren Pause von nur ~100µs zwischen 0 und 1 nicht 
funktioniert gehabt.
sbit RESET = P2^1; // Reset Pin des DogL

RESET = 0;
v_Sleep_RTC(RTC_RELOAD_5MS); // 5ms Pause
RESET = 1;

Ciao,
     Rainer

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rainer

Genau das habe ich heute Morgen schon versucht, leider jedoch erfolglos.
So wie ich das sehe, stimmt die Initialisierung...leider habe ich kein 
Oszilloskop hier, um dies zu überprüfen.
Sonst noch eine Idee?

Gruss
Thomas

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm also bei mir ist CS immer nur für die Dauer eines Befehls auf 0. 
Aber das sollte ja laut Datenblatt egal sein. Bist du sicher, dass deine 
spi_xfer und output_bit methoden korrekt arbeiten?
Poste diese doch am besten mal um zu sehen, was dadrin genau passiert.
Als ganz anderer Ansatz wäre noch zu klären, ob du die 
Hardwarebeschaltung der Kondensatoren korrekt aufgebaut hast.

Ciao,
     Rainer

Autor: Tom (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe bisher immer den Slave angesprochen, die Befehle ausgeführt und 
den Slave wieder deaktiviert...das sollte kein Problem sein.

Im Anhang ist noch der Schemaausschnitt, müsste soweit auch korrekt 
sein.

Die Funktionen "spi_xfer" sowie "output_bit" sind Funktionen vom CCS 
Compiler.
output_bit setzt einfach den entsprechenden I/O auf den gewünschten 
Zustand.
spi_xfer wickelt den ganzen Transfer dann ab mit den mitgegebenen 
Parametern (siehe: 
http://iranmicro.ir/Online/Help/ccs/index.html?spi...).

Es ist übrigens nicht das erste Mal, dass ich ein SPI Slave in Betrieb 
nehme..doch wie schon gesagt fehlt mir momentan leider ein Oszilloskop, 
was die Suche nach dem Fehler etwas schwieriger macht...

Gruss
Thomas

Autor: Holger W. (holgerw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin auch gerade dabei mit PIC ein DOGL anzusteuern, ausser 
anfänglichen leichten Problemen mit dem Kontrast hat es auf Anhieb 
funktioniert.
Allerdings habe ich die SPI Routinen selbst in Assembler gestrickt und 
verwende einen 18F2520 mit Widerstans-Pegelwandlern.
Hast du mal geprüft ob die Pins überhaupt "wackeln" ?

Holger

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Langsam aber sicher kanns fast nur noch die SPI Routine sein...mal 
schauen, werde sonst einmal die Initialisierung "von Hand" machen und 
dann schauen, obs funktioniert.
Prüfen, ob die Pins ihren Zustand ändern geht ohne Oszilloskop nicht 
wirklich gut, jedenfalls bei SPI.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit was für einem SPI-Takt wird das Teil gefahren?

Das DOGL in Verbindung mit nem PIC kann max. ca. 2 MHz SPI Takt. Wenn 
man
mehr benutzt, sehen die SPI-Flanken nicht mehr schön aus und man bekommt 
massig Übertragungsfehler.

Zumindes hab ich bei mir das mit <= 2 MHz SPI-Takt zum Laufen gebracht, 
so dass auch wirklich nur die Pixel wie gewünscht gesetzt wurden und 
nicht
zufällig ;-)

Ach ja, wie sehen eigentlich deine Übertragungsroutinen zum Thema RS und 
CS Signal aus?
Hast Du auch ein paar delay NOPs bzw. ein Delay-Loop eingebaut?

Also (wenn ich mich recht erinnere) ging das so:

1. RS auf gewünschten Pegel setzen
2. Warten (je nach Takt ein paar NOPs oder ein Delay-Loop)
3. CS setzen
4. Warten (je nach Takt ein paar NOPs oder ein Delay-Loop)
5. Daten schaufeln
6. CS setzen
Fertig.

-> Wartezeit (siehe Setup and Hold Time von RS und CS)

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nochmal - habe soeben selber eine SPI-Test-Routine geschrieben und 
es funktioniert - das Display zeigt direkt nach dem Initialisieren an 
zufälligen Positionen gesetzte Pixel an.
Der Testmodus funktioniert soweit auch.

Danke nochmal für die Hilfe.

Gruss
Thomas

Autor: blutengel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Habe es auch nur mit einer eigenen SPI Routine geschafft.
Nach dem Init bekomme ich auch diese zufälligen Pixel und mit dem 
Testmodus geht genau so gut. Meine Frage wäre nun wie ich ein Clear 
hinbekomme damit die wilden Pixel weg sind. Habe es mit dem Reset Befehl 
versucht aber danach schein wohl das ganze Init wg zu sein.Vielleicht 
habe ich da auchnur einen Denkfehler.

MFG

blutengel

Autor: Holger W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe auch nix gefunden, ich lösche den Inhalt wirklich einzeln durch 
überschreiben mit 0 (7*128)
Wobei ich im Betrieb immer die Kopie im RAM komplett ausgebe.

Holger

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Meine Frage wäre nun wie ich ein Clear hinbekomme damit die wilden Pixel >weg 
sind.

Indem du alle Stellen des Displayspeichers mit 0x00 beschreibst.

MfG Spess

Autor: R. W. (quakeman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt keinen expliziten clear Befehl. Also der Ansatz jedes Pixel auf 
Null zu setzen ist der einzige Weg dabei.

Autor: blutengel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie kann ich denn danach wieder die Adresse auf 0 setzen. Ich gehe die 
erste Page von 0 bis 127 durch und schreibe 0 hinein dann inkrementiee 
ichdie PAge und wiederhole den vorigen Vorgang. Nach 7 Durchläufen ist 
mein GLCD "gesäuber". Aberjetzt steht der Adresszeiger doch auf der 
letzten Stelle.Habe mit dem Befehl Display Star Line set versucht den 
Adresszeiger auf den Anfang zu setzen aber danach schein mein Init weg 
zu sein.Wie bekomme ich es hin das der Adresszeiger wieder am Anfang 
ist?


blutengelMFG

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Wie bekomme ich es hin das der Adresszeiger wieder am Anfang ist?

Pageadresse und Columnadresse auf Null setzen.

MfG Spess

Autor: Holger W. (holgerw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du das LCD mit richtiger Grafik ansteuern willst bleibt dir nichts 
anderes übrig als das komplette Display im RAM abzubilden. Also bau dir 
eine Routine die immer komplett den RAM Bereich von 1024 (8*128) Bytes 
ausgibt. Ich hab es dann so gelöst dass ich nach der Ausgabe den RAM im 
µC lösche und neu aufbaue mit einzelnen Pixel setzen, dann wieder 
ausgeben.
Holger

Autor: blutengel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was genau muss ich denn senden damit er wieder nach Column 0 geht?
In dem Word Dokument von EA steht ja:

Changing to another position in display RAM; new column
1. CS-pin set to low (select the display and synchronize the internal 
bit counter)
2. A0-pin set to low (for writing command data)
3. The next is a 2 byte command (column address set)
3.1 Write e.g. hex 14 to the display (most significant 4bit)
3.2 Write e.g. hex 00 to the display (least significant 4bit)
Next display data will be written at column 64.
4. set A0 to high (ready to receive display data)
5. set CS-pin to high (display is no longer selected)


wobei ich Punkt 3.1 und 3.2 nicht verstehe.

was genau soll das bedeuten?

MFG

blutengel

Autor: Holger W. (holgerw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also
0xb0 setzt auf Page 0, 0xb1 auf Page 1 usw.
column wird in 2 Bytes übertragen
0x10 (upper nibble)) und 0x00 (lower nibble) für column 0
beides mit A0 = 0

also 0x10 und 0x04 für die 5. Spalte

Holger

Autor: blutengel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider verstehe ich das noch nicht wieso 2 Nibble.warum nicht die 8 bit 
sofort.Mit der Page Adress ist klar. Und bei deinem Beispiel wieso 
ergibt sich daraus Column 5?Wie setzt sich die Adresse zusammen?


MFG

blutengel

Autor: Holger W. (holgerw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Hersteller hat das nun mal festgelegt, dass die Spalte in 2 Bytes 
übertragen wird, (hoffe ich hab mich jetzt nicht verzählt):
Byte1        Byte 2
0001 0000    0000 0000  Spalte 0
0001 0000    0000 0001  Spalte 1
0001 0000    0000 0010  Spalte 2
0001 0000    0000 0011  Spalte 3
0001 0000    0000 0100  Spalte 4
0001 0000    0000 0101  Spalte 5
...
0001 0000    0000 1111  Spalte 15
0001 0001    0000 0000  Spalte 16
0001 0001    0000 0001  Spalte 17
...
0001 0111    0000 1111  Spalte 127

Holger

Autor: blutengel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke jetzt verstehe ich das alles so langsam.
Klasse Forum!!!


MFG


blutengel

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.