Forum: Mikrocontroller und Digitale Elektronik AD Wandlung mit MAX187 und MC51


von OleM (Gast)


Lesenswert?

Hallo,
ich probiere und spiele gerade an einem MC51 Entwicklungsboard rum, auf
dem auch der 12 Bit AD Wandler Max 187 sitzt.
Mein Ziel ist es einen mit einem Poti eingetellten analogen Wert in
einen digitalen (von 0 bis 4095) umzusetzen.
Leider habe ich sehr wenig Erfahrung und komme nicht so recht voran.
Wo kann ich das lernen? Das bekannte MC Kochbuch hilft mir nur
teilweise. Hat hier mal jemand sowas gemacht?
Mein Problem ist eben, dass ich nicht weiß, wie ich das Ding
programmieren soll.
Ich glaube im groben ist es so: Erstmal einen externen Takt angeben in
dem die Daten gelesen werden sollen.
Wenn das Startbit des AD Wandlers kommt müssen die folgenden 12 Bit
einzeln gelesen und im Speicher abgelegt werden und es werden wegen der
12 Bit ein voller 8 Bit Speicher und ein "halber" für die letzten 4
Bit benötig. Dann diese 12 Bit Zahl in einen Wert umsetzen, der
ausgegeben werden kann.
Alles nicht so leicht für einen Anfänger. Kann mir jemand helfen?
Vielen Dank!
OleM

von Benedikt (Gast)


Lesenswert?

So schwer ist das ganze nicht.
Du taktest SCLK einmal, legst CS\ an Masse und wartest bis DOUt auf
High geht.
In einer Schleife liest du 4bit seriell ein, indem du den pin in das
Carry schreibst und mit rlc ein Byte daraus machst und taktest immer
den Clock Pin des ADC.
Dann liest du in einer zweiten Schleife die restlichen 8bits ein.
Beide Werte zusammen ergeben jetzt die 12bit Zahl.

von OleM (Gast)


Lesenswert?

Hallo Benedikt,

erstmal danke für deine Antwort. Ich bin absolut neu auf dem Gebiet,
will das aber gerne lernen. Was ich bisher zusammengedichtet habe ist
folgendes. Aber ich komme von hier ab nicht weiter und nehme auch an,
dass im Programmteil Fehler sind.
Vielleicht kannst du mir da weiterhelfen?

        ORG     CODEMEM+30H

USING   2                       ; Registerbank 2 verwenden

T0IRQ:  PUSH    PSW
        MOV     PSW,#010H       ; Registerbank 2 einschalten

        MOV     TH0,#HIGH(TIMCNT)
        MOV     TL0,#LOW(TIMCNT)
        CPL     TAKT
        DJNZ    TCOUNT,T0RET
        CLR     CS              ; Konvertierung starten
        NOP
WFR:    JNB     DOUT,WFR
        DJNZ    ZAEHL,WFR2      ; 8 Bit-Schleife
        MOV     DOUT,C
        MOV     C,#02H
        RL      #02H

WFR2:   DJNZ    ZAEHL2,T0RET    ; 4 Bit-Schleife
        MOV     DOUT,C
        MOV     C,#04H
        RL      #04H


        MOV     TCOUNT,#T10MS

T0RET:  POP     PSW             ; Flags wiederherstellen
        RETI

USING   0                       ; Registerbank 0 verwenden

von Benedikt (Gast)


Lesenswert?

Da ist einiges falsch. Schau dir das Timing im Datenblatt nochmal genau
an.

Die Schleife so in etwa:

WFR:    JNB     DOUT,WFR
mov zaehl, #4
clr acc
setb dout
WFR2:   MOV     C,DOUT
        RLc      acc
        setb TAKT
        nop
        clr TAKT
        DJNZ    ZAEHL,WFR2      ; 4 Bit-Schleife
mov r2, a

clr acc
mov zaehl, #8
WFR3:   MOV     C,DOUT
        RLc      acc
        setb TAKT
        nop
        clr TAKT
        DJNZ    ZAEHL,WFR3      ; 8 Bit-Schleife
mov r3, a

von joe (Gast)


Lesenswert?

Auf www.reinerjansen.de/4flash gibt es einige Beispiele für diesen
Wandler.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.