|
ATmega128+AD7745, Непонятки с I2C |
|
|
|
May 21 2007, 07:58
|
Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212

|
Уважаемые! Кто реализовывал работу интерфейса I2C на ATmega128 помогите советом. Никак не могу понять в чем у меня ошибка. Суть проблемы: Не инициализируется аппаратный TWI. Возвращает коды состояния отличные от указанной в документации. Иногда появляются коды с арбитражем. Пробовал всевозможные установки порта D. Наверно здесь есть какая-нибудь особенность. Подскажите пожалуйста кто знает.
|
|
|
|
|
May 21 2007, 12:57
|
Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 5-05-06
Из: Ekaterinburg, Russia
Пользователь №: 16 821

|
Приведите, пожалуйста, код инициализации и прерывания TWI.
--------------------
Чудес не бывает - бывает мало знаний и опыта!
|
|
|
|
|
May 22 2007, 10:03
|
Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212

|
Код инициализации: LDI R16,0x1C ; Коэфф.деления TWBR при f=7,3728 МГц STS TWBR,R16 ; LDI R16,0b00000100 ; Разрешить работу интерфейса
Прерывания не используются, работаем по опросу флага TWINT.
|
|
|
|
|
May 23 2007, 08:16
|
Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212

|
Контроль корректности выполнения операций сейчас не используется. Устал с ним воевать. Имеется ввиду проверка состояния бита Т. P.S. Извините, что так тормозно отвечаю. Инет на работе глючит по-страшному.
Сообщение отредактировал IgorKossak - May 23 2007, 16:47
Прикрепленные файлы
code.zip ( 1.55 килобайт )
Кол-во скачиваний: 60
|
|
|
|
|
May 23 2007, 13:30
|
Местный
  
Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425

|
Я в код сильно не вникал, выкладываю свои рабочие подпрограммы (данная версия для M48, но это не принципиально): Внешние подтяжки обязательно.
Прикрепленные файлы
twi.txt ( 5.34 килобайт )
Кол-во скачиваний: 169
|
|
|
|
|
May 23 2007, 16:33
|
Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212

|
Dopler Спасибо, завтра поковыряем Ваши подпрограммы.
IgorKossak Не хочу быть злостным правонарушителем, но никак не найду кнопку "Правка", чтобы отредактировать своё сообщение. Ещё не подскажите, почему я не вижу половины сообщений в данной теме, когда захожу на форум на работе? Может это из-за использования прокси-сервера? Дома захожу без прокси - всё отлично.
|
|
|
|
|
May 23 2007, 16:45
|

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

|
Цитата(beginer @ May 23 2007, 19:33)  IgorKossak Не хочу быть злостным правонарушителем, но никак не найду кнопку "Правка", чтобы отредактировать своё сообщение. Ладно, сам поправлю. Цитата(beginer @ May 23 2007, 19:33)  Ещё не подскажите, почему я не вижу половины сообщений в данной теме, когда захожу на форум на работе? Может это из-за использования прокси-сервера? Дома захожу без прокси - всё отлично. Возможно куки некорректно принимаются. У меня на работе с прокси всё нормально. И ещё можете с Вашим сисадмином пообщаться об этом.
|
|
|
|
|
May 24 2007, 11:27
|
Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212

|
Dopler Попробовали Ваши подпрограммы. В результате инициализация проходит, старт и стоп - работают. При передаче адреса данных и приёме данных код регистра TWSR равен 0x84. Пробовали с двумя различными микросхемами (чтобы исключить вероятнсть неисправности ведомой микросхемы) - AD7745 и 24C16 (микросхема памяти). При просмотре состояния линий после передачи линия SCL оказывается в низком уровне. С подтягивающими резисторами всё в норме (используем по 5 кОм). Никак не пойму где же всё-таки ошибка. Особо интересует, откуда берётся код 0x84?
|
|
|
|
|
May 25 2007, 15:06
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(beginer @ May 24 2007, 14:27)  При просмотре состояния линий после передачи линия SCL оказывается в низком уровне. С подтягивающими резисторами всё в норме (используем по 5 кОм). Никак не пойму где же всё-таки ошибка. Низкий уровень на мой взгляд выдает ведомое устройство. Как это может случиться - при чтении последний байт данных должен быть "NACKed", если же послыется ACK - ведомое устройство считает что передача не закончена и может проигнорировать STOP. На асме обслуживание Twi - "сизифов труд".. у вас же ж все-таки не t13 где ужимать надо все что можно. Почему выбрали asm? Если интересует я бы мог поделиться примером TWI драйвера на Cи.
|
|
|
|
|
May 25 2007, 23:43
|
Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212

|
Сергей БорщЦитата А кстати вопрос - не попутал ли автор SCL и SDA? Вообще, честно говоря, я программированием микроконтроллеров не занимаюсь. Моя роль в данном проекте - всего лишь написать программу для ПК, которая бы общалась с микроконтроллером посредством интерфейса RS-232. А программированием контроллера занимается другой человек. Однако все вопросы, что я здесь задаю - с его слов. Он хороший специалист, отлично разбирается в схемотехнике. Я не думаю, что он мог бы перепутать линии SCL и SDA. К тому же мы вместе проверяли - в нуле после передачи постоянно остается только SCL, а SDA - в высоком уровне. defunctЦитата т.е. аппаратная часть не может сформировать ни START, ни STOP. Не знаю, вроде бы старт и стоп как раз формируются. С остальным - проблемы. Хотя тут есть ещё кое-что. Сегодня звонили в саппорт фирмы, в которой покупали плату AS-megaM (плата на основе того самого ATmega128 с распаянной на плате периферией, типа COM-порта, кнопками и т. п.). Так вот в саппорте сказали что по описанию похоже, что проблема в убитом блоке контроллера, отвечающем за реализацию TWI. Похоже что столкнулись с бракованным контроллером. В общем теперь думаем брать ещё контроллер (на этот раз без платы), выпаивать из платы старый, и сажать на неё новый. В пользу теории о бракованном контроллере говорит также то, что на ATmega8 при реализации связи с микросхемой 24C16 наши программы заработали (только порт D сменили на С). В общем в понедельник ещё попробуем поработать с этим контроллером (обещал подойти ещё один специалист), если не выйдет, то будем пробовать новый. Если кому интересно, могу попозже здесь написать как же всё-таки разрешилась данная ситуация.
Сообщение отредактировал beginer - May 25 2007, 23:45
|
|
|
|
|
Jun 1 2007, 08:20
|
Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212

|
Ничего не получилось.  Контоллер на плате перепаяли, да не правильно (задели дорожки). Теперь новый ATmega128 на плате греется как печка. Где-то наверно к.з. Будем разбираться. Вообще по поводу TWI на ATmega. Потестили 4 контроллера ATmega8 на предмет реализации TWI (там ничего не перепаивали, только контроллеры в сокетах меняли). Так вот, только 2 из них оказались полностью рабочими (у одного вообще не работали порты, у другого - TWI). Такая вот нехорошая статистика. Так что при реализации подобных вещей нужно учитывать ещё и весьма высокую вероятность нерабочего контроллера.
|
|
|
|
|
Jun 1 2007, 09:15
|
Группа: Новичок
Сообщений: 9
Регистрация: 11-10-06
Пользователь №: 21 211

|
Цитата(beginer @ Jun 1 2007, 15:20)  Ничего не получилось.  Контоллер на плате перепаяли, да не правильно (задели дорожки). Теперь новый ATmega128 на плате греется как печка. Где-то наверно к.з. Будем разбираться. Вообще по поводу TWI на ATmega. Потестили 4 контроллера ATmega8 на предмет реализации TWI (там ничего не перепаивали, только контроллеры в сокетах меняли). Так вот, только 2 из них оказались полностью рабочими (у одного вообще не работали порты, у другого - TWI). Такая вот нехорошая статистика. Так что при реализации подобных вещей нужно учитывать ещё и весьма высокую вероятность нерабочего контроллера. Не спешите к такому выводу, я вот уже сколько с контроллерами работаю вероятность нерабочего очень низка. Все зависит от того как и чем вы его припаиваете, передерживаете ли перегреваете, может сама схема неправильная,что и выводит его из строя. Еще есть такое понятие как статика.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|