Hm also ich bin jetzt so weit, das ich heraus gefunden habe, dass wenn ich das display immer neu initialisiere, nachdem ich es voll geschreiben habe (2x16 Zeichen), dann kann ich meist so viel aus geben wie ich will.

Es scheint als ob das Display waerend es befehle bekommt "abstuertzt".
Wenn Text einmal ausgeben ist, dann ist alles ok und der Verschwindet auch nicht wider oder so.

Wie gesagt ich kann das Display durch erneute initialisierung wider zurueck holen. Das klappt aber auch nur in 4 von 5 faellen (circa).

Da das Display nicht einfach so ausgeht, muss es irgent wie an der kommunikation liegen. Da es keinen uebertragungsfehler gibt (alle Zeichen die ausgeben werde sind richtig) und wenn es einmal initalisiert is auch nicht zwischen drinn abbricht, gehe ich davon aus, dass mein Programm irgend was falsch macht... aber was??



Code:
/***********************************************************************/
/*                                                                     */
/*  FILE        :FirstTest.c                                           */
/*  DESCRIPTION :Main Program                                          */
/*  CPU TYPE    :Other                                                 */
/*                                                                     */
/*  This file is generated by Renesas Project Generator (Ver.4.0).     */
/*                                                                     */
/***********************************************************************/

#include "sfr_r813.h"


/*************************************************************************************/
/* Output/Input definitions         												 */
/*************************************************************************************/
/* p1_0 = DB0
   p1_1 = DB1
   p1_2 = DB2
   p1_3 = DB3
   p1_4 = DB4
   p1_5 = DB5
   p1_6 = DB6
   p1_7 = DB7
   */

#define LCDPORT p1
#define Enable p3_1
#define R_W p0_1
#define RS p3_7 

  
  
/**************** delay ************/
void delay(long zeit) /* 2000 ist ca. 5 msec */
{ /* 50 ist ca. 150 usec */
	/* 50000 ist ca. 120 msec */
	long t = 0;
	for (t=0; t<zeit; t++)
	{}
}

/*************************************************************************************/
/* Funktion Wait_ms                    												 */
/*************************************************************************************/

Wait_ms(long y)

{
    long z;	
	y = y * 520;					/* Wert für ms Zählschleife bei 20MHz */
	for(z=0;z<y;z++)
	{
		asm("nop");
	}
}
/*************************************************************************************/
/* Funktion Wait_us                    												 */
/*************************************************************************************/

Wait_us(long y)

{
    long z;	
	y = y * 2;					/* Wert für us Zählschleife bei 20MHz */
	for(z=0;z<y;z++)
	{
		asm("nop");
	}
}


/**************** Instruction ************/

void inst(int anw)
{
	RS = 0;
	LCDPORT=anw;
	Enable = 1;
	Wait_us(30);
	Enable = 0;
	Wait_us(30);
}

/**************** Data ************/

void data(int wert)
{
	RS = 1;
	LCDPORT=wert;
	Enable = 1;
	Wait_us(30);
	Enable = 0;
	Wait_us(30);
	RS = 0;
}


/********** Display einstellen ************/

void init(void)
{
	
	
	Enable = 0;
   	R_W = 0;
   	RS = 0;
	
	LCDPORT = 0x0;         /*Port1 = low*/        
    Wait_ms(60);    /*Wait 60 ms*/
	
	inst(0x39); // Funktionset 8-bit, 2 lines, Instruction Table 1
	inst(0x39); //secondtime
	inst(0x39);
	inst(0x39);
	
	inst(0x1c); //Bias 1/4, 2-zeilen LCD
	
	inst(0x52); //Booster aus, Kontras C5 und C4
	
	inst(0x69); //Spannungsfolger und Verstärkung setzten
	
	Wait_ms(300);
	
	inst(0x74); //Kontras C3,C2,C1
	
	inst(0x38); //back to instruction table 0
	
	inst(0x0f); //Display ein, Cursor ein, Cursor blinken
	
	inst(0x01); //Display löschen, Cursor Home
	
	inst(0x06); //Cursor Auto-Increment
	
	LCDPORT = 0x0;         /*Port1 = low*/        
    //Wait_ms(2000);    /*Wait 60 ms*/
}

/********** Daten ausgeben ************/

void ausgabe( char ausgabewert[16])
{
	int i = 0;
	
	//data(sizeof(ausgabewert));

	for (i=0;i<16;i++)
	{
		data(ausgabewert[i]);
	}
}

/*************************************************************************************/
/* Funktion LCD_Write_Integer              											 */
/*************************************************************************************/
void LCD_Write_Integer(unsigned int a)
{

unsigned char idx;          /*Schleifenzähler*/
/*unsigned int a = 10234;*/     /*Beispielzahl die dargestellt werden soll*/
unsigned int div = 1000;   /*Teilen bei int max 10000*/
unsigned int buff;          /*Temp*/
unsigned char flag = 0;     /*Flag wird für Nullunterdrückung benötigt*/
unsigned char Aus =0;      /*Ausgabe wird an LCD-Display übergeben*/
   
    for(idx=0;idx<4;idx++)  /*Schleife 5* für 10000er Stelle*/
        
    {
    buff = a;
    buff = buff / div;

    if(flag == 0)
    { 
        if(buff >0)
        {
        flag = 1;
        }
    }    
    Aus = buff + 48;   /*Umrechnung für LCD-Display*/
    if(flag == 0)
    {
    Aus = 254;         /*Nullunterdrückung durch Leerzeichen*/
    }
    if(flag == 0 && idx == 3)
    {
    Aus = 48;       /*bei Zahl null, eine null darstellen*/
    } 
    data(Aus);       
    a = a - (buff * div);    
    div = div/10;
    }	
}

void setOutPuts(void)
{
	p0 = 0x00;
	p1 = 0x00;
	p3_1 = 0x00;
	p3_7 = 0x00;
}


void main(void)
{
/*-------------------------------------------------
- Change on-chip oscillator clock to Main clock -
-------------------------------------------------*/
unsigned int g = 0;
	
	Wait_ms(1);

	prc0 = 1; /* Protect off */
	cm13 = 1; /* Xin Xout */
	cm15 = 1; /* XCIN-XCOUT drive capacity select bit : HIGH */
	cm05 = 0; /* Xin on */
	cm16 = 0; /* Main clock = No division mode */
	cm17 = 0;
	cm06 = 0; /* CM16 and CM17 enable */
	asm("nop"); /* Waiting for stable of oscillation */
	asm("nop");
	asm("nop");
	asm("nop");
	ocd2 = 0; /* Main clock change */
	prc0 = 0; /* Protect on */
	
	Wait_ms(3000);

	prc2 = 1; /* !!! Port 0 protection aufheben !!! */
	
	//adcon1 = 0x00; //Deactivate A/D Resitorladder
	pd0 = 0xFF; //set P0 to output mode
	p0 = 0x00;  //set P0 to low
	//drr = 0xff; //P1 LED Drive capabiity
	//pur0 = 0x00;
	//pur1 = 0x00;
	//txmr = 0x00;
	//tc = 0x0000;
	
	
	pd1 = 0xFF; /* Set Port 1.0 - 1.3 be used for output*/
	pd3 = 0x0F; /* SET PORT 3.0 - 3.? ALS OUTPUT */
	pd3_7 = 0x01; /enable output mode
	
	p0_4 = 1; //LED
	p0_5 = 0; //LED
	p0_6 = 0; //LED

	Wait_ms(300);
	init(); /* Display einstellen */
	Wait_ms(3000);
	

		
	ausgabe("Enableling COMs.");
	inst(0xC0);
	Wait_us(30);
	ausgabe("EA DOGM162 2x16c");
	Wait_ms(3000);
	
	init();
	Wait_ms(300);
	
	inst(0x80);
	Wait_us(30);
	ausgabe("Setting Online S");
	inst(0xC0);
	Wait_us(30);
	ausgabe("Trace...........");
	Wait_ms(3000);
	
	init();
	Wait_ms(300);
	
	inst(0x80);
	Wait_us(30);
	ausgabe("InitialatingSys0");
	inst(0xC0);
	Wait_us(30);
	ausgabe("Loading Nitro...");
	Wait_ms(3000);
	
	init();
	Wait_ms(300);
	
	inst(0x80);
	Wait_us(30);
	ausgabe("InitialatingSys1");
	inst(0xC0);
	Wait_us(30);
	ausgabe("LoadingBassboost");
	Wait_ms(3000);inst(0x80);
	
	init();
	Wait_ms(300);
	
	Wait_us(30);
	ausgabe("InitialatingSys2");
	inst(0xC0);
	Wait_us(30);
	ausgabe("Loading Speed...");
	Wait_ms(3000);
	
	init();
	Wait_ms(300);
	
	inst(0x80);
	Wait_us(30);
	ausgabe("InitialatingSys3");
	inst(0xC0);
	Wait_us(30);
	ausgabe("Loading Space...");
	Wait_ms(3000);
	
	init();
	Wait_ms(300);
	
	inst(0x80);
	Wait_us(30);
	ausgabe("InitialatingSys4");
	inst(0xC0);
	Wait_us(30);
	ausgabe("Loading Fun.....");
	Wait_ms(3000);
	
	init();
	Wait_ms(300);
	
	inst(0x80);
	Wait_us(30);
	ausgabe("InitialatingSys5");
	inst(0xC0);
	Wait_us(30);
	ausgabe("LoadingAdrenalin");
	Wait_ms(3000);
	
	init();
	Wait_ms(300);
	
	inst(0x80);
	Wait_us(30);
	ausgabe("NFS DRIVER READY");
	inst(0xC0);
	Wait_us(30);
	ausgabe("PRESS SPEED TO S");
	Wait_ms(3000);
	
	while(1)
	{}


}
wenn ich ohne erneute initialisirung weiteren text aus gebe (natuerlich nach vorherigem CLS (0x01) oder DDRAM Address set (0x80) und einem delay danach, "stuertzt" das Display ab..