|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 7:13 am
Цифров термометър с TCN75
| Автор |
Съобщение |
|
mash
Ранг: Новодошъл
Регистриран на: Пет Окт 27, 2006 6:23 pm Мнения: 162 Местоположение: Севлиево
|
Възникна ми един проблем ....
При измерване на отрицателни температури не ми работи кода коректно.
като стане температурата -0.5 и ми принтва 255.0 ?!
|
| Вто Мар 25, 2008 7:50 pm |
|
 |
|
TheHungry
Ранг: Почетен член
Регистриран на: Съб Сеп 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 |
|
 |
|
Ники
Ранг: Почетен член
Регистриран на: Съб Окт 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 |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
Някъде писах ама не помня къде : пускам му захранването 100-200 мс. след като тръгне процесора и директно от крак на процесора - консумацията е микроампери (трябва и да се изчака малко докато тръгне самия датчик). За отрицателната температура е много просто : четеш си значи 16-те бита, проверяваш единия бит (дето става единица при отриц. темп.) ако е единица инвертираш цялата дума - воалла имаш си температурата като положителна само че трябва да имаш едно на ум че е отрицателна. Иначе старите TCN75 без буква А са сякаш по устойчиви на пренапрежения.
|
| Сря Мар 26, 2008 3:52 pm |
|
 |
|
mash
Ранг: Новодошъл
Регистриран на: Пет Окт 27, 2006 6:23 pm Мнения: 162 Местоположение: Севлиево
|
Това с инвертирането как може да стане на С ?
|
| Сря Мар 26, 2008 7:02 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|