Forum: Mikrocontroller und Digitale Elektronik SPI-Kommunikation von AD-Wandler zu Raspberry Pi


von EGSler (Gast)


Angehängte Dateien:

Lesenswert?

Ich möchte einen AD7609 an einen Raspberry (mit Raspbian) anschließen 
und habe mittlerweile auch alles auf dem Tisch liegen.
Nun habe ich allerdings bisher nicht viel Erfahrung damit, in der 
Ausbildung haben wir keine SPI-Kommunikation aufgebaut.

Für den bcm2835 des Raspberry gibt es eine lib 
(http://www.airspayce.com/mikem/bcm2835/), die direkt in C die Nutzung 
von SPI Befehlen erlaubt, allerdings werden da immer einzeln 8-bit 
eingelesen.
Der AD7609 sendet allerdings über SPI alle 8 Kanäle mit jeweils 18bit 
direkt nacheinander (im Datenblatt S.26/27).
Da bringt mir diese Lib nicht viel, oder?
Dazu kommen ja nocht ein paar Punkte, wie z.B. senden eines 
Conversion-Start-Impuls, auslesen vom Busy-Flag usw.

Muss ich mir jetzt die komplette Kommunikation selber konfigurieren? 
Oder gibt es zu solchen ICs für gewöhnlich schon fertige Librarys, und 
ich finde sie nur nicht?^^

Ich hoffe, mir kann da jemand den ein oder anderen hilfreichen Tipp 
nennen ;)

Viele Grüße
EGSler

von Karl H. (kbuchegg)


Lesenswert?

EGSler schrieb:

> allerdings werden da immer einzeln 8-bit
> eingelesen.

Na, passt doch.

> Der AD7609 sendet allerdings über SPI alle 8 Kanäle mit jeweils 18bit
> direkt nacheinander (im Datenblatt S.26/27).

Der AD 'sendet' von sich aus überhaupt nichts. Der Pi ist es, der die 
Übertragung steuert. Wenn der nach jeweils 8 Bit eine kleine Pause 
einlegt, bis er den nächsten SPI Takt-Puls auf die Leitung legt, dann 
muss sich der AD danach richten.

Du liest einfach eine entsprechende Anzahl an Bytes (jeweils 8 Bit) 
hintereinander ein und setzt dir aus diesen Bytes die 18 Bit Daten 
wieder selbst zusammen. Alles was du tun musst ist: darauf achten, dass 
dir der Pi die CS Leitung nicht versaut.
CS geht auf Low
entsprechende Anzahl an Bytes einlesen
CS geht wieder auf High

Aus den Bytes (die du zb in einem Array gesammelt hast), mit 
Bitoperationen die 18 Bit Einheiten wieder zusammensetzen.

von PittyJ (Gast)


Lesenswert?

So wie ich den Schaltplan vom Raspi lese, sind auf dem 26-poligen GPIO 
Sockel doch auch die SPI-Signale (Clock, Mosi Miso und 2 Chip-Enable).

Damit sollten doch SPI-Geräte direkt angeschlossen werden können?

Unter Linux kann man auch /dev/spiXXX öffnen, und mit ioctl() Transfers 
auslösen.

von EGSler (Gast)


Lesenswert?

Karl Heinz schrieb:
> Aus den Bytes (die du zb in einem Array gesammelt hast), mit
> Bitoperationen die 18 Bit Einheiten wieder zusammensetzen.
Stimmt, das ergibt irgendwo Sinn, dann erscheint das plötzlich doch 
nicht mehr so kompliziert. Das sollte machbar sein =)

@ PittyJ
Ja, die herausgeführte SPI0-Schnittstelle verwende ich.
Ok, die von Linux integrierte Funktion kannte ich nicht, bin ich bisher 
bei meinen Recherchen komischerweise nicht drüber gestolpert. Ich werd 
mir das mal ansehen ;)

von EGSler (Gast)


Lesenswert?

Zum Zusammensetzen der Bytes habe ich noch eine kleine Frage.
Für meinen Kanal1 mit 18 bit brauch ich die ersten beiden Bytes der 
Übertragung komplett und vom dritten Byte die beiden höchstwertigen Bits 
(Übertragung mit MSB first).

Wenn ich mir das dann so zusammenstückel, sollte das funktionieren, 
nicht wahr? Da werden beim Verschieben der Bits keine Nullen 
nachgeschoben, sodass ich mir die bereits drinstehenden Daten nicht 
überschreibe, richtig?
1
long Ch1 = (Byte0 << 10) + (Byte1 << 2) + (Byte2 >> 6)

Ach moment, führt der Compiler bei dieser Operation intern vielleicht 
eine Veroderung durch? Zumindest ergäbe das für mich gerade Sinn...^^

von Noch einer (Gast)


Lesenswert?

Für den MCP3008 beschreibt ein Tutorial die Zusammenhänge.
https://learn.adafruit.com/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi/overview

Zumindest arbeitet der auch mit SPI. So viel anders kann es nicht sein.

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.