|
Термодатчик 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 мс длится... Замедляйся. и скорость СМбас тоже пониже сделай, на всякий случай.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|