Отговори на тема  [ 20 мнения ]  Отиди на страница Предишна  1, 2
Цифров термометър с TCN75 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
Възникна ми един проблем ....
При измерване на отрицателни температури не ми работи кода коректно.
Код:
#ifndef DAL_SCL
#define DAL_SCL PIN_A1
#define DAL_SDA PIN_A0
#endif

#define  read_temp read_full_temp

#use i2c(master,sda=DAL_SDA, scl=DAL_SCL)

void init_temp() {
   output_high(DAL_SDA);
   output_high(DAL_SCL);
   i2c_start();
   i2c_write(0x90);
   i2c_write(0x00);
   i2c_write(0x00);
   i2c_stop();
}

   signed long read_full_temp() {
   signed long datah, datal;
   signed long  data;
   float temp;
   i2c_start();
   i2c_write(0x90);
   i2c_write(0x00);
   i2c_start();
   i2c_write(0x91);
   datah=i2c_read();
   datal=i2c_read(0);
   i2c_stop();

   data=( signed long)datah*10;

   if(bit_test(datal,7))
   {
      if(data < 0)
      {
          data -= 5;
      }
      else
      {
         data += 5;
      }
   }
   temp=data;
  temp=temp/10;
temp=temp;
printf("%5.1f\n\r",temp);
}


като стане температурата -0.5 и ми принтва 255.0 ?!


Прикачени файлове:
TCN75_table.JPG
TCN75_table.JPG [ 37.77 KiB | Прегледано 955 пъти ]
Вто Мар 25, 2008 7:50 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 03, 2005 11:31 am
Мнения: 766
Местоположение: Пловдив
Мнение 
В оригинала "LM75CIM3" не е ли така ?

signed long read_full_temp() {
signed long datah, datal;
signed long data;

i2c_start();
i2c_write(0x90);
i2c_write(0x00);
i2c_start();
i2c_write(0x91);
datah=i2c_read();
datal=i2c_read(0);
i2c_stop();

data=(signed long)datah*10;

if(bit_test(datal,7))
{
if(data < 0)
{
data -= 5;
}
else
{
data += 5;
}
}

data=(data)*90;
data=(data/50)+320;

return(data);
}


Сря Мар 26, 2008 12:22 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение 
ето я моята версия с която бръмчи въпросния датчик:


//;------------------------------------------------
//;------------------------------------------------
//float READ_FROM_TCL75A(uint8 cmd)
int16 READ_FROM_TCL75A(uint8 cmd)
{
//float tmpf;
int16 tmpf=0;
uint8 tmp1,tmp2;

my_i2c_start();
i2c_write(cmd);
i2c_write(0);
my_i2c_stop();

my_i2c_start();
i2c_write(cmd | 1);
tmp1=i2c_read(1);
tmp2=i2c_read(0);
my_i2c_stop();
/*
tmpf=tmp1;
if (bit_test(tmp2,7)) tmpf+=0.5;
if (bit_test(tmp2,6)) tmpf+=0.25;
if (bit_test(tmp2,5)) tmpf+=0.125;
if (bit_test(tmp2,4)) tmpf+=0.0625;
return(tmpf);
*/
if (bit_test(tmp2,7)) {tmpf+=5000;};
if (bit_test(tmp2,6)) {tmpf+=2500;};
if (bit_test(tmp2,5)) {tmpf+=1250;};
if (bit_test(tmp2,4)) {tmpf+= 625;};
tmp2=tmpf/1000;
return(make16(tmp1,tmp2));
}

//;------------------------------------------------
//;------------------------------------------------
void CONFIG_TCL75A(uint8 cmd, uint8 dat)
{
my_i2c_start();
i2c_write(cmd);
i2c_write(1);
i2c_write(dat);
my_i2c_stop();
}

#DEFINE TERMO_ADDR1 0b10010110
.
.
.
CONFIG_TCL75A(TERMO_ADDR1, 0b01100000);
.
.
.
result=READ_FROM_TCL75A(TERMO_ADDR1);
.
.
printf(LCD_Write_Data,"t2= %2d.%2d",make8(result,1),make8(result,0));


Скаран съм с писането на коментари, и някой неща не се сещам защо съм ги писал, но работи 100%, дано е полезно и за теб!
Може и да има нередности в софта, , но след като изгоряха два датчика, се отказах и минах на други датчици.
Колегата Cekins вероятно е имал същите проблеми, но е открил може би защо се скапват :)


Сря Мар 26, 2008 1:21 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Някъде писах ама не помня къде : пускам му захранването 100-200 мс. след като тръгне процесора и директно от крак на процесора - консумацията е микроампери (трябва и да се изчака малко докато тръгне самия датчик). За отрицателната температура е много просто : четеш си значи 16-те бита, проверяваш единия бит (дето става единица при отриц. темп.) ако е единица инвертираш цялата дума - воалла имаш си температурата като положителна само че трябва да имаш едно на ум че е отрицателна. Иначе старите TCN75 без буква А са сякаш по устойчиви на пренапрежения.


Сря Мар 26, 2008 3:52 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
Това с инвертирането как може да стане на С ?


Сря Мар 26, 2008 7:02 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 20 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни