Я использую библиотеку 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 и другим, кто прочитал вопрос и помог мне с этим.
Если я правильно понимаю, что ваша проблема: «Как использовать одно ведущее устройство SPI, подключенное к 3 ведомым устройствам», вот решение:
void digitalWrite (int pin, int value);
для этого.В Интернете есть много схем, диаграмм, учебных пособий по этой теме. SPI на RPi ничем не отличается от любого другого SPI.
Если у вас возникнут какие-либо проблемы с программным обеспечением при настройке, связи, что угодно -> опубликуйте код в своем вопросе, чтобы показать, что вы уже пробовали
Других решений пока нет …