Например TDA7294

Форум РадиоКот • Просмотр темы - DS18b20 Как проще всего детектить наличие или отсутствие
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн июл 28, 2025 06:05:37

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 30 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Вс июл 02, 2023 17:07:33 
Открыл глаза

Зарегистрирован: Чт сен 03, 2009 16:42:39
Сообщений: 64
Рейтинг сообщения: 0
Забираю температуру так: (без библиотек, регистрации и смс 8) )
Как отдетектить наличие или отсутствие датчика на шине? При отсутствии датчика температура 255. Всё бы ничего, но это число соответствует -1 градусу.
Код:
#define F_CPU 4800000L
//подключаем заголовочные файлы
#include <avr/io.h>
#include <avr/signal.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
//задаёмся прототипом функции, чтения данных датчика ds18b20
void temperature(void);
int8_t volatile termo; //переменная для данных температуры
 

int main(void)
{

                         
  while(1)
 {     
      temperature() ; //  функцию read ds18b20   
         
 }

 
 return 0;
}
 //----------
 uint8_t therm_reset() //функция подготовки  ds18b20
{
uint8_t i;            // переменная
PORTB&=~(1<<3);      //устанавливаем порт PB3 как низкий уровень
 DDRB|=(1<<3);         //активируем   PB3 как выход
_delay_us(480);//--480  // ждём
DDRB&=~(1<<3);          //активируем   PB3 как вход
_delay_us(60);//--60
  i=(PINB & (1<<3));    //читаем
_delay_us(420);//--420

return i; // возвращаем "1" ok
}
//----------
//запись бита
void therm_write_bit(uint8_t bit)
{
PORTB&=~(1<<3);
  DDRB|=(1<<3);
_delay_us(2);//---2
if(bit) DDRB&=~(1<<3);
_delay_us(60);//--60
 DDRB&=~(1<<3);
}
//----------
//запись байта
void therm_write_byte(uint8_t byte)
{
uint8_t i=8;
while(i--)
{
therm_write_bit(byte&1);
byte>>=1;
}
}   
 //----------
 //чтение бита
uint8_t therm_read_bit(void)
{
uint8_t bit=0;
PORTB&=~(1<<3);
 DDRB|=(1<<3);
_delay_us(2);//2
DDRB&=~(1<<3);
_delay_us(14);//--14
if(PINB&(1<<3)) bit=1;
_delay_us(45);//--45
return bit;
}
//----------
 
//чтение байта
uint8_t therm_read_byte(void)
{
uint8_t i=8, n=0;
while(i--)
{
n>>=1;
n|=(therm_read_bit()<<7);
}
return n;
}
//----------
  void temperature(void)
 
{
   asm("cli");
   
 uint8_t temperature[2];
 therm_reset();
 therm_write_byte(0xcc);
 therm_write_byte(0x44);
 while(!therm_read_bit());
 therm_reset();
 
 therm_write_byte(0xcc);
 therm_write_byte(0xbe);
 
 temperature[0]=therm_read_byte();
 temperature[1]=therm_read_byte();

  therm_reset();
 // обрабатываем полученные данные в читаемый вид 
  termo=temperature[0]>>4;
  termo|=(temperature[1]&0xf)<<4;
 
  }
 //---------- обработки ds18b20----------------


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Вс июл 02, 2023 17:10:49 
Друг Кота

Карма: 68
Рейтинг сообщений: 1961
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
запросить серийный номер датчика, проверить контрольную сумму. И у температуры там два байта, а не один.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Вс июл 02, 2023 17:27:14 
Сверлит текстолит когтями

Карма: 12
Рейтинг сообщений: 124
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1217
Рейтинг сообщения: 0
Ну есть же импульс присутствия/подтверждение? Или нефиг?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Вс июл 02, 2023 18:11:12 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2917
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18741
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
WorkPage писал(а):
return i; // возвращаем "1" ok
ОК будет, если вернется НОЛЬ. если вернется"1", то ответа от датчика нет.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Вс июл 02, 2023 23:00:26 
Друг Кота

Карма: 68
Рейтинг сообщений: 1961
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
кстати, вот здесь viewtopic.php?f=25&t=55501&p=4440085#p4440085 было замечено, что The power on reset register value is +85°C.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Пн июл 03, 2023 09:16:15 
Открыл глаза

Зарегистрирован: Чт сен 03, 2009 16:42:39
Сообщений: 64
Рейтинг сообщения: 0
Сделал проверку контрольной суммы. Убил двх зайцев. Температура точно будет без искажений и присутствие датчика покажет при CRC==0
Всем спасибо. Вопрос закрыт.

Добавлено after 4 minutes 6 seconds:
Ну есть же импульс присутствия/подтверждение? Или нефиг?

Да. экспериментировал с ним. После сигнала 480мкс датчик садит шину на землю. Но есть одно но. Высокий уровень между этими событиями отсутствует или почти отсутствует. И если "умный человек" просто закоротил шину на землю, по логике программы получается что датчик есть. Вообщем сделал контроль CRC. Вопрос закрыт.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Пн июл 03, 2023 09:23:02 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2917
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18741
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 3
Медали: 1
Лучший человек Форума 2017 (1)
WorkPage, не ври про отсутствие высокого уровня. импульс присутствия появляется не сразу, а через 15 мкс, не ранее.
поэтому нужно после 480 мкс сначала проверить появление наличие единицы, тогда кз нет. а уже потом проверять на ноль импульс присутствия.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Пн июл 03, 2023 11:15:55 
Друг Кота

Карма: 2
Рейтинг сообщений: 67
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8169
Откуда: .ru
Рейтинг сообщения: 0
Сделал проверку контрольной суммы. Убил двх зайцев. Температура точно будет без искажений и присутствие датчика покажет при CRC==0
Всем спасибо. Вопрос закрыт.

Не закрыт.))
по одному только CRC==0 нельзя сказать точно есть датчик или нет...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Пн июл 03, 2023 11:20:44 
Друг Кота

Карма: 68
Рейтинг сообщений: 1961
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
зато по серийному номеру можно, если при пусконаладочных работах он запоминается. И еще можно считать 85 после сброса. Но, конечно, 100% не достичь никогда - всегда есть какая-то ненулевая вероятность получить шум, идеально совпадающий с сигналами, удовлетворяющими условию "датчик есть".


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Чт июл 13, 2023 16:30:18 
Открыл глаза

Зарегистрирован: Чт сен 03, 2009 16:42:39
Сообщений: 64
Рейтинг сообщения: 0
Сделал проверку контрольной суммы. Убил двх зайцев. Температура точно будет без искажений и присутствие датчика покажет при CRC==0
Всем спасибо. Вопрос закрыт.

Не закрыт.))
по одному только CRC==0 нельзя сказать точно есть датчик или нет...

При отсутствии датчика CRC будет не 0. Проверено.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Ср авг 09, 2023 22:11:37 
Мучитель микросхем
Аватар пользователя

Карма: 10
Рейтинг сообщений: 155
Зарегистрирован: Ср июн 29, 2022 16:25:45
Сообщений: 469
Рейтинг сообщения: 0
Martian писал(а):
И еще можно считать 85 после сброса.
Не всегда. Китайские клоны отдают после сброса последнюю измеренную температуру, поскольку запоминают ее в еепромке.

_________________
Белая и Пушистая


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Ср авг 09, 2023 22:23:48 
Друг Кота

Карма: 2
Рейтинг сообщений: 67
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8169
Откуда: .ru
Рейтинг сообщения: 0
WorkPage писал(а):
Сделал проверку контрольной суммы. Убил двх зайцев. Температура точно будет без искажений и присутствие датчика покажет при CRC==0
Всем спасибо. Вопрос закрыт.

Не закрыт.))
по одному только CRC==0 нельзя сказать точно есть датчик или нет...

При отсутствии датчика CRC будет не 0. Проверено.

При отсутствии датчика CRC будет 0. Проверено.
Вложение:
PCM-256.jpg [150.59 KiB]
Скачиваний: 49

:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Чт авг 10, 2023 14:38:21 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2917
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18741
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
roman.com, CRC с девятью байтами 0xFF НИКОГДА не будет равно НУЛЮ!!!
проверено!!!!!

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Чт авг 10, 2023 16:13:30 
Друг Кота

Карма: 2
Рейтинг сообщений: 67
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8169
Откуда: .ru
Рейтинг сообщения: 0
CRC с девятью байтами 0x00 ВСЕГДА будет равно НУЛЮ!!!
проверено!!!!!
:))

Добавлено after 5 minutes 32 seconds:
unsigned char DScrc; // DScrc DS18B20
unsigned char DSbcrc; // DScrc буфер DS18B20
unsigned char DSa; // DSa - счёт DS18B20
////////////////////// CRC-8 DS18B20:
void DSfcrc(void)
{
DScrc ^= DSbcrc; // CRC-8-Dallas/Maxim // 0x31 ~ 0x8C
for (DSa = 0; DSa < 8; DSa++ ) {
if (DScrc & 0x01) DScrc = ( DScrc << 1 ) ^ 0x8C; // 0x31 ~ 0x8C
else DScrc = DScrc << 1;
};
}

////////////////////// CRC-8 DS18B20:
DScrc=0x00;
for (xTX=0; xTX<9; xTX++) {
DSbcrc=DS18B20[xTX]; DSfcrc();
};
////////////////////// ...
:tea:

а всё потому что Dallas при инициализации CRC использует 0x00...
:facepalm:
никто в мире так не делает... только Dallas до такого додумался))
:facepalm:
это просто пипец ))
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Чт авг 10, 2023 17:07:00 
Друг Кота
Аватар пользователя

Карма: 17
Рейтинг сообщений: 454
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Сообщений: 5187
Откуда: Воронеж
Рейтинг сообщения: 0
Starichok51 писал(а):
CRC с девятью байтами 0xFF

roman.com писал(а):
CRC с девятью байтами 0x00

:tea:

_________________
"Привет!" - соврал он.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Чт авг 10, 2023 17:42:05 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2917
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18741
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
roman.com, с какого фуя там будет 0х00, когда есть подтяжка к плюсу, и читаться будут все единицы?

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Чт авг 10, 2023 19:33:10 
Сверлит текстолит когтями

Карма: 12
Рейтинг сообщений: 124
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 1217
Рейтинг сообщения: 0
Имеется ввиду инициализация результата 0-м.
Просто Роман по своему алгоритму считает. Отличному от Dallas/Maxim.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Чт авг 10, 2023 22:43:37 
Друг Кота

Карма: 2
Рейтинг сообщений: 67
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8169
Откуда: .ru
Рейтинг сообщения: 0
с какого фуя там будет подтяжка к плюсу, если я отключаю DS18b20 ?
Вложение:
Screenshot_1.jpg [110.79 KiB]
Скачиваний: 43


Имеется ввиду Initial Value.

к примеру в интернете Initial Value: 0xFFFFFFFF
в этом случае пофигу что CRC с девятью байтами 0x00 ))
Вложение:
Screenshot_2.jpg [55.84 KiB]
Скачиваний: 34

но у Dallas всё через... попу))
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Чт авг 10, 2023 23:45:05 
Друг Кота
Аватар пользователя

Карма: 17
Рейтинг сообщений: 454
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Сообщений: 5187
Откуда: Воронеж
Рейтинг сообщения: 0
Подтяжка на шине должна быть, а не устройстве.

_________________
"Привет!" - соврал он.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
СообщениеДобавлено: Пт авг 11, 2023 08:38:20 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2917
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18741
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
roman.com писал(а):
но у Dallas всё через... попу))
это ты делаешь через попу, а не Dallas.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y