Teensy 2.0 с MCP23017-E
Недавно я купил ещё два MCP23017-E для проекта, но, подключив их к Teensy 2.0, я не смог добиться от них никакой реакции. Подозревая неисправное оборудование, я подключил их к старому LCP1114, и они заработали без проблем. Я попытался портировать используемый мной код, но это не дало результата.
Я использую следующий код:
#include "Wire.h"
const byte device=0b01000000; //адрес по умолчанию чипа ввода-вывода
const byte IODIRA=0x00;
const byte IODIRB=0x01;
const byte GPIOA=0x12; // Контакты ввода-вывода, порт A
const byte GPIOB=0x13; // Контакты ввода-вывода, порт B
const byte OLATA=0x14;//вывод контактов A
const byte OLATB=0x15;//Вывод контактов B
const byte GPPUA=0x0C; //подтягивающие резисторы,порт A
const byte GPPUB=0x0D; //подтягивающие резисторы,порт B
char iCounter = 0;
void setup() {
Wire.begin();
seti2cbyte(device,IODIRA,0x00);
seti2cbyte(device,IODIRB,0xFF);
seti2cbyte(device,GPPUB,0xFF); //включаем подтягивающие резисторы на порту B
}
byte geti2cbyte(byte address, byte ptr) {
Wire.beginTransmission(address);
Wire.write(ptr);
Wire.endTransmission();
Wire.requestFrom(address, 1); // запрос одного байта данных от MCP20317
byte inputs=Wire.read();
return inputs;
}
void seti2cbyte(byte address, byte ptr, byte value) {
Wire.beginTransmission(address);
Wire.write(ptr); // устанавливаем указатель памяти MCP23017 на адрес GPPUA
Wire.write(value); // включить подтягивающие резисторы
Wire.endTransmission();
}
void loop() {
seti2cbyte(device,OLATA,iCounter);
byte port_b = geti2cbyte(device,GPIOB); //получить состояние контактов 21-28
Serial.print(iCounter++);Serial.println(port_b);
delay(500);
}
Я не вижу мигающего светодиода, а port_b остаётся на уровне 255 (или -1, как я понял после прочтения Wire.cpp)
Я пробовал разные методы, даже сам запускал SPI (устанавливая выводы высокого и низкого уровня вручную). Единственное отличие, которое я вижу, заключается в том, что Teensy 2.0 работает от 5 В, а LCP1114 — от 3,3 В. Хотя в документации на MCP23017-E указано, что он тоже рассчитан на 5 В.
Почему мне кажется, что мой MCP23017-E не работает при напряжении 5 В, хотя в техническом описании указано, что должен?
Техническое описание MCP23017-E
• Рабочее напряжение: - от 1,8 В до 5,5 В при температуре от -40°C до +85°C - от 2,7 В до 5,5 В при температуре от -40°C до +85°C - 4,5 В - 5,5 В при температуре от -40°C до +125°C

1 ответ
Лучший ответ:
У вас неправильный адрес устройства. Вы включили бит чтения/записи в адрес, чего делать не следует. Адрес I2C состоит всего из 7 бит, а не из 8. Отбросьте один бит:
const byte device=0b0100000; //адрес по умолчанию чипа ввода-вывода
- 5 В MCP2515 в 3.3V Teensy. Как уменьшить напряжение MISO
- Невозможно отобразить строку chr с помощью Wire.read() и u8g2.drawStr().
- Raspberry Pi, Teensy и Arduino на i2c
- Связь Arduino I2C 3,3 В с контроллером двигателя, работающим при напряжении ~6 В
- Устранение неполадок I2C и логического сдвига
- Для чего нужны контакты 5V и VIN?
- Какое максимальное энергопотребление Arduino Nano 3.0?
- Как определить Arduino Mini Pro 5v vs 3.3 v