|
USI I2C выбор частоты |
|
|
|
May 3 2010, 15:12
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549

|
Добрый вечер,
у меня такая проблемка: mega8 и tiny2313 соединены по I2C. У меги8 интерфейс реализован на модуле TWI (Master), а у tiny2313 на USI(Slave). Оба МК работают от внешних кварцев на 8МГц.
Сделал я небольшой протокол по которому мега 8 отсылает байт tiny2313. Он принимает этот байт и решает че делать в зависимости от него: включить или выключить светодиод на одной из ног. Программа которую я зашил в мегу должна была в бесконечном цикле отправлять сначала байт включить светодиод, ждать секунду, затем отправлять выключить светодиод, потом опять ждать секунду и тд.
Проблема состоит в том что когда я все запустил, светодиод загорался и погасал в рэндомном порядке, так как практически через раз мастер пропускал ACK, слэйв пропускал или принимал с ошибками байт от мастера (все это я наблюдал на отладочных светодиодах). Вообщем мучался я мучался часа 4, все перепробовал и вот в конце решил сменить частоту шины со 100 Кгц до 400КГц. Врезультате все заработало.
Может кто объяснить почему мне помогла смена частоты? Неужели это все из за обрезанного по возможностям USI?
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
May 4 2010, 13:18
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549

|
хм ну так то у меня все собрано на макетной плате, длина шины I2C не более 2 см(2 проводка витой пары), никакой пайки нет, так что я думаю что монтаж тут нипричем
ЗЫ модуль TWI меги работает прекрасно с термодатчиком, который тоже I2C (на любой скорости)
|
|
|
|
|
May 4 2010, 15:08
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549

|
есть 10ком
|
|
|
|
|
May 4 2010, 15:36
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549

|
не вижу смысла тогда в создании I2C, это сейчас они у меня на расстоянии 2 см, а если мне потребуется 15 см или более метра? я же не смогу затактировать их от одного кварца. CKPOT фьюз ксати подключал/отключал разницы нет никакой на 100Кгц
|
|
|
|
|
May 4 2010, 15:44
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(John851 @ May 4 2010, 19:36)  не вижу смысла тогда в создании I2C, это сейчас они у меня на расстоянии 2 см, а если мне потребуется 15 см или более метра? я же не смогу затактировать их от одного кварца. Понятно. Пересчёт частоты сами делаете или в теле программы? Т.е. ldi temp,SYSCLK/(2*SCL_Freq)-8;TWI Bit Rate Register - TWBR sts TWBR,temp ;+ Частота TWI=384 Кгц Так автоматом , только значения подставляй
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
May 4 2010, 16:13
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549

|
доверил это дело библиотечной функции, вот ее код Код void i2cSetBitrate(u16 bitrateKHz) { u08 bitrate_div; // set i2c bitrate // SCL freq = F_CPU/(16+2*TWBR)) #ifdef TWPS0 // for processors with additional bitrate division (mega128) // SCL freq = F_CPU/(16+2*TWBR*4^TWPS) // set TWPS to zero cbi(TWSR, TWPS0); cbi(TWSR, TWPS1); #endif // calculate bitrate division bitrate_div = ((F_CPU/1000l)/bitrateKHz); if(bitrate_div >= 16) bitrate_div = (bitrate_div-16)/2; outb(TWBR, bitrate_div); }
|
|
|
|
|
May 4 2010, 16:25
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(John851 @ May 4 2010, 20:13)  доверил это дело библиотечной функции, вот ее код к сожалению тут не помогу, но по-моему у меня короче. Только наверное надо поменять в SYSCLK/(2*SCL_Freq)-8 . SYSCLK на F_CPU и SCL_Freq на bitrateKHz т.к. они у тебя наверняка описаны, но может кто-то и использовал и там всё в порядке. А так-то твои значения для 400 = 0x02 и для 100 = 0x20 Prescaler=0 Попробуй напрямую подставить
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
May 4 2010, 16:27
|
Участник

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549

|
да я хотел уже было эту функцию основательно проверить, но времени пока нет на проверку
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|