Atmega48 ADC

OP #2643475
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.
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
OP
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.
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
Gast
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.
Gast
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.
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.