hallo alle miteinander nachdem mein LCD in 4bit und auch die tastatur abfrage nicht zulätz durch eure hilfe einwandfrei funktioniert, hab ich mich an was neues rangetraut.

und zwar das LCD03

datenblatt: das ist alles was ich dazu hab?!
http://www.robot-electronics.co.uk/htm/Lcd03tech.htm

da ist auch ein beispiel gezeigt, aber irgendwie haut es bei mir nicht hin.

evtl hat ja jemand schon erfahrung damit und kann mir eine hilfestellung geben.
ich vermute das mein programmcode fehlerfaft ist, aber ich weis nicht wo ich noch suchen soll.

hab das prog soweit runter gekürzt das jetzt laut datenblat (und in anlehnung and das demo prog) nur noch ein blinkender courser auf dem LCD angezeigt werden sollte.

würde mich freuen wenn sich einer mal mein prog anschauen könnte und evtl noch nen tipp hätte.

Code:
//Microchip  C-18 Compiler
//PIC 18F4550


#include <p18f4550.h>
#include "typedef.h"
#include <stdio.h>
#include <delays.h>

#pragma code		 

	

uint8 s[21];						// buffer used to hold text to print

/**delay for  PicLSBK (16MHz Taktzyklus = 4 MHz Befehlszyklus)***************/

void delay100us(uint8 multiplikator)
{
   while(multiplikator--) Delay10TCYx(40);   //40*10*0,25µs = 100 µs
}
/****************************************************************************/


void clrscn(void)
{
	PIR1bits.SSPIF = 0;		//
//Start-Bedingung ausgeben
	SSPCON2bits.SEN = 1;		// Start-Bedingung ausgeben (Start-Bit)
	while(!PIR1bits.SSPIF);		// warte bis fertig
Nop();	PIR1bits.SSPIF = 0;			// Fertig-Anzeige löschen

//Slave_Empfangs-Adresse senden
	SSPBUF = 0xc6;				// LCD03 I2C address
	while(!PIR1bits.SSPIF);		// warte bis fertig
Nop();	PIR1bits.SSPIF = 0;			// Fertig-Anzeige löschen

	SSPBUF = 0;					// address of register to write to 
	while(!PIR1bits.SSPIF);		// warte bis fertig
Nop();	PIR1bits.SSPIF = 0;			// Fertig-Anzeige löschen

	SSPBUF = 12;				// clear screen 
	while(!PIR1bits.SSPIF);		// warte bis fertig
Nop();	PIR1bits.SSPIF = 0;			// Fertig-Anzeige löschen

	SSPBUF = 5;					// cursor on 
	while(!PIR1bits.SSPIF);		// warte bis fertig
Nop();	PIR1bits.SSPIF = 0;			// Fertig-Anzeige löschen

//Stop-Bedingung ausgeben
	SSPCON2bits.PEN = 1;		// Stop-Bedingung ausgeben (Stop-Bit)
	while(!PIR1bits.SSPIF);		// warte bis fertig
Nop();	PIR1bits.SSPIF = 0;			// Fertig-Anzeige löschen
}

void i2c_init(void)
{
//	INTCON2bits.RBPU=0;     // pull-up's an
        delay100us(250);
	TRISBbits.TRISB0 = 1;	// SDA (RB0) Eingang
	TRISBbits.TRISB1 = 1;	// SCL (RB1) Eingang
//	PORTB=0xff;
		
	delay100us(10);
	SSPCON1 = 0b00111000;	// x,x,I2C ein,x,I2C Master [Takt= Fosc /(4*(SSPADD+1))]
	SSPCON2 = 0;			// Bestätigungsbit nach Empfang 0=an
	SSPSTATbits.SMP   = 1;	// Anstiegskontrolle 1=aus (Flankensteilheit)	 
	SSPSTATbits.CKE   = 0;	// I2C Betrieb / (SMBus gespert)
	SSPADD			  =0x09;// Bustakt 100kHz (bei 4MHz Befehlszyklus)

	delay100us(250);		// wait 15ms for LCD03 to init
	delay100us(250);	
}

void main(void)
{
	i2c_init();					// sets up the PIC16F877 I2C port
	clrscn();					// clears the LCD03 disply
	while(1);					// just stops
}
und dann hätte ich noch eine frage:
kann ich die internen pullup widerstände des pic als pullup für den I2C bus verwenden?

aktuel hab ich 2,2kohm eingelötet.

vielen dank im voraus

mfg andi