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

 
 
 
Reply to this topicStart new topic
> Подключение нескольких ds1621
D H
сообщение Feb 15 2007, 12:29
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 1-11-06
Пользователь №: 21 847



Столкнулся с проблемой подключения двух ds1621 по и2с. Одна работает. Вторую подключаю - виснет. Наверно неправильно подключаю. Подскажите как сделать.
Сейчас подключено так:
SDA & SCL 10к к питанию.
При подключении к SDA (либо SCL) еще одного проводника для ds1621 виснет на старте (даже если второй ds1621 нет, т.е. панелька без нее). Убираю проводник, стартует нормально. Длина шлейфа 2м.
Да, еще вопрос. Первый ds1621 опрашиваю через нулевой адрес, для этого A1,A2,A3 на земле. Т.е. для выбора первого адреса на втором ds 1621 надо A1 подтянуть к плюсу, A2, A3 на землю?

Сообщение отредактировал D H - Feb 15 2007, 12:30
Go to the top of the page
 
+Quote Post
vmp
сообщение Feb 15 2007, 12:54
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070



Цитата(D H @ Feb 15 2007, 12:29) *
Столкнулся с проблемой подключения двух ds1621 по и2с. Одна работает. Вторую подключаю - виснет. Наверно неправильно подключаю. Подскажите как сделать.
Сейчас подключено так:
SDA & SCL 10к к питанию.
При подключении к SDA (либо SCL) еще одного проводника для ds1621 виснет на старте (даже если второй ds1621 нет, т.е. панелька без нее). Убираю проводник, стартует нормально. Длина шлейфа 2м.
Да, еще вопрос. Первый ds1621 опрашиваю через нулевой адрес, для этого A1,A2,A3 на земле. Т.е. для выбора первого адреса на втором ds 1621 надо A1 подтянуть к плюсу, A2, A3 на землю?


У меня DS1621 висла при включении питания при медленном нарастании напряжения или при его просадке. Ей надо резкий старт питания.
При таком зависании интерфейс I2C работает нормально, все читается, но измерение температуры не проходит - показания "залипают".

С адресами - все верно. Не забудь, что в формате команды I2C младший бит адреса сидит не в 0 бите, а в 1, т.е. адрес надо увеличить на 2.
Go to the top of the page
 
+Quote Post
D H
сообщение Feb 15 2007, 15:07
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 1-11-06
Пользователь №: 21 847



Цитата(vmp @ Feb 15 2007, 12:54) *
Цитата(D H @ Feb 15 2007, 12:29) *

При подключении к SDA (либо SCL) еще одного проводника для ds1621 виснет на старте (даже если второй ds1621 нет, т.е. панелька без нее). Убираю проводник, стартует нормально. Длина шлейфа 2м.

У меня DS1621 висла при включении питания при медленном нарастании напряжения или при его просадке. Ей надо резкий старт питания.


У меня виснет контроллер. На инициализации 1621. На горячую выдергиваю из панельки 1621, вставляю - запускается, но ни с первого ни с второго 1621 ничего прочитать не может. Использую CV.

Сообщение отредактировал D H - Feb 15 2007, 15:08
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Feb 15 2007, 17:10
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
SDA & SCL 10к к питанию.При подключении к SDA (либо SCL) еще одного проводника для ds1621 виснет на старте (даже если второй ds1621 нет, т.е. панелька без нее). Убираю проводник, стартует нормально.

10К слишком жирно, да еще и на длинном проводнике. Уменьшить раз в 5-6.
Цитата
У меня виснет контроллер. ......Использую CV.

Процедура родная? Тогда поллит бит готовности. Если некиий символ на шине (старт, стоп, ак) пропал, МК будет ждать его до опупения. Лучше использовать прерывания.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
D H
сообщение Feb 15 2007, 21:14
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 1-11-06
Пользователь №: 21 847



В процессе отладки выяснил:
1. виснет в месте инициализации первой 1621, т.е. до второй и не доходит.
2. Если на горячую выдернуть/вставить вторую 1621 - начинает работать, но не читает ни с первой, ни со второй ничего.
3. Если просто допаять проводник к SDA (или SCL), не подлючая к ниму ничего, то же висит на инициализации первой ds1621
Что решил сделать:
1. Добавить на последнем устройстве конденсаторы на SDA, SCL к земле.
2. Уменьшить по совету beer_warrior до 2к резисторы.
О результате отчитаюсь. Может кому, как и мне, пригодиться.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 15 2007, 21:50
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(D H @ Feb 15 2007, 22:14) *
В процессе отладки выяснил:
1. виснет в месте инициализации первой 1621, т.е. до второй и не доходит.
2. Если на горячую выдернуть/вставить вторую 1621 - начинает работать, но не читает ни с первой, ни со второй ничего.
3. Если просто допаять проводник к SDA (или SCL), не подлючая к ниму ничего, то же висит на инициализации первой ds1621
Что решил сделать:
1. Добавить на последнем устройстве конденсаторы на SDA, SCL к земле.
2. Уменьшить по совету beer_warrior до 2к резисторы.
О результате отчитаюсь. Может кому, как и мне, пригодиться.


Какие конденсаторы????!!! Я слышал люди до 150 метров выносили!!!

Что значит виснет??? Простите пожалуйста, но если вы хотите получить квалифицированный ответ, то задавайте полный вопрос. То что вы не видете ответов на данный момент, - просто показывает, что не на что отвечать!

Вы программист или нет? Что значит виснет?
Если ждёт, то чего... В каком месте инициализации...

Запомните. По описанию шины и здравому смыслу конденсаторов нет! Не надо сопли вешать! Надо квалифицировано установить причину и её устранить. То, что работает с одной микрухой - не показатель, а частный случай.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Feb 15 2007, 23:18
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
1. Добавить на последнем устройстве конденсаторы на SDA, SCL к земле.

А зачем? Фронты "зализать"?

Попробую внятней.
Цитата
При подключении к SDA (либо SCL) еще одного проводника для ds1621 виснет на старте


1.Проводник - значит внесена помеха. Обычно это дает о себе знать при высоком сопротивлении нагрузки. Если в шину качается нормальный ток(а именно он задается резистором), наводки незаметны на фоне полезного сигнала.
2.Зависание само по себе. Обусловлено тем простым фактом, что I2C это не SPI. В SPI можно вытолкнуть данные и, если все физически исправно, быть увереннным, что они зайдут в слэйв. I2C - протокол адресуемый, протокол с командами и квитированием.Т.е. если помеха наложится на SPI пострадают отдельные биты, если на I2C - последовательность адресов, команд и подтверждений скорее всего будет нарушена. Т.е. вся транзакция пройдет неправильно.
Как делается обмен в АВР?
Выполняется команда (отсылаются данные) -> получается подтверждение -> по регистру статуса смотрится результат -> принимается решение: продолжение/выход/рестарт.
Обычно во всех конченных библиотечках, поставляемых с компиляторами получение подтверждения делается в цикле
Код
while(TWI_SR & some_const)

Если состояние номер some_const по каким-то причинам не прошло, контроллер будет крутится в бесконечном цикле. Чтобы избежать такой ситуации, надо обрабатывать все возможные коды возврата или (что лучше и проще) делать все на прерываниях. Только прерывания в библиотечку не уложишь, поэтому придется либо писать самому, либо портировать чужой код.

P.S. В который раз убеждаюсь, что CV это костыли, которые подкупают мнимой простотой, а впоследствии заводят на серьезные грабли. sad.gif


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Feb 16 2007, 17:47
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



beer_warrior Вы излишне категорины cranky.gif Фактор кривых рук(мозгов)вы отметаете?Вон чел на шину конденсаторы вешать предлагает smile.gif Библиотека для I2C в CV стопроцентно рабочая.Единственно,что там софтовая реализация,но это и понятно-можно применять на любом камне.(ну и добавить защиту от зависантя-time-out по таймеру).Я её пользовал от силы пару раз и именно для DS1621 на Tiny13.Все очень хорошо описано и запускается буквально за 5 минут.Пока что даже не ясно,о каком камне идет речь.имхо,код в студию.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Feb 16 2007, 18:10
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Уважаемый WHALE!
Я имел возможность оценить Ваш класс как специалиста. Помню и то, что Вы работаете в CV.
Но я немножко о другом. Сладкая парочка CV - Proteus, с богатыми либами, как магнитом притягивает людей, которым разбираться с доками как нож острый. На ИАРе или ГЦЦ с таким подходом далеко не уедешь.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Feb 16 2007, 18:22
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



я с вами не совсем согласен,но не будем превращать наш спокойный форум во фритолк. cheers.gif
аффтар,если вас ещё интересует тема,приведите код.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
D H
сообщение Feb 16 2007, 19:10
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 1-11-06
Пользователь №: 21 847



Вот кусок кода.

#asm
.equ __i2c_port=0x18 ;PORTB
.equ __sda_bit=3
.equ __scl_bit=4
#endasm
#include <i2c.h>

#include <ds1621.h>


void main(void)
{
unsigned int ADCVal[ADCChannels];
int Tin=0,Tout=0;
char rtcHour=18,rtcMin=88,rtcSec=88,Hour=0,rtcDay=88,rtcMonth=88,rtcYear=88;
char i,j,Min=0,Sec=0,nADCCount=0;
char cText1[]="T OUT",cText2[]="T IN",cText3[]="POWER";

OCR1A = 1018;
TCCR1B = 9;
TCCR1A = 0x00;
TIMSK = 0x10;

DDRD = 0xf0;

PORTA=0b00001111;
DDRA= 0b11110000;

ADMUX=0b11000011;
ADCSRA=0x87;

PORTA.7=0;
PORTA.6=0;
PORTA.5=0;
PORTA.4=0;

delay_ms(100);
PORTA.7=1;
PORTA.6=1;
PORTA.5=1;
PORTA.4=1;

i2c_init();
PORTA.7=0;


ds1621_init(0,50,70,0); --------------------- Здесь останавливается и ждет.
PORTA.6=0;
Tin=ds1621_temperature_10(0);

ds1621_init(1,50,70,0);
PORTA.5=0;
Tout=ds1621_temperature_10(0);

MCUCR = 0b10000000;
#asm ("sei");


}

Сегодня поставил резисторы 2.2к - не стартует. Поставил 1.5к - стартует, но, примерно, через 1 минуту данные из второй 1621 не читаеn. Из первой читает. В понедельник 1к поставлю.

Сообщение отредактировал D H - Feb 16 2007, 19:13
Go to the top of the page
 
+Quote Post
jekler
сообщение Feb 16 2007, 21:34
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 57
Регистрация: 30-08-05
Пользователь №: 8 094



Использовал стандартную библиотеку CV ds1621.h
Датчик рядом с процом работал на ура.
Подключил кабель на 20 метров и второй датчик
не заработало
поменял стоявшия резисторы для подпитки с 5.1 КОм на 510 Ом и все на ура заработало.


--------------------
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Feb 16 2007, 23:38
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(WHALE @ Feb 16 2007, 18:47) *
beer_warrior Вы излишне категорины cranky.gif Фактор кривых рук(мозгов)вы отметаете?Вон чел на шину конденсаторы вешать предлагает smile.gif Библиотека для I2C в CV стопроцентно рабочая.Единственно,что там софтовая реализация,но это и понятно-можно применять на любом камне.(ну и добавить защиту от зависантя-time-out по таймеру).Я её пользовал от силы пару раз и именно для DS1621 на Tiny13.Все очень хорошо описано и запускается буквально за 5 минут.Пока что даже не ясно,о каком камне идет речь.имхо,код в студию.


Совершенно согласен в смысле с тем, что не только нет желания читать книги, документы, описания микросхем и компиляторов, но и банально - взять и установить причину "зависания".

Виснет, это когда камень не работает. Так его тогда меняют! Но здесь не виснет, а зацикливается в ожидании. Или вываливается если нет ASK, что вероятнее. Так надо закатать рукава и найти место и причину ПРОГРАМНОЙ или ПРОГРАМНО-АППАРАТНОЙ ОШИБКИ. Разобраться с ней и устранить. Если сам не можешь разобраться, то обратись на форум. Но причину - установи.

Цитата
Датчик рядом с процом работал на ура.
Подключил кабель на 20 метров и второй датчик
не заработало
поменял стоявшия резисторы для подпитки с 5.1 КОм на 510 Ом и все на ура заработало.


Это понятно, но есть и другие способы. Например переписать диаграму в сторону увеличения задержек. Шина то статическая. Я думаю, что можно увеличить и дальше.

Конечно (хотя эта шина не для того разрабатывалась) обычно применяют комплексные меры.
Толстый провод
Экранировать
Уменьшить нагрузочные резисторы
Увеличить задержки
Учитывать возможность возникновения ошибки (ввести таймауты и повторное считывание)

ну и т.д.


Но первое - повторяю - разобраться с ошибкой. Почему? Когда? И где?
Go to the top of the page
 
+Quote Post
WHALE
сообщение Feb 17 2007, 00:40
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Саша,задержки тут не причем,там уже все сделано
.На первый взгляд все,что относится к 1621,вроде верно.Единственно,в этой либе нет защиты от зави-
сания шины.Если виснуть начинает с 2 датчиками,то первое,что приходит в голову-правильно ли вы
распаяли адресные ножки чипов?
2-вы выяснили,что виснет при инициализации,но в этой функции вызываются 4 встроенные фукции,некоторые из которых включают ещё по несколько штук.Вам надо влезать в исходник(ds1621.lib) и ставить отладочные точки там.И еще-там нет защиты от зависания-встречаются конструкции типа while (ds1621_get_status(chip) & 0x10);-что в случае сбоя повесит прогу насмерть.Вы-
ход-использовать таймер для тайм-аута.
И последнее-вы так и не указали,какой чип вы используете?Подозреваю,что тини,раз не используете
аппаратный I2C.Но они имеют USI,что тоже неплохо.Рекомендую обратить внимание на атмеловский
апноут AVR310: Using the USI module as a I2C master-я его пользую для тини и очень доволен.
Работа по прерываниям,что разгружает проц и хорошо сделана защита от зависания.Портируется на CV быстро,могу выслать кусок кода для тини2313 на этом драйвере.
Удачи.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post

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

 


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


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