SPI три Ардуино (3 arduino)

AlexeyDmitriev
Offline
Зарегистрирован: 11.11.2016

Доброго времени народ, подскажите вот по какой проблеме.

Сколько статей не читал, везде в целом одно и тоже, приведена схема подключения Мастер, Слейв, Слейв устройств. Я подключил все так же, как по схеме, Уно в роли мастера (11 МИСО, 12 МОСИ, 13 Такт, 10 СС к 1ому Слейву, 9 к 2ому Слэйву), В роли Слэйвов Нано1 (11 МИСО к 11 на УНО, 12 МОСИ к 12 на УНО, 13 Такт к 13 на УНО, 10 СС) и Нано2 (11 МИСО к 11 на УНО, 12 МОСИ к 12 на УНО, 13 Такт к 13 на УНО, 9 СС).

Чтобы сильноне плюхаться, решил сначала законнектить 2а Ардуино (УНО и НАНО1), передача и прием по 1ому байту в такт проходит (УНО отправляет 10000001, НАНО1 принимает 10000001, и в этот же такт НАНО1 отправляет 00000101, УНО принимает его и в сериал выводит как 101, я так понимаю что ведущие нули режутся, т.к. если к примеру ответ сделал 100000101, то выводит полностью).

Промежуточный результат 1 - работает.

Далее копирую скеч слэйва на НАНО2, с изменением СС пина, и ответом, отцепляю НАНО1, подцепляю НАНО2, получается связка УНО-НАНО2, в УНО ставлю делай(500) и копирую блок кода общения с НАНО1 ниже, с заменой выключения-включения СС пин 9 для НАНО2. Т.о. получается за 1н цикл лупа идет транзит с НАНО1 (отключен физически), делай(500), транзит с НАНО2 (включен), опять делай(500). Смотрю в сериал порт, все отлично, отправка в НАНО1 "100000001", получение "0", затем отправка в НАНО2 "10000001", получение "11111110" - как и положено.

Промежуточный результат 2 - работает.

Теперь подцепляю НАНО1 и НАНО 2, и тут пошли проблемы. УНО отправляет в  НАНО1 и в НАНО2 как полежено с делаем в 500, а в ответ получает вообще что попало, ни 1н из ответов от СЛЭЙВОВ верно не приходит.

Причем если при работающем выдернуть МИСО от Любого из Слэйвов, ответ от подключенного идет корректный, как втыкаешь обратно - опять "мусор".

Прошу у более опытных ткнуть носом, где я напортачил? Может на каждое МИСО от слэйвов поставить диоды, не знаю поможет ли... Кто что думат? Заранее спасибо.ф

 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Можно диодами развязать, сопрот с анодов на + не забудь. В скорости потеряешь. Можно логический вентиль 2И воткнуть.

nik182
Offline
Зарегистрирован: 04.05.2015

При поступлении высокого уровня на SS ногу любой из нан они сразу должны переводить МИСО в состояние вход. При поступлении низкого уровня сначала перевести на выход, затем уже что то передавать. Изначально тоже должен быть назначен как вход. Если аппаратный SPI ввести в слэйв моду, то МИСО автоматически меняет состояние в зависимости от состояния входа SS.

AlexeyDmitriev
Offline
Зарегистрирован: 11.11.2016

Andy пишет:
Можно диодами развязать, сопрот с анодов на + не забудь. В скорости потеряешь. Можно логический вентиль 2И воткнуть.

Попробую. Спасибо за совет.

 

AlexeyDmitriev
Offline
Зарегистрирован: 11.11.2016

nik182 пишет:

При поступлении высокого уровня на SS ногу любой из нан они сразу должны переводить МИСО в состояние вход. При поступлении низкого уровня сначала перевести на выход, затем уже что то передавать. Изначально тоже должен быть назначен как вход. Если аппаратный SPI ввести в слэйв моду, то МИСО автоматически меняет состояние в зависимости от состояния входа SS.

Попробовал так + перекинул на НАНО2 СС с пин 9 на 10, все заработало как надо.

Спасибо.