Na - an so nem schönen Sonnensonntag kann man Dich doch nicht verzweifeln lassen. Mal ein paar Schnippsel mit Initialisierungen, defines und Code (und denk an das was Hubert schreibt: wer (s)eine Bibliothekssoftware nicht mit seiner Hardware abstimmt ist schnell am Verwzeifeln) :... bin am Verzweifeln ... Display im 4bit-Modus (5V) an einem RN-Control(16mhz) ...
und die lcd-hCode:// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // LCD hat 16 Zeichen: "1234567890123456"; unsigned char XXX1[] EEMEM = "__ R5J Archie __"; // Programm ID unsigned char XXX2[] EEMEM = "XXX Vx06 (c)2013"; // Versions ID // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // ============================================================================== = // ============================================================================== = // Auszug aus dem main: // .... // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // .... // ########>>>>>>>> LCD <<<<<<<<######## #include <lcd-routines.h> // LCD-Lib - ähnlich Tr-Tester #include <lcd-routines.c> // LCD-Lib // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DDRB = 0b11111111; // siehe aktuell oben PORTB = 0b00000000; // und Port/Pull Ups (1) aktivieren // .... lcd_init(); // lib // .... // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //LCDtst (); // inf //###Linf01 (); // inf //###LTwahl (); // Ausgabekonfiguration: LCD/UART, ohne Taste: nur UART inf // .... // Ende Auszug aus dem main // ============================================================================== = // ============================================================================== = // ============================================================================== = // ============================================================================== = //### Programm 1 ms pausieren lassen !! Der Pausenwert ist nur experimentell ! void wms(uint16_t ms) { for(; ms>0; ms--) { uint16_t __c = 4000; __asm__ volatile ( "1: sbiw %0,1" "\n\t" "brne 1b" : "=w" (__c) : "0" (__c) ); } } // ============================================================================== = // ============================================================================== = // ============================================================================== = // LCD-Test-Routinen // ============================================================================== = void LCDtst (void) // Testausgaben aufs LCD - mit Beispielen { // char abc[12]; // Übersetzungsfeld für Werteausgabe // Startsequenz LCD Line1(); // 1. Zeile Startinfo lcd_eep_string(XXX1); // "__ R5J Archie __" Line2(); // 2. Zeile lcd_eep_string(XXX2); // "XXX Vx06 (c)2013"; wms ( 2000); // Nur so - zur Show Line2(); // 2. Zeile lcd_eep_string(LEER); // Zeile leeren (füllen mit blanks) SetCursor (2, 9); // Positioniere Zeile 2 {1, 2}, Stelle 9 {0, 15} lcd_string(itoa(SLAVE_KoCo, abc, 10)); // Aktuellen Wert anzeigen // - - - - - - - - - - - - - - - return ; } // // === Ende LCDtst (void) // ============================================================================== = // ============================================================================== = // LCD-info01 // ============================================================================== = void Linf01 (void) // Startinfo LCD und Info Tastenwahl für UART/LCD { // // Startsequenz LCD Line1(); // 1. Zeile Startinfo lcd_eep_string(XXX1); // "__ R5J Archie __" Line2(); // 2. Zeile lcd_eep_string(XXX2); // "XXX Vx06 (c)2013"; wms ( 2000); // Nur so - zur Show lcd_clear(); // //Line1(); // 1. Zeile Startinfo lcd_eep_string(LI01); // "UART-T1, LCD-T2"; Line2(); // 2. Zeile lcd_eep_string(E9s); // "Ende ca. 9 sec" // - - - - - - - - - - - - - - -// return ; } // // === Ende Linf01 (void) // ============================================================================== =
und noch die lcd-c dazu:Code:// Ansteuerung eines HD44780 kompatiblen LCD im 4-Bit-Interfacemodus // http://www.mikrocontroller.net/artic...R-GCC-Tutorial // void lcd_data(unsigned char temp1); void lcd_command(unsigned char temp1); void lcd_send(unsigned char data); void lcd_string(char *data); void lcd_enable(void); void lcd_init(void); void lcd_clear(void); void lcd_eep_string(const unsigned char *data); //LCD-Befehle #define CMD_SetEntryMode 0x04 #define CMD_SetDisplayAndCursor 0x08 #define CMD_SetIFOptions 0x20 #define CMD_SetCGRAMAddress 0x40 // für Custom-Zeichen #define CMD_SetDDRAMAddress 0x80 // zum Cursor setzen //Makros für LCD #define Line1() SetCursor(1,0) //An den Anfang der 1. Zeile springen #define Line2() SetCursor(2,0) //An den Anfang der 2. Zeile springen #define SetCursor(y, x) lcd_command((uint8_t)(CMD_SetDDRAMAddress + (0x40*(y-1)) + x)) //An eine bestimmte Position springen #define LCDLoadCustomChar() lcd_command(CMD_SetCGRAMAddress) //Custom-Zeichen laden //Eigene Zeichen #define LCD_CHAR_OMEGA 244 //Omega-Zeichen #define LCD_CHAR_U 228 //µ-Zeichen #define LCD_CHAR_DIODE 0 //Dioden-Icon; wird als Custom-Character erstellt // LCD Befehle #define CLEAR_DISPLAY 0x01 // Pinbelegung für das LCD, an verwendete Pins anpassen #define LCD_PORT PORTB #define LCD_DDR DDRB #define LCD_RS PB6 #define LCD_EN1 PB4
Code:// Ansteuerung eines HD44780 kompatiblen LCD im 4-Bit-Interfacemodus // http://www.mikrocontroller.net/artic...R-GCC-Tutorial // // Die Pinbelegung ist über defines in lcd-routines.h einstellbar #include <avr/io.h> #include "lcd-routines.h" #include <util/delay.h> #include <avr/eeprom.h> // sendet ein Datenbyte an das LCD void lcd_data(unsigned char temp1) { LCD_PORT |= (1<<LCD_RS); // RS auf 1 setzen lcd_send(temp1); } // sendet einen Befehl an das LCD void lcd_command(unsigned char temp1) { LCD_PORT &= ~(1<<LCD_RS); // RS auf 0 setzen lcd_send(temp1); } //Eigentliche LCD-Zugriffs-Funktion; 4-Bit-Modus void lcd_send(unsigned char data) { // oberes Nibble setzen LCD_PORT = (LCD_PORT & 0xF0) | ((data >> 4) & 0x0F); _delay_us(5); lcd_enable(); // unteres Nibble setzen LCD_PORT = (LCD_PORT & 0xF0) | (data & 0x0F); _delay_us(5); lcd_enable(); _delay_us(60); LCD_PORT &= 0xF0; } // erzeugt den Enable-Puls void lcd_enable(void) { LCD_PORT |= (1<<LCD_EN1); _delay_us(10); // kurze Pause // Bei Problemen ggf. Pause gemäß Datenblatt des LCD Controllers verlängern // http://www.mikrocontroller.net/topic/80900 LCD_PORT &= ~(1<<LCD_EN1); } // Initialisierung: // Muss ganz am Anfang des Programms aufgerufen werden. void lcd_init(void) { LCD_DDR = LCD_DDR | 0x0F | (1<<LCD_RS) | (1<<LCD_EN1); // Port auf Ausgang schalten // muss 3mal hintereinander gesendet werden zur Initialisierung _delay_ms(30); LCD_PORT = (LCD_PORT & 0xF0 & ~(1<<LCD_RS)) | 0x03; lcd_enable(); _delay_ms(5); lcd_enable(); _delay_ms(1); lcd_enable(); _delay_ms(1); LCD_PORT = (LCD_PORT & 0xF0 & ~(1<<LCD_RS)) | 0x02; _delay_ms(1); lcd_enable(); _delay_ms(1); // 4Bit / 2 Zeilen / 5x7 lcd_command(CMD_SetIFOptions | 0x08); // Display ein / Cursor aus / kein Blinken lcd_command(CMD_SetDisplayAndCursor | 0x04); // inkrement / kein Scrollen lcd_command(CMD_SetEntryMode | 0x02); lcd_clear(); } // Sendet den Befehl zur Löschung des Displays void lcd_clear(void) { lcd_command(CLEAR_DISPLAY); _delay_ms(5); } // Schreibt einen String auf das LCD void lcd_string(char *data) { while(*data) { lcd_data(*data); data++; } } //String aus EEPROM laden und an LCD senden void lcd_eep_string(const unsigned char *data) { unsigned char c; while(1) { c = eeprom_read_byte(data); if(c==0) return; lcd_data(c); data++; } }
Vielleicht hilfts Dir? Läuft bei mir auf nem mega1284/20MHz/eigenePlatine, aber auch mit demselben Controller in der RNControl. Ich denkeglaubehoffe nicht, dass es zum Deinem Controller nen Unterschied gibt. Und die Bibliothek ist auf den "LCD-Stecker" der RNControl - siehe die dortige Dokumentation - abgestimmt
Schönen Sonntag.







Zitieren



Lesezeichen