Forum: Mikrocontroller und Digitale Elektronik SPI von Arduino Nano für AD7176-2 schnell genug?


von Stefan S. (zebuh)


Lesenswert?

Hallo,

ich möchte den AD-Umsetzer AD7176-2 von Analog Devices mit dem Arduino 
Nano mittels SPI auslesen. Bevor ich jetzt allerdings einen Fehler 
mache, wollte ich fragen ob das überhaupt möglich ist. Ich habe nicht 
wirklich Daten über die Geschwindigkeit des SPI des Arduino gefunden. 
Normalerweise sollte es gehen, oder?

AD7176-2: 
http://www.analog.com/en/analog-to-digital-converters/ad-converters/ad7176-2/products/product.html

Arduino Nano: http://arduino.cc/de/Main/ArduinoBoardNano#.UzAx5YXLJko

Gruß

Stefan

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Stefan S. schrieb:
> Ich habe nicht wirklich Daten über die Geschwindigkeit des SPI des
> Arduino gefunden. Normalerweise sollte es gehen, oder?
SPI selber ist ein statischer Bus, den ich sogar mit Tastern bedienen 
und auslesen könnte. Die eigentliche Frage ist doch eher: welche 
Geschwindigkeit brauchst du oder dein System?

von Stefan S. (zebuh)


Lesenswert?

Das ist mir schon bewusst. Der ADC hat eine Output Rate von 5 SPS bis zu 
250 kSPS. Ich würde ihn schon gerne schnellstmöglich auslesen. Was wäre 
denn die maximale Geschwindigkeit was der Arduino noch schaffen würde?

von chris (Gast)


Lesenswert?

Stefan S. schrieb:
> Was wäre
> denn die maximale Geschwindigkeit was der Arduino noch schaffen würde?

1 bit / 2 CPU Oszi-Perioden

von Stefan S. (zebuh)


Lesenswert?

Bzw wo kann ich herausfinden wie schnell das SPI des Arduino ist?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Stefan S. schrieb:
> Bzw wo kann ich herausfinden wie schnell das SPI des Arduino ist?
Du kannst mal im Datenblatt deines Controllers nachschauen. Und dann 
im Schaltplan deines Arduino, welche Pins da am SPI angeschlossen 
sind. So ein "Arduino" ist nämlich nur ein uC, der auf eine Platine 
gelötet wurde, und dazu passende Bibliotheken geliefert bekommt.

Die beiden kursiv geschriebenen Informationsträger brauchst du 
zwingend für eine halbwegs sinnvolle Programmierung. Und dann noch das 
Handbuch für die verwendeten Bibliotheken (in deinem Fall sind das die 
Arduino-Bibliotheken). Und dann findest du blitzschnell das hier:
http://arduino.cc/de/Reference/SPI#.UzBGnoVCJ8E
Und da steht dann evtl. sowas drin:
1
SPI.setClockDivider() allows you to change the clock speed to make 
2
your device working properly (default is 4MHz).

> Ich würde ihn schon gerne schnellstmöglich auslesen.
Warum? Ist das unbedingt nötig?
Auch wenn mein Auto locker 180 läuft, fahre ich trotzdem nur mit 80 ins 
Geschäft...

: Bearbeitet durch Moderator
von Kein Name (Gast)


Lesenswert?

Die SPI-Hardware ist da nicht das Problem. Du hast aber nur 30 
Machinenbefehle um einen Messwert zu verarbeiten. ATmega328 in Assembler 
wahre da möglich. Mit der bequemen Arduino Library eher nicht.

von Thomas (Gast)


Lesenswert?

Rausfinden kann man solche Daten AUF KEINEN FALL NIEMALS NICHT im 
Datenblatt des verwendeten ICs!

Für den Arduino (Uno) den du wahrscheinlich meinst ist es wahrscheinlich 
das Datenblatt des Atmega 328P, das gibt es hier: 
http://www.atmel.com/Images/doc8161.pdf

Und dort steht auf Seite 174 die Konfiguration des SPIs - als 
Maximumtakt gibt es da zu lesen 'fosc/2'.

Thomas

von Thomas (Gast)


Lesenswert?

@Kein Name:
Theoretisch sollte man auch mit Arduino die Library weglassen, im 
Assembler den SPI-Takt auf fosc/2 (also 8 MHz) bringen und mit 
Inline-Assembler die Daten verarbeiten können.
Da das wohl eher etwas mehr Programmierkentnisse braucht: Nimm nen 
dickeren uC - gibt doch sicher was von STM32/ARM :-)

Thomas

von Chris M. (yoblid) Benutzerseite


Lesenswert?

Stefan S. schrieb:
> er ADC hat eine Output Rate von 5 SPS bis zu
> 250 kSPS. Ich würde ihn schon gerne schnellstmöglich auslesen. Was wäre
> denn die maximale Geschwindigkeit was der Arduino noch schaffen würde?

Mit

SPI.setClockDivider(SPI_CLOCK_DIV2);

läuft der SPI des Arduino mit 8 MHz clock rate.

Ich habe mir deinen ADC nicht angeschaut, aber wenn die Wortlänge zum 
Übertragen eines Samples nicht > 32 bit ist, sollte das mit den 250 kSPS 
funktionieren.

von GhostElec (Gast)


Lesenswert?

Hallo,

standardmäßig sind das bei allen Arduino's 4MHz für den SPI Bus. 
Vollkommen ausreichend. Ich sag nur: 
http://forum.arduino.cc/index.php?PHPSESSID=kabdbobdkgp3pb76h2m5p78js0&board=31.0
Oben hast eine Befehlsreferenz zu allen.

von Kaj (Gast)


Lesenswert?

Thomas schrieb:
> Nimm nen
> dickeren uC - gibt doch sicher was von STM32/ARM :-)
Um bei Arduino zu bleiben: Der Arduino Due (Atmel SAM3EXE Cortex-M3) 
:-)

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.