|
FOSP01 - датчик атмосферного давления и температуры, Скачут показания |
|
|
|
Mar 5 2007, 12:26
|
Участник

Группа: Участник
Сообщений: 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); }
|
|
|
|
Сообщений в этой теме
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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|