SPI interface with other board_AVR_ESK1100 or among Arduino itself

ranjeetray:

[quote author=Nick Gammon link=topic=120454.msg942840#msg942840 date=1349235975]

I found that once SPI_SlaveReceive(); function is initialized it is not able to generate the clock ...

I don't understand what you are saying here. The master generates the clock, not the slave.

Respected Sir

Actually once it receive a data in slave mode then SPI clock becomes dead from this board, I want that my both the board should work as master and both should receive the data and send the data. Can we do like this. Is multimaster concept is same as what I am trying to do. Please guide me Sir.

Thanks & Regards.... :slight_smile:
[/quote]

Respected Sir

It receives the data in slave mode after receiving the data I want to compare the data and want to send another data on SPI bus in master mode. Is it possible. Please guide me on this.

#include <SPI.h>


#define SCK_PIN   13
#define MISO_PIN  12
#define MOSI_PIN  11
#define SS_PIN    10

unsigned char data;
int array[10] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 }, ii;

void SlaveInit(void) {
  // Set MISO output, all others input
  pinMode(SCK_PIN, INPUT);
  pinMode(MOSI_PIN, INPUT);
  pinMode(MISO_PIN, OUTPUT);
  pinMode(SS_PIN, INPUT);

  // Enable SPI
  SPCR = B00101100;
  SPCR = (1<<SPE);
}

void setup(){ Serial.begin(9600);
            SPI.begin();
          }

void loop()
{
  unsigned char hg = 0;
  Serial.println("Data Received from Master Board");
  SlaveInit();
  data = SPI_SlaveReceive();
   Serial.println(data, HEX);
   hg = data;
   data = 0;
   delay(1000);
  
   if(hg == 0x3B)
   {
     Serial.println("Writting Data on SPI bus");
     pinMode(SS_PIN, OUTPUT);
     digitalWrite(SS_PIN, LOW);
     delay(1000);
     for(ii=0;ii<10;ii++){
     SPI.transfer(array[ii]);
     Serial.println(array[ii], BIN);
       delay(1000);      
     }
     digitalWrite(SS_PIN, HIGH);
     delay(1000);
   Serial.println("Sending Done");
    delay(1000);  
   }

}

unsigned char SPI_SlaveReceive()
{
  while(!(SPSR & (1<<SPIF)));
  return SPDR;
}

You can see in the image of Oscilloscope while transmitting data from slave after comparing 0x3b , it is sending even 0x3B also with each data. Why it is happening. Can we clear the buffer before transmission of data.

Thanks & Regards.... :slight_smile:

TEK0000.BMP (76.1 KB)