Hallo zusammen,
ich habe ein STM32F4-Discovery Board, und ein Anag Vision AV1624.
Damit habe ich das Tutorial auf Mikrocontroller.net durchgearbeitet und
an den STM angepasst, und das initialisieren funktioniert auch
wunderbar. Ich kann auch alle Funktionen nutzen, wie Cursor ein- und
ausschalten, oder Display ein- und ausschalten. Nur kann ich keine
Zeichen ausgeben.
Wenn ich z. B. die im Tutorial beschriebene Funktion lcd_data('T')
aufrufen will, verändert sich nur die Position des Cursors (2. Zeile, 2.
Spalte).
Ich habe auch schon nachgemessen, ob alle Daten so ankommen, wie sie
sollen, demnach kann es doch kein Kabelbruch, oder 'ne schlechte
Lötstelle sein, oder?
Ich häng euch mal meine Dateien an, die ich geschrieben/aus dem Tutorial
kopiert habe.
Könnt ihr mir helfen? Selbst über die Info, dass das LCD defekt sein
könnte wär ich froh.
Vielen Dank schonmal und
freundliche Grüße
Bastian
Ausschnitt lcd_routines.c
1 | void lcd_init()
|
2 | {
|
3 | GPIO_InitTypeDef GPIO_InitStructure;
|
4 |
|
5 | // Voreinstellungen
|
6 | GPIO_InitStructure.GPIO_Pin = LCD_RS | LCD_EN | GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
|
7 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
|
8 | GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
9 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
|
10 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
|
11 | GPIO_Init(LCD_PORT, &GPIO_InitStructure);
|
12 | time_init();
|
13 |
|
14 | // Alle Ausgänge auf Null setzen
|
15 | GPIO_ResetBits(LCD_PORT, LCD_RS | LCD_EN | GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);
|
16 |
|
17 | // warten auf Bereitschaft des LCD
|
18 | _delay_1ms(LCD_BOOTUP_MS);
|
19 |
|
20 | //Soft-Reset muss 3mal hintereinander gesendet werden zur Initialisierung
|
21 | lcd_out(LCD_SOFT_RESET);
|
22 | _delay_10us(LCD_SOFT_RESET_10US1);
|
23 |
|
24 | lcd_enable();
|
25 | _delay_1ms(LCD_SOFT_RESET_10US2);
|
26 |
|
27 | lcd_enable();
|
28 | _delay_10us(LCD_SOFT_RESET_10US1);
|
29 |
|
30 |
|
31 | // 4-bit Modus aktivieren
|
32 | lcd_out(LCD_SET_FUNCTION | LCD_FUNCTION_4BIT);
|
33 | _delay_1ms(LCD_SET_4BITMODE_MS);
|
34 |
|
35 |
|
36 |
|
37 | // 4-bit Modus / 2 Zeilen / 5x7 Font
|
38 | lcd_command(LCD_SET_FUNCTION | LCD_FUNCTION_4BIT | LCD_FUNCTION_2LINE | LCD_FUNCTION_5X7); // LCD_FUNCTION_2LINE
|
39 |
|
40 | // Display ein /Cursor aus / Blinken an
|
41 | lcd_command(LCD_SET_DISPLAY | LCD_DISPLAY_ON | LCD_CURSOR_OFF | LCD_BLINKING_ON); // LCD_DISPLAY_ON
|
42 |
|
43 | // Display clear
|
44 | lcd_command(0x01);
|
45 |
|
46 | // Cursor inkrement / kein Scrollen
|
47 | lcd_command(LCD_SET_ENTRY | LCD_ENTRY_INCREASE | LCD_ENTRY_NOSHIFT);
|
48 |
|
49 | //lcd_clear();
|
50 |
|
51 | _delay_10us(LCD_COMMAND_10US);
|
52 | }
|
53 |
|
54 | void lcd_data( uint8_t data )
|
55 | {
|
56 | GPIO_SetBits(LCD_PORT, LCD_RS); // RS auf 1 setzen
|
57 |
|
58 | lcd_out( data ); // zuerst die oberen,
|
59 | lcd_out( data<<4 ); // dann die unteren 4 Bit senden
|
60 |
|
61 | _delay_10us( LCD_WRITEDATA_10US );
|
62 | }
|
63 |
|
64 | static void lcd_out(uint8_t data)
|
65 | {
|
66 | data &= 0xF0; //obere 4 Bit
|
67 | GPIO_Write(LCD_PORT, (data>>4));
|
68 | lcd_enable();
|
69 | }
|
Ausschnitt main.c
1 | int main(void)
|
2 | {
|
3 | /* ... */
|
4 | lcd_init();
|
5 | _delay_1ms(50);
|
6 | lcd_data('A');
|
7 | /* ... */
|
8 | }
|