Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подскажите где искать проблему(tiny26 i2c)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
AlexTech
Простая схемка: мега16+ds1307+tiny26 соединены по i2c. Тинка через провод ~3метра длиной.
В меге i2c реализовано из либы avrlib, а в тинке используется небезызвестная либа usitwislave.
В общем когда тинка отключена от scl/sda то все ок, часики читаются, как только подключаю тинку - все виснет.
Осцилографа нет, что происходит понять не могу. Подскажите где рыть )))

Или может вообще по другому сделать, задача связать основной контроллер с внешними блоками, провода не длиннее 3метров.
на 485 переходить не хочу ибо удорожит схему, кто что подскажет?
mrKirill
На 3м городить RS485 и действительно нет смысла, можно попробовать RS232.

Но все же лучше разобраться с i2c, тем более он разжеван уже вдоль и поперек.
kovigor
Цитата(AlexTech @ Jan 11 2011, 11:03) *
Подскажите где рыть )))


1. Проверить наличие резисторов-подтяжек на обоих линиях шины. 4.7К должно хватить.
2. Одолжить или купить осциллограф, или просто собрать UniLogic (в крайнем случае)
AlexTech
подтяжки стоят

Нарисовал в протеусе, протестил...
Про тинку протеус пишет что logic contention(s) detected on net SCL, а SDA уходит в 0(синей точкой горит), на этом все и останавливается
библиотечку usitwislave все буржуи пользуют, никаких косяков, что можно еще проверить?
kovigor
Цитата(AlexTech @ Jan 11 2011, 18:38) *
logic contention(s) detected on net SCL, а SDA уходит в 0(синей точкой горит), на этом все и останавливается

Похоже на обычное срабатывание механизма защиты от потери данных. Микросхема, которая не способна больше принимать данные, опускает SCL в ноль, тем самым препятствуя дальнейшей передаче данных мастером шины. Обработав пришедшие данные, эта микросхема отпускает SCL, и обмен возобновляется. У вас, похоже, МК принимает байт данных, место у него в приемном буфере (регистре) заканчивается, вот он и опускает SCL. И не отпускает никогда, поскольку ваша программа (обработчик прерывания) не вычитывает буфер или просто не вызывается ...
mrKirill
Цитата(AlexTech @ Jan 11 2011, 19:38) *
Нарисовал в протеусе, протестил...

В том же в Proteus'е есть i2c-тестер, разберитесь с его работой, подключите к линиям и посмотрите какие данные идут и в каком месте "затык" происходит.

Ну и если не сложно, приложите архив с исходником и проектом Proteus'а, чтобы разговор более детальный был.
AlexTech
Вот файлы, протеус 7.7
slave скомпилирован для тинки26, но в протеусе ее нет, пробовал компилировать и для 261 и для 2313 результат тот же
в master используются либы из avrlib, их я естественно не приаттачил
AlexTech
В общем нашел какой то кусок кода который заработал в протеусе при частоте тинки только 8мгц, при этом программных задержек нет, крутить нечего
теперь беда в том, что в железе тинка не заводится от внутреннего генератора на 8мгц, даже на 2 дурит, работает только на 1
это с камнем у меня косяк или можно как то побороть?
mrKirill
Цитата(AlexTech @ Jan 13 2011, 11:04) *
В общем нашел какой то кусок кода который заработал в протеусе при частоте тинки только 8мгц, при этом программных задержек нет, крутить нечего
теперь беда в том, что в железе тинка не заводится от внутреннего генератора на 8мгц, даже на 2 дурит, работает только на 1
это с камнем у меня косяк или можно как то побороть?

Чисто случайно про FUSE-биты не забыли при программировании чипа?
Проблем с внутренним генератором быть не должно.

PS. Вечером гляну Ваш архив, пока времени нет.
AlexTech
Не наю ))
шью из студии:
SPI enable
IntRCost, Freq 8mhz
startup 64ms + 6ck(причем в списке два таких пункта, выбираю первый)
no bod
AlexTech
Прогресс моих мучений дошел до того, что я устойчиво отправляю и принимаю 1 первый байт, не более
хотя код отправки выглядит так:
messageBuf[0] = (targetAddress<<TWI_ADR_BITS) | (FALSE<<TWI_READ_BIT);
messageBuf[1] = 0x41;
messageBuf[2] = 0x43;
messageBuf[3] = 0x10;
messageBuf[4] = 0x02;
TWI_Start_Transceiver_With_Data( messageBuf, 5 );
Соответственно как отловить, слейв ack не отправляет после приема байта или мастер его не видит?
Код либы просмотрел, из того что понял вроде все честно, как проверять не пойму (((
rezident
Цитата(AlexTech @ Jan 15 2011, 00:20) *
Соответственно как отловить, слейв ack не отправляет после приема байта или мастер его не видит?
Напоминаю, что интерфейс I2C - синхронный. Если нет осциллографа, то сделайте частоту тактирования SCL, скажем, 1Гц. И посмотрите состояния шины тестером или парой светодиодов.
kovigor
Цитата(AlexTech @ Jan 14 2011, 23:20) *
как проверять не пойму (((


Unilogic соберите, еще раз. Там работы на пару часов. Зато получится цифровой мини-осциллограф, подключаемый к LPT - порту. А еще можно не использовать шут знает чьи и шут знает как работающие библиотеки там, где без них можно обойтись, а взять аппноты от Атмела, даташит, самому разобраться и все сделать за пару дней. Вы хоть будете понимать, что вообще делаете ...
P.S. Лично я стараюсь никогда не использовать в своих проектах библиотек и прочих фрагментов, если не понимаю, как они работают ...
AlexTech
Угу, согласен с аппнотами
На мастере работает AVR315 - TWI Master Implementation
На слейве AVR312: Using the USI Module as an I2C slave
Ну и че мне с аппнотов если они написаны в 2004г и вполне вероятно на свежих камнях работают не совсем корректно.
С кодом разобрался в меру своих возможностей, все вроде правильно, только не работает ))))

LPT уменя нету, но это так... к слову

А еще я не понимаю почему _delay_ms(3000) дает задержку меньше секунды :/
kovigor
Цитата(AlexTech @ Jan 14 2011, 23:17) *
А еще я не понимаю почему _delay_ms(3000) дает задержку меньше секунды :/


А это потому, что у вас, скорее всего, Fuses неправильно запрограммированы.
P.S. Если вы занимаетесь электроникой, без приборов все равно не обойтись. Нет осциллографа, нет LPT ... Без приборов и элементарных измерений говорить вообще не о чем ...

AlexTech
Да невозможно из студии фьюзы неправильно выставить
Электроникой я занимаюсь от случая к случаю, когда есть потребность в девайсе каком то, поэтому тратить много денег на неосновное хобби несколько накладно (
kovigor
Цитата(AlexTech @ Jan 15 2011, 00:45) *
Да невозможно из студии фьюзы неправильно выставить
Электроникой я занимаюсь от случая к случаю, когда есть потребность в девайсе каком то, поэтому тратить много денег на неосновное хобби несколько накладно (


В настройках проекта частота кварца правильно указана (если в вашей среде разработки ее вообще можно указать) ?
AlexTech
Да конечно, все правильно указано, на самом деле покрутил оптимизатор- пауза нормально заработала, остальное нет (
kovigor
Цитата(AlexTech @ Jan 15 2011, 01:28) *
Да конечно, все правильно указано, на самом деле покрутил оптимизатор- пауза нормально заработала, остальное нет (


Вы уже все равно столько времени ухлопали, а толку нет. Попробуйте скачать CodeVision. Это такая среда разработки для AVR на Си. С ней идет библиотека для работы с I2C, в руководстве пользователя приводятся разнообразные примеры, и со средой они тоже поставляются. Библиотека гарантированно проверенная и рабочая, в применении предельно простая. Думаю, это будет лучше всего. Справитесь за пару часов ...
AlexTech
В общем перелопатив кучу версий аппноутов, удалось все запустить ))
Всем спасибо за подсказки ) Я думаю у меня еще будут вопросы )))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.