Hello. I am newbie. In my application Arduino Due is configured as Master and Arduino Uno as Slave. I need to transfer 24-bit Hexadecimal data of about 79-registers to slave device. At the slave end in serial monitor window I would like to display the transmitted data. I have developed an array at slave side, and I am comparing the master data with slave one. I have divided the 24-bit data into 3 Bytes. I will attach the Master and Slave codes below. I am getting Invalid data in serial monitor window as the data (Hexa Decimal) transmitted by Master is converted into decimal format internally and I think this was the reason I am not able to print the Valid data in serial monitor window.
My Actual slave device is PLL IC, But before interfacing directly to it I would like to monitor the data by using Arduino Uno as Slave device.
Any help will be greatly appreciated. Thanks in Advance.
**MASTER Code**
#include <SPI.h>
SPISettings mySettting(125000, MSBFIRST, SPI_MODE0);
const uint8_t ss = 10;
//pinMode(10, OUTPUT)
void setup() {
pinMode(ss, OUTPUT);
SPI.begin();
SPI.beginTransaction(mySettting);
digitalWrite(ss, LOW);
SPI.transfer('@');
SPI.transfer(0x1C);
SPI.transfer(0x25);
SPI.transfer(0x00);
SPI.transfer('
);
delay(100);
digitalWrite(ss, HIGH);
digitalWrite(ss, LOW);
SPI.transfer(‘@’);
SPI.transfer(0x08);
SPI.transfer(0x08);
SPI.transfer(0x01);
SPI.transfer(’
);
delay(100);
digitalWrite(ss, HIGH);
digitalWrite(ss, LOW);
SPI.transfer('@');
SPI.transfer(0x00);
SPI.transfer(0x05);
SPI.transfer(0x02);
SPI.transfer('
);
delay(100);
digitalWrite(ss, HIGH);
digitalWrite(ss, LOW);
SPI.transfer(‘@’);
SPI.transfer(0x42);
SPI.transfer(0x06);
SPI.transfer(0x03);
SPI.transfer(’
);
delay(100);
digitalWrite(ss, HIGH);
digitalWrite(ss, LOW);
SPI.transfer('@');
SPI.transfer(0x43);
SPI.transfer(0x0A);
SPI.transfer(0x04);
SPI.transfer('
);
delay(100);
digitalWrite(ss, HIGH);
digitalWrite(ss, LOW);
SPI.transfer(‘@’);
SPI.transfer(0xC8);
SPI.transfer(0x00);
SPI.transfer(0x05);
SPI.transfer(’
);
delay(100);
digitalWrite(ss, HIGH);
digitalWrite(ss, LOW);
SPI.transfer('@');
SPI.transfer(0x02);
SPI.transfer(0xC8);
SPI.transfer(0x6C);
SPI.transfer('
);
delay(100);
digitalWrite(ss, HIGH);
digitalWrite(ss, LOW);
SPI.transfer(‘@’);
SPI.transfer(0xB2);
SPI.transfer(0x40);
SPI.transfer(0x07);
SPI.transfer(’
);
SPI.transfer('&');
delay(100);
digitalWrite(ss, HIGH);
SPI.endTransaction();
}
void loop() {
}
**SLAVE Code**
#include <SPI.h>
#include <stdio.h>
#include <string.h>
int buff[100] = {0x001C2500,0x00080801,0x00000502,0x00420603,0x430A04,0xC80005,0x02C806,0xB24007};
uint32_t buff_1 [100];
volatile byte indx;
volatile boolean process;
int i = 0;
uint32_t var_byte = 0x00000000;
uint32_t var_byte_1 = 0x00000000;
int byte_pos = 0;
short int status_1 = 0;
void setup (void) {
Serial.begin (115200);
pinMode(MISO, OUTPUT); // have to send on master in so it set as output
SPCR |= _BV(SPE); // turn on SPI in slave mode
indx = 0; // buffer empty
process = false;
SPI.attachInterrupt(); // turn on interrupt
memset(buff_1,'\0',sizeof(buff_1));
}
ISR (SPI_STC_vect) // SPI interrupt routine
{
byte c = SPDR; // read byte from SPI Data Register
if(c == '@')
{
var_byte = 0x00000000;
byte_pos = 2;
}
else if(c == '
)
buff_1 [indx++] = var_byte;
else if(c == ‘&’)
process = true;
else
{
var_byte_1 = 0x00000000;
var_byte_1 = (var_byte_1 | c) << byte_pos;
var_byte |= var_byte_1;
byte_pos–;
}
}
void loop (void) {
if (process) {
process = false; //reset the process
status_1 = 0;
for(i=0;i<79;i++)
{
if (buff==buff_1)
{
Serial.println (“Valid data_1”);
}
else
{
status_1 = 1;
break;
//Serial.println (“Inavlid data”);
}
}
if (status_1 == 0)
Serial.println (“Valid data”);
else
Serial.println (“Inavlid data”);
indx= 0; //reset button to zero
memset(buff_1,‘\0’,sizeof(buff_1));
}
}