Hallo erstmal,
schön wie dieser Thread besucht wird, auch wenn hilfreiche Antworten bisher ausblieben. Toll ist auch, dass der Ansichtszähler trotzdem steigt.... entweder hat keiner eine Lösung, jeder sucht danach oder ich bin in Forums-Ungnade gefallen?!?
OK, auch wenn in mehreren anderen Threads dieses Thema schon angesprochen wurde und anscheinend einige Leute ihre Displays mit AVR-GCC auch zum laufen gebracht haben, warte ich momentan noch auf die göttliche Eingebung.
Das schlimmste ist allerdings, dass die Einträge hier völlig ignoriert werden. Kann mich nicht wenigstens ein Moderator beschimpfen, dass ich schon wieder einen neuen Thread aufgemacht habe?
Es würde aber auch schon ein funktionierender Code reichen. Die ganzen Tipps aus diesem Forum, von www.mikrocontroller.net und AVR Freaks und was weiss ich, haben mir aufgrund vieler Wissenslücken meinerseits auch nicht viel geholfen. Trotzdem danke dafür, da ich jetzt (glaube) zumindest schon teilweise zu verstehen, wie die grobe Vorgehensweise ist.
Also, eine letzte Bitte um Unterstützung:
Hat bitte jemand einen funktionierenden C-Code für RN-Control 1.4, KS0073 Display und Adapter von robotikhardware????
Mein Hauptproblem ist (so denke ich ) die Initialisierung, welcher Schritt wann, wieoft, welche Pausen usw.. Das Beispiel im Datenblatt (das von Samsung und das von robotikhardware) brachte mich auch nicht weiter, weder im < 4 Zeilen Modus noch mit 4 Zeilen.
Jetzt habe ich (nachdem ich vorher das umgeschriebene BASCOM-Beispiel eingespielt habe, danach meinen Code ), zumindest einen blinkenden Cursor in der 3. Zeile gehabt, auch wenn das Display die Return Home und Clear Display mal fein ignoriert hat. Dann einen &-Fehler im Code geändert, der für das senden der Zeichendaten zuständig ist und schon wars wieder nix. Display leer und an, ohne Cursor..... ich flipp noch aus.
Man riecht sichCode:#include <avr/io.h> #include <util/delay.h> /* Port Definition */ #define LCD_PORT PORTB #define LCD_DB0 0 #define LCD_DB1 1 #define LCD_DB2 2 #define LCD_DB3 3 #define LCD_DB4 0 #define LCD_DB5 1 #define LCD_DB6 2 #define LCD_DB7 3 #define LCD_LIGHT 4 #define LCD_EN 5 #define LCD_RW 6 #define LCD_RS 7 #define LCD_DDR DDRB #define LCD_BUSY PINB.7 unsigned char lcd_is_busy() { _delay_ms( 50 ); return 0; } void lcd_enable() { LCD_PORT |= ( 1 << LCD_EN ); _delay_us( 10 ); LCD_PORT &= ~( 1 << LCD_EN ); } void lcd_cmd( unsigned char command ) { unsigned char tmp = ( command >> 4 ) & 0x0F; // High-Nibble nach unten schieben LCD_PORT |= tmp; // senden lcd_enable(); // EN umschalten tmp = command & 0x0F; // Low-Nibble nehmen LCD_PORT |= tmp; // senden lcd_enable(); // EN umschalten while( lcd_is_busy() ); } void lcd_data( unsigned char data ) { unsigned char tmp = ( data >> 4 ) & 0x0F; // High-Nibble nach unten schieben tmp |= ( 1 << LCD_RS ); // Daten senden vorbereiten LCD_PORT |= tmp; // senden lcd_enable(); // EN umschalten tmp = data & 0x0F; // Low-Nibble nehmen tmp |= ( 1 << LCD_RS ); // Daten senden vorbereiten LCD_PORT |= tmp; // senden lcd_enable(); // EN umschalten while( lcd_is_busy() ); } void init_display() { _delay_ms( 50 ); // power up wait LCD_PORT = ( 1 << LCD_DB5 ); // Init lcd_enable(); _delay_ms( 10 ); lcd_enable(); _delay_ms( 10 ); lcd_enable(); _delay_ms( 10 ); LCD_PORT = ( 1 << LCD_DB5 ); // 4-Bit Modus lcd_enable(); LCD_PORT = 0; // RE = 0 lcd_enable(); _delay_ms( 10 ); // Extension Function Setting LCD_PORT = ( 1 << LCD_DB5 ); // 4-Bit Modus lcd_enable(); LCD_PORT = ( 1 << LCD_DB2 ); // RE = 1 lcd_enable(); _delay_ms( 10 ); LCD_PORT = 0; // Extension Function Set lcd_enable(); LCD_PORT = ( 1 << LCD_DB0 ); // 4-Zeilen-Modus lcd_enable(); _delay_ms( 10 ); LCD_PORT = ( 1 << LCD_DB5 ); // 4-Bit Modus lcd_enable(); LCD_PORT = 0; // RE = 0 lcd_enable(); _delay_ms( 20 ); // Display On LCD_PORT = 0; lcd_enable(); LCD_PORT = ( 1 << LCD_DB3 ) | ( 1 << LCD_DB2 ) | ( 1 << LCD_DB1 ) | ( 1 << LCD_DB0 ); lcd_enable(); _delay_ms( 10 ); // Clear Display LCD_PORT = 0; lcd_enable(); LCD_PORT = ( 1 << LCD_DB0 ); lcd_enable(); _delay_ms( 10 ); // Entry Mode Set LCD_PORT = 0; lcd_enable(); LCD_PORT = ( 1 << LCD_DB2 ) | ( 1 << LCD_DB1 ); lcd_enable(); _delay_ms( 10 ); // Return Home LCD_PORT = 0; lcd_enable(); LCD_PORT = ( 1 << LCD_DB1 ); lcd_enable(); _delay_ms( 10 ); // Licht an LCD_PORT = ( 1 << LCD_LIGHT ); } int main( void ) { DDRB = 0xff; /* Port als Ausgang deklarieren */ PORTB = 0x00; /* alles aus */ init_display(); _delay_ms( 10 ); lcd_data( 0b01010011 ); lcd_data( 0b01010011 ); lcd_data( 0b01010011 ); lcd_data( 0b01010011 ); lcd_data( 0b01010011 ); lcd_data( 0b01010011 ); return 0; }
Banzai







Zitieren

Lesezeichen