Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Bitfehler MAX1270 Kategorie: Programmierung (von m8_nix - 30.04.2007 21:39)
Als Antwort auf Bitfehler bei AD-Wandlung von m8_nix - 28.04.2007 19:11
Ich nutze:
C164CI-ControllerBoard
Hallo,

meine Vermutung das sich die Bitfehler während der sequentiellen �bertragung einschleichen hat
sich leider nicht bestätigt. Es kommt noch viel schlimmer, der AD-Wandler selbst gibt die
falschen Wandlerwerte aus.

Als erstes habe ich versucht die gesamte Wandler-Routine in Assembler zu schreiben,
da sich hier der Interrupt sperren lässt und ich hierin den Fehler vermutete.
Die Routine hab ich von "schnelles SPI" abgeleitet.



$segmented
$model(medium)
$extend
$nomod166
$stdnames(reg164ci.def)
$NOLOCALS

        regdef  R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R13,R14,R15
;non-used Regs by I²C-Subs: R3, R5, R8, R9, R10, R11, ((R14), R15)
;**************************************************************************************************************

; P1L.0 CC60IO    
; P1L.1 COUT60
; P1L.2 CC61IO  
; P1L.3 COUT61  
; P1L.4 CC62IO
; P1L.5 COUT62
; P1L.6 COUT63   Clock
; P1L.7 CTRAP   /CS
; P1H.0 CC6POS0
; P1H.1 CC6POS1
; P1H.2 CC6POS2
; P1H.3 T7IN  
; P1H.4 CC24IO
; P1H.5 CC25IO    DIn
; P1H.6 CC26IO   SSTRB
; P1H.7 CC27IO   DOut

P1L_            EQU     0FF04h

; Definition der OS-Routinen
OSsegment       EQU     0
POP_R4          EQU     0765AH  ;uses: R4, R12, R13, R14
PUSH_R12        EQU     075D6H  ;uses: R1, R2, R12, R13,R14,R15
POP_LONG        EQU     07680H  ;return in R4, R5
PUSH_LONG       EQU     075fEH  ;Value in R12, R13

userseg         SECTION CODE word at 33000h ; Segment 3, Adresse 0000h
assume  dpp3:userseg

;************************************************************************************************************
        ; AD-Wandlung einlesen
ad1270  proc far
        BCLR    IEN
        CALLS   OSsegment,POP_R4        ;data
        MOVB    RH4, RL4
        MOV     R13,#0h
        BCLR    CTRAP
        nop
        nop
_1:     ;for i=0 ... 7
        ROL     R4, #1
        BMOV    CC25IO,C
        BSET    COUT63 ; Clock
        nop
        BCLR    COUT63
        CMPI1   R13,#07h
        JMPR    cc_SLT,_1 ; next for; jump if R13 < 0x07
        BSET    CTRAP
        BCLR    CC25IO
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        nop
        MOV     R12,#0
_2:     BMOV    R12.0,CC26IO
        CMP     R12,#01h        
        JMPR    cc_SLT,_2
        BCLR    CTRAP
        nop
        nop
        MOV     R13,#0h
        MOV     R12,#0
_3:     SHL     R12,#1        ; for i = 0... 11
        BMOV    R12.0,CC27IO
        BSET    COUT63 ; Clock
        nop
        BCLR    COUT63

        CMPI1   R13,#11
        JMPR    cc_SLT,_3
        CALLS   OSsegment,PUSH_R12    
        BSET    CTRAP
        POP     R1
        POP     R1
        BSET    IEN
        RETS
ad1270  endp
userseg ENDS
        END


Als ich aber hier auch die selben Bitfehler erhalten habe wurde ich stutzig.
Da laut Datenblatt die Bits mit keiner minimalen Geschwindigkeit "ausgeshiftet"
werden müssen hab ich das Clock-Signal einfach mal auf 5 Sekunden gestreckt
und mir jedes "ausgeshiftete" Bit auf dem Ozi angesehen und mit dem Eingelesenen
verglichen... mit einem erschreckendem Ergebnis..... Der Wandler selbst
gibt die unsinnigen Werte aus.
Mein erster Gedanke.... "das Ding ist kaputt" bestätigte sich leider auch nicht.
(Ein niegelnagelneuer Max1270 verhielt sich genau so)
Ich bin mit meinem Latein am Ende :-(

Ich wünsche euch dennoch eine schöne Maifeier (ich geh mich jetzt besaufen)


    Antwort schreiben


Antworten:

Fehler gefunden (von m8_nix - 3.05.2007 22:40)