Рабство нескольких Arduinos через SPI

Я пытаюсь использовать связь SPI между Master Arduino Mega 2560 и автономным Slave Arduino Unos (4, если быть точным).

Цель заключается в том, чтобы Unos выполнил какую-то тривиальную работу и выпустил один байт данных, которые Мастер будет извлекать из него, когда это необходимо. Они производят этот байт очень быстро, и SPDR обновляется с помощью удерживающей переменной (байта), когда ведомое устройство прерывается. Ведомые не берут данные от Мастера.

Отдельные платформы работают на 100% (без проблем работают без работы), а с помощью одного подчиненного устройства для выполнения работы создаются байт данных, а Мастер берёт эти данные из него, также работает на 100%.

Проблема Когда все четыре подчиненных устройства подключены (все подключены от мастера), все они используют линии MISO, MOSI и SCK, каждая со своей собственной уникальной линией SS, я получаю xFF для моего байта данных (данные мусора) из основного подчиненного устройства. Я использую режим 0 по умолчанию, а линии SCK привязаны к земле через конденсатор 0.1uF (чтобы сгладить тактовый сигнал) ... Все остальные линии SPI подключены напрямую.

Другие три ведомых устройства плавают по их линиям MISO (третье состояние), а Master имеет все четыре линии SS в качестве выходов, и все они выведены HIGH в настройке мастера. Первичным подчиненным, с которым я пытаюсь связаться, является SS, подключенный к основному SS на Мастере (вывод 53 на Mega). Я вытаскиваю штифт LOW, хватаю байт от Slave, а затем вытягиваю линию HIGH ... все еще мусор .. но только когда все четыре раба «подключены», как я уже сказал, он отлично работает с одним мастером, один Подчиненный.

У кого-то есть мысли о том, что я мог бы пренебрегать, отсутствовать и т. д.


Вот схема подчиненного устройства. То, что вы не видите, это то, что VCC и AVCC привязаны к линии 5V от 10-контактного заголовка (соединение с ведущим).

schematic

Внешний источник питания, который я использую в настоящее время, добавляется параллельно с 5V /Grnd, который вы видите на схеме. Источник питания имеет максимальную потребляемую мощность при 5 В от 10 А, поэтому я уверен, что сила не моя проблема сейчас, если я не пропустил что-то.

Я просто понял, что изображение imgur трудно увидеть, вот отрыв, который должен быть яснее.

schematic

spi
2 голоса | спросил Mechatronical 26 MarpmThu, 26 Mar 2015 18:02:56 +03002015-03-26T18:02:56+03:0006 2015, 18:02:56

1 ответ


2
  

линии SCK привязаны к заземлению через конденсатор 0.1uF (чтобы сгладить сигнал синхронизации)

Избавьтесь от этого для начала.

  

Другие три ведомые плавают свои линии MISO (третье состояние)

Это твоя проблема. Все они должны быть выходными. Из таблицы:

  

Когда SPI настроен как ведомый, всегда вводится вывод Slave Select (SS). Когда SS удерживается на низком уровне, SPI активируется, а MISO становится выходом, если он настроен пользователем. Все остальные контакты являются входами. Когда SS управляется высоко, все контакты являются входами, а SPI является пассивным, что означает, что он не будет принимать входящие данные. Обратите внимание, что логика SPI будет сброшена после того, как штырь SS будет высок.

Как вы можете видеть из этого, вы должны настроить все выходы MISO как выходы. Однако оборудование SPI превратит их в входы, если SS высок. Таким образом, только один подчиненный (тот, который вы установили MISO в качестве выходного), может отвечать в настоящее время.

Вероятно, вы должны установить их как выходы после включения режима ведомого SPI. например.

  // turn on SPI in slave mode
  SPCR |= bit (SPE);

  // have to send on master in, *slave out*
  pinMode (MISO, OUTPUT);
ответил Nick Gammon 27 J0000006Europe/Moscow 2015, 01:26:48

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132