Ich habe ein 2x16 Display gegen ein 2x8 Display des gleichen Herstellers
getasucht. Ich hab beide Displays gleich verkabelt und es wäre
eigentlich zu erwtaren dass alles (iclusive, init, busyflag abfrage,
usw) Genau so funktioniern sollte wie vorher. Nun dem ist leider nicht
so und daher habe ich ,wie immer, reduziert und reduziert um den Fehler
zu finden: Nun bin ich hier angekommen:
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 8000000
#define E PD1
#define RW PD2
#define RS PD3
void enable (void) //Enable Routine
{
PORTD |=(1<<E); //Enable high
_delay_us(1); //Kurz warten
while(1){}
PORTD &=~(1<<E); //Enable low
}
main()
{
DDRD=0b11111111; //Alle Pins auf Ausgang
_delay_ms(500); //Warten
PORTD &=~((1<<RW)|(1<<RS)); // Write und Daten
PORTD=0b00100000; //4-Bit einschalten(noch im 8-Bit Modus)
enable();
_delay_ms(300);
PORTD=0b00100000; //4-Bit Datenlänge (oberes nibble)
enable();
_delay_ms(50);
PORTD=0b11000000; //2 zeilig Display,5x10Dot(unteres nibble)
enable();
_delay_ms(50);
PORTD=0b00000000; //oberes nibble von:
enable();
_delay_ms(50);
PORTD=0b11110000; //Display ein, Cursor ein; Cursor blinkem
enable();
_delay_ms(50);
PORTD=0b00000000; //oberes nibble von:
enable();
_delay_ms(50);
PORTD=0b00010000; //löschen,Cursor auf 1.Spalte von 1. Zeile
enable();
_delay_ms(50);
PORTD=0b00000000; //Oberes nibble von:
enable();
_delay_ms(50);
PORTD=0b01100000; //Cursor Auto-Increment
enable();
_delay_ms(50);
while(1)
{}
}
Wie üblich habe ich alle Anschlüsse einzeln durchgemessen. Mir fällt
nichts mehr weiter ein. das Display zeigt den üblichen "Balken" D.H. Die
ersten 8 Zeichen sind leicht sichtbar.
Datenblatt?
2x8 kann heissen einzeilie Ansteuerung ("umgebrochenes 1x16") oder
zweizeilige Ansteuerung ("2x16 mit abgeschnittenen Zeilen").
Nur bei der 2. Variante stimmt deine Initialisierung.
Versuch das mal so: Folgendes einfügen PORTD=0b00110000; enable(); _delay_ms(300); PORTD=0b00110000; enable(); _delay_ms(300); PORTD=0b00110000; enable(); _delay_ms(300); Ab hier dein Code PORTD=0b00100000; //4-Bit einschalten(noch im 8-Bit Modus) enable(); _delay_ms(300);
Es ist ein EA W161B-ENLW Es ist aber so das ich das Display schon mal am laufen hatte und die DDRAM adresse auf &40 setzten musste um die 2ten 8 Zeichen eingeben zu können.
@Holger: Werde ich machen!An alle: OMG! Ich habe die while Schleife zu Testzwecken noch in der enable funktion oben stehen! Die ist natürlich schon lange weg ! Ändert aber nichts!
Möchte jemand mal das listing oben (ohne die while Schleife In der "enable" Funktion!!!!!) an einem LCD ausprobieren so dass ich weiss ob mein Display kaputt ist? Vielleicht hat ja jemand von euch grade ein LCD angeschlossen auf dem Schreibtsich?
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.