Hallo!
Seit etwas mehr als einer Woche versuche ich, leider erfolglos, ein
Display von Electronic Assembly namens EA DOGM162W-A an einem TI
MSP430F1232 Leben einzuhauchen. Der Controller ist auf dem
Education-Board v1.4 [ http://www.msp430-buch.de/ ] des FTZ Leipzig
verbaut und hat bereits ein LCD an bord, was zwar die gleichen Ports
belegt, aber ein andere Initialisierung. Das LCD soll mit 4 Bit bei 3,0
- 3,3 V laufen (genau sind es +3,12V am Pin2 direkt vom Controller).
Hier erstmal das Datenblatt vom Display:
http://www.lcd-module.de/pdf/doma/dog-m.pdf
Elektrisch hab ich, wie im Datenblatt angegeben, das LCD angschlossen:
Kontakte
21 (-)1uF(+) 22
23 Masse
24 (+)2,2uF(-) 25 auf +3,3V
26 +3,3V
27 Masse
28 D7 auf P1.3
29 D6 auf P1.2
30 D5 auf P1.1
31 D4 auf P1.0
32 bis 35 auf +3,3V
36 Enable auf P3.1
37 R/W auf Masse
38 Chip Select (CSB) auf Masse
39 RS auf P3.0
40 Reset auf +3,3V oder Masse (ist uneindeutig im Datenblatt, keines von
beiden zeigt keine Wirkung)
Mit IAR Workbench (Kickstart) habe ich programmiert, das nach der
Initialisierung (4 Bit, 2 zeilig, Cursor aus, kein Blinken, rechts
shift) ein 'A' links oben angzeigt werden müsste. Leider gibt es keine
Reaktion vom LCD. Ob das Display defekt ist oder nicht, kann womöglich
nur vermutet werden.
Vielen Dank schon im Voraus
Gruß Norman
Hier ist der Quellcode dazu:
1
#include<msp430x12x2.h>
2
3
4
voiddelay(intz_wert)// 1000*z_wert ca. 1ms ???
5
{
6
intv;
7
for(v=z_wert;v>=0;v--);
8
}
9
10
11
voidmain(void)
12
{
13
WDTCTL=WDTPW+WDTHOLD;// Stop WDT
14
15
// Setup Port1 8Bit Daten zu Display
16
P1DIR=0xFF;
17
P1OUT=0xF0;
18
//LCD_Init (); // Initiallisierung des LCD
19
20
delay(30000);// >32.767 mag Compiler nicht <-- 16 Bit
Wobei die umständliche Schreibweise auch egal ist, da du bei jedem
anderen Zugriff eh immer alles auf 0 setzt. Du kannst also auch einfach
P1OUT = 0x00 schreiben.
1
P3OUT|=BIT1;// Function Set: 0x20
2
P1OUT=0x30>>4;
Da passt Code und Kommentar nicht zusammen
>40 Reset auf +3,3V oder Masse (ist uneindeutig im Datenblatt...
Wie im Datenblatt zu sehen ist muss die Leitung eindeutig auf 3,3V (für
normalbetrieb).
Danke für die Antwort.
Ich habe das mit der Klammer und mit dem Reset auf 3,3V geändert.
Der Kommentar ist an der Stelle falsch, aber die Werte sind wie im
Datenblatt richtig, also:
0x30
0x30
0x30
0x20
.
.
.
Nochmal zum Reset, das ist im Datenblatt ganz hinten in der Tabelle mit
'L', also LOW, angegeben. Was für mich Masse bedeutet, aber weiter vorne
in der Zeichnung ist Reset auf +3,3V
Die delay-Funktion habe ich auch nochmal überarbeitet und entsprechend
auch die delay-Werte:
1
voiddelay(unsignedintz_wert)
2
{
3
volatileunsignedinti;
4
5
while(z_wert>0)
6
{
7
z_wert--;
8
for(i=0;i<60;i++);// equals 1 ms
9
}
10
}
Es hat alles nichts gebracht. Das LCD macht keinen mux. ;-(
Gruß Norman
Hallo Norman,
schau' mal unter http://homepages.fh-regensburg.de/~scg39398/mc_lab/
Sollte der Link nicht funktionieren, dann füttere mal die Suchmaschine
Deiner Wahl mit den Begriffen "msp430 niceboard". Dann landest Du auch
auf der Projektseite der FH-Regensburg. Die haben auf ihrem Board ein
EA-DOGM162 und entsprechende initialisierungs Routinen für den 4Bit
Betrieb und auch die Ansteuerung via SPI.
Norman Freitag schrieb:> Nochmal zum Reset, das ist im Datenblatt ganz hinten in der Tabelle mit> 'L', also LOW, angegeben. Was für mich Masse bedeutet,> in der Zeichnung ist Reset auf +3,3V
Es ist einfach die Standardbeschaltung für Reset.
Low = Masse = Reset
High = Vcc = Normalbetrieb.
@Jörg S.
Ok, danke für die Info.
@Northernhessian
Northernhessian schrieb:> Hallo Norman,> schau' mal unter http://homepages.fh-regensburg.de/~scg39398/mc_lab/> Sollte der Link nicht funktionieren, dann füttere mal die Suchmaschine> Deiner Wahl mit den Begriffen "msp430 niceboard". Dann landest Du auch> auf der Projektseite der FH-Regensburg. Die haben auf ihrem Board ein> EA-DOGM162 und entsprechende initialisierungs Routinen für den 4Bit> Betrieb und auch die Ansteuerung via SPI.
Danke für den Tipp, aber das hatte ich schon probiert und es hat nicht
funktioniert.
Dieses Projekt der FH Regensburg ist als CrossWorks-Projekt online
gestellt, aber das aktuelle CrossWorks 2.0 kennt keine <msp430x12x2.h>,
was zu Fehlern beim Kompilieren führt. Außerdem belegen die Authoren
genau die für das Debugging notwendigen Ports P1.4 bis P1.7.
@ALLE
Ich hab das Display nun mit 8bit zum Laufen bekommen. Wenn bei mir 4bit
läuft, dann lade ich den Quellcode hoch.
Gruß Norman
Falls du noch einen Pin für Reset frei hast, probier mal:
- Spannung anlegen
- delay
- Reset low
- delay
- Reset High
Bei mir wars so, dass es nur nach definierten Reset lief.
Sid schrieb:> Falls du noch einen Pin für Reset frei hast, probier mal:>> - Spannung anlegen> - delay> - Reset low> - delay> - Reset High>> Bei mir wars so, dass es nur nach definierten Reset lief.
Bezieht sich das auf alle Betriebsmodi, also auch auf 8-Bit-Betrieb?
ich habe auch grad damit zu kämpfen gehabt. aber mit SPI. bei mir war
SPI falsch konfiguriert und der RS + CSB Pin war falsch deklariert. Bei
dir nicht relevand. SPI Pin's schon verbraucht?
Norman Freitag schrieb:> Ich hab das Display nun mit 8bit zum Laufen bekommen. Wenn bei mir 4bit> läuft, dann lade ich den Quellcode hoch.
Kann dir auch meinen Anbieten :) Hab ich glaub ich schon mal hier
irgendwo im Forum hochgeladen...
@Jörg S.
Das sieht vielversprechend aus, aber wie ist delay(), DELAY_30_US und
DELAY_SHORT definiert?
Die Atmels scheinen ja von Haus aus eine ordentliche delay-Funktion mit
util/delay.h mitzubringen, wenn ich so diverse Quellcodes im Netz finde.
Leider fehlt dem MSP430 genauer meinem 1232 sowas aber.
Gruß Norman
Norman Freitag schrieb:> Das sieht vielversprechend aus, aber wie ist delay(), DELAY_30_US und> DELAY_SHORT definiert?
Diese Frage hatte ich befürchtet :)
Ich weiss das man am Anfang gerne alles per CopyPaste haben will, aber
was eine Delay Funktion macht dürfte doch klar sein, oder? Und sowas zu
schreiben ist doch auch mehr als Einfach.
Wie lange DELAY_SHORT verzögern muss steht im Kommentar.
>Die Atmels scheinen ja von Haus aus eine ordentliche delay-Funktion mit>util/delay.h mitzubringen,....
Das hat mit Atmel nichts zu tun, das macht der Compiler Hersteller.
>Leider fehlt dem MSP430 genauer meinem 1232 sowas aber.
Vermisse ich nicht. So eine Funktion schreibt man einmal im Leben und
kopiert die dann nur noch von Projekt zu Projekt ;)
So, wie versprochen mein funktionierender Quellcode für den 8Bit-Modus
und den 4Bit-Modus.
Die Initialisierungscodes aus dem Datenblatt des ST7036 scheinen nicht
hundertprozentig stimmig zu sein.
Jedenfalls habe ich die einzeilnen Codesendungen an das Display
gruppiert, so dass man die Arbeitsweise gut verfolgen kann. Optimiert
durch Funktionen ist dann ein Quellcode, wie vom Vorredner Jörg S. drin,
der auch weniger Speicher benötigen sollte.
Das LCD sollte mit meinem Beispiel folgendes anzeigen:
80 8F
C0 CF
Das sind die Positionsadressen der Zellen links oben, rechts oben, links
unten und rechts unten.
Das Timing kann sicher noch mehr optimiert werden, aber es funktioniert
so wie es ist erstmal.
Als nächstes möchte ich noch SPI zum Laufen bekommen, wenn ich das habe,
stelle ich das dann hier ein. Es könnten deshalb Fragen bzgl. SPI von
mir hier noch folgen.
Danke für die bisherige Hilfe.
Gruß Norman
So,
wie versprochen stelle ich hier die Routine für die SPI-Ansteuerung des
Displays ein.
Man hat in dem Quellcode die Wahl zwischen SPI-, 4-Bit- und
8-Bit-Betrieb, sowie die Wahl zwischen MSP430x12x2 (also wie mein F1232)
oder MSP430x22x2 (etwa der F2232) oder dem MSP430x22x4 (also ein F2274).
Die 12xx-µC hat eine "alte" SPI-Initialisierung auf U0, die 22xx-µC
(22x2 und 22x4) haben die gleiche, hier wurde B0 genutzt, um zwischen
den µC-Generationen pinkompatibel zu bleiben.
Ich habe alle 9 Kombination getestet und es läuft!!!
Das 1-zeilige sowie das 3-zeilige DOGM-Display kann mit Sicherheit durch
ganz wenige Änderungen auch mit dem Quellcode zum laufen gebracht
werden.
Gruß
Norman
Norman Freitag schrieb:> Die Atmels scheinen ja von Haus aus eine ordentliche delay-Funktion mit> util/delay.h mitzubringen, wenn ich so diverse Quellcodes im Netz finde.> Leider fehlt dem MSP430 genauer meinem 1232 sowas aber.
Fehlt nicht, zumindest nicht bei IAR (siehe unten) und Code Composer:
#include <intrinsics.h>
/* Insert a delay with a specific number of cycles. */
__intrinsic void __delay_cycles(unsigned long __cycles);