# Датчик температуры

## ManJak

Сорри, но судя по трэду:

https://forums.gentoo.org/viewtopic-t-368445.html

и

http://www.kusto.com.ru/temperature/

я все правильно (вроде, представлял)!

У кого получилось собрать?

Поделитесь плиз!

```

# digitemp -i -s /dev/ttyS3

DigiTemp v3.2.0 Copyright 1996-2003 by Brian C. Lane

GNU Public License v2.0 - http://www.brianlane.com

Error 5:   Adapter Not Detected

Error 7: DS2480B: Bad Response

Error 7: DS2480B: Bad Response

Error 7: DS2480B: Bad Response

Error 7: DS2480B: Bad Response

Error 7: DS2480B: Bad Response

Error 7: DS2480B: Bad Response

Error 7: DS2480B: Bad Response

Error 7: DS2480B: Bad Response

Error 7: DS2480B: Bad Response

# qpkg -v -I digitemp

app-misc/digitemp-3.2.0 *

```

Почему DS2480B?!  :Question:   :Question:   :Question: 

У меня куплен и стоит:

DS18S20  :Exclamation:   :Exclamation:   :Exclamation: 

Помогите плиз, просто СТРАННО это все!

ЗЫ

Предвосхищая вопрос, если вынуть датчик:

# digitemp -i -s /dev/ttyS3

DigiTemp v3.2.0 Copyright 1996-2003 by Brian C. Lane

GNU Public License v2.0 - http://www.brianlane.com

Error 5: DS2480B Adapter Not Detected

Error 10: Read COM Failed

Error 10: Read COM Failed

Error 10: Read COM Failed

Error 10: Read COM Failed

Error 10: Read COM Failed

Error 10: Read COM Failed

Error 10: Read COM Failed

Error 10: Read COM Failed

Error 10: Read COM Failed

Т.е., что-то видиит

----------

## ManJak

Нашел, но от этого не легче  :Crying or Very sad: 

```

DS2480B – Драйвер однопроводной сети MicroLAN, обеспечивающий отработку 1-Wire-протокола на линиях значительной протяженности, обслуживающих большое число однопроводных устройств. Соответствует всем стандартам связи iButton и MicroLAN. Предназначен для организации мастера однопроводной линии на базе интеллектуального устройства, имеющего последовательный интерфейс. Например, стандартный СОМ-порт компьютера или узел UART микроконтроллера. Позволяет выбирать скорость обмена данными со стороны последовательного порта обмена с ведущим устройством (9600, 19200, 57600 или 115200 бит/сек). Предоставляет возможность изменения параметров сигналов на однопроводной линии, используя так называемый программируемый механизм активной подтяжки шины данных 1-Wire-магистрали, обеспечивающий качественную передачу сигналов в длинных линиях и увеличение нагрузочной способности ведущего по количеству обслуживаемых им ведомых устройств. Кроме того, содержит встроенный датчик тока потребления однопроводной линии. Используя его показания можно реализовать еще более эффективный алгоритм работы активной подтяжки в перегруженных и проблемных 1-Wire-линиях. Поддерживает опцию 12-тивольтового программирования EPROM памяти и 5-тивольтовой подтяжки обслуживаемой линии для цифровых термометров и устройств, содержащих энергонезависимую память EEPROM. Реализует под управлением программного обеспечения ведущего интеллектуального устройства усовершенствованный протокол обмена данных на однопроводной линии. Позволяет работать на нескольких скоростях обмена, выбирая наиболее оптимальную для конкретного случая (длины линии, ее качества, количества задействованных устройств), в том числе режим Overdrive. Питание прибора производится напряжением от 4,5В до 5,5В. Устройство размещается в корпусе для поверхностного монтажа SOIC-8.

```

Это он:

http://www.elin.ru/1-Wire/images/2480.jpg

Судя по виду, не имеет никакого отношения к задачке =(

----------

## ba

digitemp ты неправильно собрал скорее всего...

там надо в Makefile-е поставить LOCK=no вместо yes

и собирать make ds9097

[edit]

не заметил, что он уже появился в портаже...

тогда собирай из портажа с SERIAL_DRIVER=ds9097 emerge digitemp

[edit#2]

из портажа у меня не поставилось, так что ставь лучше руками...

----------

## ManJak

У меня поставилось без траблов:

# digitemp -i -s /dev/ttyS3

DigiTemp v3.2.0 Copyright 1996-2003 by Brian C. Lane

GNU Public License v2.0 - http://www.brianlane.com

Turning off all DS2409 Couplers

Searching the 1-Wire LAN

#

Но пока не достиг резалта  :Very Happy: 

Ща помучаюсь, а потом руками + bugreport  :Exclamation: 

----------

## ManJak

В догонку:

Переменную лучше определять в make.conf

Тогда она не глобальна  :Idea: 

----------

## ManJak

Пересобрал, примерно понял, в чем было дело!

А сколько времени 1-й раз проходит?

У меня уже минут 5 крутит!

```

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\377", 1)                     = 1

select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\377", 1)                     = 1

select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\0", 1)                       = 1

select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\377", 1)                     = 1

select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\377", 1)                     = 1

```

----------

## ManJak

Проверил схемы, девайсы.

Зацикливается  :Confused: 

# strace digitemp -i -s /dev/ttyS3

execve("/usr/bin/digitemp", ["digitemp", "-i", "-s", "/dev/ttyS3"], [/* 60 vars */]) = 0

uname({sys="Linux", node="manjakws", ...}) = 0

brk(0)                                  = 0x8054000

access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)

open("/etc/ld.so.cache", O_RDONLY)      = 3

fstat64(3, {st_mode=S_IFREG|0644, st_size=102972, ...}) = 0

mmap2(NULL, 102972, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40017000

close(3)                                = 0

open("/lib/libm.so.6", O_RDONLY)        = 3

read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0P4\0\000"..., 512) = 512

fstat64(3, {st_mode=S_IFREG|0755, st_size=157432, ...}) = 0

mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40031000

mmap2(NULL, 135328, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x40032000

mmap2(0x40052000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1f) = 0x40052000

close(3)                                = 0

open("/lib/libc.so.6", O_RDONLY)        = 3

read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0iQ\1\000"..., 512) = 512

fstat64(3, {st_mode=S_IFREG|0755, st_size=1211416, ...}) = 0

mmap2(NULL, 1125564, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x40054000

mprotect(0x40160000, 27836, PROT_NONE)  = 0

mmap2(0x40161000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x10c) = 0x40161000

mmap2(0x40165000, 7356, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40165000

close(3)                                = 0

mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40167000

mprotect(0x40161000, 4096, PROT_READ)   = 0

set_thread_area({entry_number:-1 -> 6, base_addr:0x401676b0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0

munmap(0x40017000, 102972)              = 0

open("/dev/urandom", O_RDONLY)          = 3

read(3, "\27?\4\225", 4)                = 4

close(3)                                = 0

brk(0)                                  = 0x8054000

brk(0x8075000)                          = 0x8075000

open(".digitemprc", O_RDONLY)           = -1 ENOENT (No such file or directory)

fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 3), ...}) = 0

mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40017000

write(1, "DigiTemp v3.2.0 Copyright 1996-2"..., 53DigiTemp v3.2.0 Copyright 1996-2003 by Brian C. Lane

) = 53

write(1, "GNU Public License v2.0 - http:/"..., 51GNU Public License v2.0 - http://www.brianlane.com

) = 51

access("/dev/ttyS3", R_OK|W_OK)         = 0

open("/dev/ttyS3", O_RDWR)              = 3

ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B115200 -opost -isig -icanon -echo ...}) = 0

ioctl(3, SNDCTL_TMR_START or TCSETS, {B115200 -opost -isig -icanon -echo ...}) = 0

ioctl(3, TCFLSH, 0x2)                   = 0

write(1, "Turning off all DS2409 Couplers\n", 32Turning off all DS2409 Couplers

) = 32

ioctl(3, TCFLSH, 0x2)                   = 0

ioctl(3, SNDCTL_TMR_START or TCSETS, {B9600 -opost -isig -icanon -echo ...}) = 0

write(3, "\360", 1)                     = 1

select(4, [3], NULL, NULL, {5, 0})      = 1 (in [3], left {4, 998000})

read(3, "\0", 1)                        = 1

ioctl(3, SNDCTL_TMR_START or TCSETS, {B115200 -opost -isig -icanon -echo ...}) = 0

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\0", 1)                       = 1

select(4, [3], NULL, NULL, {5, 0})      = 1 (in [3], left {4, 999000})

read(3, "\0", 1)                        = 1

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\0", 1)                       = 1

select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\0", 1)                       = 1

select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\0", 1)                       = 1

select(4, [3], NULL, NULL, {5, 0})      = 0 (Timeout)

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\377", 1)                     = 1

select(4, [3], NULL, NULL, {5, 0} <unfinished ...>

----------

## ManJak

Т.е., что-то пытается сделать  :Confused: 

Но не может  :Crying or Very sad: 

----------

## ba

у меня стрейс выглядит так...

```

execve("./digitemp", ["./digitemp", "-i", "-s", "/dev/ttyS1"], [/* 41 vars */]) = 0

uname({sys="Linux", node="baz.zuzino.mipt.ru", ...}) = 0

brk(0)                                  = 0x8055000

access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)

open("/etc/ld.so.cache", O_RDONLY)      = 3

fstat64(3, {st_mode=S_IFREG|0644, st_size=76462, ...}) = 0

mmap2(NULL, 76462, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f6e000

close(3)                                = 0

open("/lib/tls/libm.so.6", O_RDONLY)    = 3

read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0P4\0\000"..., 512) = 512

fstat64(3, {st_mode=S_IFREG|0755, st_size=153240, ...}) = 0

mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f6d000

mmap2(NULL, 139424, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7f4a000

mmap2(0xb7f6b000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x20) = 0xb7f6b000

close(3)                                = 0

open("/lib/tls/libc.so.6", O_RDONLY)    = 3

read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\332O\1"..., 512) = 512

fstat64(3, {st_mode=S_IFREG|0755, st_size=1273176, ...}) = 0

mmap2(NULL, 1215676, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7e21000

mmap2(0xb7f44000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x123) = 0xb7f44000

mmap2(0xb7f48000, 7356, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7f48000

close(3)                                = 0

mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7e20000

mprotect(0xb7f44000, 4096, PROT_READ)   = 0

mprotect(0xb7f97000, 4096, PROT_READ)   = 0

set_thread_area({entry_number:-1 -> 6, base_addr:0xb7e206c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0

munmap(0xb7f6e000, 76462)               = 0

open("/dev/urandom", O_RDONLY)          = 3

read(3, "\343\374e\245", 4)             = 4

close(3)                                = 0

brk(0)                                  = 0x8055000

brk(0x8076000)                          = 0x8076000

open(".digitemprc", O_RDONLY)           = -1 ENOENT (No such file or directory)

fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 5), ...}) = 0

mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f80000

write(1, "DigiTemp v3.3.2 Copyright 1996-2"..., 53) = 53

write(1, "GNU Public License v2.0 - http:/"..., 51) = 51

access("/dev/ttyS1", R_OK|W_OK)         = 0

open("/dev/ttyS1", O_RDWR)              = 3

ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B9600 opost isig icanon echo ...}) = 0

ioctl(3, SNDCTL_TMR_START or TCSETS, {B115200 -opost -isig -icanon -echo ...}) = 0

ioctl(3, TCFLSH, 0x2)                   = 0

write(1, "Turning off all DS2409 Couplers\n", 32) = 32

ioctl(3, TCFLSH, 0x2)                   = 0

ioctl(3, SNDCTL_TMR_START or TCSETS, {B9600 -opost -isig -icanon -echo ...}) = 0

write(3, "\360", 1)                     = 1

select(4, [3], NULL, NULL, {5, 0})      = 1 (in [3], left {4, 994000})

read(3, "\340", 1)                      = 1

ioctl(3, SNDCTL_TMR_START or TCSETS, {B115200 -opost -isig -icanon -echo ...}) = 0

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\0\0\0\0\377\377\377\377", 8) = 8

select(4, [3], NULL, NULL, {5, 0})      = 1 (in [3], left {4, 998000})

read(3, "\0\0\0\0\377\377\377\377", 8)  = 8

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\377", 1)                     = 1

select(4, [3], NULL, NULL, {5, 0})      = 1 (in [3], left {4, 999000})

read(3, "\374", 1)                      = 1

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\377", 1)                     = 1

select(4, [3], NULL, NULL, {5, 0})      = 1 (in [3], left {4, 999000})

read(3, "\377", 1)                      = 1

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\0", 1)                       = 1

select(4, [3], NULL, NULL, {5, 0})      = 1 (in [3], left {4, 999000})

read(3, "\0", 1)                        = 1

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\377", 1)                     = 1

select(4, [3], NULL, NULL, {5, 0})      = 1 (in [3], left {4, 999000})

read(3, "\374", 1)                      = 1

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\377", 1)                     = 1

select(4, [3], NULL, NULL, {5, 0})      = 1 (in [3], left {4, 999000})

read(3, "\377", 1)                      = 1

ioctl(3, TCFLSH, 0x2)                   = 0

write(3, "\0", 1)                       = 1

<...>

select(4, [3], NULL, NULL, {5, 0})      = 1 (in [3], left {4, 999000})

read(3, "\0", 1)                        = 1

write(1, "10D2722B0008002D : DS1820/DS18S2"..., 60) = 60

write(1, "ROM #0 : 10D2722B0008002D\n", 26) = 26

open(".digitemprc", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 4

fstat64(4, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0

mmap2(NULL, 131072, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7e00000

write(4, "TTY /dev/ttyS1\nREAD_TIME 1000\nLO"..., 259) = 259

close(4)                                = 0

munmap(0xb7e00000, 131072)              = 0

write(2, "Wrote .digitemprc\n", 18Wrote .digitemprc

)     = 18

time(NULL)                              = 1123788047

time(NULL)                              = 1123788047

time(NULL)                              = 1123788047

ioctl(3, SNDCTL_TMR_START or TCSETS, {B9600 opost isig icanon echo ...}) = 0

close(3)                                = 0

munmap(0xb7f80000, 4096)                = 0

exit_group(0)                           = ?

```

Попробуй собрать из исходников как я написал последнюю версию, если не заработает - то в схеме скорее всего наглючил...

----------

## ManJak

Собрал с исходников - тоже самое  :Sad: 

Я правильно понимаю:

-|>|-

----|====||=|-----

Т.е., полоса с этой стороны?

Попробую упростить, может перегрел чего, хотя, отводил пинцетом!

Выкину Шотки, для начала, т.к. я понимаю, что они не очень-то нужны (просто защищают КОМ-порт при большой длине шлейфа).

Будут идеи пиши плиз, т.к. у меня они пока кончаются.

----------

## ManJak

Тем-более, накосячить-то сложно 4 диода впаять!

Может правда стабилитроны подвели, т.к. я взял отечественные на то-же напряжение стабилизации  :Very Happy: 

Но странно, что в первый раз успешно у меня читает, а потом - все, похоже, что что-то с синхрой!!!

```

...

ioctl(3, SNDCTL_TMR_START or TCSETS, {B115200 -opost -isig -icanon -echo ...}) = 0

ioctl(3, TCFLSH, 0x2) = 0

write(3, "\0", 1) = 1

select(4, [3], NULL, NULL, {5, 0}) = 1 (in [3], left {4, 999000})

read(3, "\0", 1) = 1

ioctl(3, TCFLSH, 0x2) = 0

write(3, "\0", 1) = 1

select(4, [3], NULL, NULL, {5, 0}) = 0 (Timeout) 

...

```

----------

## ba

Вобщем от нефиг делать щас еще один такой собрал, именно по этой схеме - все работает...

http://files.yume.ru/side_1.jpg

http://files.yume.ru/side_2.jpg

----------

## ManJak

Спасибо, схема - таже!

Похоже, незнаю как, но датчики спалил из-за того, что собрал прогу, а она не видит, начал разбираться (а помню плохо все это. Ибо давно не трогал)  :Embarassed: 

Попробую купить один комплект по новой и попробовать снова (с новой прогой).

 :Wink: 

Спасибо огромное, что принял участие и так сильно помог!

----------

## ManJak

Да, сорри, а есть способ проверить датчик без ...?

Чтоб прям в магазине, а то потом скажут, что сам спалил, а может у них партия такая  :Crying or Very sad: 

----------

