Forum: Mikrocontroller und Digitale Elektronik Sinnvolle Grenzen von ADC/UART


von Marc S. (darkchaos)


Lesenswert?

Ich möchte erörtern, bis zu welcher Samplerate man effektiv einen 
ATMega8 o.ä. als billigen Sampler verwenden kann.

Was ich schon herausgefunden habe:
> Nur bis zu einem ADC-Takt von 200 kHz, werden die ADC-
Spezifikationen von Atmel garantiert. Damit ergibt sich eine
maximale Samplerate von 15,384 kHz

Das kommt daher, dass eine Conversion ja 13 Zyklen dauert. Wie ich 
jedoch gelesen habe, kann man dan 50kHz-200kHz Bereich verlassen, büßt 
aber dafür Genauigkeit ein. Gibt es Erfahrungswerte in wie weit man 
gehen kann, bis man nur noch 8 statt der 13bit Genauigkeit hat?

Mein eigentliches Ziel wären 250kS/s, das wären aber 3.25 MHz ADC Takt, 
das wäre vermutlich an sich gerade noch machbar, zB 8 MHz Takt und 2 als 
Prescaler, aber ob ich da nicht bei 4bit oder schlimmer lande, lässt 
sich vermutlich nur messen. Wobei ist es nicht eher so, dass ich nicht 
"nur" 4bit habe, sondern die Spannung an sich unbrauchbar wird, so dass 
zB eine geringe Spannung gemessen wird, weil die Zeit nicht reicht um 
die Spannung zu stabilisieren.

Dann auf der anderen Seite: 250kS/s bei uint8_t heißt ja auch 250kB/s 
Datenübertragung. UART sollte das an sich hinbekommen, aber wie sieht es 
da beim Übertragen von einzelnen Zeichen aus. Der AtMega hat zwar eine 
HW UART, aber kann ich da wirklich jeden 13ten Takt ein Byte 
reinschreiben? Und wie sieht es weiter mit den USB Seriell Wandler aus?

Ich hab ja bei 8n1 quasi 10 Bauds pro Byte, heißt auch 2.5MBaud/s, jetzt 
sagt das AVR-GCC Tutorial:
>Es sind Baudraten bis über 115200 Baud möglich, je nach Controller und 
CPU-Frequenz. Siehe Datenblatt.

Das Datenblatt selbst sagt BAUD = f_osc / (2UBRR + 1) für den 
Synchronous Master Mode, anstelle von 8 oder 16 als Vorfaktor wie bei 
den Asynchronen Modi. Das heißt, im Idealfalle könnte ich bei den 8 MHz 
Takt auf 4 MBaud/s kommen, das ist aber wesentlich mehr als die 
angegebenen 115200 Baud, gibt es da ein Limit welches ich übersehen 
habe?

Okay, 250kS scheinen also weit außerhalb der Limits, gibt es noch 
einfache andere Methoden? zB ein "vernünftiger" ADC mit SPI/I2C oder so 
an einen dezidierten UART Chip (am besten gleich mit integriertem 
Seriell USB Wandler) anflanschen und den (eigentlich unnötigen) µC 
dadurch einsparen?

Wenn ja, wie gehe ich bei der Bauteilauswahl vor? Ich habe zB mal den 
ADC0820 angeschaut, aber da steht im Datenblatt nichts von einer 
Samplerate. Gefunden habe ich nur t_RD ReadTime 600ns und t_CRD 
(Conversion from RD Mode) 2.5µS.

von Blue (Gast)


Lesenswert?

probiers halt aus! Wenn der ADC per Sukzessiver Aproximation 
funktioniert, wäre der Rückgang der Bittiefe reziprok zur Übertaktung

von Minimalist (Gast)


Lesenswert?

Marc S. schrieb:
> einen ATMega8 o.ä. als billigen

Da liegt der Hase im Pfeffer.  Der Mega8 als Dino kann in der Liga nicht 
mitspielen. Ein zeitgemäßer AVR schon. Mein aktueller default ist z.B. 
der Tiny1616, kostet unter 1€, auch in kleinmengen.
Der hat 2ADC on board mit je 150ks/s@8bit. Im "überschlagenden Einsatz" 
sind 250ks/s damit machbar. Sogar durch das event System mit geringer 
CPU Load,  da die conversions per Timer getriggert werden können.

von Karl M. (Gast)


Lesenswert?

Wie kommst Du auf "13bit Genauigkeit"?

von Bernd (Gast)


Lesenswert?

Marc S. schrieb:
> Ich habe zB mal den
> ADC0820 angeschaut, aber da steht im Datenblatt nichts von einer
> Samplerate. Gefunden habe ich nur t_RD ReadTime 600ns und t_CRD
> (Conversion from RD Mode) 2.5µS
Ohne jetzt das Datenblatt gelesen zu haben, kann man ja mal die Zeiten 
addieren (=3,1µs) und das Reziprok bilden: 322,5 kHz
Ob die Abtastrate tatsächlich nutzbar ist, sollte sich mit dem 
Datenblatt rausfinden lassen.

von Dampfheuler (Gast)


Lesenswert?

Was soll es den ADC am Maximum laufen zu lassen ? Und dann ? In die 
Tonne mit den Werten ?

von Marc S. (darkchaos)


Lesenswert?

Blue schrieb:
> probiers halt aus!

Aber wie genau? Ich nehme an ich kann nicht einfach den ADC auf 5V 
ziehen und so schnell abtasten und prüfen ob immer 0xFF rauskommt, 
sondern ich bräuchte idealerweise einen Sinus bei 125 kHz dafür?

Minimalist schrieb:
> Der hat 2ADC on board mit je 150ks/s@8bit. Im "überschlagenden Einsatz"
> sind 250ks/s damit machbar.
Das klingt schonmal eher nach einem Plan! Die Tinys gibts aber 
vermutlich nicht als DIP/Ohne SMD? Gäbe es alternative AVRs die 
aktueller sind?

Karl M. schrieb:
> Wie kommst Du auf "13bit Genauigkeit"?
Indem ich nicht genau aufgepasst habe, sind natürlich 10bit, d.h. man 
wäre noch schneller an den 8bit angekommen

Bernd schrieb:
> Ohne jetzt das Datenblatt gelesen zu haben, kann man ja mal die Zeiten
> addieren (=3,1µs) und das Reziprok bilden: 322,5 kHz
> Ob die Abtastrate tatsächlich nutzbar ist, sollte sich mit dem
> Datenblatt rausfinden lassen.

Mein Problem ist, ich weiß nicht auf welche Werte ich dort achten muss, 
denn es gibt zB auch eine "Write" Time, aber da gehe ich davon aus, das 
ist für die Kommunikation via I2C o.ä, aber mehr Ahnung hab ich leider 
auch nicht.

Dampfheuler schrieb:
> Was soll es den ADC am Maximum laufen zu lassen ? Und dann ? In die
> Tonne mit den Werten ?

Genau deswegen der Titel "Sinnvolle Grenzen". Ausloten ob er die Vorgabe 
erreichen kann oder nicht.

von Dampfheuler (Gast)


Lesenswert?

>Genau deswegen der Titel "Sinnvolle Grenzen". Ausloten ob er die Vorgabe
erreichen kann oder nicht.


Genau. Es gibt Leute, die "muessen" eine Regelung mit 64bit float laufen 
lassen. Da ist amn dann mit 10 Hz schon zufrieden.

von Marc S. (darkchaos)


Lesenswert?

Dampfheuler schrieb:
> Genau. Es gibt Leute, die "muessen" eine Regelung mit 64bit float laufen
> lassen. Da ist amn dann mit 10 Hz schon zufrieden.

Klingt als fragst du nach dem Grund. Ich möchte ein 125kHz Signal 
abtasten und am Rechner dann Demodulieren, da brauche ich eine so hohe 
Samplerate leider, sonst funktioniert es nicht

von Martin S. (led_martin)


Lesenswert?

Eventuell könntest Du mehrere AVRs nehmen, diese miteinander 
synchronisieren, so daß die ADC-Abtastungen ineinandergreifen, die 
Bandbreite der analogen Eingansschaltung hat da durchaus Spielraum, 
besonders wenn man die geforderte maximale Ausgangsimpedanz der 
Ansteuerung (Beim ATmega 10k Ohm) merklich unterschreitet. Das Problem 
der Datenübertragung hast Du dann immer noch. Bei einem mit 20 MHz 
getakteten ATmega kommt man, im Asynchronous Double
Speed mode, auf maximal 2,5 MBaud, das würde bei 8 Bit Daten, und 
Verzicht auf das Parity-Bit gerade so für 250000 Bytes/Sekunde reichen, 
eventuell könnte man die Übertragung aber auch auf 2 Strecken aufteilen, 
da müsste man die Datenblöcke nur mit einer Nummerierung versehen, damit 
der PC das wieder korrekt zusammenführen kann.

Mit freundlichen Grüßen - Martin

von Bernd (Gast)


Lesenswert?

Marc S. schrieb:
> Ich möchte ein 125kHz Signal
> abtasten und am Rechner dann Demodulieren, da brauche ich eine so hohe
> Samplerate leider, sonst funktioniert es nicht
Das wird mit den kleinen Atmels eher nichts. Der ADC sind eher für DC 
bzw. langsame Signale gedacht. Außerdem fehlt die schnelle Schnittstelle 
zum PC.

Ich würde vorschlagen, Du verwendest einfach eine Soundkarte mit 384 kHz 
Abtastrate.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Wie Bernd schon schrieb sind AVRs dafür nicht geeignet.
Aber ein STM32F070/F042 wäre es.
Der hat einen 1MS/s ADC und USB auch direkt eingebaut.
Wäre also deine angeforderte ein Chip Lösung.

von Bernd K. (prof7bit)


Lesenswert?

Marc S. schrieb:
> als billigen Sampler

EFM8BB1xxx

12 Bit: 200k/s
10 Bit: 800k/s

Preis < 50 Cent und < 30 Cent bei Stückzahlen.

--

Wie Du ausgerechnet einen ATMega und "billig" in einem Satz erwähnen 
kannst ist mir schleierhaft.

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.