Я планирую реализовать I2C на основе GPIO в atmega16. Так как у него должно быть два контакта SCL, SDA. Вывод SDA должен быть двунаправленным, но я знаю, что мы можем одновременно установить вывод как вход или выход.
Как мы можем это реализовать?
Я планирую реализовать I2C на основе GPIO в atmega16. Так как у него должно быть два контакта SCL, SDA. Вывод SDA должен быть двунаправленным, но я знаю, что мы можем одновременно установить вывод как вход или выход.
Как мы можем это реализовать?
Вывод SDA должен быть двунаправленным, но я знаю, что мы можем одновременно установить вывод как вход или выход.
Это правда, но мастер I2C «знает», когда ожидать входящих данных. Поскольку это синхронная шина, ведущее устройство может переключаться между управлением выходом или переключением в три состояния / вход прямо перед синхронизацией ввода / вывода данных.
Вам может быть полезно следующее примечание по применению от Atmel: Atmel AVR156: TWI Master Bit Bang Driver
В примере от Atmel используется метод опроса, который ограничивает скорость. Если один из ваших GPIO поддерживает прерывание при смене вывода, вы, вероятно, можете использовать это для увеличения скорости, если это необходимо.