Hallo uC-Interessierte,
verwendet wird das "Display On Glass" DOGM162L-A von electronic assembly, das zwei Textzeilen mit je 16 Zeichen darstellt.
Das Display wird mit 3,3V betrieben und via 4-wire-SPI an den Prozessor angeschlossen.
Die Pinbeschaltung des Displays ist in der Datei DOGM_SPI.c zu finden.
Das Projekt verwendet aktuell den MSP430G2553, ist aber sicher an alle Varianten anpassbar...
Den Takt macht der interne DCO mit 1MHz. (siehe vCPU_init() in main.c)
Der Code basiert zu großen Teilen auf dem, was Gerrit, DL9GFA in seinen workshops verwendet.
Hier wird jedoch statt der 4-Bit-Ansteuerung des Displays die SPI-Schnittstelle verwendet.
Weitere SPI-Bausteine können somit die Funktionalität und die entspr. Portpins ebenfalls nutzen.
Der LCD-Code ist reichlich abgespeckt. Z.B wird die aktuelle Zeichenposition nicht mehr mitverfolgt.
Ein Zeilenüberlauf wird daher nicht automatisch umgebrochen. Überzählige Zeichen gehen ins Nirvana.
Das Anwendungsprogramm hat also selbst dafür Sorge zu tragen, dass nur auf vorhandene Zeichenpositionen geschrieben wird.
Ich habe mir die Freiheit genommen und die Funktionsweise der Routine "vLCD_gotoxy", mit der eine neue Cursorposition gesetzt wird, etwas geändert.
Dass die X- und Y-Werte bislang bei 0 begonnen haben, hat mich immer irritiert. Nun wird das 7. Zeichen in Zeile 2 mit vLCD_gotoxy(7,2); angesprungen.
Verbesserungsfähig ist vermutlich jeder Code.
Hier könnte man sich wünschen, dass während der diversen Warteschleifen der Prozessor in den Stromsparmodus versetzt wird.
Schließlich ist der große Vorteil eines DOGM der äußerst geringe Stromverbrauch. Dem sollte sich der Prozessor anschließen.
Angehängt ist eine zip-Datei mit den Projekt-Dateien für das Code Composer Studio.
vy 73 de Matthias, DL9MWE
pse qsl...
DOGM162 am MSP430
DOGM162 am MSP430
- Attachments
-
- DOGM162-SPI.zip
- MSP430G2553-Projekt
- (35.53 KiB) Downloaded 1038 times
Last edited by DL9MWE on Fri 29. Aug 2014, 12:31, edited 1 time in total.
Re: DOGM162 am MSP430
Hallo Matthias, Hallo MC-Freunde,
diese DOG (Display On Glas) Displays sind sehr schön und sehr stromsparend, wie Du, Matthias, schon schreibst und funktionieren wahlweise mit 5V oder 3.3V (Beschaltung und SW anzupassen!). Die Display-Routinen aus den Workshops (lcd.c und lcd.h) sind aber für die 4-Bit-parallele Ansteuerung der DOGs nicht geeignet, da die Initialisierung abweichend erfolgen muss. Die DOGs haben zusätzliche Funktionen, z.B. muss der Kontrast programmiert werden - hier gibt es keine externe Spannung dafür, an die ein Poti angeschlossen wird. Ausserdem ist für 3.3V-Betrieb die interne Ladungspumpe zu aktivieren. Anbei sende ich Euch die Software-Version für DOGs in 4-Bit-paralleler Ansteuerung mit 3.3V Betriebsspannung als Ergänzung zur SPI-Version oben.
Dass die Wartezeiten als for-Schleifen ausgelegt sind, ist energetisch natürlich nicht optimal, aber die beste Lösung für ein einfaches Einbinden der Display-Funktionen in eigene Projekte ohne weitere Anforderungen an "Timer-Infrastruktur". So ist es unkompliziert und fehlerunanfällig. Wer weiter optimieren mag, kann die Wartefunktion bei geringem Aufwand mit einem Timer seiner Wahl realisieren. Es ist nur die Funktion void vLCD_delay(void) in der LCDdogm.c durch Timer-Aufziehen und Schlafenlegen der CPU zu ersetzen.
Die Version anbei ist für 8MHz CPU-Takt ausgelegt, da hier der beste Wirkungsgrad erreicht wird. Bei geringerem Takt würde die CPU ja länger arbeiten (z.B. acht mal länger mit 1MHz Takt) oder bei höherem Takt schneller fertig sein (halbe Zeit bei 16MHz Takt). Bei 8MHz liegt das Optimum wenn man die Aufteilung in statische und dynamische Leistungsaufnahme des Mikrocontrollers berücksichtigt. Ohne die Timer-Modifikation und bei abweichender Taktrate solltet Ihr die Schleifenvariable in void vLCD_delay(void) linear mit skalieren (z.B. i=30 für 8MHz, i=60 für 16MHz, i=4 für 1MHz usw.).
Falls Ihr Probleme habt, meldet Euch ruhig hier. Dazu ist die Liste ja da.
vy 73 und viel Erfolg!
Gerrit, DL9GFA
diese DOG (Display On Glas) Displays sind sehr schön und sehr stromsparend, wie Du, Matthias, schon schreibst und funktionieren wahlweise mit 5V oder 3.3V (Beschaltung und SW anzupassen!). Die Display-Routinen aus den Workshops (lcd.c und lcd.h) sind aber für die 4-Bit-parallele Ansteuerung der DOGs nicht geeignet, da die Initialisierung abweichend erfolgen muss. Die DOGs haben zusätzliche Funktionen, z.B. muss der Kontrast programmiert werden - hier gibt es keine externe Spannung dafür, an die ein Poti angeschlossen wird. Ausserdem ist für 3.3V-Betrieb die interne Ladungspumpe zu aktivieren. Anbei sende ich Euch die Software-Version für DOGs in 4-Bit-paralleler Ansteuerung mit 3.3V Betriebsspannung als Ergänzung zur SPI-Version oben.
Dass die Wartezeiten als for-Schleifen ausgelegt sind, ist energetisch natürlich nicht optimal, aber die beste Lösung für ein einfaches Einbinden der Display-Funktionen in eigene Projekte ohne weitere Anforderungen an "Timer-Infrastruktur". So ist es unkompliziert und fehlerunanfällig. Wer weiter optimieren mag, kann die Wartefunktion bei geringem Aufwand mit einem Timer seiner Wahl realisieren. Es ist nur die Funktion void vLCD_delay(void) in der LCDdogm.c durch Timer-Aufziehen und Schlafenlegen der CPU zu ersetzen.
Die Version anbei ist für 8MHz CPU-Takt ausgelegt, da hier der beste Wirkungsgrad erreicht wird. Bei geringerem Takt würde die CPU ja länger arbeiten (z.B. acht mal länger mit 1MHz Takt) oder bei höherem Takt schneller fertig sein (halbe Zeit bei 16MHz Takt). Bei 8MHz liegt das Optimum wenn man die Aufteilung in statische und dynamische Leistungsaufnahme des Mikrocontrollers berücksichtigt. Ohne die Timer-Modifikation und bei abweichender Taktrate solltet Ihr die Schleifenvariable in void vLCD_delay(void) linear mit skalieren (z.B. i=30 für 8MHz, i=60 für 16MHz, i=4 für 1MHz usw.).
Falls Ihr Probleme habt, meldet Euch ruhig hier. Dazu ist die Liste ja da.
vy 73 und viel Erfolg!
Gerrit, DL9GFA
- Attachments
-
- LCDdogm.zip
- DOG-Display-Funktionen für 4-Bit-parallele Ansteuerung bei 3.3V (MSP430)
- (2.86 KiB) Downloaded 945 times
Re: DOGM162 am MSP430
Servus,
erstmal vielen Dank für deinen Code. Ich bin ein absoluter Anfänger und dein Code hat mir sehr weiter geholfen.
Ich hätte eine Frage bezüglich eigener Zeichen.
Laut Datenblatt muss ich so vorgerhen:
1.) Mit dem Kommando "CG RAM Address Set" wird der ASCII Code (Bit 3,4,5) und die entsprechende Pixelzeile (Bit
0,1,2) des Zeichens angewählt. Im Beispiel wird ein Zeichen mit dem Code $00 definiert.
2.) Mit dem Befehl "Data Write" wird nun Pixelzeile
für Pixelzeile das Zeichen in das CG RAM geschrieben. Ein Zeichen benötigt 8 Schreiboperationen wobei die 8te Zeile der Cursorzeile entspricht.
3. Das neu definierte Zeichen wird genauso behandelt wie ein normales ASCII Zeichen. (Verwendung: DD RAM Address Set, Data write)
Ich weiß leider garnicht wie ich genau anfangen soll... Könnte mir jemand auf die Sprünge helfen wie ich hier am besten vorgehe? Bräuchte einfach alles Schwarz auf dem Display. Also das Zeichen soll alle Pixel ausfüllen. Aber wie teile ich dem Controller (LCD) mit wie das haben möchte?
Ich verwende einen MSP430F2619.
Bin für jede Antwort dankbar
Vielen Dank.
Grüße, Alex
erstmal vielen Dank für deinen Code. Ich bin ein absoluter Anfänger und dein Code hat mir sehr weiter geholfen.
Ich hätte eine Frage bezüglich eigener Zeichen.
Laut Datenblatt muss ich so vorgerhen:
1.) Mit dem Kommando "CG RAM Address Set" wird der ASCII Code (Bit 3,4,5) und die entsprechende Pixelzeile (Bit
0,1,2) des Zeichens angewählt. Im Beispiel wird ein Zeichen mit dem Code $00 definiert.
2.) Mit dem Befehl "Data Write" wird nun Pixelzeile
für Pixelzeile das Zeichen in das CG RAM geschrieben. Ein Zeichen benötigt 8 Schreiboperationen wobei die 8te Zeile der Cursorzeile entspricht.
3. Das neu definierte Zeichen wird genauso behandelt wie ein normales ASCII Zeichen. (Verwendung: DD RAM Address Set, Data write)
Ich weiß leider garnicht wie ich genau anfangen soll... Könnte mir jemand auf die Sprünge helfen wie ich hier am besten vorgehe? Bräuchte einfach alles Schwarz auf dem Display. Also das Zeichen soll alle Pixel ausfüllen. Aber wie teile ich dem Controller (LCD) mit wie das haben möchte?
Ich verwende einen MSP430F2619.
Bin für jede Antwort dankbar
![Lächeln :)](./images/smilies/icon_e_smile.gif)
Grüße, Alex
Re: DOGM162 am MSP430
Hallo Alex,
sorry für die späte Antwort!
Wie eigene Zeichen im Display definiert werden können, kann man im Datenblatt erfahren.
Das findet sich z.B. hier: https://cdn-reichelt.de/documents/daten ... /dog-m.pdf
Die Umsetzung in ein C-Programm für den MSP430 sollte dann nicht mehr schwer fallen.
Die Routine vSendByteToLCD_4BIT übernimmt die Übertragung von Befehlen und Daten an das Display.
Wird als zweiter Parameter "COMMAND" angegeben, werden Befehle übertragen.
Damit können die Kommandos zur Definition eigener Zeichen an das Display übermittelt werden.
Die Initialisierung mittels vLCD_init() muss natürlich vorher erfolgt sein.
@Alex eine neugierige Frage: wie bist du auf diese Website gekommen?
Gruß,
Matthias
sorry für die späte Antwort!
Wie eigene Zeichen im Display definiert werden können, kann man im Datenblatt erfahren.
Das findet sich z.B. hier: https://cdn-reichelt.de/documents/daten ... /dog-m.pdf
Die Umsetzung in ein C-Programm für den MSP430 sollte dann nicht mehr schwer fallen.
Die Routine vSendByteToLCD_4BIT übernimmt die Übertragung von Befehlen und Daten an das Display.
Wird als zweiter Parameter "COMMAND" angegeben, werden Befehle übertragen.
Damit können die Kommandos zur Definition eigener Zeichen an das Display übermittelt werden.
Die Initialisierung mittels vLCD_init() muss natürlich vorher erfolgt sein.
@Alex eine neugierige Frage: wie bist du auf diese Website gekommen?
Gruß,
Matthias
Re: DOGM162 am MSP430
Vielen Dank für die Antwort ![Lächeln :)](./images/smilies/icon_e_smile.gif)
Hab das Problem nach 3Std selber hinbekommen ^^.
Zu deiner Frage,
habe einfach nur nach "EA DOGM 3,3V SPI msp430" gesucht und dann auf der 2ten oder 3ten Seite wurde mir dieser Beitrag hier angezeigt.
MfG, Alex
![Lächeln :)](./images/smilies/icon_e_smile.gif)
Hab das Problem nach 3Std selber hinbekommen ^^.
Zu deiner Frage,
habe einfach nur nach "EA DOGM 3,3V SPI msp430" gesucht und dann auf der 2ten oder 3ten Seite wurde mir dieser Beitrag hier angezeigt.
MfG, Alex
Re: DOGM162 am MSP430
Hallo Alex,
prima, dass du das Problem nach 3 Stunden Arbeit gelöst hast. Manchmal dauert das viel länger...
Schön, dass man mit so relativ einfachen Suchanfragen auf diese Seite kommt.
Das zeigt eine gewisse "Alleinstellung".
Gruß, Matthias
prima, dass du das Problem nach 3 Stunden Arbeit gelöst hast. Manchmal dauert das viel länger...
Schön, dass man mit so relativ einfachen Suchanfragen auf diese Seite kommt.
Das zeigt eine gewisse "Alleinstellung".
Gruß, Matthias
Re: DOGM162 am MSP430
Hallo zusammen,
der Code funktioniert übrigens auch ohne Modifikation mit dem zweizeiligen SPI-Display NHD-C0216CZ-FSW-FBW-3V3 von Newhaven Display. Das Display wird wie folgt angeschlossen:
Pin 1: über 10kOhm an VDD (3V)
Pin 2: P2.0
Pin 3: P2.3
Pin 4: P2.1
Pin 5: P2.2
Pin 6-10: wie im Datenblatt vorgeschlagen http://www.newhavendisplay.com/specs/NH ... BW-3V3.pdf
Viele Grüße
Andreas, DL6AAS
der Code funktioniert übrigens auch ohne Modifikation mit dem zweizeiligen SPI-Display NHD-C0216CZ-FSW-FBW-3V3 von Newhaven Display. Das Display wird wie folgt angeschlossen:
Pin 1: über 10kOhm an VDD (3V)
Pin 2: P2.0
Pin 3: P2.3
Pin 4: P2.1
Pin 5: P2.2
Pin 6-10: wie im Datenblatt vorgeschlagen http://www.newhavendisplay.com/specs/NH ... BW-3V3.pdf
Viele Grüße
Andreas, DL6AAS