Hallo,

danke für den Tipp, ich habe nun die Schnittstelle initialisiert und die Pins gesetzt. Messe ich die Spannung ohne Pullup Widerstände, so hab ich 0V (Tristate). Schließe ich nun die Pullup- Widerstände an, so erhalte ich 5V wie es sein soll.
Daraus schließe ich, dass der I2C Bus in Ordnung ist.
Wenn ich nun die Pins wieder rücksetzte so erhalte ich wieder die Spannung von 3,4V an SDA und 2,5V an SCL, mit dem Messgerät gemessen.

Ich hab hier mal den Quellcode eingefügt, vieleicht befindet sich ja hier ein Programmierfehler:


[php:1:1dcf790aa2]
list p=16f877

#include <p16f877.inc>

__Config _WDT_OFF & _HS_OSC & _LVP_OFF & _BODEN_OFF

;################################################# ###############
;Port belegung

#define RunningLed PORTC,0

;----------------------------------------------------------------
;Variablendeklaration

DELAY_H EQU 0x20
DELAY_L EQU 0x21

;----------------------------------------------------------------
;Konstanten
#define ADR0_R b'01110001'
#define ADR0_W b'01110000'
#define ADR1_R b'01110011'
#define ADR1_W b'01110010'

;---------------------------------------------------------------
;Programmbeinn

ORG 0x00
clrf STATUS
goto MAIN0

;--------------------------------------------------------------
;Macros

BANK0 MACRO
bcf STATUS,RP0
bcf STATUS,RP1
ENDM
BANK1 MACRO
bsf STATUS,RP0
bcf STATUS,RP1
ENDM
BANK2 MACRO
bcf STATUS,RP0
bsf STATUS,RP1
ENDM
BANK3 MACRO
bsf STATUS,RP0
bsf STATUS,RP1
ENDM
;--------------------------------------------------------------
;Interrupt Routine

ORG 0x04

;--------------------------------------------------------------
;--------------------------------------------------------------

MAIN0 call INIT

MAIN incfsz DELAY_L
goto SendByte
movlw b'00000001'
xorwf PORTC,F

SendByte call I2C_ON ;BUS übernehmen
movlw ADR0_R ;Adresse festlegen
call I2C_TX ;Senden
call I2C_RX ;Empfangen
movwf PORTB ;Empfangene Daten ausgeben
call I2C_OFF ;BUS freigeben
goto MAIN

;--------------------------------------------------------------
;--------------------------------------------------------------
;--------------------------------------------------------------


INIT BANK1
;PORT initialisierug
;PORTA initialisieren
movlw 0x06 ;Alle analogen Eingänge auf digital schalten
movwf ADCON1

movlw b'11111111'
movwf TRISA ;Tristate setzen

;PORTB initialisieren
movlw b'00000000'
movwf TRISB ;Tristate setzen

;PORTC initialisieren
movlw b'11111110'
movwf TRISC

;BANK0
;Schnittstellen initialisieren
;I2C
;BANK1
bcf SSPSTAT,SMP ;Slew rate control disable
bcf SSPSTAT,CKE ;I2C confor levels
movlw .9 ;Busgeschwindigkeit 100kHz
movwf SSPADD
BANK0
bcf SSPCON,CKP ;Clock disable
bsf SSPCON,SSPM3 ;I2C Mode
bcf SSPCON,SSPM2
bcf SSPCON,SSPM1
bcf SSPCON,SSPM0
bsf SSPCON,SSPEN ;Enable Serial Port

;Variablen setzen
clrf DELAY_H
clrf DELAY_L

return

;----------------------------------------------------------------
;I2C Bus Übernahme

I2C_ON bcf PIR1,SSPIF
BANK1
bsf SSPCON2,SEN ;Start condition
BANK0
btfss PIR1,SSPIF
goto $-1
bcf PIR1,SSPIF
return

;----------------------------------------------------------------
;I2C Bus freigeben

I2C_OFF bcf PIR1,SSPIF
BANK1
bsf SSPCON2,PEN ;Stop condition
BANK0
btfss PIR1,SSPIF
goto $-1
bcf PIR1,SSPIF
return

;----------------------------------------------------------------
;I2C Senden

I2C_TX movwf SSPBUF ;Daten ins Senderegister
btfss PIR1,SSPIF ;Byte gesendet?
goto $-1 ;Nein
bcf PIR1,SSPIF ;Ja
return

;----------------------------------------------------------------
;I2C Empfangen

I2C_RX BANK1
bsf SSPCON2,RCEN ;Daten empfang einschalten
BANK0

btfss PIR1,SSPIF ;Byte empfangen?
goto $-1 ;Nein
bcf PIR1,SSPIF ;Ja

movf SSPBUF,W ;Buffer einlesen
return

;----------------------------------------------------------------
;----------------------------------------------------------------
;----------------------------------------------------------------
;----------------------------------------------------------------

END

[/php:1:1dcf790aa2]