Отправка многобайтовых данных из Arduino в качестве ведомого устройства по SPI
Я работал над разборкой индукционной варочной панели и подумал о настройке системы. До сих пор я вывел следующую схему из варочной панели: Два устройства взаимодействуют друг с другом в режиме 3-wire SPI. Ведущий, который управляет схемой управления питанием и индукцией, постоянно отправляет команды и данные ведомому. Ведомое устройство, которым является TM1628, получает главные команды и данные, затем соответственно отображает данные по семерке или отвечает нажатием переключателя, если он есть.
Картинка выше объясняет это лучше. Теперь я подумал о замене TM1628 на Arduino. Все идет нормально. Я собрал все данные, отправляемые мастером, и ответ, отправленный подчиненным.
Но когда я начал программировать, я застрял на одном месте. Таким образом, данные, отправленные мастером, и его ответ выглядят так:
(Ведущий к ведомому)**Команда1 - Команда2 - Данные1 - Данные2 - ... - Данные 14 - Команда1 - Команда2 - **(Ведомый к ведущему)**Данные1 - Данные2 - ... - Данные5 - **(А теперь повторение)
Когда мастер отправляет данные, у меня нет проблем, так как данные будут постоянно считываться Arduino, и я могу предпринять соответствующие действия. Но когда Arduino (работающий как ведомый) должен непрерывно отправлять 5 потоков данных, в зависимости только от времени ввода часов от ведущего, как я могу знать, что один поток был записан, и теперь следующие данные должны быть записаны в регистр SPDR.
@DodZi, 👍0
Обсуждение1 ответ
В SPI нет таких вещей, как "отправка" и "получение". Это полнодуплексная операция каждый раз. Всякий раз, когда мастер запускает часы, ведомый получает биты от ведущего и одновременно отправляет биты мастеру.
Эти операции неразделимы.
Какой бы механизм вы ни использовали для распознавания сообщения "Байт получен от мастера", это тот же механизм, который вы используете для заполнения регистра SPDR. Байты, в которых вы «отправляете» данные мастеру, на самом деле являются байтами, в которых мастер отправляет вам данные, но вам все равно, что это за данные. Точно так же, как когда мастер отправляет вам «команды», вы отправляете основные данные (которые вы не указали), а мастеру «все равно», что это за данные.
Вы должны следить за тем, сколько байтов передано и передано мастером, и сказать: "Для байтов 19–23 мастер ожидает достоверные данные, поэтому мне нужно убедиться, что я помещаю данные в SPDR для этих байтов".
- Как заставить Arduino взаимодействовать с тремя другими Ардуино?
- Основная связь Arduino ModBus RTU с проблемой измерителя мощности
- Последовательная связь между ESP8266 и Arduino Uno
- Отправка значения с одного Arduino на другой
- SIM900 3G? Или SIM900A умеет подключаться к 3G?
- Контакты RX и TX на esp32
- Связь Arduino master/slave с использованием RS485
- Клиент MQTT на Arduino + SIM900
DodZi, Пожалуйста, напишите мне на почту - vjacheslavra@yandex. RU . Я тоже сейчас хочу сделать управление индукционной плитой через ардуино вместо TM1628. Пожалуйста, покажите свой скетч ардуино. [![введите здесь описание изображения](https://i.stack.imgur.com/SDQmj.jpg)](https://i.stack.imgur.com/SDQmj.jpg), @Вячеслав Р.