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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> ATmega128+AD7745, Непонятки с I2C
beginer
сообщение May 21 2007, 07:58
Сообщение #1





Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212



Уважаемые!
Кто реализовывал работу интерфейса I2C на ATmega128 помогите советом. Никак не могу понять в чем у меня ошибка. Суть проблемы:
Не инициализируется аппаратный TWI. Возвращает коды состояния отличные от указанной в документации. Иногда появляются коды с арбитражем. Пробовал всевозможные установки порта D. Наверно здесь есть какая-нибудь особенность. Подскажите пожалуйста кто знает.
Go to the top of the page
 
+Quote Post
Yura_K
сообщение May 21 2007, 12:57
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 185
Регистрация: 5-05-06
Из: Ekaterinburg, Russia
Пользователь №: 16 821



Приведите, пожалуйста, код инициализации и прерывания TWI.


--------------------
Чудес не бывает - бывает мало знаний и опыта!
Go to the top of the page
 
+Quote Post
beginer
сообщение May 22 2007, 10:03
Сообщение #3





Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212



Код инициализации:
LDI R16,0x1C ; Коэфф.деления TWBR при f=7,3728 МГц
STS TWBR,R16 ;
LDI R16,0b00000100 ; Разрешить работу интерфейса

Прерывания не используются, работаем по опросу флага TWINT.
Go to the top of the page
 
+Quote Post
bodja74
сообщение May 22 2007, 10:18
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



А теперь выкладывайте все остальное.
Go to the top of the page
 
+Quote Post
beginer
сообщение May 23 2007, 08:16
Сообщение #5





Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212



Контроль корректности выполнения операций сейчас не используется. Устал с ним воевать.
Имеется ввиду проверка состояния бита Т.

P.S. Извините, что так тормозно отвечаю. Инет на работе глючит по-страшному.

Сообщение отредактировал IgorKossak - May 23 2007, 16:47
Прикрепленные файлы
Прикрепленный файл  code.zip ( 1.55 килобайт ) Кол-во скачиваний: 60
 
Go to the top of the page
 
+Quote Post
Dopler
сообщение May 23 2007, 13:30
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 437
Регистрация: 23-04-05
Из: Таганрог
Пользователь №: 4 425



Я в код сильно не вникал, выкладываю свои рабочие подпрограммы (данная версия для M48, но это не принципиально):


Внешние подтяжки обязательно.
Прикрепленные файлы
Прикрепленный файл  twi.txt ( 5.34 килобайт ) Кол-во скачиваний: 169
 
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение May 23 2007, 15:55
Сообщение #7


Шаман
******

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



beginer, Dopler, предлагаю Вам в двухдневный срок втиснуть Ваши длинные тексты в прикрепляемые к сообщениям файлы.
Иначе через два дня буду наказывать предупреждениями за нарушение правил.
Go to the top of the page
 
+Quote Post
beginer
сообщение May 23 2007, 16:33
Сообщение #8





Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212



Dopler
Спасибо, завтра поковыряем Ваши подпрограммы.

IgorKossak
Не хочу быть злостным правонарушителем, но никак не найду кнопку "Правка", чтобы отредактировать своё сообщение. Ещё не подскажите, почему я не вижу половины сообщений в данной теме, когда захожу на форум на работе? Может это из-за использования прокси-сервера? Дома захожу без прокси - всё отлично.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение May 23 2007, 16:45
Сообщение #9


Шаман
******

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



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

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

Возможно куки некорректно принимаются. У меня на работе с прокси всё нормально.
И ещё можете с Вашим сисадмином пообщаться об этом.
Go to the top of the page
 
+Quote Post
beginer
сообщение May 24 2007, 11:27
Сообщение #10





Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212



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


кекс
******

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



Цитата(beginer @ May 24 2007, 14:27) *
При просмотре состояния линий после передачи линия SCL оказывается в низком уровне. С подтягивающими резисторами всё в норме (используем по 5 кОм). Никак не пойму где же всё-таки ошибка.

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

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

Если интересует я бы мог поделиться примером TWI драйвера на Cи.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 25 2007, 17:48
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
defunct
сообщение May 25 2007, 22:30
Сообщение #13


кекс
******

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



Цитата(Сергей Борщ @ May 25 2007, 20:48) *
Это вы с SDA спутали.

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

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

SCL - затормозится при попытке выдачи STOP состояния (SDA ведь 0), т.е. аппаратная часть не может сформировать ни START, ни STOP.
Go to the top of the page
 
+Quote Post
beginer
сообщение May 25 2007, 23:43
Сообщение #14





Группа: Новичок
Сообщений: 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
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 26 2007, 10:02
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(beginer @ May 26 2007, 02:43) *
Если кому интересно, могу попозже здесь написать как же всё-таки разрешилась данная ситуация.
Конечно интересно. Это правило хорошего тона на любом форуме.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
beginer
сообщение Jun 1 2007, 08:20
Сообщение #16





Группа: Новичок
Сообщений: 12
Регистрация: 20-04-07
Пользователь №: 27 212



Ничего не получилось. sad.gif Контоллер на плате перепаяли, да не правильно (задели дорожки). Теперь новый ATmega128 на плате греется как печка. Где-то наверно к.з. Будем разбираться.
Вообще по поводу TWI на ATmega. Потестили 4 контроллера ATmega8 на предмет реализации TWI (там ничего не перепаивали, только контроллеры в сокетах меняли). Так вот, только 2 из них оказались полностью рабочими (у одного вообще не работали порты, у другого - TWI). Такая вот нехорошая статистика. Так что при реализации подобных вещей нужно учитывать ещё и весьма высокую вероятность нерабочего контроллера.
Go to the top of the page
 
+Quote Post
Ridllem
сообщение Jun 1 2007, 09:15
Сообщение #17





Группа: Новичок
Сообщений: 9
Регистрация: 11-10-06
Пользователь №: 21 211



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


Не спешите к такому выводу, я вот уже сколько с контроллерами работаю вероятность нерабочего очень низка. Все зависит от того как и чем вы его припаиваете, передерживаете ли перегреваете, может сама схема неправильная,что и выводит его из строя. Еще есть такое понятие как статика.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 04:32
Рейтинг@Mail.ru


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