roboforum.ru

Технический форум по робототехнике.
Текущее время: 01 мар 2025, 13:39

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: TWI Slave на ATtiny25
СообщениеДобавлено: 27 май 2010, 18:20 
Не в сети
Аватара пользователя

Зарегистрирован: 30 сен 2008, 18:49
Сообщения: 2683
Откуда: Где-то в Латинской Америке
Понадобилось мне управлять от LEGO NXT миниатюрным сервомоторчиком по I2C. Решил приспособить валяющийся без дела МК ATtiny25 под универсальный адаптер. Из 6-ти имеющихся у него ног-портов, 2 используются на I2C, а оставшиеся 4 в зависимости от применения.
Осталось заставить МК общаться с NXT в качестве ведомого устройства. Готовых решений под CAVR в сети не нашел, порылся в разных источниках, нашел пример под IAR, но с ним связь ни хрена не работала. В конце концов разобрался сам. Так что делюсь своими изысканиями.
Сам протокол I2C (он же TWI) подробно описан в различной литературе, в том числе и Википедии.
CAVR имеет встроенную библиотеку I2C.h, с помощью которой можно заставить любые 2 ноги МК работать в качестве Master. Slave почему-то такой библиотеки не удостоился. Кроме того, «меги» имеют полную аппаратную поддержку TWI . Более хилые «тини» такой радости лишены, но возможности встроенного в них USI интерфейса, частично упрощают организацию обмена между TWI устройствами.
Что может ATtiny USI в режиме TWI Slave, при соответствующей настройке:
- Определить состояние «старт», когда Master захватывает шину для передачи данных, и сформировать аппаратное прерывание;
- По тактовым импульсам SCL, сдвигать 8-битный регистр данных до момента переполнения 4х-разрядного счетчика, и выдавать соответствующий бит данных в SDA (если линия настроена на выход), либо, наоборот, считывать состояние SDA (если линия настроена на вход). При переполнении счетчика также можно включить прерывание.
- Определять состояние «стоп», когда Master отпускает шину. Прерывание при этом не предусмотрено.
Что остается сделать вручную:
- Определить адресс запрашиваемого Slave устройства и сравнить его со своим индетификатором. Если предполагается, что в сети только один ведомый, то этого можно и не делать.
- Определить направление передачи и настроить соответствующую логику работы на прием или передачу.
- Сформировать или считать сигнал подтверждения (ACK) после приема или передачи каждого байта, остановить прием при потере подтверждения от ведущего.
- Ну и, естественно, вовремя работать с регистром данных USI.
Все это реализовано в тестовой программке с подробными комментариями, для наглядности сделанной одним файлом.
Вложение:
Комментарий к файлу: main
TINY25-I2C.c [9.88 КиБ]
Скачиваний: 1374
Вложение:
Комментарий к файлу: Проект под CAVR
TINY25-I2C.zip [56.97 КиБ]
Скачиваний: 0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TWI Slave на ATtiny25
СообщениеДобавлено: 27 май 2010, 21:25 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Полезные проект, спасибо ! :good:

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: TWI Slave на ATtiny25
СообщениеДобавлено: 27 май 2010, 22:48 
Не в сети
Аватара пользователя

Зарегистрирован: 30 сен 2008, 18:49
Сообщения: 2683
Откуда: Где-то в Латинской Америке
Всегда пожалуйста, Учитель.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO