Gast
#2486669
Hallo zusammen,
seit 2 Tagen kämpfe ich mit obigem LCD an einem ATmega 32 herum.
Es handelt sich um ein 1x16 LCD, das ich glaube mal bei csd gekauft
habe. Hinten drauf steht als Bestückungsdruck: DEM16101 und auf einem
kleinen Aufkleber: DEM16101 TGH/V 469.
Problem ist, dass es sich scheinbar nicht initialisieren lässt.
Speziell scheint es kein HD44780 kompatibles zu sein (habe ich trotzdem
getestet...).
Die restlichen Beiträge zu Displays und speziell diesem habe ich mir
schon durchgesehen, leider bisher keine Lösung gefunden.
Konfiguration:
Grundboard ist das NetIO von Pollin über dessen ext-Port ich das Display
angeschlossen habe.
RS --> PD3
R/W --> PD2
E --> PB3
DB4 --> PD4
DB5 --> PD5
DB6 --> PD6
DB7 --> PD7
GND auf GND des Controllers, Vdd auf +5V, V0 auf GND (mit Poti bin ich
auch bei 0V gelandet, sonst sieht man überhaupt nichts).
Als Code-Basis habe ich den Code aus dem Wiki zur Ansteuerung von
Displays in C geholt und etwas angepasst, da Enable ja nicht auf dem
selben Port liegt:
static void lcd_enable( void )
{
PORTB |= (1<<LCD_EN); // Enable auf 1 setzen
_delay_us( LCD_ENABLE_US ); // kurze Pause
PORTB &= ~(1<<LCD_EN); // Enable auf 0 setzen
}
void lcd_init( void )
{
// verwendete Pins auf Ausgang schalten
uint8_t pins = (0x0F << LCD_DB) | // 4 Datenleitungen
(1<<LCD_RS); // R/S Leitung
DDRB |= (1<<LCD_EN); // Enable Leitung
LCD_DDR |= pins;
// initial alle Ausgänge auf Null
LCD_PORT &= ~pins;
PORTB &= ~(1<<LCD_EN);
_delay_ms(100);
// Function Set
//LCD_PORT &= 0xF0;
LCD_PORT &= ~(1<<LCD_RS); // RS auf 0
LCD_PORT = (0x02<<4);
lcd_enable();
lcd_enable();
//LCD_PORT &= 0xF0;
LCD_PORT = (0x04<<4); // N=0 und F auf "1", N=1 auch wirkungslos
lcd_enable();
_delay_ms(5);
// Display On/Off
//LCD_PORT &= 0xf0;
LCD_PORT = 0x00;
lcd_enable();
LCD_PORT = (0x0F<<4); // D,C und B auf "1"
lcd_enable();
_delay_ms(5);
//Display Clear
//LCD_PORT &= 0xF0;
LCD_PORT = 0x00;
lcd_enable();
LCD_PORT = (0x01<<4); // display-Clear
lcd_enable ();
_delay_ms(10); // 5ms warten bis display ok
//Entry Mode Set
//LCD_PORT &= 0xF0;
LCD_PORT = 0x00;
lcd_enable();
LCD_PORT = (0x06<<4); // I/D="1" SH="0"
lcd_enable();
}
Dabei habe ich mich zur Initialisierung an das Datenblatt gehalten und
den Code aus diesem Thread übernommen
Beitrag "welches LCD passt zum LCD Tutorial" und an meine
Port-Konfiguration angepasst.
Was kann ich beobachten:
Wenn ich den Strom einschalte sind die ersten 8 Zeichen des Displays
schwarz. Danach passiert nichts mehr.
Die Enable Pulse sehe ich mit dem Oszilloskop und die einzelnen Byte
habe ich einmal langsam durchprobiert, die stimmen auch.
Die Timings habe ich schon deutlich hochgefahren:
#define LCD_ENABLE_US 100
Leider auch keine Veränderung.
Was kann ich noch machen?
Viele Grüße
jojo