analog/digital wandler mit spi · spi betrieb 7 der spi-bus kann mit einem einzigen master-gerät...
TRANSCRIPT
![Page 1: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/1.jpg)
Analog/Digital Wandler mit SPI
Raspberry Pi
![Page 2: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/2.jpg)
Aufbau
2
Serial Peripheral Interface
Analog-Digital Wandlung
Die Aufgabe
Die Lösung
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 3: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/3.jpg)
Serial Peripheral Interface
3 06.01.2014 Jose Gutierrez & Ole Gebert | Embedded Software
![Page 4: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/4.jpg)
Serial Peripheral Interface - Theorie
4
SPI ist ein Bus-System mit einem „lockeren“ Standard für
einen synchronen seriellen Datenbus entwickelt von
Motorola
Hohe Taktfrequenzen möglich (MHz-Bereich)
Master-Slave-Prinzip
Ein oder mehrere Slave-Geräte, nur ein Master
4-Leitung Seriell Bus
06.01.2014 Jose Gutierrez & Ole Gebert | Embedded Software
![Page 5: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/5.jpg)
SPI Leitungen
5
SCLK: Serial Clock
MOSI: Master Output, Slave Input
MISO: Master Input, Slave Output
SS: Slave Select
06.01.2014 Jose Gutierrez & Ole Gebert | Embedded Software
![Page 6: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/6.jpg)
SPI Leitungen
6
Daisy-Chain
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
Drei unabhängige Slaves
![Page 7: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/7.jpg)
SPI Betrieb
7
Der SPI-Bus kann mit einem einzigen Master-Gerät und einem
oder mehreren Slave-Geräten arbeiten.
Wenn ein einzelnes Slave-Gerät verwendet wird, kann der SS-
Pin auf logisch Null festgesetzt werden, solange der Slave es
erlaubt.
Mit mehreren Slave-Geräten, benötigt man unabhängige SS-
Signale für jedes Gerät.
Die meisten Slave-Geräte haben Tri-State-Ausgänge, damit ihr
MISO Signal hochohmig wird, wenn das Gerät nicht aktiv ist.
06.01.2014 Jose Gutierrez & Ole Gebert | Embedded Software
![Page 8: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/8.jpg)
SPI Datenübertragung
8
Um die Übertragung zu starten, setzt das Master-Gerät die
Taktfrequenz fest.
Der Master überträgt eine logische Null über die CS-Leitung,
um eine Slave auszuwählen.
In jedem Taktzyklus, passiert eine Full-Duplex-Übertragung.
Eine Datenübertragung kann eine beliebige Anzahl von
Taktzyklen haben, solange es Daten zu übertragen gibt. Wenn
es keine Daten mehr gibt, stoppt der Master die Umschaltung
des Taktes.
Datenübertragungen bestehen oft aus 8-Bit-Wörter, aber
andere Wortgröße sind auch üblich.
06.01.2014 Jose Gutierrez & Ole Gebert | Embedded Software
![Page 9: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/9.jpg)
SPI Datenübertragung
9
Datenübertragungen umfassen normalerweise zwei
Schieberegister einer gegebene Wörtergroße, eines in dem
Master und eines in dem Slave. Sie sind in einem Ring
verbunden. Daten werden üblicherweise mit dem MSB zuerst
verschoben.
06.01.2014 Jose Gutierrez & Ole Gebert | Embedded Software
![Page 10: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/10.jpg)
SPI Betriebsmodi
10
CPOL: Clock Polarity
CPHA: Clock Phase
Bei CPOL = 0 ist der Basiswert des Taktes ist Null.
Für CPHA = 0 werden die Daten bei steigender Flanke des Taktes erfasst und die Daten werden auf eine fallende Flanke propagiert.
Für CPHA = 1 werden die Daten auf fallende Flanke des Taktes erfasst und die Daten werden bei einer steigenden Flanke propagiert.
Bei CPOL = 1 ist der Basiswert des Taktes ist Eins.
Für CPHA = 0 werden die Daten auf fallende Flanke des Taktes erfasst und die Daten werden bei einer steigenden Flanke propagiert.
Für CPHA = 1 werden die Daten bei steigender Flanke des Taktes erfasst und die Daten werden auf eine fallende Flanke propagiert.
06.01.2014 Jose Gutierrez & Ole Gebert | Embedded Software
![Page 11: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/11.jpg)
SPI Betriebsmodi
11 06.01.2014 Jose Gutierrez & Ole Gebert | Embedded Software
Mode CPOL CPHA
0 0 0
1 0 1
2 1 0
3 1 1
![Page 12: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/12.jpg)
Vor- und Nachteile
12
Vorteile
Full duplex.
Höheren Durchsatz als I2C oder SMBus.
Flexibilität
Nicht auf 8-Bit-Worte beschränkt.
Willkürliche Auswahl der Nachrichtengröße, Inhalt und Zweck.
Einfache Hardware Zusammenschaltung.
Typischerweise geringere Leistungsanforderungen als I2C oder SMBus durch weniger Schaltkreis.
Slaves verwenden den Takt des Masters.
Slaves brauchen keine Adressierung.
Transceivers werden nicht benötigt.
Maximal ein eindeutiges Bus-Signal pro Gerät (Chip select).
Signale sind einseitig, einfache galvanische Trennung
Nachteile
Benötigt mehr Pins als I2C.
Keine Hardware Datenflusssteuerung von dem Slave.
Keine Hardware Slave Acknowledgment.
Unterstützt nur ein Master-Gerät.
Keine Fehlerprüfung Protokoll definiert.
Ohne einen formalen Standard.
Nur kurze Distanzen, viel weniger als RS-232, RS-485 oder CAN-Bus Protokolle.
06.01.2014 Jose Gutierrez & Ole Gebert | Embedded Software
![Page 13: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/13.jpg)
Analog-Digital-Wandlung
13 Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 14: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/14.jpg)
Analog-Digital-Wandlung
Allgemeines
14
Themen:
Die Theorie
Die Verfahren
Der MCP3008
Die Funktionalität
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 15: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/15.jpg)
Analog-Digital-Wandlung – Die Theorie
15
Analoges Signal wird abgetastet, wobei die Abtastfrequenz
über die Genauigkeit entscheidet
Also: Je größer die Abtastfrequenz im Bezug auf das Eingangssignal,
um so genauer kann das Signal reproduziert werden (?)
Nicht ganz: Die Bitrate entscheidet dabei über die Höhe des
Dynamikbereiches
Nyquist-Shannon-Abtasttheorem: Abtastfrequenz >= 2x Frequenz des
Eingangssignal
Der Vorgang der Digitalisierung eines Werte wird
Quantisierung genannt
Das Ergebnis sind einheitslose Digitalwerte, die mit Hilfe eines
Referenzwertes gedeutet werden können (s. MCP3008)
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 16: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/16.jpg)
Analog-Digital-Wandlung - Verfahren
16 Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
Flash-Wandler:
Hohe Abtastrate bis über 1000 Msps
Geringe Auflösung bis etwas über 10 Bit
Pipeleine-Wandler:
Etwas geringere Abtastrate als Flash-Wandler
Höhere Auflösung bis etwas 14 Bit
Slope-Wandler
Abtastraten nur im Ksps Bereich
Auflösungen bis 17 Bit
Sigma-Delta-Wandler
Abtastraten unter 10 Msps
Höchste Datenauflösung bis 20 Bit
SAR-Wandler
Geringe Abtastrate bis zu 1 Msps
Hohe Auflösung bis zu 17 Bit
![Page 17: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/17.jpg)
Analog-Digital-Wandlung - Verfahren
17
Parallelumsetzer (Flash-Wandler)
Viele Comparatoren und entsprechend viele Spannungsteiler. Ein Eingang der Comparatoren hat die Uin der andere die entsprechende Abteilung von UREF
Pipeline-Wandler
Mehrstufiger A/D Wandler, bestehend aus mehreren Parallelumsetzern, was höhere Auflösungen ermöglicht bei ähnlich hohen Abtastraten
Slope-Verfahren
Uin wird mit einem Sägezahnverglichen, dieser Start bei 0 V und steigt an bis er gleich Uin ist. Im Hintergrund läuft ein Zähler, der beim Erreichen von Uin, den Spannungswert weiter gibt und dann für den nächsten Wert resetet wird
Sigma-Delta-Wandler
Im einfachsten Fall steht 1 für steigende Spannung und 0 für fallende Spannung, was die Analog-Kurve in einem Zickzack-Muster nachstellt
SAR-Verfahren
Später genauer Erklärt
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 18: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/18.jpg)
Analog-Digital-Wandlung – MCP3008
18
10 Bit Auflösung:
210 Bitkombinationen = 1024
Pins:
VDD Spannungsversorgung (3,3 V)
VREF Referenzspannung (3,3 V)
AGND Analoge Masse
CLK Serial Clock
DOUT Serial Data-Out (vom MCP3008)
DIN Serial Data-In (vom Raspberry Pi)
! CS/SHDN Chip-Select, Low-Aktiv / Shutdown Input
DGND Digitale Masse
CHX Analoger Eingang X, Channel X
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 19: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/19.jpg)
Analog-Digital-Wandlung – MCP3008
19
Durch die Referenzspannung und die Anzahl der
Bitkombinationen lässt sich der Spannungssprung von einem
zum nächsten Bitwert berechnen
U = UREF / 1024 = 3,3 V / 1024 = 0,003223 V = 3,2 mV
Als Beispiel: wir empfangen am Raspberry Pi einen Wert von 42, d.h.
am analogen Eingang liegt eine Spannung von U = 42 * 3,2 mV =
0,1344 V an.
Info zum Fotowiderstand: Je stärker die Beleuchtung um so
geringer der elektrische Wiederstand
Der MCP3008 kann bis zu eine Umwandelrate von 200ksps
arbeiten (sps = samples per second)
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 20: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/20.jpg)
Analog-Digital-Wandlung - Funktionalität
20
DAC = Digital Analog Wandler
SAR = Successive Approximation Register
Ablauf:
Über das Sample-and-Hold Glied wird Uin geholt
Im Comparator wird die analoge Eingangsspannung mit VREF/2 verglichen – Im ersten Durchlauf wird das MSB auf 1 (Uin > UREFVergleich) oder auf 0 (Uin < UREFVergleich) gesetzt
Darauf hin wird VREFVergleich halbiert und im DAC zum Comparator zurückgegeben für den nächsten Vergleich. Je nach Ausgang des Vergleiches wird VREFVergleich/2 vom vorherigen UREFVergleich abgezogen oder zuaddiert – Ist Uin > UREFVergleich wird das nächste Bit auf 1 gesetzt. Dies geschieht solange bis das LSB erreicht ist
Die Anzahl der gesetzten Bits ist gleich der Auflösung (hier 10 Bit)
Zum Schluss wird ein neues Uin aus der Sample-and-Hold Schaltung geholt
Pro Bit wird ein Taktzyklus gebraucht
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 21: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/21.jpg)
Analog-Digital-Wandlung - Funktionalität
21 Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 22: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/22.jpg)
MCP3008 und SPI
22
Zu Beginn muss der !CS Pin von HIGH auf LOW gezogen
werden um Kommunikation zu initialisieren
Die erste Clock wo DIN HIGH ist während !CS auf LOW
gezogen ist stellt den Start dar
Als nächstes folgt das SGL/!DIFF Bit welches bestimmt in
welchem Mode die Eingänge Betrieben werden (1 = single
ended, 0 = differential)
Danach wird über D2, D1, D0 der Channel angewählt (Bei uns
single-ended CH0 = 1 0 0 0)
Nun ist DIN Don‘t Care. Bei der nächsten fallenden Falke wird
DOUT LOW ausgeben. Die nächsten 10 Bit sind die Daten (MSB
first)
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 23: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/23.jpg)
MCP3008 – SPI Mode 0
23 Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 24: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/24.jpg)
MCP3008 mit Microcontrollern
24
Da viele Microcontroller in Byte Schritten arbeiten (8 Bit)
pausiert die Clock alle 8 Takte
So ist zu beachten, dass bei dem 10 Bit Wert die ersten zwei
Bits noch im vorherigen Datenblock liegen
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 25: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/25.jpg)
Die Aufgabe
25 Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 26: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/26.jpg)
Die Aufgabe
26
Bestimmen Sie die am Fotowiderstand abfallenden
Spannungen. Nutzen Sie hierfür den MCP3008 A/D Converter
und lesen Sie diesen über seine SPI Schnittstelle aus.
Das zu schreibende Programm soll in C (wenn möglich)
objektbasiert programmiert werden und ohne die Nutzung der
wiringPi Bibliothek arbeiten.
Optional: Wenn um den Fotowiderstand herzu zu dunkel wird
soll eine LED auf dem Testboard eingeschaltet werden.
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 27: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/27.jpg)
SPI Einstellungen
27
sudo nano /etc/modprobe.d/raspi-blacklist.conf
blacklist spi-bcm2708 -> #blacklist spi-bcm2708
sudo reboot
ls /dev/spidev*
/dev/spidev0.0 /dev/spidev0.1
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 28: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/28.jpg)
SPI Einstellungen
28
Includes:
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/types.h>
#include <linux/spi/spidev.h>
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 29: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/29.jpg)
SPI Einstellungen
29
spidev.h
struct spi_ioc_transfer {
__u64 tx_buf; /* Zeiger zu ein Buffer */
__u64 rx_buf; /* Zeiger zu ein Buffer */
__u32 len; /* Länge von tx und rx Buffers */
__u32 speed_hz; /* Übertragungsfrequenz */
__u16 delay_usecs; /* Verzögerung nach die letzte
Bitübertragung */
__u8 bits_per_word; /* Bits pro Wort */
__u8 cs_change;
__u32 pad;
};
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 30: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/30.jpg)
SPI Einstellungen
30
spidev.h Makros für ioctl():
SPI_IOC_WR_MODE
SPI_IOC_WR_BITS_PER_WORD
SPI_IOC_WR_MAX_SPEED_HZ
SPI_IOC_MESSAGE(N)
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 31: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/31.jpg)
SPI Einstellungen
31
Spi Initialisierung:
static uint8_t mode = 0; // CPOL = 0, CPHA = 0
static uint8_t bpw = 8; // 8 bits per word
static uint32_t speed = 1000000; // Up to 1MHz clock frequency
static uint16_t delay = 0; // No delay after last bit transfer
fd = open("/dev/spidev0.0", O_RDWR); // Device 0, CS0
ioctl (fd, SPI_IOC_WR_MODE, &mode);
ioctl (fd, SPI_IOC_WR_BITS_PER_WORD, &bpw);
ioctl (fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed);
06.01.2014 Jose Gutierrez & Ole Gebert | Embedded Software
![Page 32: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/32.jpg)
SPI Einstellungen
32
Übertragung: Full- oder Halb-Duplex
Halb-Duplex: read() and write() Befehle.
Full-Duplex: ioctl() Befehl.
Full-Duplex:
struct spi_ioc_transfer tr;
ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 33: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/33.jpg)
Aufbau
33
Raspberry Pi Pins MCP3008
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 34: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/34.jpg)
Aufbau
34 Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 35: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/35.jpg)
Hilfestellungen
35
uint8_t spiData[3];
spiData[0] = 1; //start bit
spiData[1] = 0x80; //single-ended, channel 0 of the MCP3008
spiData[2] = 0; //"don't care bits"
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 36: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/36.jpg)
GPIO Steuerung
36
Beispiel für GPIO15:
Initialisierung:
Export GPIO:
– fd = open("/sys/class/gpio/export", O_WRONLY);
– write(fd, "15", sizeof("15"));
– close(fd);
GPIO als Ausgang:
– fd = open("/sys/class/gpio/gpio15/direction", O_WRONLY);
– write(fd, “out", sizeof(“out"));
– close(fd);
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 37: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/37.jpg)
GPIO Steuerung
37
Beispiel für GPIO15:
Steuerung:
GPIO schalten:
– fd = open("/sys/class/gpio/gpio15/value", O_WRONLY);
– write(fd, “1", sizeof(“1")); // “1”: Auf, “0”: Aus
– close(fd);
Am Ende:
Unexport GPIO:
– fd = open("/sys/class/gpio/unexport", O_WRONLY);
– write(fd, "15", sizeof("15"));
– close(fd);
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 38: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/38.jpg)
GPIO Steuerung
38
myPins.h und myPins.c:
typedef struct pin_struct{
PinClass *class;
int pinNumber;
int pinMode;
} PinInstance;
Konstruktor:
//pinNumber: GPIO number
//pinMode: INPUT or OUTPUT
Pin newPin(int pinNumber, int pinMode);
typedef struct pin_class{
int (*init)(Pin aPin);
int (*remove)(Pin aPin);
int (*set)(Pin aPin, int pinState);
} PinClass;
06.01.2014 Jose Gutierrez & Ole Gebert | Embedded Software
![Page 39: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/39.jpg)
GPIO Steuerung
39
Benutzung:
Pin led = newPin(15, OUTPUT); //GPIO 15, Ausgang
if(led->class->init(led) < 0){
//Fehlerhandlungsroutine
}
led->class->set(led, ON); //LED auf
led->class->set(led, OFF); //LED aus
led->class->remove(led);
06.01.2014 Jose Gutierrez & Ole Gebert | Embedded Software
![Page 40: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/40.jpg)
Unsere Lösung
40 Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 41: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/41.jpg)
Unsere Lösung
41
Klassen:
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 42: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/42.jpg)
Unsere Lösung
42
Signale:
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 43: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/43.jpg)
Quellen
43
Foliendesign:
https://wiki.fh-
muenster.de/verwaltung/styleguide/lib/exe/fetch.php?media=fh_ppt_m
aster.pptx
Bilder:
http://upload.wikimedia.org/wikipedia/commons/thumb/1/15/Zeroorder
hold.signal.svg/500px-Zeroorderhold.signal.svg.png
http://commons.wikimedia.org/wiki/File:Tel%C3%A9fono_de_cordel_(1
882).jpg
http://ww1.microchip.com/downloads/en/DeviceDoc/21295d.pdf
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014
![Page 44: Analog/Digital Wandler mit SPI · SPI Betrieb 7 Der SPI-Bus kann mit einem einzigen Master-Gerät und einem oder mehreren Slave-Geräten arbeiten. Wenn ein einzelnes Slave-Gerät](https://reader030.vdocuments.pub/reader030/viewer/2022040717/5e2347ccf1f92e25fb1c357f/html5/thumbnails/44.jpg)
Quellen
44
http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
http://hertaville.com/2013/07/24/interfacing-an-spi-adc-mcp3008-chip-to-the-raspberry-pi-using-c/
https://www.kernel.org/doc/Documentation/spi/spidev
http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/spi/spidev.h
http://www.brianhensley.net/2012/07/getting-spi-working-on-raspberry-pi.html
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/spi/spidev_test.c
http://armbedded.eu/node/318
http://kerneldox.com/kdox-linux/d9/dee/spidev_8h.html
http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/drivers/spi/spidev.c
https://projects.drogon.net/understanding-spi-on-the-raspberry-pi/
Jose Gutierrez & Ole Gebert | Embedded Software 06.01.2014