Forum: Mikrocontroller und Digitale Elektronik A/D-Wandler in C -- 8051


von Azurox (Gast)


Lesenswert?

Hallo zusammen.

Erstmal zu Anfang muss ich sagen: Ich bin noch blutiger Anfänger was die 
C-Programmierung angeht, deshalb auch eine ganz einfache stumpfe Frage. 
Also bitte nicht gleich mit dem Knüppel kommen :/

Hat jemand mal ein Skript oder eine Anleitung wo die Programmierung 
eines A/D-Wandlers erklärt ist? Am besten an einem Beispielprogramm, 
welches auch logische Schlüsse erlaubt? Ich habe nämlich bald meine 
Abitur-Prüfung in Elektrotechnik und muss daher einige Grundlagen 
können. Hierzu gehört u.a. der A/D-Wandler, den ich leider nie in der 
Schule hatte...

Ich habe schon pausenlos im Internet gesucht, ein Buch durchforstet aber 
erst eine nützliche Erklärung gefunden, die relativ logisch war und das 
Prinzip erklärt hat. Allerdings wurde das ganze an einem Beispiel in 
Assembler erklärt und ich muss dies in C-Programmierung können.

Vielleicht kann es mir auch hier jemand erklären, falls es nicht so 
schwierig ist !

Danke schonmal im Voraus!

MfG

von Ben _. (burning_silicon)


Lesenswert?

gehts dir um eine rein theoretische betrachtung der funktion oder um 
eine praktische anwendung in einem µC?

google doch mal nach "sukzessive approximation" dann weißt du wie so ein 
ding funktioniert.

von Azurox (Gast)


Lesenswert?

Hallo und erstmal vielen Dank für die fixe Antwort! ;)

Ja mit dem Thema der sukzessiven Approximation haben wir uns schon 
öfters in Elektrotechnik auseinander gesetzt. Wir haben uns u.a. den 
Schaltungsaufbau angeguckt und eine Approximation auf dem Papier 
"durchgeführt". Also von Hand. Das ist mir komplett einleuchtend.

Es geht mir um die Anwendung im C-Programm. Wie ich das teil 
initlaisiere und richtig anwende. Also wie die Befehle lauten, was ich 
dem Teil alles sagen muss etc... Also in kurz nochmal: Arbeitsweise des 
AD-Wandlers ist mir mehr als bekannt - mir geht es nur um die Anwendung 
im C-Programm.

Hoffe ihr könnt mir helfen!

von ggast (Gast)


Lesenswert?


von Dietrich (Gast)


Lesenswert?

Das nicht so sehr was mit "C" zu tun, als viel mehr mit der Hardware des 
verwendeten A/D-Wandlers.
Allgemein beschreiben kann man das eigentlich nicht...

Gruß
Dietrich

von Azurox (Gast)


Lesenswert?

Nun ja... ich weiß nicht wie ich's besser sagen soll, aber:
In den Richtlinien für das Abitur stehen als Voraussetzungen einfachste 
Grundlagen der Mikrocontrollertechnik. U.a. Timer, Interrupts und 
A/D-Wandler. Und mit dem AD-Wandler muss ich halt insofern was anfangen 
können, als das ich im Quellcode lesen kann, was dort passiert und 
eventuell einen Teil selbst schreiben / ergänzen muss. Ich weiß nicht 
was ich da genauer sagen oder eingränzen soll. Ich kann höchstens noch 
hinzufügen, dass der im Abitur genutzte, sogenannte "Papiercontroller", 
auf dem 8051 beruht.



Aber mal ein bisschen Offtopic:
Meiner Meinung nach hat unser tolles Schulministerium da auch wieder 
super nachgedacht (Achtung: Ironie!). Denn wir müssen im Abitur analoge 
Schaltungstechnik, Reglungstechnik und elektrische Maschinen, als auch 
Digital- und Mikrocontrollertechnik können. Und das ist in dem Sinne 
schwachsinnig, dass man sich besser hätte auf einen Bereich 
speziallisieren können, als alle ein bisschen anzukraten. Außerdem habe 
ich, auf Deutsch gesagt, wirklich kein Bock auf Programmieren bzw. 
Mikrocontrollertechnik. Da gibts meiner Meinung nach Informatiker für - 
und den Job wollen zur heutigen Zeit ja wohl genug machen.... Aber das 
mal nur am Rande.

von Jobst M. (jobstens-de)


Lesenswert?

Also, beim 80c535 siehts in ASM so aus:
1
GET_ADC:       CLR  MX0                ; Multiplexer: Eingang auswählen
2
               CLR  MX1
3
               CLR  MX2
4
5
               CLR  ADM                ; Nach einer Wandlung wieder stoppen
6
7
               MOV  DAPR, #0xA6        ; Wandlung mit Auswahl der Referenzspannungen starten
8
9
GET_ADC_wait:  JB   BSY, GET_ADC_wait  ; Warten, bis Wandlung fertig
10
               MOV  data, ADDAT        ; Wert des ADCs aus ADDAT übernehmen
11
               RET

Wenn Du keine vorgefertigten Libs hast, wird es in C ähnlich gehen ...


Gruß

Jobst

von Azurox (Gast)


Lesenswert?

Danke Jobst.
Aber ich habe absolut keine Ahnung was ich damit anfangen soll. Wenn ich 
mich nicht irre ist dies Assembler, oder? Sah zumidnest so ähnlich aus, 
als ich es das letzte mal irgendwo gesehn habe.
Ich kann damit leider nichts anfange, weil ich von Assembler wirklich 
absolut garnichts weiß.

von Jobst M. (jobstens-de)


Lesenswert?

Azurox schrieb:
> Wenn ich mich nicht irre ist dies Assembler, oder?

So habe ich es drüber geschrieben ;-)


Naja, Du hast zum beschreiben die Bits
MX0, MX1, MX2, ADM

und das Register
DAPR

und zum auslesen das Busy-Bit - ob fertig
BSY

und das Ergebnis-Register
ADDAT


Die Register und Bits kannst Du in C genau so ansprechen.
Der eigentliche Witz dabei ist jedoch, daß Du über die tatsächliche 
Wandlung gar nichts wissen musst - wie Du siehst.
Du schreibst ein paar Bits in ein Register und bekommst das Ergebnis aus 
einem anderen. Es könnte genau so gut eine serielle Schnittstelle sein 
...


Edit: Bei einem anderen uC heißen die Register natürlich wieder anders.


Gruß

Jobst

von Azurox (Gast)


Lesenswert?

Jobst M. schrieb:
> So habe ich es drüber geschrieben ;-)

Oh, das habe ich wohl missachtet!


Aber das klingt ja erstmal ganz simpel. Danke erstmal! Habe mir das 
schwieriger vorgestellt :)

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.