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:
Code:
            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