Forum: Mikrocontroller und Digitale Elektronik Atmega48 ADC


von Daniel K. (zaus)


Lesenswert?

Hallo
Ich würde gerne 4 Analog-Signale mit 20ksps abfragen. Ich benötige 
allerdings nicht die vollen 10bit sondern lediglich 8bit Auflösung.
Aus dem Datenblatt konnte ich folgendes Entnehmen:
- Bei 10bit ADC Clock maximal 200kHz * 13 Takte pro Umwandlung = ~15ksps
- Bei weniger Auflösung >200kHz möglich

Ich bräuchte bei meiner Anwendung also 4*20k*13 ~ 1Mhz ADC Clock

- Ist das richtig und ist das bei 8bit machbar?
- Kann ich die 4 Eingänge gleichzeitig auswerten bzw. alle 4 
gleichzeitig aufnehmen und nacheinander auswerten?
- Rechne ich richtig wenn ich sage, der µC(20Mhz) ist durch die 
Auswertung allein dann zu 5% ausgelastet?

Danke für eure Hilfe.

von Achim M. (minifloat)


Lesenswert?

Daniel K. schrieb:
> - Rechne ich richtig wenn ich sage, der µC(20Mhz) ist durch die
> Auswertung allein dann zu 5% ausgelastet?

Die Wandlung geschieht in Hardware, lastet die CPU also garnicht aus, 
wenn du nicht Däumchendrehen sondern Interrupts verwendest. Wenn du 
Däumchendrehen verwendest, verheizt du damit unnötig CPU-Zeit.

Ein Wandlungsvorgang braucht eher 15-16 ADC-Takte, wenn mans mit 
Interrupt-Einsprunggedöns usw rechnet. Bei 1MHz ADC-Takt kommt man also 
auf maximal 63kSamples/s.

Die Auswertung, puh, das musst du selber wissen.

Daniel K. schrieb:
> Kann ich die 4 Eingänge gleichzeitig auswerten bzw. alle 4
> gleichzeitig aufnehmen und nacheinander auswerten?

Wirklich gleichzeitig geht nicht. Es gibt nur einen ADC, dessen Eingang 
gemultiplext wird.

Daniel K. schrieb:
> ist das bei 8bit machbar

Machbar sicher, Rauschen usw. wären ein Thema. Steht sicher auch viel im 
Datenblatt zum 8-Bit-Betrieb.

mfg mf

von Daniel K. (zaus)


Lesenswert?

Dann müsste ich mit der ADC Clock noch etwas höher gehen.
Mit 20 MHz und eine Prescale von 16 ergeben sich 1,25 Mhz , mit einem 
Prescale von 8 ergeben sich 2,5 MHz. Hat vielleicht schon jemand 
Erfahrungen mit solchen ADC Clock Geschwindigkeiten im 8-bit Betrieb 
gemacht?

Dann hätte ich noch die Frage ob ich in der Schaltung irgend etwas 
machen kann/muss um ein Rauschen bzw. ein Schwanken der Werte zu 
unterdrücken.

von Achim M. (minifloat)


Lesenswert?

Daniel K. schrieb:
> Schaltung irgend etwas
> machen kann/muss um ein Rauschen bzw. ein Schwanken der Werte zu
> unterdrücken.

Das kommt durch den Wandelvorgang von selbst rein. Ein gewisses Zappeln 
in den Werten lässt sich nicht unterdrücken.

Eine Frage wäre, ob du in deiner verarbeitenden Funktion sowieso einen 
Tiefpasscharakter drin haben wirst. Dann kann dir das Zappeln im Grunde 
umso mehr egal sein, umso niedriger die Grenzfrequenz deines digitalen 
Filters ist.

Über den Daumen gepeilt kann man sagen:
Bei einer 10-Bit-Wandlung zappeln die untersten zwei Bits, wenn man so 
auf 100kHz ADC-Frequenz ist und mit 10kΩ in die ADC-Pins speist(eigene 
Erfahrung). Bei 8 Bit/100kHz wäre das ja noch egal. Du planst, mit der 
Geschwindigkeit um den Faktor 10-25 höher zu gehen. Es werden dir also 
4-5 eitere Bits verloren gehen. Effektiv kann man nur von den obersten 
3-4 Bits von einer gewissen Stabilität ausgehen.

Insgesamt würde ich dir also eher zu einem DSP raten, die haben 
schnellere Wandler und mehr Rechenpower.

mfg mf

von bitte löschen (Gast)


Lesenswert?

Mini Float schrieb:
> Ein Wandlungsvorgang braucht eher 15-16 ADC-Takte, wenn mans mit
> Interrupt-Einsprunggedöns usw rechnet. Bei 1MHz ADC-Takt kommt man also
> auf maximal 63kSamples/s.

Der erste Wandlungsvorgang braucht 25 Takte, jeder weitere exakt 13 
Takte:
"A normal conversion takes 13 ADC clock cycles. The first conversion 
after the ADC is switched on (ADEN in ADCSRA is set) takes 25 ADC clock 
cycles in order to initialize the analog circuitry."

Im Free Running Modus erzeugt das einen perfekt gleichförmigen Takt, wie 
ein Timer. Während der Interrupt das eine Sample abarbeitet, wird das 
nächste schon produziert.

von Daniel K. (zaus)


Lesenswert?

Bleibt das Problem, dass ich 8Bit mit einer ADC Clock von 1,25 MHz 
sauber wandeln müsste.

von bitte löschen (Gast)


Lesenswert?

Ausprobieren. R2R-DAC (oder etwas Ähnliches) an Port D, dessen Ausgang 
an den ADC. Ganz langsam anfangen, und die Differenzen und die Streuung 
zwischen den in den R2R-DAC geschobenen und den per ADC eingelesenen 
Werten merken. Dann ADC-Frequenz steigern, bis sich die Werte ändern.

von Achim M. (minifloat)


Lesenswert?

Philipp Klostermann schrieb:
> Der erste Wandlungsvorgang braucht 25 Takte, jeder weitere exakt 13
> Takte:

Dann lass den Mega48 halt warten. Wenn du sonst nicht viel machst.
Für einen Interrupt-Betrieb müssen zwangsweise ein paar Register 
gerettet werden.

mfg mf

von Ulrich (Gast)


Lesenswert?

Das sind 13 Takte des AD Taktes. Der µC selber hat noch 16 mal mehr 
Takte zur verfügung - das reicht auch für einen Interrupt, allerdings 
dann nicht mit 5% Auslastung, sondern eher 50%.

In ASM muss man nur das Statusregister wirklich retten, bei den CPU 
Registern kann man einfach einige für den Interrupts reservieren.

Ob die Schwankungen bei 1,25 MHz AD Takt schon zu groß sind, müsste man 
probieren, es ist jedenfalls schon knapp außerhalb der Spezifikation. 
Ggf. kann man sonst den Takt auf 16 MHz anpassen und kommt so auf 1 MHz 
AD Takt.

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.