Hallo,
ich habe einen MSP EXP430F5529 und möchte gerne damit einen 2x16 LCD
(PCB-BT10809) ansteuern. Die Verdrahtung habe ich soweit vorgenommen und
als Beispeilcode, war dieser hier mitgeliefert worden.
Mein Display hängt an folgenden Ports vom MSP:
D0-D3 frei
D4 ->P1.3
D5 ->P1.2
D6 ->P4.3
D7 ->P4.0
R/S ->P3.7
E ->P8.2
R/W ->P1.6
Das Problem ist, das Display zeigt nichts an.
Liegt es an den Ports?
Müssen die im Programm geändert warden?
#include <msp430x552x.h>
#include <stdio.h>
void LCD_init(void);
void DelayMs(int Ms);
void LCD_cmd4(unsigned char cmd);
void LCD_dat4(unsigned char byte);
unsigned char i;
const unsigned char Msg1[] = " 16x2 LCD Test... ";
const unsigned char Msg2[] = " F2812 EVB BOARD ";
void main()
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P7DIR = 0xF0; // Set P7.4-P7.7 to Output
direction
P5DIR = 0xC0;
P4DIR = 0x80;
DelayMs(100);
LCD_init();
DelayMs(50);
while(1)
{
LCD_cmd4(0x80);
for(i=0;i<16;i++)
{
LCD_dat4(Msg1[i]);
DelayMs(5);
}
LCD_cmd4(0xc0);
for(i=0;i<16;i++)
{
LCD_dat4(Msg2[i]);
DelayMs(5);
}
}
}
void LCD_init(void)
{
LCD_cmd4(0x33); LCD_cmd4(0x22); LCD_cmd4(0x22); LCD_cmd4(0x22);
LCD_cmd4(0x28); // 28 for four bit mode
LCD_cmd4(0x0c);
LCD_cmd4(0x06);
LCD_cmd4(0x01);
}
void LCD_cmd4(unsigned char cmd)
{
P5OUT = 0x00; // RW=0,RS=0
P7OUT = cmd;
P4OUT = 0x80; // En = 1;
P4OUT = 0x00; // En = 0;
cmd = (cmd<<4) & 0xF0;
P7OUT = cmd;
P4OUT = 0x80; // En = 1;
P4OUT = 0x00; // En = 0;
DelayMs(3);
}
void LCD_dat4(unsigned char byte)
{
P5OUT = 0x80; // RW=0,RS=0
P7OUT = byte;
P4OUT = 0x80; // En = 1;
P4OUT = 0x00; // En = 0;
byte = (byte<<4) & 0xF0;
P7OUT = byte;
P4OUT = 0x80; // En = 1;
P4OUT = 0x00; // En = 0;
DelayMs(3);
}
void DelayMs(int Ms)
{
int i;
while(Ms>0)
{
for(i=0;i<104;i++);
Ms--;
}
}
Mfly schrieb: > Mein Display hängt an folgenden Ports vom MSP: > > D0-D3 frei > D4 ->P1.3 > D5 ->P1.2 > D6 ->P4.3 > D7 ->P4.0 > R/S ->P3.7 > E ->P8.2 > R/W ->P1.6 Und warum benutzt das Programm dann völlig andere Pins?
Clemens L. schrieb: > Mfly schrieb: >> Mein Display hängt an folgenden Ports vom MSP: >> >> D0-D3 frei >> D4 ->P1.3 >> D5 ->P1.2 >> D6 ->P4.3 >> D7 ->P4.0 >> R/S ->P3.7 >> E ->P8.2 >> R/W ->P1.6 > > Und warum benutzt das Programm dann völlig andere Pins? Da ich mich komplett neu damit beschäftige, habe ich noch keine grosse Ahnung davon. Das Programm war als Sample mit beim Display dabei. Kannst du mir sagen, an welcher Stelle ich die Ports ändern muss?
Habe zwar bisher absolut Null-Ahnung vom MSP430, aber zumindest habe ich das 430F5529 Board auch seit ein paar Tagen. Und der Doku nach ist da Port5, der in Deinem Programm z.B. per: P5OUT = 0x80; // RW=0,RS=0 verwendet wird, überhaupt nicht auf die Stiftleisten geführt. Ich vermute mal, Dein Beispielprogramm bezieht sich auf irgendeine Beschaltungsmöglichkeit des 5529, hat aber mit dem Launchpad rein nix zu tun. Grob gesagt mußt Du halt die Portnummern oben und ggfalls auch die geschriebenen Bytewerte so ändern, das sie mit Deiner tatsächlichen Beschaltung übereinstimmen. Wie wär's, wenn Du Dir mal die -ziemlich gute- Workshop-Doku zu dem Launchpad anschaust? Gibts auf der TI-Seite als PDF. Link zugefügt: http://processors.wiki.ti.com/index.php/Getting_Started_with_the_MSP430_LaunchPad_Workshop Editiert: Grundsätzlich wird der Code bei Dir ohne Änderungen nicht funktionieren, die Anpassung der Ports alleine reicht nicht. Da Du das Datennibble elegant auf völlig frei verstruselte Portpins verteilt hast, musst Du Dir das auch erst noch zusammenbauen.... >> D4 ->P1.3 >> D5 ->P1.2 >> D6 ->P4.3 >> D7 ->P4.0
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.