beginer 0 21 мая, 2007 Опубликовано 21 мая, 2007 · Жалоба Уважаемые! Кто реализовывал работу интерфейса I2C на ATmega128 помогите советом. Никак не могу понять в чем у меня ошибка. Суть проблемы: Не инициализируется аппаратный TWI. Возвращает коды состояния отличные от указанной в документации. Иногда появляются коды с арбитражем. Пробовал всевозможные установки порта D. Наверно здесь есть какая-нибудь особенность. Подскажите пожалуйста кто знает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yura_K 0 21 мая, 2007 Опубликовано 21 мая, 2007 · Жалоба Приведите, пожалуйста, код инициализации и прерывания TWI. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beginer 0 22 мая, 2007 Опубликовано 22 мая, 2007 · Жалоба Код инициализации: LDI R16,0x1C ; Коэфф.деления TWBR при f=7,3728 МГц STS TWBR,R16 ; LDI R16,0b00000100 ; Разрешить работу интерфейса Прерывания не используются, работаем по опросу флага TWINT. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bodja74 0 22 мая, 2007 Опубликовано 22 мая, 2007 · Жалоба А теперь выкладывайте все остальное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beginer 0 23 мая, 2007 Опубликовано 23 мая, 2007 (изменено) · Жалоба Контроль корректности выполнения операций сейчас не используется. Устал с ним воевать. Имеется ввиду проверка состояния бита Т. P.S. Извините, что так тормозно отвечаю. Инет на работе глючит по-страшному. code.zip Изменено 23 мая, 2007 пользователем IgorKossak Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dopler 0 23 мая, 2007 Опубликовано 23 мая, 2007 · Жалоба Я в код сильно не вникал, выкладываю свои рабочие подпрограммы (данная версия для M48, но это не принципиально): Внешние подтяжки обязательно. twi.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 23 мая, 2007 Опубликовано 23 мая, 2007 · Жалоба beginer, Dopler, предлагаю Вам в двухдневный срок втиснуть Ваши длинные тексты в прикрепляемые к сообщениям файлы. Иначе через два дня буду наказывать предупреждениями за нарушение правил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beginer 0 23 мая, 2007 Опубликовано 23 мая, 2007 · Жалоба Dopler Спасибо, завтра поковыряем Ваши подпрограммы. IgorKossak Не хочу быть злостным правонарушителем, но никак не найду кнопку "Правка", чтобы отредактировать своё сообщение. Ещё не подскажите, почему я не вижу половины сообщений в данной теме, когда захожу на форум на работе? Может это из-за использования прокси-сервера? Дома захожу без прокси - всё отлично. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 23 мая, 2007 Опубликовано 23 мая, 2007 · Жалоба IgorKossak Не хочу быть злостным правонарушителем, но никак не найду кнопку "Правка", чтобы отредактировать своё сообщение. Ладно, сам поправлю. Ещё не подскажите, почему я не вижу половины сообщений в данной теме, когда захожу на форум на работе? Может это из-за использования прокси-сервера? Дома захожу без прокси - всё отлично. Возможно куки некорректно принимаются. У меня на работе с прокси всё нормально. И ещё можете с Вашим сисадмином пообщаться об этом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beginer 0 24 мая, 2007 Опубликовано 24 мая, 2007 · Жалоба Dopler Попробовали Ваши подпрограммы. В результате инициализация проходит, старт и стоп - работают. При передаче адреса данных и приёме данных код регистра TWSR равен 0x84. Пробовали с двумя различными микросхемами (чтобы исключить вероятнсть неисправности ведомой микросхемы) - AD7745 и 24C16 (микросхема памяти). При просмотре состояния линий после передачи линия SCL оказывается в низком уровне. С подтягивающими резисторами всё в норме (используем по 5 кОм). Никак не пойму где же всё-таки ошибка. Особо интересует, откуда берётся код 0x84? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 25 мая, 2007 Опубликовано 25 мая, 2007 · Жалоба При просмотре состояния линий после передачи линия SCL оказывается в низком уровне. С подтягивающими резисторами всё в норме (используем по 5 кОм). Никак не пойму где же всё-таки ошибка. Низкий уровень на мой взгляд выдает ведомое устройство. Как это может случиться - при чтении последний байт данных должен быть "NACKed", если же послыется ACK - ведомое устройство считает что передача не закончена и может проигнорировать STOP. На асме обслуживание Twi - "сизифов труд".. у вас же ж все-таки не t13 где ужимать надо все что можно. Почему выбрали asm? Если интересует я бы мог поделиться примером TWI драйвера на Cи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 124 25 мая, 2007 Опубликовано 25 мая, 2007 · Жалоба Низкий уровень на мой взгляд выдает ведомое устройство. Как это может случиться - при чтении последний байт данных должен быть "NACKed", Не, не путайте человека - ведомое может "придерживать" SCL чтобы притормаживать обмен, но не держать его постоянно в нуле, к тому же память 24хх на такое не способна. Это вы с SDA спутали. А кстати вопрос - не попутал ли автор SCL и SDA? И еще - проверить кто тянет можно если включить небольшой (100-200 ом) резистор в разрыв этой линии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 25 мая, 2007 Опубликовано 25 мая, 2007 · Жалоба Это вы с SDA спутали. Да, конечно, я говорил про SDA. Прошу прощения не углядел SCL в описании проблемы. Если автор наблюдает проблему с SCL, то это imho все равно следствие того, что SDA в нуле: SCL - затормозится при попытке выдачи STOP состояния (SDA ведь 0), т.е. аппаратная часть не может сформировать ни START, ни STOP. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
beginer 0 25 мая, 2007 Опубликовано 25 мая, 2007 (изменено) · Жалоба Сергей Борщ А кстати вопрос - не попутал ли автор SCL и SDA? Вообще, честно говоря, я программированием микроконтроллеров не занимаюсь. Моя роль в данном проекте - всего лишь написать программу для ПК, которая бы общалась с микроконтроллером посредством интерфейса RS-232. А программированием контроллера занимается другой человек. Однако все вопросы, что я здесь задаю - с его слов. Он хороший специалист, отлично разбирается в схемотехнике. Я не думаю, что он мог бы перепутать линии SCL и SDA. К тому же мы вместе проверяли - в нуле после передачи постоянно остается только SCL, а SDA - в высоком уровне. defunct т.е. аппаратная часть не может сформировать ни START, ни STOP. Не знаю, вроде бы старт и стоп как раз формируются. С остальным - проблемы. Хотя тут есть ещё кое-что. Сегодня звонили в саппорт фирмы, в которой покупали плату AS-megaM (плата на основе того самого ATmega128 с распаянной на плате периферией, типа COM-порта, кнопками и т. п.). Так вот в саппорте сказали что по описанию похоже, что проблема в убитом блоке контроллера, отвечающем за реализацию TWI. Похоже что столкнулись с бракованным контроллером. В общем теперь думаем брать ещё контроллер (на этот раз без платы), выпаивать из платы старый, и сажать на неё новый. В пользу теории о бракованном контроллере говорит также то, что на ATmega8 при реализации связи с микросхемой 24C16 наши программы заработали (только порт D сменили на С). В общем в понедельник ещё попробуем поработать с этим контроллером (обещал подойти ещё один специалист), если не выйдет, то будем пробовать новый. Если кому интересно, могу попозже здесь написать как же всё-таки разрешилась данная ситуация. Изменено 25 мая, 2007 пользователем beginer Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 124 26 мая, 2007 Опубликовано 26 мая, 2007 · Жалоба Если кому интересно, могу попозже здесь написать как же всё-таки разрешилась данная ситуация.Конечно интересно. Это правило хорошего тона на любом форуме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться