|
Термодатчик AD7415, помогите забодать, Развитие темы об I2C |
|
|
|
Oct 5 2005, 07:22
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Считываю температуру, а она плавает: т.е. на первом измерении, допустим +25, на втором - +27, на третьем - +22 и т.д. Сначала грешил, что не верно работаю с I2C, но попробывал с аппаратным TWI ATmega8-16PI и с программным: результат одинаковый. Причем на изменение температуры он реагирует (датчик). Но, взяв его в руку он показывает примерно 33, 29, 35 градусов. Т.е. наблюдаются явные колебания от реальной температуры плюс минус 5-7 градусов. Даташит перечитал на несколько рядов, плюс человек, который мне эти термодатчики предложил, подтвердил правильность моего программного кода. Резисторы на шине 4,7 К, скорость почти самая низкая 20 000 Гц. Вот вопрос: в чем трабл??? Может кто встречался с подобным. Всем заранее спасибо, если что вот ICQ 399085018.
--------------------
Выбор.
|
|
|
|
|
Oct 6 2005, 06:34
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 6-10-05
Пользователь №: 9 276

|
Есть подозрение, что он правильно показывает. Было нечто подобное с далласами. После включения схемы плата понемногу нагревалась,- оптроны рядом стояли. Может ветер дует?  Кстати, если все данные четные -может быть байт не до конца считывается. Такое тоже было на И2с..
|
|
|
|
|
Oct 6 2005, 07:59
|
Участник

Группа: Новичок
Сообщений: 23
Регистрация: 15-08-05
Пользователь №: 7 630

|
Цитата(haker_fox @ Oct 5 2005, 11:22) Считываю температуру, а она плавает: т.е. на первом измерении, допустим +25, на втором - +27, на третьем - +22 и т.д. Сначала грешил, что не верно работаю с I2C, но попробывал с аппаратным TWI ATmega8-16PI и с программным: результат одинаковый. Причем на изменение температуры он реагирует (датчик). Но, взяв его в руку он показывает примерно 33, 29, 35 градусов. Т.е. наблюдаются явные колебания от реальной температуры плюс минус 5-7 градусов. Даташит перечитал на несколько рядов, плюс человек, который мне эти термодатчики предложил, подтвердил правильность моего программного кода. Резисторы на шине 4,7 К, скорость почти самая низкая 20 000 Гц. Вот вопрос: в чем трабл??? Может кто встречался с подобным. Всем заранее спасибо, если что вот ICQ 399085018. Возможно, что плохо откалиброван сам датчик, я сталкивался с такой проблемой, правда у меня были датчики на основе термопары. Советую попробовать с другим датчиком, может глюк связан именно с этим конкретным.
|
|
|
|
|
Oct 6 2005, 15:16
|
Группа: Новичок
Сообщений: 12
Регистрация: 8-08-05
Пользователь №: 7 449

|
А что если тебе усреднять несколько измерений (5-7), тогда ты сможешь избавится от плаванья и получить относительно постоянное значение. Кстати, такое может наблюдаться если нестабилизировано напряжение питания...
|
|
|
|
|
Oct 6 2005, 17:18
|
Участник

Группа: Новичок
Сообщений: 34
Регистрация: 12-03-05
Из: Новосибирск
Пользователь №: 3 288

|
попробуйте пройтись по всей шкале температур (скажем, сходите в баню, там обязательно висят термометры). Сравните серии измерений. Посмотрите на отклонения.
|
|
|
|
|
Oct 7 2005, 06:34
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 6-10-05
Пользователь №: 9 276

|
Цитата(haker_fox @ Oct 6 2005, 16:56) 2BlackJack: да нет, ветер не дует! У меня пять таких датчиков, два испытал - результат тот же самый. Человек, который посоветовал мне эти датчики проблем не ощущал. А насчет четности/не четности байта я проверю, спасибо за совет! Немного непонятно из вопроса: различаются именно соседние измерения, или дрейфус плавный? Дело в том, что у меня в прибор заложен этот чип и вчера я тормознул закупку...
|
|
|
|
|
Oct 8 2005, 02:17
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Не знаю что и делать? Все советы, которые мне любезно дали в этой ветке я перепробывал. И все бестолку. Я пробывал усреднять результат (10 измерений каждые 0,5 сек), ну все равно каждые 5 секунд, то 26, то 25, то 27. Так быть не должно!!! Я вот выкладываю исходник, как я опрашиваю свой датчик, я не кого не прошу не очем и так слишком уже перевалил все свои проблемы. Просто, если кто захочет, пусть посмотрит и может найдет ошибки.
Данные: МК ATmega-16PI Компилятор: IAR EWAVR 4.11A Частота кварца 16.000 MHz
Вот константы #define THERMAL_H 0x94 //адрес домашнего термодатчика AD7415ART-0500RL7
#define WR 0 #define RD 1
#define TWI_TWBR 0x0C
Вот сам код:
//Инициализация I2C void i2c_init(void) { TWBR = TWI_TWBR; //установить скорость шины i2c TWCR = (1<<TWEN); //включить модуль i2c }
volatile short int home_temp, street_temp; //домашняя у уличная температуры
Этот кусок читает датчик и вычисляет температуру (пока только положительны)
TWCR=((1<<TWEN)|(1<<TWINT)|(1<<TWSTA)); //посылаем "старт" i2c_delay(); //ждем установки флага TWINT if((TWSR != 0x08)&&(TWSR != 0x10))//If status other than START {street_temp=111; return;} //ошибка
TWDR=THERMAL_H|RD; //загружаем адрес датчика + чтение TWCR = ((1<<TWINT)+(1<<TWEN));//инициируем передачу установкой TWINT + питание модуля TWI i2c_delay(); //ждем установки флага TWINT if(TWSR!=0x40) {street_temp=222; return;} //ошибка передачи TWCR = ((1<<TWINT)+(1<<TWEN)+(1<<TWEA)); //посылаем подтверждение, сбрасываем TWINT для приема второго байта
i2c_delay(); if(TWSR!=0x50) {street_temp=333; return;} //нет подтверждения, выход home_temp=(TWDR<<8); TWCR=((1<<TWINT)|(1<<TWEN)); //не посылаем подтверждение (последний байт уже принят)
i2c_delay(); //ждем установки флага TWINT if((TWSR&0xf8)!=0x58) {street_temp=444; return;} //нет подтверждения, выход home_temp|=(short unsigned int)TWDR;
i2c_delay(); TWCR = ((1<<TWEN)+(1<<TWINT)+(1<<TWSTO)); //посылаем "стоп"
home_temp>>=6; //вычисляем home_temp/=4; //температуру
--------------------
Выбор.
|
|
|
|
|
Oct 8 2005, 04:53
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 6-10-05
Пользователь №: 9 276

|
Цитата(haker_fox @ Oct 8 2005, 02:21) 2BlackJack: ну не знаю как это сказать! Вот значит показания с датчика снимаются каждые 0,5 сек: 1-ое значение 20 C Постой-ка. Почему 0,5 с??? там вроде бы преобразование 800 мс длится... Замедляйся. и скорость СМбас тоже пониже сделай, на всякий случай.
|
|
|
|
|
Oct 18 2005, 07:43
|
Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 18-06-05
Пользователь №: 6 117

|
Цитата(haker_fox @ Oct 18 2005, 08:54) Я Вам это советовал более недели назад. "Ну вот, я же говорил"
|
|
|
|
|
Oct 23 2005, 09:32
|
Местный
  
Группа: Свой
Сообщений: 238
Регистрация: 11-08-05
Пользователь №: 7 557

|
А я вот себе купил tmp36 и не могу управится с ним.А проблемы вот в чем,выходное напряжение если меряю ацп или мультиметром соответствует 10 градусам,что не может быть,если шунтировать выход кондером(чего по идее не надо делать) то выход около 26 градусов,что уже лучше,а если поставить последовательно резюк 750 ом то выход около 22 градусов,что на мой взгляд является нормой,если ставить резюк большого сопротивления то выходое напрядение сильно зависит от его номинала. 750 ом я взял из доки,там рекомендуется подключать его если кабель длинный,но я подсоединял лапу датчика к лапе контроллера вообще без кабеля поэтому и этого сопротивления не должно быть. В общем фигня с ним творится,может кто работал,подскажет? Или посоветуйте как это можно выличить?Да и если ставить резистор то напряжение на лапе датчика меньше чем после резистора,то есть ток течет как бы к датчику,хотя должен от него,там ведь выход-эммитер...
|
|
|
|
|
Feb 1 2006, 03:30
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Извините за возвращение к старой теме, но возникли сомнения, а поделиться больше не с кем:-) В общем датчики работают отлично, но... недавно понадобилось увеличить провода, которыми они подключены, до 2 м. Начались проблемы, например, при включении лампы дневного света, переставал работать модуль TWI. Восстановить работу получалось только жестким рестартом МК. Просто обновить значение управляющих регистров не помогало. Т.к. на этой шине висит еще и At24C32 & DS1307, я решил два датчика повесить на программную отдельную шину I2C, чтобы уж в крайнем случае, часы и память работали исправно. Все отлично, сбои прекратились, вроде бы. Но возник вопрос: все ли я верно сделал? Может быть нужен экранированный провод? Еще какие-нибудь дополнительные средства защиты, чтобы сбоев не повторилось? Из средств защиты есть только конденсаторы на шине питания возле разъемов для подключения датчиков 0,1 мкф. Что можно еще сделать?
P.S. Неужели модуль TWI такой "чувствительный", что не может работать на длинную линию связи (~2 м) или у меня руки кривые?
--------------------
Выбор.
|
|
|
|
|
Feb 1 2006, 17:54
|

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

|
Я на работе пользую другие термодатчики- DS1821,но они тоже висят на квадратной шине и условия эксплуатации достаточно жесткие-датчиков 6 штук,расстояние до самого дальнего 7 метров и все это на мощных ТВ И FM передатчиках.Стоит программная защита-при начале обмена запускается таймер на 5 секунд и обнуляется в конце обмена.Если модуль зависает-улет на прерывание по переполнению таймера,где сбрасывается модуль TWI.Ну и защита от сбоев-опрос раз в 10с и если показания отличаются от предыдущих больше чем на 3 градуса,отсчет считается ложным.Контроллер -Мега8 от внутренного опорника 1Мгц,делитель тактовой i2c по максимуму.Работает уже года полтора без вопросов.Да,вся разводка обычным неэкранированным 4-х проводным проводом,единственное на каждый датчик фильтр LC по питанию-100мкгн и 0,1мкф.
Сообщение отредактировал WHALE - Feb 1 2006, 17:57
--------------------
"Hello, word!" - 17 errors 56 warnings
|
|
|
|
|
Feb 2 2006, 00:13
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Цитата(WHALE @ Feb 2 2006, 01:54)  Я на работе пользую другие термодатчики- DS1821,но они тоже висят на квадратной шине и условия эксплуатации достаточно жесткие-датчиков 6 штук,расстояние до самого дальнего 7 метров и все это на мощных ТВ И FM передатчиках.Стоит программная защита-при начале обмена запускается таймер на 5 секунд и обнуляется в конце обмена.Если модуль зависает-улет на прерывание по переполнению таймера,где сбрасывается модуль TWI.Ну и защита от сбоев-опрос раз в 10с и если показания отличаются от предыдущих больше чем на 3 градуса,отсчет считается ложным.Контроллер -Мега8 от внутренного опорника 1Мгц,делитель тактовой i2c по максимуму.Работает уже года полтора без вопросов.Да,вся разводка обычным неэкранированным 4-х проводным проводом,единственное на каждый датчик фильтр LC по питанию-100мкгн и 0,1мкф. Чтож, примерно я так и думал, что нужно еще и LC фильтр поставить. А все-таки были случаи, что TWI вис? Раз защита предусмотрена, наверно вис  Не зря ли я подключил свои датчики на отдельную, программную шину? Правда, в моем девайсе не очень-то и допустимо, чтобы в случае сбоя TWI, перестали опрашиваться часики DS1307
--------------------
Выбор.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|