Прочитайте три mcp3008 с Raspberry Pi 3, используя переполнение стека

Я использую библиотеку WiringPi (на языке c ++) для взаимодействия ACD MCP3008 через SPI, но мне нужно прочитать 24 аналоговых входа, поэтому я должен иметь возможность взаимодействовать с 3 различными MCP3008. Я не знаю, как управлять 3 разными рабами с помощью библиотеки WiringPi.

ОТВЕТ: (У меня недостаточно репутации, чтобы ответить на мой собственный вопрос, поэтому я оставляю его здесь на случай, если это кому-нибудь пригодится)

Используя библиотеку mcp3004, вы можете использовать интерфейс SPI для связи с преобразователем de AD.

Вы просто должны соединить MISO, MOSI, SCLK и CE0 в соответствующих выводах раба. Основная проблема заключалась в том, что мне нужно было использовать 3 разных рабов, но решение было простым. Все подчиненные должны иметь одинаковые MOSI, MISO, SCLK, поэтому вы должны подключить все эти контакты к контактам MOSI, MISO и SCLK малины.

Теперь нужно сделать малиновый контакт CE0 для подключения к ведомому устройству, которое вы хотите использовать, а к другому CS-контакту подчиненных устройств нужно подтянуть HIGH (потому что это Active-low, и вы хотите, чтобы они были НЕАКТИВНЫМИ). Я нашел способ сделать это — использовать OR-GATES (2 inpust), поэтому я использую один вентиль для каждого ведомого. Один из входов будет малиновым выводом CE0 (то же самое для остальных подчиненных), другой вход будет выводом GPIO (один для каждого ведомого), а выход OR-GATE будет подключен к выводу выбора ведомого (то же самое). для других рабов).

Идея состоит в том, что если вы хотите использовать ведомое устройство 1, вы должны потянуть pin1 LOW на digitalWrite(Pin1,LOW); и другие высокие digitalWrite(Pin2,HIGH); digitalWrite(PINn,HIGH), Делая это, вы делаете первый подчиненный контакт CS, имеющий значение de CE0, а остальные — ВЫСОКИЙ (поэтому первый подчиненный выбирается, а остальные не выбираются).

Вы не можете просто потянуть НИЗКИЙ тот, который вы хотите выбрать, и ВЫСОКИЙ другой, потому что SPI тянет вверх и вниз штифт CS с определенной синхронизацией

Особая благодарность @ Ptaq666, @Jespe Juhl и другим, кто прочитал вопрос и помог мне с этим.

0

Решение

Если я правильно понимаю, что ваша проблема: «Как использовать одно ведущее устройство SPI, подключенное к 3 ведомым устройствам», вот решение:

  • Подключите ваш главный SCK ко всем 3 SCK ведомых устройств
  • Подключите ваш мастер MOSI к MOSI каждого раба
  • Подключите MISO каждого раба к вашему главному MISO
  • Используйте общие сигналы ввода-вывода (конечно же) в качестве SS (SlaveSelect), чтобы включить / отключить связь с конкретным ведомым устройством. Вы даже можете использовать свой WiringPi void digitalWrite (int pin, int value); для этого.

В Интернете есть много схем, диаграмм, учебных пособий по этой теме. SPI на RPi ничем не отличается от любого другого SPI.

Если у вас возникнут какие-либо проблемы с программным обеспечением при настройке, связи, что угодно -> опубликуйте код в своем вопросе, чтобы показать, что вы уже пробовали

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]