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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Подскажите где искать проблему(tiny26 i2c)
AlexTech
сообщение Jan 11 2011, 05:03
Сообщение #1


Частый гость
**

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



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

Или может вообще по другому сделать, задача связать основной контроллер с внешними блоками, провода не длиннее 3метров.
на 485 переходить не хочу ибо удорожит схему, кто что подскажет?
Go to the top of the page
 
+Quote Post
mrKirill
сообщение Jan 11 2011, 05:36
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 283
Регистрация: 13-06-07
Из: Челябинск
Пользователь №: 28 391



На 3м городить RS485 и действительно нет смысла, можно попробовать RS232.

Но все же лучше разобраться с i2c, тем более он разжеван уже вдоль и поперек.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jan 11 2011, 10:21
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(AlexTech @ Jan 11 2011, 11:03) *
Подскажите где рыть )))


1. Проверить наличие резисторов-подтяжек на обоих линиях шины. 4.7К должно хватить.
2. Одолжить или купить осциллограф, или просто собрать UniLogic (в крайнем случае)
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 11 2011, 11:38
Сообщение #4


Частый гость
**

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



подтяжки стоят

Нарисовал в протеусе, протестил...
Про тинку протеус пишет что logic contention(s) detected on net SCL, а SDA уходит в 0(синей точкой горит), на этом все и останавливается
библиотечку usitwislave все буржуи пользуют, никаких косяков, что можно еще проверить?
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jan 11 2011, 12:50
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(AlexTech @ Jan 11 2011, 18:38) *
logic contention(s) detected on net SCL, а SDA уходит в 0(синей точкой горит), на этом все и останавливается

Похоже на обычное срабатывание механизма защиты от потери данных. Микросхема, которая не способна больше принимать данные, опускает SCL в ноль, тем самым препятствуя дальнейшей передаче данных мастером шины. Обработав пришедшие данные, эта микросхема отпускает SCL, и обмен возобновляется. У вас, похоже, МК принимает байт данных, место у него в приемном буфере (регистре) заканчивается, вот он и опускает SCL. И не отпускает никогда, поскольку ваша программа (обработчик прерывания) не вычитывает буфер или просто не вызывается ...
Go to the top of the page
 
+Quote Post
mrKirill
сообщение Jan 11 2011, 14:59
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 283
Регистрация: 13-06-07
Из: Челябинск
Пользователь №: 28 391



Цитата(AlexTech @ Jan 11 2011, 19:38) *
Нарисовал в протеусе, протестил...

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

Ну и если не сложно, приложите архив с исходником и проектом Proteus'а, чтобы разговор более детальный был.
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 11 2011, 18:05
Сообщение #7


Частый гость
**

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



Вот файлы, протеус 7.7
slave скомпилирован для тинки26, но в протеусе ее нет, пробовал компилировать и для 261 и для 2313 результат тот же
в master используются либы из avrlib, их я естественно не приаттачил

Сообщение отредактировал AlexTech - Jan 11 2011, 18:07
Прикрепленные файлы
Прикрепленный файл  i2c.rar ( 105.28 килобайт ) Кол-во скачиваний: 20
 
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 13 2011, 03:04
Сообщение #8


Частый гость
**

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



В общем нашел какой то кусок кода который заработал в протеусе при частоте тинки только 8мгц, при этом программных задержек нет, крутить нечего
теперь беда в том, что в железе тинка не заводится от внутреннего генератора на 8мгц, даже на 2 дурит, работает только на 1
это с камнем у меня косяк или можно как то побороть?
Go to the top of the page
 
+Quote Post
mrKirill
сообщение Jan 14 2011, 04:00
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 283
Регистрация: 13-06-07
Из: Челябинск
Пользователь №: 28 391



Цитата(AlexTech @ Jan 13 2011, 11:04) *
В общем нашел какой то кусок кода который заработал в протеусе при частоте тинки только 8мгц, при этом программных задержек нет, крутить нечего
теперь беда в том, что в железе тинка не заводится от внутреннего генератора на 8мгц, даже на 2 дурит, работает только на 1
это с камнем у меня косяк или можно как то побороть?

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

PS. Вечером гляну Ваш архив, пока времени нет.
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 14 2011, 09:33
Сообщение #10


Частый гость
**

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



Не наю ))
шью из студии:
SPI enable
IntRCost, Freq 8mhz
startup 64ms + 6ck(причем в списке два таких пункта, выбираю первый)
no bod
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 14 2011, 16:20
Сообщение #11


Частый гость
**

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



Прогресс моих мучений дошел до того, что я устойчиво отправляю и принимаю 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 не отправляет после приема байта или мастер его не видит?
Код либы просмотрел, из того что понял вроде все честно, как проверять не пойму (((

Сообщение отредактировал AlexTech - Jan 14 2011, 16:22
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 14 2011, 16:26
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(AlexTech @ Jan 15 2011, 00:20) *
Соответственно как отловить, слейв ack не отправляет после приема байта или мастер его не видит?
Напоминаю, что интерфейс I2C - синхронный. Если нет осциллографа, то сделайте частоту тактирования SCL, скажем, 1Гц. И посмотрите состояния шины тестером или парой светодиодов.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jan 14 2011, 16:34
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(AlexTech @ Jan 14 2011, 23:20) *
как проверять не пойму (((


Unilogic соберите, еще раз. Там работы на пару часов. Зато получится цифровой мини-осциллограф, подключаемый к LPT - порту. А еще можно не использовать шут знает чьи и шут знает как работающие библиотеки там, где без них можно обойтись, а взять аппноты от Атмела, даташит, самому разобраться и все сделать за пару дней. Вы хоть будете понимать, что вообще делаете ...
P.S. Лично я стараюсь никогда не использовать в своих проектах библиотек и прочих фрагментов, если не понимаю, как они работают ...
Go to the top of the page
 
+Quote Post
AlexTech
сообщение Jan 14 2011, 17:17
Сообщение #14


Частый гость
**

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



Угу, согласен с аппнотами
На мастере работает AVR315 - TWI Master Implementation
На слейве AVR312: Using the USI Module as an I2C slave
Ну и че мне с аппнотов если они написаны в 2004г и вполне вероятно на свежих камнях работают не совсем корректно.
С кодом разобрался в меру своих возможностей, все вроде правильно, только не работает ))))

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

А еще я не понимаю почему _delay_ms(3000) дает задержку меньше секунды :/

Сообщение отредактировал AlexTech - Jan 14 2011, 17:22
Go to the top of the page
 
+Quote Post
kovigor
сообщение Jan 14 2011, 17:42
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



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


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

Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 21:39
Рейтинг@Mail.ru


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