Программирование ведомого SPI для Arduino

В моем приложении Arduino Due настроен как ведущее устройство, и вместо фактического ведомого устройства я использую Arduino Uno в качестве ведомого. Я поделюсь мастер-кодом, который я разработал. Может ли кто-нибудь помочь мне в отношении ведомого кода Arduino Uno для отображения данных в последовательном мониторе на ведомой стороне. Любая помощь в отношении этого аспекта будет принята с благодарностью.

#include <SPI.h>

SPISettings mySettting(125000, MSBFIRST, SPI_MODE0);
const uint8_t ss = 10;

void setup() {
  pinMode(ss, OUTPUT);

  SPI.begin();

  digitalWrite(ss, LOW);
  SPI.beginTransaction(mySettting);
  SPI.transfer(0x00);
  SPI.transfer(0x25);
  SPI.transfer(0x1C);
  SPI.endTransaction();
  digitalWrite(ss, HIGH);
}

void loop() {
}

Спасибо за ответ. Ссылаясь на код, прикрепленный ниже на ведомой стороне, поскольку вы упомянули, что HEX должен отображаться в окне последовательного монитора, нужно ли мне добавлять HEX на ведущей стороне, я имею в виду, нужно ли мне загружать шестнадцатеричные данные (0x00251C) в HEX буфер??

Заранее спасибо

#include <SPI.h>

SPISettings mySettting(125000, MSBFIRST, SPI_MODE0);
const uint8_t ss = 10;

void setup() {
  pinMode(ss, OUTPUT);

  SPI.begin();

  digitalWrite(ss, LOW);
  SPI.beginTransaction(mySettting);
  SPI.transfer(0x00);
  SPI.transfer(0x25);
  SPI.transfer(0x1C);
  SPI.endTransaction();
  digitalWrite(ss, HIGH);
}

void loop() {
}

, 👍1

Обсуждение

Пожалуйста, отредактируйте свой вопрос, чтобы добавить дополнительную информацию, если это необходимо., @VE7JRO


1 ответ


5

Библиотека SPI.h по умолчанию поддерживает только главный режим, SPI.begin() автоматически установит вывод ведомого (ss) на ВЫСОКИЙ уровень, независимо от того, есть ли у вас pinMode(ss, OUTPUT) в вашем коде setup() или нет, и установите Arduino в качестве мастера SPI. Это можно увидеть в исходном коде.

Поскольку библиотека SPI не содержит функций для ведомого режима, для использования Arduino в качестве ведомого вам потребуется выполнить некоторые индивидуальные настройки, в основном 1) установить MISO в качестве ВЫХОДА для ведомого устройства для отправки данных; 2) включить подчиненный режим, установив регистр SPCR; 3) включить прерывание при получении данных. Вот пример ведомого SPI на Arduino.

#include<SPI.h>

volatile boolean received;
volatile byte receivedData;

ISR (SPI_STC_vect)        //Ошибка рутинной функции
{
  receivedData = SPDR;   // Получаем полученные данные из регистра SPDR
  received = true;       // Устанавливает полученное как True
}

void setup()
{
  Serial.begin(115200);

  pinMode(MISO,OUTPUT);   //Устанавливает MISO как ВЫХОД
  SPCR |= _BV(SPE);       // Включаем SPI в ведомом режиме
  received = false;
  SPI.attachInterrupt();  //Активировать прерывание SPI
}


void loop()
{ 
  if(received) {                        
    SPDR = receivedData;    // отправляем обратно полученные данные, это не обязательно, только для демонстрационных целей
    received = false;
    Serial.print(receivedData, HEX);
  }
}
,

Спасибо за ответ. Теперь данные передаются по линии MOSI на конце Master. Я хотел бы отслеживать входящие данные вывода MISO на ведомой стороне. В приведенном выше коде, который вы разместили после того, как я определил вывод MISO и вместо HEX в последней строке кода, я не хочу, чтобы значение HEX было записано в последней строке. Я просто хочу отобразить значение HEX, написанное на стороне MASTER. Я не хочу включать его на ведомой стороне., @vamshi krishna