Hallo,
ich möchte an meinem at90s8515 jetzt ein LCD anschliessen und im 4-Bit
Modus laufen lassen.
Ich will es irgendwie alleine hinbekommen, Fleurys test_lcd.c läuft
nicht, obwohl die Schaltung 1:1 (gleiche Pins und auch make) übernommen
wurde. Es bleibt schon bei der Initialisierung hängen, das ASM-Programm
aus dem Tut funzt jedenfalls. Absolut nichts gegen Fleury's Version,
aber ich habe es mir angewohnt aus anderen Programmen zu lernen und
übernehmen, und da komme ich mit dem scrollen nicht mehr mit. Ist halt
alles wahnsinnig gut definiert worden, aber wenig Lerneffekt für mich.
Eventuell könnte es auch am LCD (16x2) liegen, aber eher
unwahrscheinlich ist mit einem KS0066 Controller, aber der soll ja
HD44780 kompatibel sein.
datasheet:
http://www.produktinfo.conrad.com/datenblaetter/175000-199999/183342-da-01-ml-lcd-modul_16x2_zeichen_de-en.pdf
Ich will mir jetzt selber eine Initialisierung basteln
#define DB4 0x01 //µC-PinA0
#define DB5 0x02 //A1
#define DB6 0x04
#define DB7 0x08
#define ENABLE 0x10 //R/W
#define RS 0x20 //RS
#define lDDR DDRA
#define lPORT PORTA
#define lPIN PINA
static void delay(uint16_t us)
{
while ( us ) us--;
}
/***********
für die init:
***********/
void lcd_init(void)
{
delay(15000); //nach dem einschalten 15ms verz. laut Datasheet
lDDR = 0xff; // Ax = ausgang
lPORTA = 0x00; //PortA wird aktiviert - LCD Port
delay(15000); //nochmal weil mir unklar ist, wann einschalten
//beginnt
lPORTA= (DB4 + DB5); //laut Datenblatt muss ich die ersten beiden
//bits senden
lPORTA |= ENABLE; //<- brauche ich den teil?
lPORTA &= ~ENABLE; // heisst das, dass bei fallender Flanke...
// der Controller das Signal übernimmt?
// was bedeutet "|=" ungleich? u. "&= ~E."??
delay(4100); // 4,1ms Verz. wird laut Datasheet gefordert
lPORTA |= ENABLE; // schon wieder?
lPORTA &= ~ENABLE;
lPORTA= (DB4 + DB5); // muss ich wiederholen, laut Datenblatt
lPORTA |= ENABLE; //schon wieder? habe ich von einer LCD.c
lPORTA &= ~ENABLE; //genommen
lcd_delay(100); //Verz. >100us wird gefordert
lPORTA= (DB4 + DB5); //zum 3.
lPORTA |= ENABLE; //schon wieder? habe ich von einer LCD.c
lPORTA &= ~ENABLE; //genommen
//ab jetzt kann das BusyFlag gelesen werden
//was das beutet ist mir auch unklar
lPORTA= DB5; //4-Bit Modus
lPORTA |= ENABLE; //schon wieder? habe ich von einer LCD.c
lPORTA &= ~ENABLE; //genommen
lPORTA = (DB5 + DB7); //jetzt komme ich nicht mehr weiter, kann ich
//das so machen? DB5=High-Nibble DB7=Low-N.??
//im low-nibble müsste ich jetzt DB7 aktivieren
//ausserdem ist DB4+5 mit einem x (nicht 0!)
//gekennzeichnet.
}
Danke schon mal fürs durchlesen.
Vielleicht kann mir jemand erklären wie ich die High-und Low-Nibbles
setzen kann. Was ist sonst noch falsch?
Die init schlug jedenfall, wie ich schon annahm, fehl.