mensch du bist klasse so langsam sollten die fehler aber angst bekommen und verschwinden wenn wir so weitermachen

die wartezeit nach dem 2. nibble ist jetzt auch nach dem 2. nibble (also nach enable).

hast recht es muss 0x06 heißen da hat sich bei sprut wohl ein fehler eingeschlichen und ich hab es bein abtippen nicht gemerkt.

Display off ist auch raus. // on muss doch drin bleiben, oder nicht, ist ja nach der internen init aus.


Code:
/** I N C L U D E S **********************************************************/

#include <p18f4550.h>
#include <delays.h>


/** D E F I N I T I O N S ****************************************************/

#define PORTLCD 	LATB
#define TRIS_LCD    TRISB
#define LCD_E		PORTBbits.RB0
#define LCD_RS		PORTBbits.RB2
#define LCD_RW		PORTBbits.RB3
#define nop			_asm nop _endasm

//****************************************************************************

#pragma code


void delay100us(unsigned char multiplikator)
// for  PicLSBK (16MHz Taktzyklus = 4 MHz Befehlszyklus)
{		
	Delay10TCYx(40*multiplikator);	//40*10*0,25µs = 100 µs
}


void LCD_BUSY(void)
{
	unsigned char temp1;
//	unsigned char temp2;
	do
	{
		TRIS_LCD = 0xF0; 		// LCD-PORT = high nibbles:eingang; low nibbles:ausgang
//Display abfrage
		LCD_RS = 0; 			// LCD im Befehls-Mode
		LCD_RW = 1; 			// LCD im Lesen-Mode
		LCD_E = 1; 				// Enable (LCD)
		temp1 = PORTLCD;
		temp1 = temp1 & 0xF0; 	// Niederw.Nibble (steuerbits) ausmaskieren
		LCD_E = 0; 				//   toggeln
		
		LCD_E = 1; 				// Enable (LCD)
		nop;
		LCD_E = 0; 				//   toggeln
	} while (temp1>=0x80);	
		
	delay100us(1);
	LCD_RW = 0; 		// Busy = low: LCD im Schreiben-Mode
	TRIS_LCD = 0x00;     // LCD-PORT = Ausgänge
	PORTLCD  = 0x00;	 // Daten und Steuerleitungen LOW
} 


void LCD_WriteZeichen(unsigned char zeichen)
{
	unsigned char x;
delay100us(200);
delay100us(200);
//	LCD_BUSY(); 				// Warten bis LCD bereit ist
				
	LCD_RW = 0; 				// LCD im Schreiben-Mode
	LCD_RS = 1; 				// LCD im Befehl-Mode

	x = zeichen & 0xf0;
	x = x | LCD_RS;	
	PORTLCD = x;				//höherwertiges nibbel

	nop;
	LCD_E = 1; 					// Enable (LCD)
	nop;nop;					
	LCD_E = 0;

delay100us(50);					//5ms warten nach den 1.nibble

	x = zeichen;			
	x = (x << 4)& 0xf0;			//niederwertiges nibbel
	x = x | LCD_RS;
	PORTLCD = x;
	
	LCD_E = 1; 					// Enable (LCD)
	nop;nop;					
	LCD_E = 0;
delay100us(50);					//5ms warten nach den 2.nibble
	LCD_RS = 0;
}


void LCD_WriteString(unsigned char *String) 
{
	unsigned char zeichen;
	
	zeichen = *String;
	while(zeichen !='\0')
	{
		LCD_WriteZeichen(zeichen); 	// zeichen am LC-Display ausgeben
		String++; 					
		zeichen = *String; 			
	}
}

void LCD_WriteRegister(unsigned char data) 
{
	unsigned char x;
delay100us(200);
delay100us(200);
//	LCD_BUSY(); 				// Warten bis LCD bereit ist

	//	LCD_RW = 0; 				// LCD im Schreiben-Mode
	//	LCD_RS = 0; 				// LCD im Befehl-Mode	
					
	x = data & 0xf0;
	PORTLCD = x;				//höherwertiges nibbel


	LCD_E = 1; 					// Enable (LCD)
	nop;nop;					
	LCD_E = 0;

delay100us(50);					//5ms warten nach den 1.nibble
	x = data;			
	x = (x << 4)& 0xf0;			//niederwertiges nibbel
	PORTLCD = x;
	
	LCD_E = 1; 					// Enable (LCD)
	nop;nop;					
	LCD_E = 0;
delay100us(50);					//5ms warten nach dem 2.nibble
}



void LCD_Init(void) 
{
// LCD initialisieren

	TRIS_LCD = 0x00;     // LCD-PORT = Ausgänge
	PORTLCD  = 0x00;	 // Daten und Steuerleitungen LOW


	delay100us (150);
	delay100us (150);	// warte über 30ms
	delay100us (100);

	PORTLCD = 0x30;				// Interface auf 8-Bit setzen						
	LCD_E = 1; 					// Enable (LCD)
	nop;nop;	
	LCD_E = 0;
	
	delay100us(50);				//warte 5ms
								
	LCD_E = 1; 					// Interface auf 8-Bit setzen
	nop;nop;					// Enable (LCD)					
	LCD_E = 0;

	delay100us(2);				//warte 200µs
								
	LCD_E = 1; 					// Interface auf 8-Bit setzen
	nop;nop;					// Enable (LCD)				
	LCD_E = 0;
	
	delay100us(2);				//warte 200µs
	
	PORTLCD = 0x20;				// Interface auf 4-Bit setzen
	LCD_E = 1; 					// Enable (LCD)
	nop;nop;					
	LCD_E = 0;

	LCD_WriteRegister(0x28);  // 2-zeilig, 5x8-Punkt-Matrix
//	LCD_WriteRegister(0x08);  // Display aus	
	LCD_WriteRegister(0x01);  // Display löschen
	LCD_WriteRegister(0x06);  // Kursor nach rechts wandernd, kein Display-Shift
	LCD_WriteRegister(0x0c);  // Display ein  [ 0x0C = ein, 0x08 = aus ] 

}


void main (void)
{
   LCD_Init();
	LCD_WriteZeichen('t');
}