Ok, auch wenn das Thema schon hundert mal durchgezogen wurde ... Ich versuche mit vier Bit ein LCD anzuwerfen. Dazu sende ich das bekannte Muster 3 x und warte dann darauf, dass das Busy flag wieder low wird. Und dafuer habe ich mir folgende Zeilen zusammengebastelt: // enable Impuls void lcd_doit() { E_PORT |=(1<<E_BIT); _delay_ms(1); E_PORT &=~(1<<E_BIT); _delay_ms(1); } // Busy abwarten void lcd_ready() { //Befehl Busy flag und Adresse auslesen RW_PORT|=(1<<RW_BIT); // absenden lcd_doit(); // lcd 7 als Eingang LCD_7_DDR &=~(1<<LCD_7_BIT); // solange warten bis busy flag=low while(LCD_7_PIN & (1<<LCD_7_BIT)); // R/W und LCD_7 zuruecksetzen RW_PORT&=~(1<<RW_BIT); LCD_7_DDR |=(1<<LCD_7_BIT); } Von der Idee her richtig?
Ok vielleicht sollte ich es noch ein bisschen konkretisieren: Wenn dieser erste Schritt der Initialisierung durchgelaufen ist und ich dann einzelne der beteiligten Bits von 0 auf 1 oder anders herum setze, bleibt das Programm haengen. Vielen Dank
du liest das busyflag aus, vielleicht haegt er an dieset stelle. gibt doch einfach zwischen jeder zeile ein signal nach dausen (rs232/led...) und teste wie weit er kommt, und wo er genau haengt)
Aber grundsätzlich ist der Ablauf richtig für das Abfragen des Busy Flag RW auf high E Impuls senden D7 auslesen ? Danke
Hilft dir das weiter ? So geht's bei mir. unsigned char LCD_Read_Busy(void)/* Read Busy Flag */ { unsigned char busy; LCD_RS_Register(); // set to instruction LCD_RW_Read(); // set to read P3DIR=0xD0; lcdena_on; // E on busy = P3IN & 0x08; // get LCD data lcdena_off; // E off busy >>= 3; // shift Busy Flag P3DIR=0xDF; return( busy ); }
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.