Hallo zusammen, ich hab folgendes Problem. Ich versuche gerade eine 2*16 Display mit Hilfe eine MSP430G2232 zu programmieren. Bis jetzt hat alles relativ gut geklappt nur jetzt bin ich an folgendem Problem und komme nicht mehr weiter: Mein Code sieht wie folgt aus:
1 | #include <msp430g2232.h> |
2 | |
3 | //Port2
|
4 | #define LCD_RS (0x01)
|
5 | #define LCD_RW (0x02)
|
6 | #define LCD_E (0x04)
|
7 | |
8 | void wait(unsigned int i); // prototypen |
9 | void LCDInit(void); |
10 | void LCDClear(void); |
11 | void LCDClock(void); |
12 | int main(void); |
13 | |
14 | |
15 | int main(void) |
16 | {
|
17 | WDTCTL = WDTPW + WDTHOLD; // watchdog off |
18 | |
19 | BCSCTL2 |= DIVM_3; // MCLK Teiler 4 |
20 | |
21 | P1DIR = 0xFF; // Port1 = OUTPUT (8 datenleitungen zum LCD) |
22 | P2DIR = 0xFF; // Port2 = OUTPUT (RS --> P2.0; R/W --> P2.1; E --> P2.2) |
23 | |
24 | P1SEL = 0x00; |
25 | P2SEL = 0x00; // all ports are GPIO |
26 | |
27 | P1IE = 0x00; |
28 | P2IE = 0x00; // interrupt disable |
29 | |
30 | P1OUT = 0x00; // ports mit null initialisieren |
31 | P2OUT = LCD_E; // initial nur E (clock) auf high, RS und R/W auf low |
32 | |
33 | |
34 | wait(30000); // init-zeit des display ist ca. 15 ms |
35 | LCDInit(); // LCD initialisieren ... |
36 | LCDClear(); // ... und dann noch loeschen und cursor an den anfang zurueck |
37 | |
38 | P1OUT = 71; // Ausgeben G |
39 | P2OUT = LCD_E + LCD_RS; // |
40 | LCDClock(); // ausführen |
41 | LCDClock(); // ausführen |
42 | |
43 | |
44 | while(1); |
45 | }
|
46 | |
47 | void wait(unsigned int i) // delay function |
48 | {
|
49 | unsigned int j; |
50 | for(j=0;j<i;j++); |
51 | }
|
52 | |
53 | void LCDClock(void) |
54 | {
|
55 | wait(50); |
56 | P2OUT |= LCD_E; // clock-bit erst mal sicherheitshalber auf high |
57 | wait(50); |
58 | P2OUT &= ~LCD_E; // und jetzt auf low |
59 | wait(50); |
60 | }
|
61 | |
62 | void LCDClear(void) |
63 | {
|
64 | P1OUT = 0x01; // clear display |
65 | P2OUT = LCD_E; // RS und R/W low, E high |
66 | LCDClock(); // befehl ausfuehren |
67 | wait(500); // clear display braucht was laenger |
68 | }
|
69 | |
70 | void LCDInit(void) |
71 | {
|
72 | P1OUT = 0x38; // 8 bit operation, 2-zeilen-display, 5*8 dot font |
73 | P2OUT = LCD_E; // RS und R/W low, E high |
74 | LCDClock(); // befehl ausfuehren |
75 | P1OUT = 0x0F; // display anschalten, cursor an, cursor blinkt nicht |
76 | P2OUT = LCD_E; // RS und R/W low, E high |
77 | LCDClock(); // befehl ausfuehren |
78 | P1OUT = 0x06; // cursorrichtung: nach rechts; kein display-shift |
79 | P2OUT = LCD_E; // RS und R/W low, E high |
80 | LCDClock(); // befehl ausfuehren |
81 | }
|
Ich wollte probeweiße den Buchstabe "G" auf dem Display ausgeben. Wenn ich nun mein Code Step-by-Step durchlaufen lasse funktioniert das auch wunderbar, nur wenn ich den MSP430 "freilaufen" lasse zeigt es mir nichts an. Der MCLK des µC ist 250kz und somit ist die wait-Zeit 100µs. Das musste ja nach meinen Recherche ja mehr aus ausreichend sein. danke für eure Hilfe! MfG