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

 
 
 
Reply to this topicStart new topic
> Tiny2313+USI = I2C, Кто-нибудь смог завести?
MTh
сообщение Jul 12 2008, 20:24
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771



Столкнулся с такой проблемой:
Есть Мега 8 с TWI на борту.
Есть Tiny2313 c USI на борту.
Надо заставить их общаться по интерфейсу I2C.

С мегой никаких проблем: TWI завелся, проверен на DS1307 - ACK есть, на данный момент больше ничего не интресует.
Проблема в Тини. USI не хочет отправлять ACK.

Долго рылся в инете, нашел вот это: http://www.avrfreaks.net/index.php?name=PN...t=usi+slave+i2c

Там выложен пример кода и для Меги (Мастер) и для Тини-ведомый (Code for Sharing.rar), и автор утверждает что все работает.

Я адаптировал этот код к CV AVR - ACKов нет...
Путем дебагинга с помощью светодиодов выяснил что тинька не узнает свой адрес. Судя по коду и даташиту - все нормально.

Где я не прав?
Прикрепленные файлы
Прикрепленный файл  Code_for_Sharing.rar ( 489.38 килобайт ) Кол-во скачиваний: 104
 
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 12 2008, 20:30
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Я делал, всё работало.

Делал по AVR312.

Делал вот такую фигню smile.gif Исходники там же.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MTh
сообщение Jul 12 2008, 21:02
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771



Спасибо.
Есть у меня подозрения о CV....
Go to the top of the page
 
+Quote Post
MTh
сообщение Jul 14 2008, 14:20
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771



Хм...
Скачал WinAVR, твой проект - скомпилировал - не определяется устройство на шине sad.gif
Лучше сказать не отправляется ACK... Но! Устройство свой адрес узнает (у меня светик для отладки стоит), просто не отправляет ACK.

Маленько расскажу что я делаю: тупо в циклап перебираю все адреса от 0 до 7F... Вот на 0х10 загорается светодиод на Тиньке - адрес совпал, но ACK не передается... Опять же - судя по коду все верно...

Сообщение отредактировал MTh - Jul 14 2008, 14:54
Go to the top of the page
 
+Quote Post
MTh
сообщение Jul 14 2008, 15:25
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771



Так, все проблема решена....
Я проверял наличие устройств на шине при помощи (ADDRESS>>1)|READ. (Кто с TWI работал поймет)
В Вашем коде вкралась некая неточность:
Если я с девайса попытаюсь читать просто послав адрес, то ничего не найду... А если писать - то пожалуйста - устрйство присутствует.
В вашем устройстве это не критично, но вообщем, неверно... Например EEPROM после такого поиска "глюкнет".

Но в любом случае спасибо за помощь, подтверждение того что USI таки работает и 100% рабочий код, дало мне повод посидеть еще пару вечерков и таки додавить!
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 14 2008, 22:52
Сообщение #6


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(MTh @ Jul 14 2008, 21:25) *
Так, все проблема решена....


Аминь 08.gif

Цитата
В Вашем коде вкралась некая неточность:
Если я с девайса попытаюсь читать просто послав адрес, то ничего не найду... А если писать - то пожалуйста - устрйство присутствует.


Странно... Вроде как там есть отправка ACK по приёму своего адреса...


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MTh
сообщение Jul 14 2008, 23:20
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771



Цитата(AHTOXA @ Jul 15 2008, 01:52) *
Аминь 08.gif
Странно... Вроде как там есть отправка ACK по приёму своего адреса...

Есть-то есть, только что произойдет если буфер отправки (TX на Slave) будет пуст? У Вас в обработчике OVERFLOW в подпрограмме обработки адреса стоит return... А непосредественная отправка ACK уже после... Другими словами, если я выдаю адрес с командой чтения.... то АСКа не будет - прога до этого места тупо не дойдет.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 14 2008, 23:55
Сообщение #8


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(MTh @ Jul 15 2008, 05:20) *
если я выдаю адрес с командой чтения.... то АСКа не будет - прога до этого места тупо не дойдет.


Да, действительно. И зачем там эта проверка? Надо будет поправить...
Вот и верь после этого аппнотам :-)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MTh
сообщение Jul 15 2008, 00:03
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 28-02-06
Из: Иркутск
Пользователь №: 14 771



smile.gif Я полторы недели убил.... больше аппноутам не верю...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jul 15 2008, 10:09
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Да не надо никаким апнотам верить. Есть документы по данной шине - спецификация. Если реализуете протокол конкретной микрухи - то даташит на данную микруху читаем.

В общих чертах - всё просто. Возьмём устройство 1 и 2 (U1,U2). Если U1 выдаёт байт на шину, то U2 подтверждает приём ASKом. И наоборот. При пакетном чтении - если slave не хочет больше читать, то не выдаёт ASK. Master выдаёт стоп и прекращает передачу.
Go to the top of the page
 
+Quote Post

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

 


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


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