Hallo Forum,
ich benutze einen MSP430 F2410 und möchte das folgende Display
ansteuern: LCD 204B BL
In der Wikipedia steht das der MSP430 (welches Derivat aber leider
nicht) 4 backplanes für die Ansteuerung von LCDs hätte. Im UserGuide
ahbe ich dazu leider nicht gefunden. (Oder überlesen, sind ja immerhin
über 600 Seiten).
Hat das schonmal jemand versucht und kann mir dazu einen Link/
Webresource geben?
Vielen Dank
-mwstui
Hi
>ich benutze einen MSP430 F2410 und möchte das folgende Display>ansteuern: LCD 204B BL
Wenn das ein Display mit eingebautem Controller ist, dann sind mögliche
Backplanes des MSP uninteressant.
MfG Spess
spess53 schrieb:> Wenn das ein Display mit eingebautem Controller ist, dann sind mögliche> Backplanes des MSP uninteressant.
Es ist ein HD44780 als Display-Controller implementiert.
@DSausW,
ich finde Wiki als schöner Einstieg für Fragen zu neuen µCs, versuche
mich davon aber schnellstens zu entfernen. Danke für die Info!
Das war auch nur ein kleiner Seitenhieb.
Implementiert ist da nichts, jedenfalls nicht im MSP.
Solltest Du aber ein BOARD haben, könnte das sein.
Gängig ist auch bei den 44780-kompatiblen LCD-Modulen,
das der/die Controller auf der Anzeige sitzen.
Dann ist das ja nur ein 4bit/8bit-Geschubbse + Steuerleitungen.
Siehe Artikelsammlung /oder Gurgel, etc. .
mwstui schrieb:> Hallo Forum,>> ich benutze einen MSP430 F2410 und möchte das folgende Display> ansteuern: LCD 204B BL
Ah ja, jeder weiß nun, was gemeint ist. In Österreich fast wie dasn
Autokennzeichen für Bregenz Land.
> In der Wikipedia steht das der MSP430 (welches Derivat aber leider> nicht) 4 backplanes für die Ansteuerung von LCDs hätte.
Wikipedia ist ja auch genau die Stelle wo man Datenblätter eines uC
von TI findet....
> Im UserGuide> ahbe ich dazu leider nicht gefunden. (Oder überlesen, sind ja immerhin> über 600 Seiten).
Normalerweise haben die Datenblätter von Ti "Lesezeichen" (beim Foxit
nennt sich das Bookmarks). Das hilft ungemein, solch seitenlangen
Abhandlungen einer bestimmten Peripherie im uC zu finden.
>> Hat das schonmal jemand versucht
Ja. Mein Programmierer und ich. Mit einem anderen MSP. Erfolgreich.
> und kann mir dazu einen Link/> Webresource geben?
geh auf die Website von TI zu den MSP-430 uC und schau nach, was im
Datenblatt(!) zu genau Deinem uC steht. Im Userguide werden defakto alle
uC dieser Familie behandelt, unabhägig davon ob der nun einen
LCD-Controller eingebaut hat oder nicht. Am Anfang solch eines Kapitels
steht sogar fast immer, welche Controller das dann genau betrifft.
ist das so schwer daß Du dazu ein Forum benötigst?
> Vielen Dank> -mwstui
Grüße
MiWi
@DSausW,
der LCD-Controller ist am LCD dran.
Also nur die Daten rüber schieben, ok, das hatte ich gehofft :-)
Ich muss übrigens ein Board selbst entwerfen, also habe ich eigentlich
nur den nackten MSP.
@MiWi,
zu deinem ersten Satz, wenn man keine Ahnung hat... Zu deinem Rest, ich
bezweifle das du überhaupt schon mal einen Lichtschalter erfolgreich
umgelegt hast.
mwstui schrieb:> In der Wikipedia steht das der MSP430 (welches Derivat aber leider> nicht) 4 backplanes für die Ansteuerung von LCDs hätte.
Das bezieht sich nur auf Varianten, die einen eingebauten LC-Controller
haben, Dein 'F2410 aber hat den nicht. Außerdem willst Du ein Display
mit eigenem Controller verwenden, der Punkt ist damit doppelt
irrelevant.
Hallo,
schau mal hier: http://www.ti.com/tool/PMP5568
Unter "Software" gibt es eine "PMP5568 Design File" ZIP-Datei. In dieser
ist eine Bibliothek fuer den MSP430 zur Ansteuerung eines
44780-kompatiblen Displays (Softare - MCU Card - lcd.c / lcd.h).
Den Thread muss ich aus gegebenen Anlass nocheinmal herausholen.
Ich bin momentan echt am verzweifeln. Das LCD leuchtet fröhlich vor sich
hin (besser; die Hintergrundbeleuchtung), bekommt die Spannung die es
soll an den Pins an denen es soll (also High = 3V3 oder Low = 0V) und am
LCD liegt es auch nicht da ein zweites genauso wenig irgendetwas tut...
Ich habe meinen Quellcode jetzt soweit reduziert das ich erst einmal nur
einen Blinkenden Cursor haben möchte... aber auch das funktioniert
nicht... Ich habe meinen "Sendecode" auch im Simulator
(http://www.dinceraydin.com/djlcdsim/djlcdsim.html) ausprobiert, da
funktioniert "natürlich" alles...
Momentan bin ich für jede Idee dankbar...
Bevor irgendwer eine Zeile deines Codes analysiert solltest du uns
erzählen wie du das Versorgungspannungsproblem gelöst hast.
Das LCD 204B BL von Reichelt benötigt laut Datenblatt eine
Betriebsspannung von 5V und ein MSP430 sollte nicht über 3.6V versorgt
werden.
Hi backplane,
die Versorgung habe ich über die externe (USB) gelöst, es kommen 5V rein
und werden per DC/DC auf 3V3 gepegelt. Am MSP liegen dann auch 3,38V an.
Andere Funktionen funktionieren auch, nur das LCD eben nicht.
Hallo Helper, hab ich schon alles ausprobiert gehabt, leider ohne
Erfolg. Trotzdem Danke. Ich habe auch noch ein paar weitere Websites und
Tutorials durchgeforstet, wenn ich irgend etwas fundamentales in meinen
Code vergessen habe, ist es mir bislang nicht aufgefallen, und ich bin
mittlerweile knapp 13 Stunden an diesen Problem (und den Code aus deinen
ersten Link habe ich auch schon umgeschrieben, leider auch ohne
Erfolgreiche Anzeige)
mwstui schrieb:> den Code aus deinen> ersten Link habe ich auch schon umgeschrieben
Du brauchst nur die Pinbelegung anpassen oder was noch? Poste den
angepassten Code hier.
Bist du sicher, dass die Hardware passt? Ist das Display 3.3V tolerant?
// IsData - set to TRUE if the byte is character data
76
// FALSE if its a command
77
//
78
// Return
79
//
80
// void.
81
//
82
voidSendByte(charByteToSend,intIsData)
83
{
84
//
85
// clear out all pins
86
//
87
LCM_4OUT&=(~LCM_P4_MASK);
88
//
89
// set High Nibble (HN) -
90
// usefulness of the identity mapping
91
// apparent here. We can set the
92
// DB7 - DB4 just by setting P1.7 - P1.4
93
// using a simple assignment
94
//
95
LCM_4OUT|=(ByteToSend&0xF0);
96
97
if(IsData==TRUE)
98
{
99
LCM_5OUT|=LCM_PIN_RS;
100
}
101
else
102
{
103
LCM_5OUT&=~LCM_PIN_RS;
104
}
105
106
//
107
// we've set up the input voltages to the LCM.
108
// Now tell it to read them.
109
//
110
PulseLcm();
111
//
112
// set Low Nibble (LN) -
113
// usefulness of the identity mapping
114
// apparent here. We can set the
115
// DB7 - DB4 just by setting P1.7 - P1.4
116
// using a simple assignment
117
//
118
LCM_4OUT&=(~LCM_P4_MASK);
119
LCM_4OUT|=((ByteToSend&0x0F)<<4);
120
121
if(IsData==TRUE)
122
{
123
LCM_5OUT|=LCM_PIN_RS;
124
}
125
else
126
{
127
LCM_5OUT&=~LCM_PIN_RS;
128
}
129
130
//
131
// we've set up the input voltages to the LCM.
132
// Now tell it to read them.
133
//
134
PulseLcm();
135
}
136
137
138
//
139
// Routine Desc:
140
//
141
// Set the position of the cursor on the screen
142
//
143
// Parameters:
144
//
145
// Row - zero based row number
146
//
147
// Col - zero based col number
148
//
149
// Return
150
//
151
// void.
152
//
153
voidLcmSetCursorPosition(charRow,charCol)
154
{
155
charaddress;
156
157
//
158
// construct address from (Row, Col) pair
159
//
160
if(Row==0)
161
{
162
address=0;
163
}
164
else
165
{
166
address=0x40;
167
}
168
169
address|=Col;
170
171
SendByte(0x80|address,FALSE);
172
}
173
174
175
//
176
// Routine Desc:
177
//
178
// Clear the screen data and return the
179
// cursor to home position
180
//
181
// Parameters:
182
//
183
// void.
184
//
185
// Return
186
//
187
// void.
188
//
189
voidClearLcmScreen()
190
{
191
//
192
// Clear display, return home
193
//
194
SendByte(0x01,FALSE);
195
SendByte(0x02,FALSE);
196
}
197
198
199
//
200
// Routine Desc:
201
//
202
// Initialize the LCM after power-up.
203
//
204
// Note: This routine must not be called twice on the
205
// LCM. This is not so uncommon when the power
206
// for the MCU and LCM are separate.
207
//
208
// Parameters:
209
//
210
// void.
211
//
212
// Return
213
//
214
// void.
215
//
216
voidInitializeLcm(void)
217
{
218
//
219
// set the MSP pin configurations
220
// and bring them to low
221
//
222
LCM_5DIR|=LCM_P5_MASK;
223
LCM_5OUT&=~(LCM_P5_MASK);
224
225
226
//
227
// wait for the LCM to warm up and reach
228
// active regions. Remember MSPs can power
229
// up much faster than the LCM.
230
//
231
__delay_cycles(100000);
232
233
234
//
235
// initialize the LCM module
236
//
237
// 1. Set 4-bit input
238
//
239
LCM_5OUT&=~LCM_PIN_RS;
240
LCM_5OUT&=~LCM_PIN_EN;
241
242
LCM_5OUT=0x20;
243
PulseLcm();
244
245
//
246
// set 4-bit input - second time.
247
// (as reqd by the spec.)
248
//
249
SendByte(0x28,FALSE);
250
251
//
252
// 2. Display on, cursor on, blink cursor
253
//
254
SendByte(0x0E,FALSE);
255
256
//
257
// 3. Cursor move auto-increment
258
//
259
SendByte(0x06,FALSE);
260
}
261
262
263
//
264
// Routine Desc
265
//
266
// Print a string of characters to the screen
267
//
268
// Parameters:
269
//
270
// Text - null terminated string of chars
271
//
272
// Returns
273
//
274
// void.
275
//
276
voidPrintStr(char*Text)
277
{
278
char*c;
279
280
c=Text;
281
282
while((c!=0)&&(*c!=0))
283
{
284
SendByte(*c,TRUE);
285
c++;
286
}
287
}
288
289
290
//
291
// Routine Desc
292
//
293
// main entry point to the sketch
294
//
295
// Parameters
296
//
297
// void.
298
//
299
// Returns
300
//
301
// void.
302
//
303
voidmain(void)
304
{
305
WDTCTL=WDTPW+WDTHOLD;// Stop watchdog timer
306
307
InitializeLcm();
308
309
ClearLcmScreen();
310
311
PrintStr("Hello World!");
312
313
while(1)
314
{
315
__delay_cycles(1000);
316
}
317
318
}
Helper schrieb:> Bist du sicher, dass die Hardware passt? Ist das Display 3.3V tolerant?
Die Hardware sollte passen, bei dem Kontrastwiderstand habe ich
mittlerweile einen Poti dazwischen und zwischen 0 und 50k verschiedene
Werte eingestellt. Passiert ist trotzdem nichts...
Das Display sollte 3V3 als High erkennen (ab 3V).
Helper schrieb:> Was fällt auf?
Das da ein Copy-Fehler war...
Danke für den Hinweis, leider behebt der mein Problem nicht.
Ich habe die Schaltung auch mittlerweile Komplett manuell aufgebaut, Die
Datenleitungen auch mit 5V um zu testn ob ich den Fehler evtl. so
herausfinden kann... leider Nein, es leuchtet so auch nur das Backlight.
Ich häng mal eine PNG von meinen Aufbau an. Vielleicht erkennt ja jemand
den Fehler.
Zur Pinbelegung:
1 - VSS; 2 - VDD; 3 - V0; 4 - RS; 5 - RW; 6 - E;
7-14 - D0-D7; 15 - LEDA; 16 - LEDK
E ist die Taktleitung und wird "ein und aus" gestöpselt.
Der Poti an V0 ist zwischen 0 und 50k probiert wurden.
Der Befehl sollte passen, in dem Simulator
(http://www.dinceraydin.com/djlcdsim/djlcdsim.html) kann man das auch
nachprüfen (D0-D3 auf High; E auf High dann wieder Low)
Greif an deinem USB-Port 5V ab um damit das LCD zu versorgen. Die Daten-
und Steuerleitungen kannst i.d.R. direkt mit dem Controller verbinden,
solange du nur schreibst und nicht liest, da der LCD-Controller auch die
3V3 von deinem MSP als High-Pegel erkennt. Also Daten- und
Steuerleitungen direkt an den uC und alles restliche mit 5V versorgen
(auch das Poti vom Kontrast).
mwstui schrieb:> bei dem Kontrastwiderstand habe ich> mittlerweile einen Poti dazwischen und zwischen 0 und 50k
Das Datenblatt sagt uns: VEE Displayspannung 0..0,5V
Aber schön, dass es jetzt läuft.
@helper,
das hatte ich auch so eingestellt, Problem ist nur das zwischen VDD und
VEE eine Verbindung mit 23kO besteht. Dadurch wurde das Potenzial auf
VDD-Niveau gezogen.
Eine eigene Frage?
Dieser Thread ist über 12 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.