Moin moin!
Hab mein LCD-Display zumindest mal initialisiert bekommen. Glaub ich wenigstens. Nach Ablauf dieses Programms
im ATm16 zeigt mein Display einen Cursor in der ersten Zeile auf Position eins. Von der Initialisierung her sollte das auch stimmen, bloss wird anscheinend der Code in main() nicht ausgefuehrt. Da sollte naemlich eine "0" und ein "N" geschrieben werden, der cursor ruehrt sich aber kein Stueck.Code:// Ansteuerung eines 16*2-Zeichen LCDs (44780-kompatibel) #include <avr\io.h> #define CPU_CK 8000000 #define LCD PORTB #define DB4 0 #define DB5 1 #define DB6 2 #define DB7 3 #define ENABLE 4 #define RW 5 #define RS 6 #define CONTRAST 7 void waitus(int d) { // Feste Anzahl von Mikrosekunden warten int i,a; for(i=0;i<(d/(CPU_CK/1000));i++) { a=i; // Eigentlich "asm:nop", Syntax?? } } void init(void) { DDRB = 0xFF; //------------------------------------------------------------------------------------------- waitus(15000); LCD = (1<<ENABLE); LCD |= (1<<DB4)|(1<<DB5); // DB4 und DB5 setzen waitus(1000); LCD &= ~(1<<ENABLE); //------------------------------------------------------------------------------------------- waitus(5000); LCD = (1<<ENABLE); LCD |= (1<<DB4)|(1<<DB5); // DB4 und DB5 setzen waitus(1000); LCD &= ~(1<<ENABLE); //------------------------------------------------------------------------------------------- waitus(1000); LCD = (1<<ENABLE); LCD |= (1<<DB4)|(1<<DB5); // DB4 und DB5 setzen waitus(1000); LCD &= ~(1<<ENABLE); //------------------------------------------------------------------------------------------- waitus(1000); LCD = (1<<ENABLE); LCD |= (1<<DB5); // DB5 setzen (4bit-Modus aktivieren) waitus(1000); LCD &= ~(1<<ENABLE); //------------------------------------------------------------------------------------------- waitus(1000); LCD = (1<<ENABLE); LCD |= (1<<DB5); // DB5 setzen (4bit-Modus) waitus(1000); LCD &= ~(1<<ENABLE); waitus(1000); LCD = (1<<ENABLE); LCD |= (1<<DB7); // DB7 setzen (2-zeiliges Display) waitus(1000); LCD &= ~(1<<ENABLE); //------------------------------------------------------------------------------------------- waitus(1000); LCD = (1<<ENABLE); waitus(1000); // Leeres Nibble LCD &= ~(1<<ENABLE); waitus(1000); LCD = (1<<ENABLE); LCD |= (1<<DB7)|(1<<DB6)|(1<<DB5); // Display on, Cursor on waitus(1000); LCD &= ~(1<<ENABLE); //------------------------------------------------------------------------------------------- waitus(1000); LCD = (1<<ENABLE); waitus(1000); // Leeres Nibble LCD &= ~(1<<ENABLE); waitus(1000); LCD = (1<<ENABLE); LCD |= (1<<DB4); // Clear Display waitus(1000); LCD &= ~(1<<ENABLE); //------------------------------------------------------------------------------------------- waitus(1000); LCD = (1<<ENABLE); waitus(1000); // Leeres Nibble LCD &= ~(1<<ENABLE); waitus(1000); LCD = (1<<ENABLE); LCD |= (1<<DB6)|(1<<DB5); // Increment Cursor after writing waitus(1000); LCD &= ~(1<<ENABLE); } int main(void) { init(); //------------------------------------------------------------------------------------------- waitus(15000); LCD = (1<<ENABLE)|(1<<RS); LCD |= (1<<DB5)|(1<<DB4); // Erstes Nibble=0x3 waitus(1000); LCD &= ~(1<<ENABLE); waitus(1000); LCD = (1<<ENABLE)|(1<<RS); waitus(1000); // Zweites Nibble=0x0, zusammen "0" LCD &= ~(1<<ENABLE); //------------------------------------------------------------------------------------------- waitus(15000); LCD = (1<<ENABLE)|(1<<RS); LCD |= (1<<DB6); // Erstes Nibble=0x4 waitus(1000); LCD &= ~(1<<ENABLE); waitus(1000); LCD = (1<<ENABLE)|(1<<RS); LCD |= (1<<DB7)|(1<<DB6)|(1<<DB5); // Zweites Nibble=0xE, zusammen "N" waitus(1000); LCD &= ~(1<<ENABLE); }
Kann mal jemand drueberschauen? Ich hab schon son leichten Tunnelblick und find den Fehler nich...
Danke,
Nils







Zitieren
Lesezeichen