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

 
 
2 страниц V   1 2 >  
Closed TopicStart new topic
> Термодатчик AD7415, помогите забодать, Развитие темы об I2C
haker_fox
сообщение Oct 5 2005, 07:22
Сообщение #1


Познающий...
******

Группа: Свой
Сообщений: 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.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
BlackJack
сообщение Oct 6 2005, 06:34
Сообщение #2


Участник
*

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



Есть подозрение, что он правильно показывает. Было нечто подобное с далласами. После включения схемы плата понемногу нагревалась,- оптроны рядом стояли. Может ветер дует? smile.gif Кстати, если все данные четные -может быть байт не до конца считывается. Такое тоже было на И2с..
Go to the top of the page
 
+Quote Post
fur
сообщение Oct 6 2005, 07:59
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 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.
*

Возможно, что плохо откалиброван сам датчик, я сталкивался с такой проблемой, правда у меня были датчики на основе термопары. Советую попробовать с другим датчиком, может глюк связан именно с этим конкретным.
Go to the top of the page
 
+Quote Post
NickB
сообщение Oct 6 2005, 09:23
Сообщение #4


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

Группа: Свой
Сообщений: 114
Регистрация: 22-06-04
Пользователь №: 102



Мы использовали датчики AD7414 (они почти такие же)- проблем не видел
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Oct 6 2005, 13:56
Сообщение #5


Познающий...
******

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



2BlackJack: да нет, ветер не дует! У меня пять таких датчиков, два испытал - результат тот же самый. Человек, который посоветовал мне эти датчики проблем не ощущал. А насчет четности/не четности байта я проверю, спасибо за совет!

2NickB: извините, не могли бы Вы выслать программу опроса датчиков? Я уже не знаю что делать! Весь свой код проверил не один раз, все соединения, обматывал датчик изолентой (чтоб мнимый ветер не дул) и все бестолку.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
artStinger
сообщение Oct 6 2005, 15:16
Сообщение #6





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



А что если тебе усреднять несколько измерений (5-7), тогда ты сможешь избавится от плаванья и получить относительно постоянное значение. Кстати, такое может наблюдаться если нестабилизировано напряжение питания...
Go to the top of the page
 
+Quote Post
PowerF1
сообщение Oct 6 2005, 17:18
Сообщение #7


Участник
*

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



попробуйте пройтись по всей шкале температур (скажем, сходите в баню, там обязательно висят термометры). Сравните серии измерений. Посмотрите на отклонения.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Oct 7 2005, 02:00
Сообщение #8


Познающий...
******

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



2artStinger: так-то оно так, да вот говорят, что эти датчики должны показывать постоянную температуру (по крайней мере не должна же она колебать на +-5 градусов).

2PowerF1: ага, заодно и помыться можноsmile.gif сразу двух зайцев убить. А может тогда уж воды вскипятить, опустить туда термометр и так проверить. Кстати опять убиваем двух несчастных зацев: кипятком можно заварить чай smile.gif


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
BlackJack
сообщение Oct 7 2005, 06:34
Сообщение #9


Участник
*

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



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

*


Немного непонятно из вопроса: различаются именно соседние измерения, или дрейфус плавный? Дело в том, что у меня в прибор заложен этот чип и вчера я тормознул закупку...
Go to the top of the page
 
+Quote Post
SergeyBorshch
сообщение Oct 7 2005, 19:32
Сообщение #10


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

Группа: Участник
Сообщений: 100
Регистрация: 28-09-05
Из: Чернигов, Украина
Пользователь №: 9 053



У нас на фирме выпускается промышленные регуляторы и измерители температуры, в основном первичный датчик температуры у нас либо термосопротивление, либо терморары, цифровые датчики используються редко, поскольку у них предел до +180 град. в сравнении с аналоговыми - +1000 град. Так вот, для того чтобы небыло колебаний температуры предусмотрено:
1. усреднение результата (в среднем 20 усреднений - задает пользватель);
2. цифровая фильтрация результата - если текущее значение температуры отличается от результатов предыдущего измерения на большое значение (этот параметр также задает пользователь), то производится повторное измерение температуры, а на индикаторе остается старое значение. Таким образом мы уменьшаем влияние случайных импульсных помех на измерение.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Oct 7 2005, 23:21
Сообщение #11


Познающий...
******

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



2BlackJack: ну не знаю как это сказать! Вот значит показания с датчика снимаются каждые 0,5 сек:
1-ое значение 20 C
2-ое значение 25 C
3-ое значение 23 C
4-ое значение 22 C
5-ое значение 21 C и т. д.
К сожалению до сих пор не имею возможности узнать истинную температуру в комнате.

2SergeyBorshch: да, это дельный совет. Только вот смущает одно, мне-то говорили, что на них не должны так скакать значения. Но если так и будет продолжаться, то буду наверно применять цифровую фильтрацию.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Oct 8 2005, 02:17
Сообщение #12


Познающий...
******

Группа: Свой
Сообщений: 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; //температуру


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
BlackJack
сообщение Oct 8 2005, 04:53
Сообщение #13


Участник
*

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



Цитата(haker_fox @ Oct 8 2005, 02:21)
2BlackJack: ну не знаю как это сказать! Вот значит показания с датчика снимаются каждые 0,5 сек:
1-ое значение 20 C

*


Постой-ка.
Почему 0,5 с??? там вроде бы преобразование 800 мс длится...
Замедляйся. и скорость СМбас тоже пониже сделай, на всякий случай.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Oct 8 2005, 06:43
Сообщение #14


Познающий...
******

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



нет, я задержки пробывал и раньше увеличивать, не помогало!!! Вот и сейчас опрос каждые 2,5 сек, та же хрень. Вот отсюда и отчаение полное: вроде все мелочи исправил, и все равно...


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Runner
сообщение Oct 8 2005, 12:53
Сообщение #15


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

Группа: Свой
Сообщений: 107
Регистрация: 18-06-05
Пользователь №: 6 117



Возможно мой совет покажется ну уж слишком банальным, но все-таки.
Проверте разводку платы - не зашумлена ли "земля" попробуйте бросить и землю и питание "толстыми" проводами прямо на источник на плате. Как можно ближе к пину VDD - керамический конденсатор единицы - десятки nF с VDD на землю. Отфильтровать напряжение питания (хоть RC-цепочкой).

И еще раз извините, если обидел Вас этим советом.
Go to the top of the page
 
+Quote Post

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

 


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


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