Forum: Mikrocontroller und Digitale Elektronik Anag Vision gibt keine Zeichen aus


von Bastian M. (integer)


Angehängte Dateien:

Lesenswert?

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
}

von Bastian M. (integer)


Lesenswert?

Hallo zusammen,

ich wollte nur kurz nochmal Bescheid geben, dass sich das Thema erledigt 
hat. Habe den Fehler gefunden. Hab dummerweise immer zum falschen 
Zeitpunkt gemessen, und nicht festgestellt, dass die Funktion lcd_out() 
das RS-Bit überschrieben hat (Schande über mich).

Vielen Dank trotzdem
MfG
Bastian

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
Noch kein Account? Hier anmelden.