... bin am Verzweifeln ... Display im 4bit-Modus (5V) an einem RN-Control(16mhz) ...
			
		
 
	 
 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) :
	Code:
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//      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 die lcd-h
	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
 und noch die lcd-c dazu:
	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.
						
					
Lesezeichen