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

 
 
> частота синхросигнала на шине i2c
DeathOfPower
сообщение Mar 13 2009, 09:05
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 19-01-09
Пользователь №: 43 600



ваяю девайс в котором по i2c должны обмениваться пакетами 2 разных контроллера - ATMega32 и ATMega168. Тактовая частота у ATMega168 - 14.7456 МГц а у ATMega32 в 2 раза меньше (ему высокая производительность не нужна и для понижения энергопотребления решил уменьшить частоту, но нижний порог её ограничен тем, что тактовая частота должна быть как минимум в 16 раз больше частоты синхроимпульсов на шине i2c ну и частота доожна быть удобной для деления с целью получения точных значений скорости передачи на RS232 - связь с компьютером для выгрузки логов и диагностики). Решил выбрать частоту синхросигнала на линии SCL, реализуемую при помощи делителей на обоих контроллерах, полез в документацию и обнаружил что максимальной такой частотой является 368640 Гц - у и ATMega168 при этом делитель 40, а у и ATMega32 - 20.

но написав тестовый пример бесконечной передачи байта, для замера реальной частоты синхроимпульсов, обнаружил - тактовая частота при передаче от и ATMega168 к и ATMega32 меньше таковой при передаче от и ATMega32 к и ATMega168 примерно на 48 кГц!!! я уж заподозрил ошибку в формуле расчёта коэффициента деления в документации к ATMega168. Но потом обнаружил, что при приёме байта в и ATMega32 - от факта обнаружения взведённости флага TWINT до его сброса (необходимо проверить регистр статуса, если статус соответствующий, то сохранить принятый байт в памяти) проходит 14 тактов и всё это время линия SCL удерживается в низком уровне приёмной стороной. И происходит это после приёма каждого байта (в битах = 8 бит + 1 бит подтверждения). Попробовал рассчитать среднюю частоту с учётом этой задержки, но она получилась всего на 16 кГц меньше устанавливаемой делителем.
Куда деваются ещё 32 кГц? Есть у кого-нить мысли? Прерывания во время приёма и передачи запрещены.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Pasha
сообщение Mar 13 2009, 14:12
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(DeathOfPower @ Mar 13 2009, 13:05) *
 обнаружил - тактовая частота при передаче от и ATMega168 к и ATMega32 меньше таковой при передаче от и ATMega32 к и ATMega168 примерно на 48 кГц!!!
Куда деваются ещё 32 кГц? Есть у кого-нить мысли? Прерывания во время приёма и передачи запрещены.

Вы не учли, что тактовая устанавливается по процедуре арбитража - в Вашем случае кто из приемников раньше отпустит SCL - на том варианте и быстрее. Так что ищите причину в запрещенных прерываниях.
ЗЫ: на всякий случай. При приеме SCL держится приемником в нуле до прочтения TWDR или TWSR - не помню.
Go to the top of the page
 
+Quote Post
DeathOfPower
сообщение Mar 13 2009, 17:23
Сообщение #3





Группа: Новичок
Сообщений: 4
Регистрация: 19-01-09
Пользователь №: 43 600



Цитата(_Pasha @ Mar 13 2009, 17:12) *
Вы не учли, что тактовая устанавливается по процедуре арбитража - в Вашем случае кто из приемников раньше отпустит SCL - на том варианте и быстрее. Так что ищите причину в запрещенных прерываниях.
ЗЫ: на всякий случай. При приеме SCL держится приемником в нуле до прочтения TWDR или TWSR - не помню.


SCL держит приёмник пока не сбросишь флаг TWINT записав туда еденицу...
просто эта задержка возникает лишь после приёма 8 байт и ответа ACK-ом - т.е. через каждые 9 тактов на SCL и по моим расчётам она ответственна лишь за 1/3 обнаруженного понижения частоты
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 17:31
Рейтинг@Mail.ru


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