SPI MCP23S08 для Arduino: странное поведение stop/start
Я построил минимальную макетную схему Arduino для тестирования некоторых деталей, которые недавно купил, и мне успешно удалось заставить I2C MCP23008 отлично работать со светодиодами и жидкокристаллическим дисплеем.
Однако совсем недавно я попытался использовать SPI-версию того же чипа с некоторыми действительно странными результатами. Я пробовал искать примеры кода и библиотеки, но изо всех сил старался заставить что-нибудь работать.
Поэтому я изучил таблицу данных, чтобы создать следующий код для мигания светодиода, однако мигание, похоже, работает только ненадолго, а затем прекращается. Иногда он останавливается, а затем остается зажженным случайным образом.
// 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?
@A Devanney, 👍1
Обсуждение1 ответ
Я понял это, усвоил урок. Я должен был также нарисовать, как моя схема соединяется с Arduino, тогда это, вероятно, стало бы очевидным для меня и всех остальных.
В принципе, у меня был МОСИ -> МОСИ и то же самое с МИСО ->> МИСО, вместо того, чтобы скрещивать их МОСИ ->>> МИСО соответственно.>>>
Схема теперь работает нормально, да!
Лицо-ладонь!
MOSI расшифровывается как "Хозяин Вышел, раб вошел". МИСО расшифровывается как "Хозяин в рабстве", так что МОСИ-МОСИ, МИСО-МИСО-это правильная проводка. Схема в вашем вопросе показывает соединения MOSI-SO, МИСО-СИ, что неверно., @per1234
- Как использовать SPI на Arduino?
- Как увеличить скорость записи на SD-карту в Ардуино
- Как считывать данные с помощью Arduino SPI
- Как передать более 1 байта сразу по шине SPI?
- OVF в последовательном мониторе вместо данных
- Как отправить строку с подчиненного устройства Arduino с помощью SPI?
- Проблема совместного использования MISO с несколькими RFID-считывателями RC522
- Путаница между SPI и I2C для SSD1306 OLED
Есть ли у вас конденсатор 100 Нф (0,1 мкФ) между VDD и VSS?, @Majenko
@Majenko да, я знаю, я пропустил это в своей схеме. Я также пробовал подтягивания на линиях spi, хотя они обычно не требуются, но вы никогда не знаете?, @A Devanney
Ваша фотография, похоже, не показывает колпачки 0,1 мкФ на каждом выводе VCC/AVCC ваших устройств (и AREF на 328P тоже - не подключайте AREF к VCC). Это также поможет обеспечить последовательную работу всех 3-х чипов на картинке., @CrossRoads