Servus und Hallo,

ich habe mal wieder ein Problem, mit dem ich allein nicht mehr zu Rande komme...
Ich versuche einen Drucksensor MS5534 mit dem PIC16F877A via SPI zu verbinden. Das Ganze habe ich auf dem PICDEM2 PLUS Board aufgebaut

Hier das Datenblatt des MS5534B
http://www.amsys.de/sheets/amsys.de.ms5534b(e).pdf

Nun ja der Sensor macht das "Verbinden" nicht gerade einfach. Der MS5534 verträgt maximal 3,6 Volt als VDD, sowie an den Pins. Also bin ich her gegangen und habe mir die 5 Volt die ich vom Board bekomme via Widerstand und Z-Diode auf 3,3 Volt runtergeregelt. Bei den Pins, die als Eingänge für den Drucksensor dienen habe ich Spannungsteiler eingesetzt, um von 5 Volt auf 3,3 zu kommen und bei dem Ausgang des Sensors habe ich keine Beschaltung gewählt, da der PIC die 3,3 Volt als HIGH interpretieren sollte.


Was soll ich sagen, die Kommunikation funktioniert nicht und ich weiß nicht woran es liegt.

Hier noch mein Code: Ich versuche mittlerweile lediglich ein Calibration Word zu empfangen....
Code:
	list		p=16f877a	; list directive to define processor
	#include	<p16f877a.inc>	; processor specific variable definitions
	
	__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF


D_LCD_DATA UDATA	0x20			;start of general purpose registers

			COUNTER 		res 	1	; Counter in Init
			RXDATA_1		res		1
			RXDATA_2		res		1
			
			TXDATA			res		1
;endc

;#define 	LCD_D4			PORTD,	0

;PROG1		Code						; START
ORG			0x000
goto		START_PRESSURE_INIT

org			0x0004						; Interrupt
retfie
;***********************Zeile 1***************************************
START_PRESSURE_INIT

clrf	RXDATA_1
clrf	RXDATA_2
clrf	TXDATA

banksel	TRISC
movlw	b'00010000'
movwf	TRISC

banksel SSPSTAT
movlw	b'11000000'		; SMP=1, CKE=1, BF=0
movwf	SSPSTAT
banksel	SSPCON
movlw	b'00100010'    ;  WCOL=0, SSPOV=0, SSPEN=1, CKP=0, SSPM[3..0]= 0010 (FOSC/64)
movwf	SSPCON

;LOOP BTFSS SSPSTAT, BF ;Has data been received(transmit complete)?
;goto LOOP ;No
;MOVF SSPBUF, W ;WREG reg = contents of SSPBUF
;MOVWF RXDATA ;Save in user RAM, if data is meaningful


movlw	0x1d
movwf	TXDATA
MOVF TXDATA, W ;W reg = contents of TXDATA
MOVWF SSPBUF ;New data to xmit

movlw	0x50
movwf	TXDATA
MOVF TXDATA, W ;W reg = contents of TXDATA
MOVWF SSPBUF ;New data to xmit

LOOP BTFSS SSPSTAT, BF ;Has data been received(transmit complete)?
goto LOOP ;No
MOVF SSPBUF, W ;WREG reg = contents of SSPBUF
MOVWF RXDATA_1 ;Save in user RAM, if data is meaningful
LOOP2 BTFSS SSPSTAT, BF ;Has data been received(transmit complete)?
goto LOOP2 ;No
MOVF SSPBUF, W ;WREG reg = contents of SSPBUF
MOVWF RXDATA_2 ;Save in user RAM, if data is meaningful



banksel	TRISB
movlw	b'00000000'
movwf	TRISB
banksel PORTB
movlw	b'01010101'
movwf	PORTB
ABE
goto	ABE			

        end
Und noch zur Beschaltung:
Ich verbinde
PIC_PIN_RC3_SCL mit SENSOR_PIN_SCLK
PIC_PIN_RC4_SDI mit SENSOR_PIN_DOUT
PIC_PIN_RC5_SDO mit SENSOR_PIN_DIN

So und jetzt kommt’s. Der Drucksensor braucht noch eine zusätzliche Clock von 30 bis 35 kHz (MCLK). Ich habe einen Uhrenquarz auf dem Board der mit RC0 und RC1 verbunden ist. Ich greife mir wahlweise an RCO bzw. RC1 die Clock ab, da ich mir nicht sicher bin an welchen Pin diese muss und ob das überhaupt funktioniert.
VDD_BOARD über "Widerstands-Z-Dioden-Teiler" an VDD_Sensor.
GND_BOARD an GND_SENSOR

Ich beschäftige mich das erste Mal mit dem SPI Modus... I2C habe ich schneller zum laufen gebracht.

Vielen Dank für die Hilfe

Gruß Daniel