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.