system
January 13, 2013, 12:29pm
#1
Hallo zusammen,
Ich versuche Soft SPI Slave mit Interrupt zu realisieren.
SPI ist in Mode 3. CH1 – CLK, CH2- Daten.
Meine gewünschte 85 bekomme ich nicht.
Kann mir jemand helfen?
Andrew.
void SPI_slave_in()
{
if(digitalRead(MOSI_PIN) == 1) SPI_Byte_tmp = (SPI_Byte_tmp << 1) | 0x01; //Set "1"
else SPI_Byte_tmp = (SPI_Byte_tmp << 1) & 0xFE; //Set "0"
SPI_Counter --;
if (SPI_Counter == 0) {
Byte_rdy = HIGH;
SPI_Byte = SPI_Byte_tmp;
SPI_Byte_tmp = 0;
SPI_Counter = 8;
}
}
uwefed
January 13, 2013, 12:35pm
#2
Rätselraten imJänner
Meine gewünschte 85 bekomme ich nicht.
Was bekommst Du dann?
Bitte gesamten Sketch.
Grüße Uwe
system
January 13, 2013, 12:42pm
#3
ich bekomme "C0"
Wenn ich "FF" sende bekomme ich "FFFFFFFF"
#define SCK_PIN 13
#define MISO_PIN 12
#define MOSI_PIN 11
#define SS_PIN 10
volatile char SPI_Byte = 0;
volatile char SPI_Byte_tmp = 0;
volatile boolean Byte_rdy = LOW;
volatile char SPI_Counter = 8;
void setup() {
pinMode(SCK_PIN, INPUT);
pinMode(MOSI_PIN, INPUT);
pinMode(MISO_PIN, OUTPUT);
pinMode(SS_PIN, INPUT);
Serial.begin(115200);
Serial.println("SPI slave mode");
attachInterrupt(0, SPI_slave_in, RISING); // RISING or FALLING
}
void loop() {
if (Byte_rdy == HIGH) {
Byte_rdy = LOW;
Serial.print(SPI_Byte, HEX);
Serial.print("\n");
}
}
void SPI_slave_in()
{
if(digitalRead(MOSI_PIN) == 1) SPI_Byte_tmp = (SPI_Byte_tmp << 1) | 0x01; //Set "1"
else SPI_Byte_tmp = (SPI_Byte_tmp << 1) & 0xFE; //Set "0"
SPI_Counter --;
if (SPI_Counter == 0) {
Byte_rdy = HIGH;
SPI_Byte = SPI_Byte_tmp;
SPI_Byte_tmp = 0;
SPI_Counter = 8;
}
}