Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Atmega128 проблемы с флагом TWINT
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Nekromant
Доброго всем времени суток.
С недавнего времени подвернулся проектик который собираю на AtMega 128,в данном проекте нужно запустить TWI интерфейс, для считывания показаний времени со счетчика DS1307. И все бы хорошо и много веток нашлось на данном форме, НО ни в одном из случаев контроллер не может ничего счтитать.
При попытке разгобраться в чем проблема выяснилось, что при попытке записать данные в регистр-TWDR данные, в регистре TWCR устанавливается флаг TWWC - ошибочная запись.
из даташита выяснилось что: После успешной передачи ПОДЧИН_АДР + ЗАПИСЬ должен быть передан пакет данных. Его передача инициируется записью байта данных в TWDR. Доступ на запись к TWDR разрешен только тогда, когда флаг TWINT равен 1. В противном случае доступ блокируется и устанавливается флаг ошибочной записи TWWC в регистре TWCR. После обновления TWDR необходимо сбросить бит TWINT (путем записи в него лог. 1) для продолжения сеанса связи.(стр 215 оригинального даташита на Atmega128-engl)
я в свою очередь после этого попытался вручную установить сначала один бит TWINи записать данные:
TWCR|=(1<<TWINT);
TWDR = adr;
twcr=TWCR;
Lcd.WriteInt(twcr);- но на дисплее получил число 44 что означает? что бит TWWC установился снова.
далее попробовал полностью в регистр TWCR записать все единицы

TWCR|=((1<<TWINT)|(1<<TWEA)|(1<<TWSTA)|(1<<TWSTO)|(1<<TWWC)|(1<<TWIE));
и так
TWCR=255; но на мое удивление при записи и последующем считывании снова получил, что бит TWINT установлен в 0.
итак суть вопроса: как правильно сделать запись, чтоб данные в регистр TWDR попали и при этом бит TWWC не установился?
PS да и бит TWEN в регистре TWCR естественно включено и состояние регистра TWBR=255 и значение предделителей TWPS0 и TWPS1 в единицы.(самая медленная скорость, так как за неимением осциллографа пользуемся дедушким методом отладки-светодиоды вешаем на линии и пытаемся понять хоть что уходит с МК для начала).
Nekromant
Тема закрыта, проблема с флагом решена. в Atmega оказался нерабочий TWI модуль. на двух таких же 128 и еще четырех 32 регистр TWDR обновляется без проблем
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.