SPI Bus

Datenblatt 177

Verbindung zwischen Master und Slave

Bild1

 

Grundlagen

Probleme mit Adruino Leonardo: der Pin SS  steht nicht zur Verfügung. Softwarelösung funktioniert nicht, der Pin muss hardware-mäßig auf GND gelegt werden. ACHTUNG: die Lösungen, die man im Internet findet, wo der Pin SS nicht angeschlossen ist oder fix auf Null liegt, funktionieren nicht. Open SS doesn't work!  (initialized on rising edge of SS)

Bild2

Slave

/* kner  2016
*  6 Pin SPI connector on Leonardo:  1 .. Miso 3 .. SCK  5 .. RESET   2 ... +5V   4 .. MOSI   6 .. GND
*  UNO Pin 10 SS !
*  SS may stay open, must not be connected to GND; receiption stops when SS=HIGH
*  
*  minimalistic Testprogramm receives 1,2,3 usw. via spi
*  dont forget to connect to UNO Pin 10 SS
*/

#include <SPI.h>

void setup (void)
{
Serial.begin (9600);   // debugging

// have to send on master in, *slave out*
// turn on SPI in slave mode
SPCR |= bit(SPE);
// have to send on master in, *slave out*
pinMode(MISO, OUTPUT);
 

}

void loop (void)
{
Serial.print("los");

while(1){

while(!(SPSR & (1<<SPIF)));   
int x = SPDR;
Serial.println(x, HEX);
}
}  

 

Master

/* kner  2016
*  6 Pin SPI connector on Leonardo:  1 .. Miso 3 .. SCK  5 .. RESET   2 ... +5V 4 .. MOSI   6 .. GND
*  LEONARDO R3
*
*  minimalistic Testprogramm sends 1,2,3 usw. to spi
*
*/

#include <SPI.h>
#define PIN_SS 13
void setup (void)
{
pinMode(PIN_SS,OUTPUT);

}

char i=0;
void loop (void)
{
SPI.begin ();
while (1){  //loop
digitalWrite(PIN_SS,LOW);
SPI.transfer (i++);
digitalWrite(PIN_SS,HIGH);
delay(100);
}
}