Dixon 0 11 января, 2011 Опубликовано 11 января, 2011 · Жалоба Простая схемка: мега16+ds1307+tiny26 соединены по i2c. Тинка через провод ~3метра длиной. В меге i2c реализовано из либы avrlib, а в тинке используется небезызвестная либа usitwislave. В общем когда тинка отключена от scl/sda то все ок, часики читаются, как только подключаю тинку - все виснет. Осцилографа нет, что происходит понять не могу. Подскажите где рыть ))) Или может вообще по другому сделать, задача связать основной контроллер с внешними блоками, провода не длиннее 3метров. на 485 переходить не хочу ибо удорожит схему, кто что подскажет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrKirill 1 11 января, 2011 Опубликовано 11 января, 2011 · Жалоба На 3м городить RS485 и действительно нет смысла, можно попробовать RS232. Но все же лучше разобраться с i2c, тем более он разжеван уже вдоль и поперек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 11 января, 2011 Опубликовано 11 января, 2011 · Жалоба Подскажите где рыть ))) 1. Проверить наличие резисторов-подтяжек на обоих линиях шины. 4.7К должно хватить. 2. Одолжить или купить осциллограф, или просто собрать UniLogic (в крайнем случае) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dixon 0 11 января, 2011 Опубликовано 11 января, 2011 · Жалоба подтяжки стоят Нарисовал в протеусе, протестил... Про тинку протеус пишет что logic contention(s) detected on net SCL, а SDA уходит в 0(синей точкой горит), на этом все и останавливается библиотечку usitwislave все буржуи пользуют, никаких косяков, что можно еще проверить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 11 января, 2011 Опубликовано 11 января, 2011 · Жалоба logic contention(s) detected on net SCL, а SDA уходит в 0(синей точкой горит), на этом все и останавливается Похоже на обычное срабатывание механизма защиты от потери данных. Микросхема, которая не способна больше принимать данные, опускает SCL в ноль, тем самым препятствуя дальнейшей передаче данных мастером шины. Обработав пришедшие данные, эта микросхема отпускает SCL, и обмен возобновляется. У вас, похоже, МК принимает байт данных, место у него в приемном буфере (регистре) заканчивается, вот он и опускает SCL. И не отпускает никогда, поскольку ваша программа (обработчик прерывания) не вычитывает буфер или просто не вызывается ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrKirill 1 11 января, 2011 Опубликовано 11 января, 2011 · Жалоба Нарисовал в протеусе, протестил... В том же в Proteus'е есть i2c-тестер, разберитесь с его работой, подключите к линиям и посмотрите какие данные идут и в каком месте "затык" происходит. Ну и если не сложно, приложите архив с исходником и проектом Proteus'а, чтобы разговор более детальный был. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dixon 0 11 января, 2011 Опубликовано 11 января, 2011 (изменено) · Жалоба Вот файлы, протеус 7.7 slave скомпилирован для тинки26, но в протеусе ее нет, пробовал компилировать и для 261 и для 2313 результат тот же в master используются либы из avrlib, их я естественно не приаттачил i2c.rar Изменено 11 января, 2011 пользователем AlexTech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dixon 0 13 января, 2011 Опубликовано 13 января, 2011 · Жалоба В общем нашел какой то кусок кода который заработал в протеусе при частоте тинки только 8мгц, при этом программных задержек нет, крутить нечего теперь беда в том, что в железе тинка не заводится от внутреннего генератора на 8мгц, даже на 2 дурит, работает только на 1 это с камнем у меня косяк или можно как то побороть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrKirill 1 14 января, 2011 Опубликовано 14 января, 2011 · Жалоба В общем нашел какой то кусок кода который заработал в протеусе при частоте тинки только 8мгц, при этом программных задержек нет, крутить нечего теперь беда в том, что в железе тинка не заводится от внутреннего генератора на 8мгц, даже на 2 дурит, работает только на 1 это с камнем у меня косяк или можно как то побороть? Чисто случайно про FUSE-биты не забыли при программировании чипа? Проблем с внутренним генератором быть не должно. PS. Вечером гляну Ваш архив, пока времени нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dixon 0 14 января, 2011 Опубликовано 14 января, 2011 · Жалоба Не наю )) шью из студии: SPI enable IntRCost, Freq 8mhz startup 64ms + 6ck(причем в списке два таких пункта, выбираю первый) no bod Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dixon 0 14 января, 2011 Опубликовано 14 января, 2011 (изменено) · Жалоба Прогресс моих мучений дошел до того, что я устойчиво отправляю и принимаю 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 не отправляет после приема байта или мастер его не видит? Код либы просмотрел, из того что понял вроде все честно, как проверять не пойму ((( Изменено 14 января, 2011 пользователем AlexTech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 14 января, 2011 Опубликовано 14 января, 2011 · Жалоба Соответственно как отловить, слейв ack не отправляет после приема байта или мастер его не видит?Напоминаю, что интерфейс I2C - синхронный. Если нет осциллографа, то сделайте частоту тактирования SCL, скажем, 1Гц. И посмотрите состояния шины тестером или парой светодиодов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 14 января, 2011 Опубликовано 14 января, 2011 · Жалоба как проверять не пойму ((( Unilogic соберите, еще раз. Там работы на пару часов. Зато получится цифровой мини-осциллограф, подключаемый к LPT - порту. А еще можно не использовать шут знает чьи и шут знает как работающие библиотеки там, где без них можно обойтись, а взять аппноты от Атмела, даташит, самому разобраться и все сделать за пару дней. Вы хоть будете понимать, что вообще делаете ... P.S. Лично я стараюсь никогда не использовать в своих проектах библиотек и прочих фрагментов, если не понимаю, как они работают ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dixon 0 14 января, 2011 Опубликовано 14 января, 2011 (изменено) · Жалоба Угу, согласен с аппнотами На мастере работает AVR315 - TWI Master Implementation На слейве AVR312: Using the USI Module as an I2C slave Ну и че мне с аппнотов если они написаны в 2004г и вполне вероятно на свежих камнях работают не совсем корректно. С кодом разобрался в меру своих возможностей, все вроде правильно, только не работает )))) LPT уменя нету, но это так... к слову А еще я не понимаю почему _delay_ms(3000) дает задержку меньше секунды :/ Изменено 14 января, 2011 пользователем AlexTech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 6 14 января, 2011 Опубликовано 14 января, 2011 · Жалоба А еще я не понимаю почему _delay_ms(3000) дает задержку меньше секунды :/ А это потому, что у вас, скорее всего, Fuses неправильно запрограммированы. P.S. Если вы занимаетесь электроникой, без приборов все равно не обойтись. Нет осциллографа, нет LPT ... Без приборов и элементарных измерений говорить вообще не о чем ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться