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
jojo schrieb: > Speziell scheint es kein HD44780 kompatibles zu sein (habe ich trotzdem > getestet...) Doch, der KS0066 ist eigentlich zum 44780 kompatibel. Die 4-bit Initialisierung ist allerdings ( wie immer ) ein wenig holprig: *'function set' setzen und lange warten . *Nochmal 'function set' schreiben und kürzer warten. *Ein letztes mal 'function set' schreiben und kürzer warten. Das kommt auf Seite 12 des Datenblattes nicht so richtig rüber.
Da er aber die Segmente in der ersten Hälfte sieht , ist das dieses mal anscheinend nicht das Problem. Es sollten übrigens die bewährten Libraries für den HD44780 alle gehen, lohnt sich also meistens nicht, das Rad neu zu erfinden, es sei denn, man braucht Assembler oder so.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.