Forum: Mikrocontroller und Digitale Elektronik Ansteuerung LCD 204b (Controller unbekannt)


von Simon T. (narfinus)


Angehängte Dateien:

Lesenswert?

Hallo zusammen.

Nach durcharbeiten der ganzen Posts und Tutorials zum Thema LCD bin 
leider immer noch nicht weiter gekommen daher wende ich mich direkt an 
euch.

Ich habe ein altes 204B-Display mit 20x4 Zeilen im Schrank gefunden. 
Leider weiß ich nicht, welcher Controller verbaut ist. Falls jemand 
anhand des Photos es eindeutig bestimmen kann, wäre ich ihm sehr 
verbunden.

Das ganze scheitert schon mit der Initialisierung. Ursprünglich wollte 
ich die Bibliothek von Peter Fleury nutzen aber nachdem sie nicht 
funktionierte bin ich auf das Beispielprogramm vom LCD-Tutorial 
umgestiegen und habe es für meine Bedürfnisse modifiziert.

Hier die Initialisierungsroutine:
1
void lcd_init( void ) {
2
  
3
  // verwendete Pins auf Ausgang schalten
4
  LCD_DATA_DDR |= (1<<LCD_DATA0) | (1<<LCD_DATA1) | (1<<LCD_DATA2) | (1<<LCD_DATA3);  
5
  LCD_CTRL_DDR |= (1<<LCD_RS) | (1<<LCD_RW) | (1<<LCD_E);
6
    
7
  // initial alle Ausgänge auf Null
8
  LCD_DATA_PORT &= ~( (1<<LCD_DATA0) | (1<<LCD_DATA1) | (1<<LCD_DATA2) | (1<<LCD_DATA3) );
9
  LCD_CTRL_PORT &= ~( (1<<LCD_RS) | (1<<LCD_RW) | (1<<LCD_E) );
10
  
11
  _delay_ms(LCD_BOOTUP_MS);
12
  
13
  // Soft-Reset muss 3mal hintereinander gesendet werden zur Initialisierung
14
  lcd_out( LCD_SOFT_RESET );  _delay_ms( LCD_SOFT_RESET_MS1 );
15
  lcd_enable();        _delay_ms( LCD_SOFT_RESET_MS2 );
16
  lcd_enable();        _delay_ms( LCD_SOFT_RESET_MS3 );
17
  
18
  // 4-bit Modus aktivieren
19
  lcd_out( LCD_SET_FUNCTION | LCD_FUNCTION_4BIT );
20
  _delay_ms( LCD_SET_4BITMODE_MS );
21
  
22
  // 4-bit Modus / 2 Zeilen / 5x7
23
  lcd_command( LCD_SET_FUNCTION | LCD_FUNCTION_4BIT | LCD_FUNCTION_2LINE | LCD_FUNCTION_5X7 );
24
  
25
  // Display ein / Cursor aus / Blinken aus
26
  lcd_command(LCD_SET_DISPLAY | LCD_DISPLAY_ON | LCD_CURSOR_OFF | LCD_BLINKING_OFF);
27
  
28
  // Cursor inkrement / kein Scrollen
29
  lcd_command( LCD_SET_ENTRY | LCD_ENTRY_INCREASE | LCD_ENTRY_NOSHIFT );
30
  
31
  lcd_clear();
32
}
sowie die beiden Subfunktionen lcd_enable() und lcd_out()
1
static void lcd_enable( void ) {
2
  LCD_CTRL_PORT |= (1<<LCD_E);
3
  _delay_us( LCD_ENABLE_US );         // kurze Pause
4
  LCD_CTRL_PORT &= ~(1<<LCD_E);       // Enable auf 0 setzen
5
}
6
7
static void lcd_out( uint8_t data ) {
8
  data &= 0xF0;          // obere 4 Bit maskieren
9
  LCD_DATA_PORT &= 0x0F;        // Maske löschen
10
  LCD_DATA_PORT |= (data>>4);     // Bits setzen
11
  lcd_enable();
12
}
Im Header sind die Ports definiert.
1
#define LCD_DATA_PORT   PORTC
2
#define LCD_DATA_DDR    DDRC
3
#define LCD_DATA0    0
4
#define LCD_DATA1    1
5
#define LCD_DATA2    2
6
#define LCD_DATA3    3
7
8
#define LCD_CTRL_PORT  PORTD
9
#define LCD_CTRL_DDR  DDRD
10
#define LCD_RS      5
11
#define LCD_RW      6
12
#define LCD_E      7
Das ganze entspricht mehr oder weniger dem Guide für die erweiterte 
LCD-Ansteuerung hier aus dem Board, mit der Ergänzung das meine 
Steuerleitungen auf einem anderen Port liegen. 
(http://www.mikrocontroller.net/articles/Erweiterte_LCD-Ansteuerung)
Die Timing-Delays sind alle von dort übernommen. Bei den Startadressen 
habe ich so ziemlich alle ausprobiert, die in hier im Forum empfohlen 
wurden, ohne Erfolg.
Der gesamte Quellcode habe ich auch in den Anhang gepackt. Darin wird 
auch die UART zum Debuggen initialisiert, die funktionierte auf Anhieb.


Mein Problem entsteht bereits bei der Initialisierung des LCDs. Die 
schwarzen Balken verschwinden einfach nicht, es bleibt im einzeiligem 
Betrieb (1. und 3. Zeile haben Balken, 2. und 4. Zeile nicht).

So langsam hab' ich das Gefühl das Ding ist defekt. Ich trete hier seit 
drei Tagen auf der Stelle.

Grüße

von Ralle (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Simon,

exakt das gleiche LCD habe ich auch kürzlich hervorgekramt und bin auf 
der Suche nach weiteren Infos dazu hier gelandet. Ich habe es sofort mit 
der standart-Verdrahtung und LiquidCrystal.h an meinem Arduino zum 
Laufen gebracht. Das Problem mit den Initialisierungsbalken habe ich 
nicht.

Gruß Ralle

von Heinz R. (heijz)


Lesenswert?


von John Doe (Gast)


Lesenswert?

Heinz R. schrieb:
> auch wenn OT- warum tust Dir das an?
>
>
> Es gibt mittlerweile - 20 Jahre später - Vollfarb-Touch-Displays für 10€

die nicht mal einfache Zeichen ausgeben können, sondern nur Pixel.

Beide haben ihre Berechtigung.

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.