zoddy 0 18 февраля, 2009 Опубликовано 18 февраля, 2009 · Жалоба Всем доброго времени суток! Суть темы такая. Имеется небольшая отладочная макетная плата, на которой установлено два контроллера. Есть необходимость связать их по TWI. Линии TWI подтянуты к питанию через 10К резисторы. Для пробы для обоих контроллеров написаны простенькие программки ведущего и ведомого, с помощью которых происходит пересылка данных по 2-3 байта от ведущего к ведомому и обратно. Суть проблемы: наблюдается неустойчивая работа связи по TWI на больших скоростях, а на более низких скоростях обмен происходит нормально. Подскажите пожалуйста, как решить эту проблему? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 1 18 февраля, 2009 Опубликовано 18 февраля, 2009 · Жалоба Всем доброго времени суток! Суть темы такая. Имеется небольшая отладочная макетная плата, на которой установлено два контроллера. Есть необходимость связать их по TWI. Линии TWI подтянуты к питанию через 10К резисторы. Для пробы для обоих контроллеров написаны простенькие программки ведущего и ведомого, с помощью которых происходит пересылка данных по 2-3 байта от ведущего к ведомому и обратно. Суть проблемы: наблюдается неустойчивая работа связи по TWI на больших скоростях, а на более низких скоростях обмен происходит нормально. Подскажите пожалуйста, как решить эту проблему? а разве по стандарту i2c подтяжки делаются 10-килоомными? и что вы подразумеваете под "большими" и "низкими" скоростями? стандартом i2c определено 2 скорости - 100 кбит/с и 400 кбит/с Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zoddy 0 18 февраля, 2009 Опубликовано 18 февраля, 2009 · Жалоба а разве по стандарту i2c подтяжки делаются 10-килоомными? и что вы подразумеваете под "большими" и "низкими" скоростями? стандартом i2c определено 2 скорости - 100 кбит/с и 400 кбит/с Согласно мануалу... в модуле TWI имеется Bit Rate Generator задающий период следования импульсов по линии SCL. В mege16, к примеру, частота этого генератора задается значениями регистра TWBR и битами TWPS1:TWPS0. Соответственно меняя значение этого регистра, я так понимаю, можно регулировать скорость передачи. В моем случае, при тактовой частоте обоих контроллеров 4МГц, стабильно данные начинают передаваться при TWBR>0x3f, а на меньших значениях происходит потеря некоторых байт. Мне в моем проекте необходимо передавать информацию с максимально возможной для этого интерфейса скоростью, поэтому этот вопрос весьма интересен :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 18 февраля, 2009 Опубликовано 18 февраля, 2009 · Жалоба Чем выше скорость тем резче должны быть фронты. Надо смотреть осциллографом что у Вас творится. По законам физики для поднятия переднего фронта надо уменьшать сопротивления подтягивающих резисторов, а для поднятия заднего - увеличивать. Вам остаётся посмотреть на ситуацию и принять решение... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maik-vs 0 18 февраля, 2009 Опубликовано 18 февраля, 2009 (изменено) · Жалоба ... В моем случае, при тактовой частоте обоих контроллеров 4МГц, стабильно данные начинают передаваться при TWBR>0x3f, а на меньших значениях происходит потеря некоторых байт. Напомнило советский плакат: "В прошлом году собрали 29 центнеров с гектара, в этом - 13000 пудов по краю, в следующем - на 15% больше!" Какая частота при значении 3F? Частота клока меньшается или увеличивается "при TWBR>0x3f"? Там ещё есть ограничение по частоте контроллера от частоты SCL. Дальше. Если "потеря некоторых байт" то надо смотреть программу выдёргивания байт из потока, может пока идёт операция с байтом на АСК уже опоздали... Клок стретчинг предусмотрен? Изменено 18 февраля, 2009 пользователем Maik-vs Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zoddy 0 18 февраля, 2009 Опубликовано 18 февраля, 2009 · Жалоба Напомнило советский плакат: "В прошлом году собрали 29 центнеров с гектара, в этом - 13000 пудов по краю, в следующем - на 15% больше!" Какая частота при значении 3F? Частота клока меньшается или увеличивается "при TWBR>0x3f"? Там ещё есть ограничение по частоте контроллера от частоты SCL. Дальше. Если "потеря некоторых байт" то надо смотреть программу выдёргивания байт из потока, может пока идёт операция с байтом на АСК уже опоздали... Клок стретчинг предусмотрен? Гм... Если Вы, многоуважаемый, хоть раз читали мануал по контроллерам AVR, то вполне бы наткнулись там на формулу Fscl=Fclk/(16*TWBR*4^TWPS)...как вы думаете, что происходит с частотой?....:-) А вообще ситуация обстоит в следующем... сперва ведущий отправляет SLA+R и читает несколько байт, затем после задержки в несколько тактов процессора отправляет SLA+W и скидывает на ведомый несколько байт, затем опять повторяем операцию чтения(читаем те же байты которые до этого отправляли)... и тут самое интересное... эти байты считываются неправильно!!! Если же частоту понижаем, выставив значение TWBR>0x3F то обмен происходит без потерь. З.Ы. Для программы ведущего используется атмеловский драйвер(описан в AVR315), для ведомого написана небольшая программка на асме. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 18 февраля, 2009 Опубликовано 18 февраля, 2009 · Жалоба zoddy, Вам уже напоминали о резисторах подтяжки. 10К - этого даже для 400кГц слишком много. Я в последнем случае ставлю 2.7К, на бОльших скоростях нужно ставить ещё меньше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zoddy 0 19 февраля, 2009 Опубликовано 19 февраля, 2009 · Жалоба zoddy, Вам уже напоминали о резисторах подтяжки. 10К - этого даже для 400кГц слишком много. Я в последнем случае ставлю 2.7К, на бОльших скоростях нужно ставить ещё меньше. Спасибо за дельный совет. После замены резисторов на 1К и небольшой корекции программы ведомого обмен идет без сбоев даже на максимальной Fscl для выбранной тактовой частоты Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maik-vs 0 19 февраля, 2009 Опубликовано 19 февраля, 2009 (изменено) · Жалоба Гм... Если Вы, многоуважаемый, хоть раз читали мануал по контроллерам AVR, то вполне бы наткнулись там на формулу Fscl=Fclk/(16*TWBR*4^TWPS)...как вы думаете, что происходит с частотой?....:-) А вообще ситуация обстоит в следующем... сперва ведущий отправляет SLA+R и читает несколько байт, затем после задержки в несколько тактов процессора отправляет SLA+W и скидывает на ведомый несколько байт, затем опять повторяем операцию чтения(читаем те же байты которые до этого отправляли)... и тут самое интересное... эти байты считываются неправильно!!! Если же частоту понижаем, выставив значение TWBR>0x3F то обмен происходит без потерь. Вы, я вижу, уже решили проблему резисторами (на этой длине линии). Но в этом посте напрягает "после задержки в несколько тактов процессора". Возможно, Вам, многоуважаемый, стоит более внимательно отнестись к параметру tbuf, приведённом на рис. 27 фирменного руководства по I2C. Изменено 19 февраля, 2009 пользователем Maik-vs Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zoddy 0 19 февраля, 2009 Опубликовано 19 февраля, 2009 · Жалоба Вы, я вижу, уже решили проблему резисторами (на этой длине линии). Но в этом посте напрягает "после задержки в несколько тактов процессора". Возможно, Вам, многоуважаемый, стоит более внимательно отнестись к параметру tbuf, приведённом на рис. 27 фирменного руководства по I2C. Да не напрягайтесь Вы так, право же.. это лишнее!!! :-) Все когда-нибудь бывает в первый раз, в том числе и изучение интерфейсов навроде i2c, и не всегда под рукой бывает "фирменное руководство... с рисунком 27". И именно для этого создаются подобные форумы, чтобы была возможность получить дельный совет, консультацию и т.п. ,а не "подколки" и чьи-либо "напряжения"... так что... если нечего посоветовать, то лучше оставляйте свои размышления при себе... поэкономьте здоровье и время :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 19 февраля, 2009 Опубликовано 19 февраля, 2009 · Жалоба Все когда-нибудь бывает в первый раз, в том числе и изучение интерфейсов навроде i2c, и не всегда под рукой бывает "фирменное руководство... с рисунком 27". Позволю себе заметить, что чтение документации не отменялось. Ведь на форуме не могут же изложить все содержимое даташита на I2C. А порой даже прочтение его 50% дает ответы на многие вопросы. И именно для этого создаются подобные форумы, чтобы была возможность получить дельный совет, консультацию и т.п. ,а не "подколки" и чьи-либо "напряжения"... так что... если нечего посоветовать, то лучше оставляйте свои размышления при себе... После ответов в таком стиле обычно что самое хорошее, так это вообще не отвечать вопрошающему. Человек просит помощи, а потом говорит лучше оставляйте свои размышления при себе... поэкономьте здоровье и время :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 19 февраля, 2009 Опубликовано 19 февраля, 2009 · Жалоба После ответов в таком стиле обычно что самое хорошее, так это вообще не отвечать вопрошающему. Человек просит помощи, а потом говорит Я тоже было порывался выступить с негодованием! Но потом понял что - тут все в порядке. Плюс с юмором ;> Просто задайтесь вопросом как бы Вы искали некий tbuf на рисунке N27 "фирменного руководства"? Позволю себе заметить, что чтение документации не отменялось. Автор нигде не дал повода полагать обратное. С документацией по TWI модулю он ознакомился. Возможно Вы удивитесь, но даже слова I2C в Atmel'овском даташите, например, на M16 Вы не найдете!! Теперь представим гипотетическую ситуацию - не знакомы даже со словом "I2C", читаем док на AVR и находим, что TWI интерфейс как раз то, что надо для связи парочки МК. Пишем программу, но она работает нестабильно на высоких частотах. Приходим на форум, задаем вопрос по TWI (насколько можно настолько точно описав что делаем и как подключаем), а тут пишут - с места в карьер - а tbuf на рисунке фирменной документации I2C учел? Ну и... хоть стой, хоть падай - глобальный конфуз :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 20 февраля, 2009 Опубликовано 20 февраля, 2009 · Жалоба .... но даже слова I2C в Atmel'овском даташите, например, на M16 Вы не найдете!! Теперь представим гипотетическую ситуацию - не знакомы даже со словом "I2C", читаем док на AVR и находим, что TWI интерфейс как раз то, что надо для связи парочки МК. Пишем программу, но она работает нестабильно на высоких частотах. Приходим на форум, задаем вопрос по TWI (насколько можно настолько точно описав что делаем и как подключаем), а тут пишут - с места в карьер - а tbuf на рисунке фирменной документации I2C учел? Ну и... хоть стой, хоть падай - глобальный конфуз :) Может я пользуюсь, не "фирменной", а "левой" или устаревшей документацией, но на Fig. 27 не углядел никакого Tbuf. Поддерживаю подход defunct, не влом было бы присоеденить файлик или ссылку на "фирменную" документацию, а не надувать щеки. I2C_BUS.pdf I2C_RP.PDF Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zoddy 0 20 февраля, 2009 Опубликовано 20 февраля, 2009 · Жалоба Может я пользуюсь, не "фирменной", а "левой" или устаревшей документацией, но на Fig. 27 не углядел никакого Tbuf. Поддерживаю подход defunct, не влом было бы присоеденить файлик или ссылку на "фирменную" документацию, а не надувать щеки. Огромное спасибо за ссылочки на документацию! Вот это я понимаю, конструктивный подход! А что касается моего ответа товарисчу Maik VS... ничего личного, но если уж даешь совет, то пиши конкретно и корректно, а не "важничай"... в конце концов, когда начинаешь что-то с нуля... даже имея документацию... можно отловить хороших граблей... поэтому не стоит смотреть свысока на людей, которые возможно заблуждаются и делают ошибки... людям вообще свойственно ошибаться... так что... как говорится:" Можешь- помоги, не можешь - не мешай!" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 20 февраля, 2009 Опубликовано 20 февраля, 2009 · Жалоба Огромное спасибо за ссылочки на документацию! Вот это я понимаю, конструктивный подход! А что касается моего ответа товарисчу Maik VS... ничего личного, но если уж даешь совет, то пиши конкретно и корректно, а не "важничай"... в конце концов, когда начинаешь что-то с нуля... даже имея документацию... можно отловить хороших граблей... поэтому не стоит смотреть свысока на людей, которые возможно заблуждаются и делают ошибки... людям вообще свойственно ошибаться... так что... как говорится:" Можешь- помоги, не можешь - не мешай!" А я в свою очередь осознаю, что был несправедлив, когда писал предыдущий пост! zoddy, не держите зла, пожалуйста, и извините! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться