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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.