SPI MCP23S08 для Arduino: странное поведение stop/start

spi

Я построил минимальную макетную схему Arduino для тестирования некоторых деталей, которые недавно купил, и мне успешно удалось заставить I2C MCP23008 отлично работать со светодиодами и жидкокристаллическим дисплеем.

Однако совсем недавно я попытался использовать SPI-версию того же чипа с некоторыми действительно странными результатами. Я пробовал искать примеры кода и библиотеки, но изо всех сил старался заставить что-нибудь работать.

MCP23S08p Arduino interfacing

Поэтому я изучил таблицу данных, чтобы создать следующий код для мигания светодиода, однако мигание, похоже, работает только ненадолго, а затем прекращается. Иногда он останавливается, а затем остается зажженным случайным образом.

// inslude the SPI library:
#include <SPI.h>
const int chipSelect = 10;

void setup() {
  // initialize SPI:
  SPI.begin();

  pinMode(chipSelect, OUTPUT);
  
  // set the chipSelect as an output:
  digitalWrite(chipSelect, HIGH);

  sendCommand(0x00, 0x00);
}


void sendCommand(int address,int data) {
  digitalWrite(chipSelect, LOW);
  // отправить адрес и значение через SPI:
  delay(1);
  
  // SPI адресация 0x40 с A0 и A1, установленными на землю, и R/W бит, установленный на выход
  SPI.transfer(0x40); 
  SPI.transfer(address);
  SPI.transfer(data);
  delay(1);
  
  // pin ChipSelect HIGH, чтобы отменить выбор чипа:
  digitalWrite(chipSelect, HIGH);
}

void loop() {
  sendCommand(0x09,0xff);
  delay(1000);
  sendCommand(0x09,0x00);
  delay(1000);
}

У меня есть пара таких устройств, и оба они пришли от поставщика на eBay. Я хотел бы проверить свой код, прежде чем заподозрю, что устройства хитроумны и не являются подлинной частью.

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

Правка

Может быть, это из-за длины моих проводов к Arduino?

, 👍1

Обсуждение

Есть ли у вас конденсатор 100 Нф (0,1 мкФ) между VDD и VSS?, @Majenko

@Majenko да, я знаю, я пропустил это в своей схеме. Я также пробовал подтягивания на линиях spi, хотя они обычно не требуются, но вы никогда не знаете?, @A Devanney

Ваша фотография, похоже, не показывает колпачки 0,1 мкФ на каждом выводе VCC/AVCC ваших устройств (и AREF на 328P тоже - не подключайте AREF к VCC). Это также поможет обеспечить последовательную работу всех 3-х чипов на картинке., @CrossRoads


1 ответ


0

Я понял это, усвоил урок. Я должен был также нарисовать, как моя схема соединяется с Arduino, тогда это, вероятно, стало бы очевидным для меня и всех остальных.

В принципе, у меня был МОСИ -> МОСИ и то же самое с МИСО ->> МИСО, вместо того, чтобы скрещивать их МОСИ ->>> МИСО соответственно.>>>

Схема теперь работает нормально, да!

Лицо-ладонь!

,

MOSI расшифровывается как "Хозяин Вышел, раб вошел". МИСО расшифровывается как "Хозяин в рабстве", так что МОСИ-МОСИ, МИСО-МИСО-это правильная проводка. Схема в вашем вопросе показывает соединения MOSI-SO, МИСО-СИ, что неверно., @per1234