Программирование ведомого 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() {
}
@vamshi krishna, 👍1
Обсуждение1 ответ
Библиотека 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
- Как использовать SPI на Arduino?
- OVF в последовательном мониторе вместо данных
- Как отправить строку с подчиненного устройства Arduino с помощью SPI?
- Проблема совместного использования MISO с несколькими RFID-считывателями RC522
- Arduino Uno: avrdude: stk500_recv(): программатор не отвечает
- Последовательная связь между несколькими устройствами (или ардуино)
- Максимальная скорость SPI для ведомого Uno/clone?
- Программирование Arduino на Паскале?
Пожалуйста, отредактируйте свой вопрос, чтобы добавить дополнительную информацию, если это необходимо., @VE7JRO