реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> непонятные проблемы с TWI
abbot
сообщение Feb 26 2006, 13:10
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 16-02-06
Пользователь №: 14 395



Пытаюсь свзять 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
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Feb 27 2006, 02:31
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Поищите по ветке форума, было несколько тем про TWI, может что-нибудь найдете полезное.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Feb 27 2006, 12:08
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Почитайте приложенный документ.
Возможно это то, что Вам нужно.
Прикрепленные файлы
Прикрепленный файл  I2C_interrupting_read.pdf ( 31.73 килобайт ) Кол-во скачиваний: 115
 
Go to the top of the page
 
+Quote Post
KRS
сообщение Feb 27 2006, 13:22
Сообщение #4


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Такая ситуация возникает если линия SCL или SDA оказыватеся приятнутой к земле. К сожалению у AVR нет аппаратного таймаута и модуль TWI просто зависает пока линии не осовободятся.
Надо делать софтом... если по таймауту операция не завершилась отключать TWI и ждать пока SDA и SCL не установятся в 1.
И на слейве тоже полезно по таймауту вытсавлять STOP (или отключать и подключать TWI)

Обычно такая ситуация возникает при ошибках на шине ( пропущенный клок....) слейв просто удерживает линию SDA в 0
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.0161 секунд с 7
ELECTRONIX ©2004-2016