Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: непонятные проблемы с TWI
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
abbot
Пытаюсь свзять ATmega128L и ATmega8L по I2C/TWI, и там и там использую аппаратный.

ATmega128 - Master Transmitter, ATmega8 - Slave Receiver.
Как правило все работает нормально, но иногда случается странная проблема: master не может сгенерировать start condition. Slave при этом вроде бы ничего не делает, и линию не держит. Ресет не помагает, ситуация исправляется только после отключения питания на Slave'е. Если код на ATmega128 запускать под JTAG-отладчиком, то вероятность возникновения такой ситуации резко увеличивается.

Питание 3.3В, подтяжки на I2C по 4.7k, скорость выставлена ~57600 bit/sec (кварц 7.3728МГц, TWBR=0x38, TWPS=0), расстояние между контроллерами ~10см.

Если контроллеры поменять местами, ситуация тоже иногда возникает, и питание нужно убирать опять же на Slave'е.

В чем же могут быть грабли? Уже окончательно задолбался с этими подвисаниями sad.gif
haker_fox
Поищите по ветке форума, было несколько тем про TWI, может что-нибудь найдете полезное.
IgorKossak
Почитайте приложенный документ.
Возможно это то, что Вам нужно.
KRS
Такая ситуация возникает если линия SCL или SDA оказыватеся приятнутой к земле. К сожалению у AVR нет аппаратного таймаута и модуль TWI просто зависает пока линии не осовободятся.
Надо делать софтом... если по таймауту операция не завершилась отключать TWI и ждать пока SDA и SCL не установятся в 1.
И на слейве тоже полезно по таймауту вытсавлять STOP (или отключать и подключать TWI)

Обычно такая ситуация возникает при ошибках на шине ( пропущенный клок....) слейв просто удерживает линию SDA в 0
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.