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