Forum: Mikrocontroller und Digitale Elektronik Schnelligkeit ADC vs I2C


von Björn -. (ratzfatz)


Lesenswert?

Hallo alle zusammen,

ich frage mich was schneller den Rohwert im Mikrocontroller bereitstellt 
( also vom Compiler weiterverarbeitet werden kann )

Wenn ich mir jetzt das Datenblatt des Atmega328p anschaue sehe ich vor 
lauter Bäumen den Wald nicht mehr.
Ich habe für den ADC = "13 - 260 µs Conversion Time" gefunden was Pie 
mal Daumen 3,8 kHz bedeutet und für den I2C soll ja 100 KHz, bzw. 400 
KHz sein.

Heißt das jetzt echt das das wenn ich die Wahl habe ein Bauteil über 
Analog oder I2C auszulesen lieber I2C nehmen sollte wenn diese 
Verbindung Zeitkritisch ist ?

von Ingo (Gast)


Lesenswert?

Der ADC benötigt für eine Wandlung 13,5 ADC Clocks, somit dauert es 
13,5/200000Hz => 67,5us. Das heißt mehr wie 14,8kS/s sind nicht drinn, 
bei 10Bit

von spess53 (Gast)


Lesenswert?

Hi

>Ich habe für den ADC = "13 - 260 µs Conversion Time" gefunden was Pie
>mal Daumen 3,8 kHz bedeutet

Der ATMega kann bei voller Auflösung bis etwa 15kS/s

>und für den I2C soll ja 100 KHz, bzw. 400
>KHz sein.

Und bei 10Bit müssen mindestens 2 Byte über den Bus geschickt werden, 
macht also 100kHz bzw. 400kHz/16. Können aber auch mehr sein. Abgesehen 
davon sagen die 100/400kHz nichts über die Wandlungsgeschwindigkeit des 
ADCs aus, sondern nur wie schnell der Wert ausgelesen werden kann.

MfG Spess

von Walter S. (avatar)


Lesenswert?

Björn ------------ schrieb:
> und für den I2C soll ja 100 KHz, bzw. 400
> KHz sein.

das ist nicht die Wandlungrate, sondern die Datenübertragungsrate.
Mit 100kHz I2C sind bei 10Bit Daten allerhöchstens ca. 7kHz Abtastrate 
drin (je nach Protokoll eher weniger)

von Frank K. (fchk)


Lesenswert?

Auch ein externer ADC wird seine Wandlungszeit benötigen. Manche sind 
schneller (und dafür teuer), manche langsamer und billig. Zu der 
Wandlungszeit kommt dann noch die Transferzeit. Beim internen ADC sind 
das nur zwei Registerzugriffe, also wenige Prozessortakte.

Das ganze hängt von vielen verschiedenen Faktoren ab: Geschwindigkeit 
des DAC, Auflösung,...
Und: SPI ist fast immer schneller.

Ein anderer Grund für externe ADCs: Störungen. So ein Prozessor, der 
viele schnelle Schaltvorgänge hat, kann empfindliche analoge Schaltungen 
sehr leicht stören. Hier ist es günstig, den Prozessor so weit wie 
möglich von dem Analogteil zu trennen und externe ADCs einzusetzen. 
Diese haben weniger Schaltvorgänge, verursachen weniger Störungen und 
haben oft auch bessere technische Daten als die im Prozessor eingebauten 
ADCs. Genaue analoge Schaltungen und schnelle digitale Schaltungen 
benötigen unterschiedliche Halbleiterfertigungsprozesse. Die eingebauten 
ADCs sind deswegen sehr oft nur mittelmäßig.

fchk

von m.n. (Gast)


Lesenswert?

Björn ------------ schrieb:
> Heißt das jetzt echt, dass das, wenn ich die Wahl habe, ein Bauteil über
> Analog oder I2C auszulesen, lieber I2C nehmen sollte

Wenn es schnell gehen soll ist ein externer ADC per SPI die schnellste 
Version. Die Begrenzung liegt beim ATmega, wie schnell er SPI-Daten 
einlesen kann. 100 kS/s sind dabei kein Problem.

von Björn -. (ratzfatz)


Lesenswert?

Hallo
danke schonmal für die vielen antworten.


Fazit ist:
Der ADC ist wirklich langsamer als der I2C.

Aber das mit dem Sensor --> ADC --> SPI --> Mikrocontroller ist ne gute 
idee
b.z.w. ( jetzt neu für mich )
Sensor --> SPI --> Mikrocontroller

von Dieter W. (dds5)


Lesenswert?

Es gibt auch Mikrocontroller mit schnellerem internen A/D Wandler, dann 
würde der Flaschenhals Schnittstelle wegfallen.

Ich kenne mich allerdings mit Atmel nicht aus und weiß nicht ob die so 
was im Programm haben.

von Ingo L. (corrtexx)


Lesenswert?

Dieter Werner schrieb:
> Es gibt auch Mikrocontroller mit schnellerem internen A/D Wandler, dann
> würde der Flaschenhals Schnittstelle wegfallen.
Die Coretex-Controller sind deutlich schneller. Der ADC kann mit 1MS/s 
feuern und die Daten per DMA gleich ins RAM schreiben.

Dieter Werner schrieb:
> Ich kenne mich allerdings mit Atmel nicht aus und weiß nicht ob die so
> was im Programm haben.
Klar, XMega oder ARM-Derivat (SAMxyz nennen die sich glaub ich).

von m.n. (Gast)


Lesenswert?

Ingo Less schrieb:
> Die Coretex-Controller sind deutlich schneller. Der ADC kann mit 1MS/s
> feuern

Na hoffentlich verbrennen die dabei nicht :-(

Hier geht es um ATmega328, den man auch mit 1 MS/s betreiben kann. 5 - 6 
Bits sind dann noch brauchbar.

von Peter D. (peda)


Lesenswert?

Björn ------------ schrieb:
> Heißt das jetzt echt das das wenn ich die Wahl habe ein Bauteil über
> Analog oder I2C auszulesen lieber I2C nehmen sollte wenn diese
> Verbindung Zeitkritisch ist ?

Nö.
Das I2C kostet Dich richtig viel Zeit, wärend der Du nichts anderes 
machen kannst. Auch I2C als Interrupt bringt kaum was, da der ganze 
Interrupt-Overhead bei jedem Byte hinzu kommt. Und es sind ja mindestens 
5 Byte nötig (Adresse+W, ADC-Startbyte, Adresse+R, Daten-low, 
Daten-high).

Dagegen schreibt Dir der interne ADC das Ergebnis direkt in 2 Register 
und wärend der nächsten Wandlung kannst Du den Wert schon bearbeiten.

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.