44
Analog/Digital Wandler mit SPI Raspberry Pi

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

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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