Gast
#52558
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.