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

 
 
> FOSP01 - датчик атмосферного давления и температуры, Скачут показания
sls_
сообщение Mar 5 2007, 12:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 4-03-07
Пользователь №: 25 875



Привет всем! Нужна помощь.
Имеются два датчика FOSP01 и FOSP01A (они одинаковые, разница в типе корпуса).
Датчики подключены по I2C к двум контроллерам ADuC848. Колибровочные константы из памяти датчиков читаются бз проблем, а вот с регистрами хранящими данные о температуре и давлении происходит странная вещь: в термошкафу температура 25.5С, а с датчика получаю: 24.4, 26.8 тоесть цифра не изменяется плавно от верхнего значения до нижнего, а изменяется скачком то 24.4 то 26.8, такая же фигня и со вторым датчиком только цифры немного другие 23.9,25.1. Дело не в расчетах, проверял, цифра читаемая с датчика скачет. Подозреваю что какаято проблемма в обращении к датчику, возможно его сбросе, различные манипуляции ни к чему хорошему не привели. Думаю как следствие занижает давление ~30mmHg.
Если кто сталкивался и может помочь, советом или исходниками, буду благодарен.

мои исходники:
// i2c ********************************* i2c
long xdata c1, c2, c3, c4, c5, c6, c7;
char xdata a, b, c, d;

void i2c_dly (void)
{
time(100);
}

void i2c_start (void)
{
bSDA = 1;
I2c_dly ();
bSCL = 1;
I2c_dly ();
bSDA = 0;
I2c_dly ();
bSCL = 0;
I2c_dly ();
}
void i2c_stop (void)
{
bSDA = 0;
I2c_dly ();
bSCL = 1;
I2c_dly ();
bSDA = 1;
I2c_dly ();
}

char i2c_rx(char ack)
{
char x, d=0;
bSDA = 1;
for(x=0; x<8; x++)
{
d <<= 1;
do
{
bSCL = 1;
}
while(bSCL==0);
i2c_dly();
if(bSDA) d |= 1;
bSCL = 0;
}
if(ack) bSDA = 0;
else bSDA = 1;
bSCL = 1;
i2c_dly();
bSCL = 0;
bSDA = 1;
return d;
}

bit i2c_tx(unsigned char d)
{
char x;
static bit b;
for(x=8; x; x--)
{
if(d&0x80) bSDA = 1;
else bSDA = 0;
bSCL = 1;
d <<= 1;
bSCL = 0;
}
bSDA = 1;
bSCL = 1;
i2c_dly();
b = bSDA;
bSCL = 0;
return b;
}
// FOSP01 ***************************************** FOSP01
int FOSP01RxCoeff(unsigned char n)
{
char b1,b2;
i2c_start();
i2c_tx(0xa0);
i2c_tx(n);
i2c_start();
i2c_tx(0xa1);
b1 = i2c_rx(1);
b2 = i2c_rx(0);
i2c_stop();
return b1*256+b2;
}

int FOSP01RxValue(unsigned char n)
{
char b1,b2;
i2c_start();
i2c_tx(0xee);
i2c_tx(0xff);
i2c_tx(n);
i2c_stop();
I2c_dly ();
i2c_start();
i2c_tx(0xee);
i2c_tx(0xfd);
i2c_start();
i2c_tx(0xef);
b1 = i2c_rx(1);
b2 = i2c_rx(0);
i2c_stop();
return b1*256+b2;
}

void FOSP01Reset(void)
{

bXCLR = 0;
I2c_dly ();
bXCLR = 1;
}

void FOSP01Initial(void)
{
int b1, b2;
c1 = FOSP01RxCoeff(16);
c2 = FOSP01RxCoeff(18);
c3 = FOSP01RxCoeff(20);
c4 = FOSP01RxCoeff(22);
c5 = FOSP01RxCoeff(24);
c6 = FOSP01RxCoeff(26);
c7 = FOSP01RxCoeff(28);
b1 = FOSP01RxCoeff(30)/256;
b2 = FOSP01RxCoeff(30);
c = b2;
d = b1;
b1 = FOSP01RxCoeff(32)/256;
b2 = FOSP01RxCoeff(32);
a = b2;
b = b1;

FOSP01Reset();
}

//******************************************************
//******************************************************
//******************************************************
//MAIN

FOSP01Initial();


//далее постоянно вызываетя эта функция
long FOSP01RxTB(void)
{
long d1, d2;
long t;
long dut;
long off,sens,x,p;

d1 = FOSP01RxValue(0xe8);

d2 = FOSP01RxValue(0xf0);

if(d2 >= c5) dut = d2-c5 - ((d2-c5)/128)*((d2-c5)/128)*a/pow(2,c);
else dut = d2-c5 - ((d2-c5)/128)*((d2-c5)/128)*b/pow(2,c);
numbers8(110, 0, 0, d2); //вывод на экран
t = 250+dut*c6/65536;
numbers8(30, 0, 1, t);

off = (c2+(c4-1024)*dut/16384)*4;
sens = c1+c3*dut/1024;
x = sens*(d1-7168)/16384-off;
p = x*10/32+c7;
numbers8(110, 1, 0, d1);
numbers8(30, 1, 1, p);
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sls_   FOSP01 - датчик атмосферного давления и температуры   Mar 5 2007, 12:26
- - klen   А че доке пишут? Внимательно читал? мож он умеет у...   Mar 6 2007, 08:41
- - sls_   Док на мой взглят скромный очень, вот он:   Mar 6 2007, 09:11
|- - sls_   Времени не было написать, разобрался, ошибка: два ...   Apr 19 2007, 08:45
- - alux   Цитата(sls_ @ Mar 5 2007, 15:26) //далее ...   May 5 2007, 06:06
|- - sls_   Цитата(alux @ May 5 2007, 10:06) По-моему...   May 7 2007, 05:28
- - bullit   to sls: а где такой датчик можно приобрести и за к...   May 11 2007, 10:42
|- - sls_   Цитата(bullit @ May 11 2007, 14:42) to sl...   May 14 2007, 02:44
- - bullit   В Платане (http://www.platan.ru/cgi-bin/qwery.pl/i...   May 14 2007, 03:57
- - sls_   В платане ещё написано что он на 12 вольт .....   May 15 2007, 07:38
- - bullit   Ответ понятен. Давно уже замечал неточности у Плат...   May 15 2007, 13:50
|- - sls_   Цитата(bullit @ May 15 2007, 21:50) Ответ...   May 16 2007, 01:37
- - bullit   Что за тип искал? И как там с заявленными точностя...   May 16 2007, 09:46
|- - sls_   Цитата(bullit @ May 16 2007, 17:46) Что з...   May 17 2007, 01:38
- - alux   У меня проблема с этим датчиком. Считываемые темпе...   Aug 28 2007, 14:47
- - alux   Попробовал на другом датчике (FOSP01A). Та же фигн...   Aug 28 2007, 19:12
|- - sls_   Цитата(alux @ Aug 28 2007, 23:12) Попробо...   Aug 29 2007, 06:56
|- - alux   Цитата(sls_ @ Aug 29 2007, 09:56) не нашо...   Aug 29 2007, 07:24
|- - sls_   Дело есть, времяни нет .... Цитата(alux @ Aug...   Aug 29 2007, 11:58
|- - alux   Цитата(sls_ @ Aug 29 2007, 14:58) 1. не п...   Aug 29 2007, 12:29
|- - sls_   1. врятли, у меня одного раза хватило. 2. возможно...   Aug 29 2007, 13:27
|- - alux   Цитата(sls_ @ Aug 29 2007, 16:27) возможн...   Aug 29 2007, 14:26
- - alux   Глас вопиющего в пустыне... Видимо, никому нет дел...   Aug 29 2007, 11:33
- - bullit   Вроде код нормальный. Цитатаvoid fosp01Init(void)...   Aug 29 2007, 17:37
- - alux   Нет, такие ошибки у меня не бывают. На счет исполь...   Aug 29 2007, 17:59
- - bullit   Был бы очень рад исходникам. Тем более под мегу, к...   Aug 30 2007, 13:56
- - alux   Проблема решена. Как я и предполагал, проблема б...   Aug 30 2007, 14:51
- - alux   Проблема решена частично. Датчик заработал. Но выд...   Feb 2 2008, 09:05
|- - sls_   я считал так: d1 = FOSP01RxValue(0xf0); d2 = ...   Feb 4 2008, 09:41
- - bullit   А что если его тактировать с выхода Меги(другого М...   Mar 22 2008, 20:13
|- - alux   Цитата(bullit @ Mar 22 2008, 23:13) А что...   Apr 7 2008, 10:33
- - K19   Есть вопросы по датчику HP03 (аналог FOS01) читаю ...   May 24 2008, 17:54
- - sls_   Цитата(K19 @ May 24 2008, 21:54) Есть воп...   May 26 2008, 05:37
|- - K19   Цитата(sls_ @ May 26 2008, 08:37) Значени...   May 26 2008, 08:57
|- - sls_   Цитата(K19 @ May 26 2008, 12:57) значение...   May 26 2008, 11:20
|- - K19   Цитата(sls_ @ May 26 2008, 14:20) умножен...   May 26 2008, 11:27
- - alux   Цитата(K19 @ May 24 2008, 20:54) Есть воп...   Jun 30 2008, 05:39


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

 


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


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