Расширитель портов с интерфейсом I2C на один 8-битный порт.
Есть в Proteus такой интересный компонент PCA9554. Его удобно использовать когда нужно отладить работу I2C в микроконтроллере. Это такая микросхема с интерфейсом I2C и 8-битным портом ввода/вывода.
Вот его схема:
Выводы
A0-A2 задают адрес I2C
SCL, SDA – сам I2C
Vdd, Vss – питание и земля
IO0-IO7 – порт ввода/вывода
INT – прерывание. Появляется при изменении состояния в порту IO, если порт настроен на ввод
Регистры:
Command byte - передается сразу после адреса устройства. Указывает в какой регистр будет производиться чтение/запись. Может принимать следующие значения:
0 – Input Port register (чтение)
1 – Output Port register (чтение/запись)
2 – Polarity Inversion register (чтение/запись)
3 – Configuration register (чтение/запись)
Register 0 -Input Port register
Из этого регистра возможно только чтение. В нем содержится состояние порта IO, если он настроен на ввод.
Register 1 – Output Port register
Записанное в этот регистр значение выводится в порт IO, если он настроен на вывод.
Register 2 – Polarity Inversion register
Этот регистр позволяет инвертировать значение находящееся в регистре Input. Если бит этого регистра установлен в лог 1, то соответствующий бит регистра Input будет инвертирован. По умолчанию все биты регистра установлены в лог 0.
Register 3 – Configuration register
Этот регистр настраивает выводы порта на ввод или на вывод. Если бит этого регистра установлен в лог 1, то соответствующий вывод порта будет работать на ввод. Если бит регистра будет установлен в лог 0, то соответствующий вывод порта будет настроен на вывод. По умолчанию все биты этого регистра установлены в лог 1, то есть порт настроен на ввод.
Вывод прерывания
Устанавливается в лог 1, если изменилось значение на выводах порта и порт установлен на ввод. Возвращается в лог 0, если на выводах порта устанавливается предыдущее значение или если из регистра Input было прочитано значение.
Четыре бита заданы жестко. Биты A0-A2 устанавливаются подачей лог 0 или лог 1 на соответствующие выводы устройства.
Не забывайте, что перед записью значения в порт, его надо настроить на вывод.
Пример записи в порт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | // Состояние СТАРТ I2C_START(); // Адрес устройства I2C_ADDR(0b01001110); // Command byte == 3, выбор конфигурационного регистра I2C_WRITE(0x03); // Настраиваю порт на вывод I2C_WRITE(0x00); // Состояние ПОВСТАРТ I2C_START(); // Адрес устройства I2C_ADDR(0b01001110); // Command byte == 0, выбор регистра Output I2C_WRITE(0x03); // Записываю в порт число 0xA0 I2C_WRITE(0xA0); // Состояние СТОП I2C_STOP(); |



Похожие статьи
Нет отзывов к этой записи