// Funktioniert auf WOKI
// SPI-Interface funktioniert nicht auf Tinkercad
// Funktioniert aber auf Hardware
// Programm bleibt beim SPIF-Bit hängen
// SPI-Bus mit Schieberegisterbaustein 74HC595
// Funktioniert mit den Modes 0,2,3
// Bei den Modes 1 wird nicht jedes Byte empfangen
// DORD=0 (Standardwert)
byte zaehler=0;
void setup()
{
spi_init();
Serial.begin(9600);
}
void loop()
{
byte dummy;
dummy=spi_transfer(zaehler); // Ser. Ausgang des SRG
// Entspricht dem vorigen Ser. Input
digitalWrite(SS,1);
digitalWrite(SS,0);
Serial.print(zaehler);
Serial.print(" ");
Serial.println(dummy);
zaehler++;
delay(1000);
}
void spi_init()
{
pinMode(SS,OUTPUT); // SS ist mit dem SS-Eingang eines Slaves verbunden
SPSR=0;
SPCR=(1<<SPE);
SPCR=(1<<MSTR);
SPCR =(1<<SPE)|(0<<DORD)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA)|(1<<SPR1)|(1<<SPR0);
// SPI Enable
// Arduino ist Master
// CPOL=1 und CPHA=1 also SPI-Mode 3
// fosz/128
digitalWrite(SS,0); // SS ist bereits deklariert. Ein anderer Pin ist auch möglich
pinMode(SCK,OUTPUT); // Unbedingt erforderlich, sonst keine Funktion!
pinMode(MOSI,OUTPUT); // SCK und MOSI sind bereits deklariert.
}
unsigned char spi_transfer(unsigned char wert)
{
SPDR = wert; // Datenbyte senden SPI Data Register
while((SPSR & 128)==0) // PIF-Bit auswerten. Warten bis Transfer fertig
{}
return SPDR; // Aus SPI Data Register empfangenes Byte lesen
}