I need to contact the ADC via arduino nano on the SPI bus and get a response. I can send a byte, but I can't get a response. The hardware SPI did not work, I decided to write a software one, maybe I'm reading the port incorrectly? The output is just zeros.
#define rStatADC 0x10
#define rDataADC 0x11
#define rModeADC 0x12
#define rFltADC 0x13
#define rDacADC 0x14
#define rOffADC 0x15
#define rGainADC 0x16
#define rTestADC 0x17
#define wModeADC 0x02
#define wFltADC 0x03
#define wDacADC 0x04
#define wOffADC 0x05
#define wGainADC 0x06
#define wTestADC 0x07
#define spi_cs 8 // это D8 ардуино
#define spi_do 12 // это D9 ардуино
#define spi_di 10 // это D10 ардуино
#define spi_clk 11 // это D11 ардуино
// задержка
#define SPI_time 10
char Byte=0;
void setup()
{
Serial.begin(115200);
pinMode(spi_clk, OUTPUT);
pinMode(spi_do, OUTPUT);
pinMode(spi_di, INPUT);
pinMode(spi_cs, OUTPUT);
digitalWrite(spi_cs, HIGH);
delay(10); // ждем устаканивания питания
//сброс
digitalWrite(spi_cs, LOW);
for(int i = 0; i < 32; i++)
{
SPI_wr(0xFF);
}
digitalWrite(spi_cs, HIGH);
}
//--- основной код----
void loop()
{
digitalWrite(spi_cs, 0);
SPI_wr(0x12);
char abv = SPI_read();
Serial.println(abv, HEX);
// abv = SPI_read();
// Serial.println(Byte, HEX);
digitalWrite(spi_cs, 1);
delay(100);
}
//-----передача байта в шину - Write-----
void SPI_wr(char Byte)
{
char i; // счетчик для цикла
for (i=0; i<8; i++)
{ // цикл на 8 бит
digitalWrite(spi_clk, LOW); // тактовый спад
//delay(SPI_time/2); // формируем половину паузы
if (Byte & 0x80) digitalWrite(spi_di, LOW); else digitalWrite(spi_di, HIGH); // выставляем один бит
Byte<<=1; // двигаем байт
delay(SPI_time); // завершаем паузу
digitalWrite(spi_clk, HIGH); // тактовый фронт
delay(SPI_time); // формируем импульс
}
}
//-----прием байта ---- Read-----
unsigned char SPI_read()
{
char i, abv = 0;
for (i = 0; i< 8; i++)
{
delay(SPI_time);
digitalWrite(spi_clk, 0);
delay(SPI_time);
if (digitalRead(spi_do))
// abv = abv | 1;
abv++;
if (i!=7)
abv<<=1;
digitalWrite(spi_clk, 1);
}
return abv;
}



