... weil ich noch nicht so firm bin, wie ich per 4 Bit Modus die Daten "rüberschieben" muss ...
Na dann schieb ich mal (im 26Buchstaben+10Ziffern-Modus) den Code rüber:

Erstmal die includes-Belegungen-init-und-Anwendung
Code:
// .... Includieren
// - - - - - - - - - - - - - - - -
// ....
//              ########>>>>>>>>  LCD   <<<<<<<<########
  #include <lcd_162_xta.c>      // LCD-Lib ähnlich Tr-Tester, akt. PORTB, PB0..5
// ....
// - - - - - - - - - - - - - - -
// ####>>>>     Initialisierung/Anschlüsse von PORT B für LCD DEM 16x2
//                    PORT B  LCD  Wannenstecker
//     data bit 4        PB0  0 A  WS Pin1 | 
//     data bit 5        PB1  1 A     Pin2 | -- Der 10-polige Wannenstecker
//     data bit 6        PB2  2 A     Pin3 |    ist an die Belegung
//     data bit 7   SCK, PB3  3 A     Pin4 |    des Transitortester angepasst
//     RS line           PB4  RS      Pin5 |    es kommen noch
//     ENABLE line MOSI, PB5  EN1     Pin6 |    Pin  9  GND und
//     R/W (offen) MISO, PB6  R/W     Pin7 |    Pin 10  Vcc dazu
//     NC (TasteC) SCK,  PB7  NC      Pin8 |___________________________
//     GND                            Pin9   
//     Vcc                            Pn10
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// ....
// - - - - - - - - - - - - - - - -
// ....                                
// ============================================================================= =
// ===  HAUPTProgramm ========================================================== =
// ....
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 int main(void)                 //
 {                              
// ....
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Ports+Pins als Ein- (0) od. Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren
//      A = Ausgang, E = Eingang ohne , EU = Eingang MIT PullUp
// - - - - - - - - - - - - - - - -
// ....
  DDRB  = 0b11111011;   // siehe aktuell oben
  PORTB = 0b01000000;   //
// ....
  lcd_init();           //                                                     lib
/// ....
  sei();                // Globalen Interrupt freigeben
// ....
// - - - - - - - - - - - - - - -
//      LCD-Testroutinen
  lcd_01 ();            // LCD-Startinfo "R5M10 Archie xnn/© .....             inf
.....
// ============================================================

// ============================================================================= =
// ==   LCDausgabe, Folge 1
// ============================================================================= =
  void lcd_01 (void)            // LCDausgabe "1"
 {                              //
//LCD_SZ4 ();                   // Eigen Sonderzeichen, Satz 4 mit ©           kal
  lcd_clear();                  // Vor LCD-Ausgabe Display leeren              lcd
  lcd_string("R5M10 Archie  46");
  Line2();                      // An den Anfang der 2. Zeile springen
//lcd_data( 5 ); lcd_data( 6 ); // © - in zwei Hälften
  lcd_string(" ---2014 08Mai");
  waitms (  500);
  Line2();                      // An den Anfang der 2. Zeile springen
  lcd_string("                ");       // Zeile löschen
  waitms (  500);
  Line1();                      // An den Anfang der 1. Zeile springen
  lcd_string("R5jM 46 ......._");
  Line2();                      // Anfang 2. Zeile
  lcd_string("    = online    ");
 }              // Ende von void lcd_01
// ============================================================================= =
Und die beiden Bibliotheksteile:

Die lcd_162_xt_PB.h
Code:
//    LCD-Ansteuerung im 4-Bit-Modus
//      Erweiterte Fassung mit Routine für selbst definierte Zeichen
// Stand = Erweiterung von lcd-routines.h und lcd-routines.c
//   vom 11. Apr. 2013          © 2013  by oberallgeier
// Ansteuerung eines HD44780 kompatiblen LCD im 4-Bit-Interfacemodus
//      Die folgenden Originalateien wurden beachtet oder zitiert
// http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
// http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung
// + http://www.mikrocontroller.net/articles/HD44780#Benutzerdefinierte_Sonderzeichen
// + http://www.mikrocontroller.net/articles/Pseudo-Graphische_LCD-Ansteuerung
//      vgl. auch http://www.mikrocontroller.net/topic/265717#2766442
//
// Die Pinbelegung ist über defines in lcd-routines.h einstellbar
//
//      Ansteuerung ab KoCo_x15 geändert auf RS=PB4, EN=PB5

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);
  void lcd_generatechar( uint8_t code, const uint8_t *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


// Set CG RAM Address --------- 0b01xxxxxx  (Character Generator RAM)
#define LCD_SET_CGADR           0x40
 
#define LCD_GC_CHAR0            0
#define LCD_GC_CHAR1            1
#define LCD_GC_CHAR2            2
#define LCD_GC_CHAR3            3
#define LCD_GC_CHAR4            4
#define LCD_GC_CHAR5            5
#define LCD_GC_CHAR6            6
#define LCD_GC_CHAR7            7
//#define LCD_GC_CHAR8          8
//#define LCD_GC_CHAR9          9
//#define LCD_GC_CHARA         10


//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        PB4
#define LCD_EN1       PB5
... und die lcd_162_xt_PB.c
Code:
//    LCD-Ansteuerung im 4-Bit-Modus
//      Erweiterte Fassung mit Routine für selbst definierte Zeichen
// Stand = Erweiterung von lcd-routines.h und lcd-routines.c
//   vom 11. Apr. 2013          © 2013  by oberallgeier
// Ansteuerung eines HD44780 kompatiblen LCD im 4-Bit-Interfacemodus
//      Die folgenden Originalateien wurden beachtet oder zitiert
// http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
// http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung
// + http://www.mikrocontroller.net/articles/HD44780#Benutzerdefinierte_Sonderzeichen
// + http://www.mikrocontroller.net/articles/Pseudo-Graphische_LCD-Ansteuerung
//      vgl. auch http://www.mikrocontroller.net/topic/265717#2766442
//
// Die Pinbelegung ist über defines in lcd-routines.h einstellbar
 
#include <avr/io.h>
#include "lcd_162_xt_PB.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++;                     //
  }
 }              // Ende void lcd_eep_string(const


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Schreibt ein Zeichen in den Character Generator RAM
// Daten liegen direkt im RAM
  void lcd_generatechar(uint8_t code, const uint8_t *data)
 {                             //
  lcd_command(LCD_SET_CGADR|(code<<3)); // Startposition des Zeichens einstellen
  for (uint8_t i=0; i<8; i++)           // Bitmuster übertragen
  {                             //
    lcd_data(data[i]);          //
  }                             //
 }              // Ende void lcd_generatechar(uint8_t code,

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
... also ALLES für den Port B entsprechend der beschriebenen Pinbelegung. Läuft so bei mir auf praktisch allen megas.

Viel Erfolg