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

Обзор Крупный план Teensy. Да, я подключил USB-кабель во время тестирования.

, 👍1


1 ответ


Лучший ответ:

1

У вас неправильный адрес устройства. Вы включили бит чтения/записи в адрес, чего делать не следует. Адрес I2C состоит всего из 7 бит, а не из 8. Отбросьте один бит:

const byte device=0b0100000; //адрес по умолчанию чипа ввода-вывода
,