Использование SPI

Вопросы программирования в системе Ардуино
Михаил_Я
Сообщения: 39
Зарегистрирован: 13 дек 2017, 23:18

Использование SPI

Сообщение Михаил_Я » 26 мар 2019, 15:45

Здравствуйте!
Возникла необходимость подключить к Ардуино несколько термопар с АЦП МАХ6675 и прередавать результаты измерений по UART.
Понятно, что выводы SCK и SO для всех АЦП параллелятся, а CS используются для выбора чипа. Но как этот выбор осуществить практически, разобраться не смог. "Перекопал" кучу ресурсов в НЭТе - везде только описание интерфейса и общие рассуждения. Практические примеры - только для одного устройства. Пытался "выудить" подсказку из библиотек SPI и MAX, но моих знаний для этого оказалось мало.
Вторая проблема - не разобрался в том, как задаются адреса результатов измерений в буфере обмена (урок 48) для передачи по UART.
Прошу, если можно, показать пример скетча для 2-3 АЦП (в моём устройстве их будет гораздо больше) и "разжевать" подробно, как задавать адреса данных.


Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Использование SPI

Сообщение Эдуард » 27 мар 2019, 22:45

Здравствуйте!
Сигналом CS выбираете микросхему, с которой сейчас работает ведущее устройство. Выбираете первый АЦП и считываете с него данные, потом второй и т.д. Представьте, что АЦП, у которого сигнал CS в неактивном состоянии оторван от интерфейса.
Что касается передачи данных. Я вам советую использовать протокол ModBus. Он описан в последующих уроках и есть библиотеки для работы с ним. Вы заводите на ведомом устройстве массив, подключаете библиотеку и ведущее устройство имеет доступ к этому массиву.

Михаил_Я
Сообщения: 39
Зарегистрирован: 13 дек 2017, 23:18

Re: Использование SPI

Сообщение Михаил_Я » 29 мар 2019, 23:47

Здравствуйте, Эдуард!
То, что Вы рассказали - понятно, я сразу об этом сказал. Но вот каким именно образом это осуществить? Была мысль насчёт цикла "for", но как привязать переменную к конкретному чипу? и как определить и задать время считывания? Вероятно, нужен другой метод. Хотелось бы услышать совет именно об этом.
Другой вариант - последовательно прописывать, что на CS такой-то подаём низкий уровень и т.д.. Но, во-первых - та же проблема со временем, а во-вторых - в данном случае количество АЦП составляет 40 - 50 шт. (МЕГА 2560),- и геморройно, и не факт, что хватит памяти для размещения скетча.
Не могли бы Вы набросать для понимания принципа примерный скетч на 2 - 3 чипа?

Эдуард
Администратор
Сообщения: 484
Зарегистрирован: 30 окт 2016, 20:53

Re: Использование SPI

Сообщение Эдуард » 30 мар 2019, 15:41

Здравствуйте!
У вас такое количество АЦП!
Не лучше использовать один АЦП с аналоговым коммутатором на входе. У меня была такая разработка для термопар. Я выкладывал схему на форуме.

Михаил_Я
Сообщения: 39
Зарегистрирован: 13 дек 2017, 23:18

Re: Использование SPI

Сообщение Михаил_Я » 02 апр 2019, 11:20

Здравствуйте!
К сожалению, в данном случае такой вариант не подходит. Требуется максимально возможная точность измерений, а я сильно не уверен в том, что коммутация милливольтовых сигналов не внесёт дополнительных погрешностей.
К тому же добавление в схему коммутатора - это лишнее, на мой взгляд, усложнение. Тем более, что
в данном случае финансовый аспект не сильно важен (комплектацию закупает предприятие), а вот надёжность - важна. Если выйдет из строя один АЦП, то будут потеряны результаты одного измерения, а если коммутатор - то потеряется всё.
И есть ещё одно соображение - вряд ли это последний проект, в котором может потребоваться SPI. Поэтому я очень прошу - если Вы имеете опыт использования SPI с несколькими датчиками, то объясните, пожалуйста, как это реализуется.


Вернуться в «Программирование Ардуино»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя