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 ?
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
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
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)
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
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.
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
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.
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).
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.