Lutzacht
07.05.2014, 09:52
Hallo Jungs,
ich habe einen PIC16F1938 mit AD421 und MCP3551 kombiniert. Der 4-20 mA Ausgang mit dem AD421 lässt sich inzwischen einwandfrei ansteuern. Doch beim MCP3551 hakt es. Bei single conversion liefert er 01010101... usw. Bei continuous conversion sind es nur lauter Nullen. Mir ist das Ergebnis ein völliges Rätsel. Im Forum von Microchip komme ich auch nicht weiter. Kennt sich Jemand mit dem Teil aus? Hier ist der Code vom Auslesen:
BANKSEL APFCON
BCF APFCON,T1GSEL
BCF APFCON,SRNQSEL
BCF APFCON,C2OUTSEL
BCF APFCON,SSSEL
BCF APFCON,GIE
BCF APFCON,PEIE
BANKSEL ANSELA
BCF ANSELA,0
BANKSEL TRISC
MOVLW b'00010011' ; RC6+7 Output (nicht genutzt), RC 5 (SDO) Output, RC4 (SDI) Input, RC3 (SCK) Output, RC2 (SS) Output, RC1+0 (Eingang+-) Input
MOVWF TRISC
BANKSEL TRISA
MOVLW b'00000000' ; RA0 Output (SS), Rest nicht genutzt
MOVWF TRISA
BANKSEL PORTC
BSF PORTC,2 ; SS für MCP3551 auf high
BANKSEL SSPSTAT
MOVLW b'00000000' ; CKE auf 0, SMP auf 0 --- CKP muss dann auf 1 (mode 1,1)
MOVWF SSPSTAT
BANKSEL SSPCON1
MOVLW b'00110010' ; SSPEN und CKP auf 1, SPI Master mode, clock = FOSC/16
MOVWF SSPCON1
BCF SSPCON1,SSPEN
BSF SSPCON1,SSPEN
; Start der continuous Conversion und Verzögerung 20 ms
BANKSEL PORTC
BCF PORTC,2 ; SS für MCP3551 auf low
; Verzögerung 80 ms
CALL delay10ms ; 11 mal 10ms
CALL delay10ms
CALL delay10ms
CALL delay10ms
CALL delay10ms
CALL delay10ms
CALL delay10ms
CALL delay10ms
CALL delay10ms
CALL delay10ms
CALL delay10ms
; SS auf MCP3551 statt AD421 und Port einrichten
; Conversion ist abgeschlossen
Schleife0
; SPI auslesen
; erstes Byte
BANKSEL SSPBUF
BCF SSPSTAT,BF
BCF SSPCON1,WCOL
MOVLW b'00000000'
MOVWF SSPBUF ; startet Transfer 1. Byte
Schleife1 BTFSS SSPSTAT,BF ; Test ob erstes Byte gelesen ist
GOTO Schleife1
MOVF SSPBUF,W
MOVWF Daten+2 ; erstes Byte auslesen
; zweites Byte
BCF SSPSTAT,BF
BCF SSPCON1,WCOL
MOVLW b'00000000'
MOVWF SSPBUF ; startet Transfer 2. Byte
Schleife2 BTFSS SSPSTAT,BF ; Test ob zweites Byte gelesen ist
GOTO Schleife2
MOVF SSPBUF,W
MOVWF Daten+1 ; zweites Byte auslesen
; drittes Byte
BCF SSPSTAT,BF
BCF SSPCON1,WCOL
MOVLW b'00000000'
MOVWF SSPBUF ; startet Transfer 3. Byte
Schleife3 BTFSS SSPSTAT,BF ; Test ob drittes Byte gelesen ist
GOTO Schleife3
MOVF SSPBUF,W
MOVWF Daten ; drittes Byte auslesen
ich habe einen PIC16F1938 mit AD421 und MCP3551 kombiniert. Der 4-20 mA Ausgang mit dem AD421 lässt sich inzwischen einwandfrei ansteuern. Doch beim MCP3551 hakt es. Bei single conversion liefert er 01010101... usw. Bei continuous conversion sind es nur lauter Nullen. Mir ist das Ergebnis ein völliges Rätsel. Im Forum von Microchip komme ich auch nicht weiter. Kennt sich Jemand mit dem Teil aus? Hier ist der Code vom Auslesen:
BANKSEL APFCON
BCF APFCON,T1GSEL
BCF APFCON,SRNQSEL
BCF APFCON,C2OUTSEL
BCF APFCON,SSSEL
BCF APFCON,GIE
BCF APFCON,PEIE
BANKSEL ANSELA
BCF ANSELA,0
BANKSEL TRISC
MOVLW b'00010011' ; RC6+7 Output (nicht genutzt), RC 5 (SDO) Output, RC4 (SDI) Input, RC3 (SCK) Output, RC2 (SS) Output, RC1+0 (Eingang+-) Input
MOVWF TRISC
BANKSEL TRISA
MOVLW b'00000000' ; RA0 Output (SS), Rest nicht genutzt
MOVWF TRISA
BANKSEL PORTC
BSF PORTC,2 ; SS für MCP3551 auf high
BANKSEL SSPSTAT
MOVLW b'00000000' ; CKE auf 0, SMP auf 0 --- CKP muss dann auf 1 (mode 1,1)
MOVWF SSPSTAT
BANKSEL SSPCON1
MOVLW b'00110010' ; SSPEN und CKP auf 1, SPI Master mode, clock = FOSC/16
MOVWF SSPCON1
BCF SSPCON1,SSPEN
BSF SSPCON1,SSPEN
; Start der continuous Conversion und Verzögerung 20 ms
BANKSEL PORTC
BCF PORTC,2 ; SS für MCP3551 auf low
; Verzögerung 80 ms
CALL delay10ms ; 11 mal 10ms
CALL delay10ms
CALL delay10ms
CALL delay10ms
CALL delay10ms
CALL delay10ms
CALL delay10ms
CALL delay10ms
CALL delay10ms
CALL delay10ms
CALL delay10ms
; SS auf MCP3551 statt AD421 und Port einrichten
; Conversion ist abgeschlossen
Schleife0
; SPI auslesen
; erstes Byte
BANKSEL SSPBUF
BCF SSPSTAT,BF
BCF SSPCON1,WCOL
MOVLW b'00000000'
MOVWF SSPBUF ; startet Transfer 1. Byte
Schleife1 BTFSS SSPSTAT,BF ; Test ob erstes Byte gelesen ist
GOTO Schleife1
MOVF SSPBUF,W
MOVWF Daten+2 ; erstes Byte auslesen
; zweites Byte
BCF SSPSTAT,BF
BCF SSPCON1,WCOL
MOVLW b'00000000'
MOVWF SSPBUF ; startet Transfer 2. Byte
Schleife2 BTFSS SSPSTAT,BF ; Test ob zweites Byte gelesen ist
GOTO Schleife2
MOVF SSPBUF,W
MOVWF Daten+1 ; zweites Byte auslesen
; drittes Byte
BCF SSPSTAT,BF
BCF SSPCON1,WCOL
MOVLW b'00000000'
MOVWF SSPBUF ; startet Transfer 3. Byte
Schleife3 BTFSS SSPSTAT,BF ; Test ob drittes Byte gelesen ist
GOTO Schleife3
MOVF SSPBUF,W
MOVWF Daten ; drittes Byte auslesen