Temperaturanzeige
1 SPI-Modul
SPI: 4 Leitungen - Single Master, Multi Slave

Das SPI-Modul (serial peripheral interface) ermöglicht es, Peripherie wie ein Temperatursensor mit dem Mikrocontroller zu verbinden.

Der SPI-Bus hat 4 Leitungen: SCK (source clock) ist der Taktgeber, über MISO (master in slave out) empfängt der Mikrocontroller (master) Daten vom Sensor (slave), über MOSI (master out slave in) sendet der Mikrocontroller (master) Daten zum Sensor (slave) und über die CS (chip select) wird der entsprechende Sensor ausgewählt.

Mit jeder Übertragung werden 8 oder 16 Bit übertragen

2 SPI - Master und Slave
SPI Master

In diesem Fall besteht der Master aus dem Mikrocontroller, Slave 1 ist der Temperatursensor TC77 und Slave 2 wäre ein weiterer Sensor. Für jeden weiteren Slave wird nur eine zusätzliche CS-Leitung benötigt.

Bei der Kommunikation zwischen Mikrocontrollern oder dem Raspberry Pi, kann der dsPIC33-Mikrocontroller auch als Slave programmiert werden. Hierfür verfügt er über einen eigenen CSS (chip select slave) - Anschluß.

Man beachte: Der Taktgeber ist immer der Master. Manchmal findet man auch die Bezeichnung SDO (serial data out) und SDI (serial data in). Die Bezeichnung MISO und MOSI hat den Vorteil, dass man unabhängig vom Master und Slave die richtigen Leitungen miteinander verbindet.

3 SPI Zeitablaufdiagramm
SPI Zeitablaufdiagramm

Die Übertragung beginnt sobald der entsprechende CS-Leitung logisch Null wird. Hierzu muß der Ruhezustand des Taktsignals definiert werden. In diesem Fall ist dies logisch Null, d.h. der aktive Zustand ist logisch Eins. Das Bitmuster 1101... wird hier hier nun bei jeder fallenden Flanke des Taktsignals übertragen. So kann zum Zeitpunkt der steigenden Flanke ein eindeutiger Pegel registriert werden.

Nachdem das letzte Bit übertragen wurde wird die CS-Leitung wieder auf logisch Eins gesetzt. Das erste ist hier das MSB (most significant bit), das letzte das LSB (least significant bit). Die Reihenfolge lässt beim dsPIC33-Mikrocontroller nicht vertauschen.

Übrigens, der dsPIC33-Mikrocontroller verfügt über zwei SPI-Module SPI1 und SPI2.

4 SPI Konfigurationsregister
Register

Das wichtigste Konfigurationsregister heißt SPI1CON1. Mit Hilfe des MODE16-Bits wählt man zwischen 8-Bit- und 16-Bit-Übertragung. Mit dem CKP-Bit (clock polarity select) definiert man den Ruhezustand des Taktsignals (clock). Das CKE-Bit (clock edge select) definiert nun, ob die Datenänderung bei fallender oder steigender Taktflanke statt findet. Mit dem MSTEN-Bit wählt man zwischen Master- und Slave-Modus.

Darüber hinaus gibt es noch das Konfigurationsregister SPI1CON2 und das Statusregister SPI1STAT. Im letzteren kann das SPI-Modul aktiviert werden und es kann der aktuelle Zustand des Moduls, ob bspw. die Übertragung fertig ist, abgefragt werden. Im SPI1BUF-Register werden die zu übertragenden Werte geschrieben und die empfangenen Daten zwischengespeichert.

5 Bibliotheken für den dsPIC33-Mikrocontroller
Bibliothek

Zur Konfiguration des SPI-Moduls werden in der entsprechenden Bibliothek die Funktionen void SPIinit(void); bzw InitSPI ( int cke, int ckp ); bereitgesetellt. Die letztere eignet sich als Testfunktion um die richtige Konfiguration für den Slave herauszufinden.

Durch den Aufruf SPIinit();, bzw. InitSPI(0,1); wird das SPI-Modul initialisiert. Mit der Funktion int ReadSPI ( unsigned char number ); kann ein Wert ausgelesen, mit der Funktion void WriteSPI ( unsigned char command, char number ); können Werte übertragen werden.



Aufgabe 1 Konfiguration des SPI-Moduls

Register

Das SPI1-Modul des dsPIC33 Mikrocontrollers soll konfiguriert werden. Gib die Werte aller Bits im SPI1CON-Register an.

  1. 16-Bit-Modus, Takt-Ruhezustand logisch Null, Datentransfer bei fallender Flanke.
  2. 8-Bit-Modus, Takt-Ruhezustand logisch Eins, Datentransfer bei steigender Flanke.
  3. 8-Bit-Modus, Takt-Ruhezustand logisch Eins, Datentransfer bei fallender Flanke.

Aufgabe 2 Programmieren

Temperaturanzeige

Zur Verwendung des SPI-Moduls wird eine Bibliothek zur Verfügung gestellt. Binde dafür die Datei SPIconfig.h und SPIconfig.c in das Projekt ein.

  1. Erstelle das Projekt 13 SPI und schreiben die Datei 13-SPI-1.c, in der die Temperatur am Sensor TC77 ausgelesen wird.
  2. Realisiere die Anzeige am LCD mit zwei Nachkommastellen


Entspann dich erst mal ...

Ein Informatiker und Mathematiker fahren im Zug. Der Informatiker schlägt dem Mathematiker folgenden Handel vor: "Du stellst mir eine Frage. Kann ich sie nicht beantworten erhälst du von mir 50 Euro. Danach bin ich dran. Falls du meine Frage nicht beantworten kannst erhalte ich 50 Euro von dir."

Nun, der Mathematiker ist müde und hat keine Lust. Der Informatiker gibt aber nicht so schnell auf und bedrängt den Mathematiker immer wieder, jedoch erfolglos. Da schlägt er ihm vor, er wäre auch bereit 500 Euro zu zahlen, wenn er nur mitspiele. Der Mathematiker müsse ihm auch nur 50 Euro geben.

Damit der Mathematiker endlich seine Ruhe hat willigt er ein und beginnt mit folgender Frage: "Was läuft mit vier Beinen die Wand hoch und kommt auf drei Beinen zurück?"

Der Informatiker überlegt und als ihm nichts einfällt holt er sein Notebook heraus und befragt Google. Er stellt die Fragen in Foren, postet es auf Facebook und allen möglichen sozialen Medien. Doch leider ohne Erfolg.

Derweilen schläft der Mathematiker ruhig. Nach zwei Stunden Zugfahrt gibt der Informatiker auf und überreicht dem Mathematiker 500 Euro.

"Eine Frage habe ich noch", meint der Informatiker. "Was wäre die richtige Antwort gewesen?"

Da überreicht der Mathematiker dem verdutzen Informatiker 50 Euro und schläft weiter."

© mylime.info