Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ATmega128+AD7745
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
beginer
Уважаемые!
Кто реализовывал работу интерфейса I2C на ATmega128 помогите советом. Никак не могу понять в чем у меня ошибка. Суть проблемы:
Не инициализируется аппаратный TWI. Возвращает коды состояния отличные от указанной в документации. Иногда появляются коды с арбитражем. Пробовал всевозможные установки порта D. Наверно здесь есть какая-нибудь особенность. Подскажите пожалуйста кто знает.
Yura_K
Приведите, пожалуйста, код инициализации и прерывания TWI.
beginer
Код инициализации:
LDI R16,0x1C ; Коэфф.деления TWBR при f=7,3728 МГц
STS TWBR,R16 ;
LDI R16,0b00000100 ; Разрешить работу интерфейса

Прерывания не используются, работаем по опросу флага TWINT.
bodja74
А теперь выкладывайте все остальное.
beginer
Контроль корректности выполнения операций сейчас не используется. Устал с ним воевать.
Имеется ввиду проверка состояния бита Т.

P.S. Извините, что так тормозно отвечаю. Инет на работе глючит по-страшному.
Dopler
Я в код сильно не вникал, выкладываю свои рабочие подпрограммы (данная версия для M48, но это не принципиально):


Внешние подтяжки обязательно.
IgorKossak
beginer, Dopler, предлагаю Вам в двухдневный срок втиснуть Ваши длинные тексты в прикрепляемые к сообщениям файлы.
Иначе через два дня буду наказывать предупреждениями за нарушение правил.
beginer
Dopler
Спасибо, завтра поковыряем Ваши подпрограммы.

IgorKossak
Не хочу быть злостным правонарушителем, но никак не найду кнопку "Правка", чтобы отредактировать своё сообщение. Ещё не подскажите, почему я не вижу половины сообщений в данной теме, когда захожу на форум на работе? Может это из-за использования прокси-сервера? Дома захожу без прокси - всё отлично.
IgorKossak
Цитата(beginer @ May 23 2007, 19:33) *
IgorKossak
Не хочу быть злостным правонарушителем, но никак не найду кнопку "Правка", чтобы отредактировать своё сообщение.

Ладно, сам поправлю.
Цитата(beginer @ May 23 2007, 19:33) *
Ещё не подскажите, почему я не вижу половины сообщений в данной теме, когда захожу на форум на работе? Может это из-за использования прокси-сервера? Дома захожу без прокси - всё отлично.

Возможно куки некорректно принимаются. У меня на работе с прокси всё нормально.
И ещё можете с Вашим сисадмином пообщаться об этом.
beginer
Dopler
Попробовали Ваши подпрограммы. В результате инициализация проходит, старт и стоп - работают. При передаче адреса данных и приёме данных код регистра TWSR равен 0x84. Пробовали с двумя различными микросхемами (чтобы исключить вероятнсть неисправности ведомой микросхемы) - AD7745 и 24C16 (микросхема памяти). При просмотре состояния линий после передачи линия SCL оказывается в низком уровне. С подтягивающими резисторами всё в норме (используем по 5 кОм). Никак не пойму где же всё-таки ошибка. Особо интересует, откуда берётся код 0x84?
defunct
Цитата(beginer @ May 24 2007, 14:27) *
При просмотре состояния линий после передачи линия SCL оказывается в низком уровне. С подтягивающими резисторами всё в норме (используем по 5 кОм). Никак не пойму где же всё-таки ошибка.

Низкий уровень на мой взгляд выдает ведомое устройство.
Как это может случиться - при чтении последний байт данных должен быть "NACKed",
если же послыется ACK - ведомое устройство считает что передача не закончена и может проигнорировать STOP.

На асме обслуживание Twi - "сизифов труд".. у вас же ж все-таки не t13 где ужимать надо все что можно. Почему выбрали asm?

Если интересует я бы мог поделиться примером TWI драйвера на Cи.
Сергей Борщ
Цитата(defunct @ May 25 2007, 18:06) *
Низкий уровень на мой взгляд выдает ведомое устройство.
Как это может случиться - при чтении последний байт данных должен быть "NACKed",
Не, не путайте человека - ведомое может "придерживать" SCL чтобы притормаживать обмен, но не держать его постоянно в нуле, к тому же память 24хх на такое не способна. Это вы с SDA спутали. А кстати вопрос - не попутал ли автор SCL и SDA? И еще - проверить кто тянет можно если включить небольшой (100-200 ом) резистор в разрыв этой линии.
defunct
Цитата(Сергей Борщ @ May 25 2007, 20:48) *
Это вы с SDA спутали.

Да, конечно, я говорил про SDA. Прошу прощения не углядел SCL в описании проблемы.

Если автор наблюдает проблему с SCL, то это imho все равно следствие того, что SDA в нуле:

SCL - затормозится при попытке выдачи STOP состояния (SDA ведь 0), т.е. аппаратная часть не может сформировать ни START, ни STOP.
beginer
Сергей Борщ
Цитата
А кстати вопрос - не попутал ли автор SCL и SDA?

Вообще, честно говоря, я программированием микроконтроллеров не занимаюсь. Моя роль в данном проекте - всего лишь написать программу для ПК, которая бы общалась с микроконтроллером посредством интерфейса RS-232. А программированием контроллера занимается другой человек. Однако все вопросы, что я здесь задаю - с его слов. Он хороший специалист, отлично разбирается в схемотехнике. Я не думаю, что он мог бы перепутать линии SCL и SDA. К тому же мы вместе проверяли - в нуле после передачи постоянно остается только SCL, а SDA - в высоком уровне.

defunct
Цитата
т.е. аппаратная часть не может сформировать ни START, ни STOP.

Не знаю, вроде бы старт и стоп как раз формируются. С остальным - проблемы. Хотя тут есть ещё кое-что. Сегодня звонили в саппорт фирмы, в которой покупали плату AS-megaM (плата на основе того самого ATmega128 с распаянной на плате периферией, типа COM-порта, кнопками и т. п.). Так вот в саппорте сказали что по описанию похоже, что проблема в убитом блоке контроллера, отвечающем за реализацию TWI. Похоже что столкнулись с бракованным контроллером. В общем теперь думаем брать ещё контроллер (на этот раз без платы), выпаивать из платы старый, и сажать на неё новый.
В пользу теории о бракованном контроллере говорит также то, что на ATmega8 при реализации связи с микросхемой 24C16 наши программы заработали (только порт D сменили на С). В общем в понедельник ещё попробуем поработать с этим контроллером (обещал подойти ещё один специалист), если не выйдет, то будем пробовать новый.
Если кому интересно, могу попозже здесь написать как же всё-таки разрешилась данная ситуация.
Сергей Борщ
Цитата(beginer @ May 26 2007, 02:43) *
Если кому интересно, могу попозже здесь написать как же всё-таки разрешилась данная ситуация.
Конечно интересно. Это правило хорошего тона на любом форуме.
beginer
Ничего не получилось. sad.gif Контоллер на плате перепаяли, да не правильно (задели дорожки). Теперь новый ATmega128 на плате греется как печка. Где-то наверно к.з. Будем разбираться.
Вообще по поводу TWI на ATmega. Потестили 4 контроллера ATmega8 на предмет реализации TWI (там ничего не перепаивали, только контроллеры в сокетах меняли). Так вот, только 2 из них оказались полностью рабочими (у одного вообще не работали порты, у другого - TWI). Такая вот нехорошая статистика. Так что при реализации подобных вещей нужно учитывать ещё и весьма высокую вероятность нерабочего контроллера.
Ridllem
Цитата(beginer @ Jun 1 2007, 15:20) *
Ничего не получилось. sad.gif Контоллер на плате перепаяли, да не правильно (задели дорожки). Теперь новый ATmega128 на плате греется как печка. Где-то наверно к.з. Будем разбираться.
Вообще по поводу TWI на ATmega. Потестили 4 контроллера ATmega8 на предмет реализации TWI (там ничего не перепаивали, только контроллеры в сокетах меняли). Так вот, только 2 из них оказались полностью рабочими (у одного вообще не работали порты, у другого - TWI). Такая вот нехорошая статистика. Так что при реализации подобных вещей нужно учитывать ещё и весьма высокую вероятность нерабочего контроллера.


Не спешите к такому выводу, я вот уже сколько с контроллерами работаю вероятность нерабочего очень низка. Все зависит от того как и чем вы его припаиваете, передерживаете ли перегреваете, может сама схема неправильная,что и выводит его из строя. Еще есть такое понятие как статика.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.