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....
Und noch zur Beschaltung: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
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
Lesezeichen