Форум РадиоКот • Просмотр темы - DS18b20 Как проще всего детектить наличие или отсутствие
Сообщения без ответов | Активные темы
Страница 1 из 2
[ Сообщений: 30 ]
,
Автор
Сообщение
WorkPage
Заголовок сообщения: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Вс июл 02, 2023 17:07:33
Зарегистрирован: Чт сен 03, 2009 16:42:39Сообщений: 64
Рейтинг сообщения: 0
Забираю температуру так: (без библиотек, регистрации и смс
)
Как отдетектить наличие или отсутствие датчика на шине? При отсутствии датчика температура 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----------------
Вернуться наверх
Реклама
Martian
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Вс июл 02, 2023 17:10:49
Карма: 68
Рейтинг сообщений: 1961
Зарегистрирован: Сб дек 18, 2021 19:25:32Сообщений: 12867
Рейтинг сообщения: 0
запросить серийный номер датчика, проверить контрольную сумму. И у температуры там два байта, а не один.
Вернуться наверх
Реклама
OKF
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Вс июл 02, 2023 17:27:14
Сверлит текстолит когтями
Карма: 12
Рейтинг сообщений: 124
Зарегистрирован: Вт июн 07, 2011 08:03:18Сообщений: 1223
Рейтинг сообщения: 0
Ну есть же импульс присутствия/подтверждение? Или нефиг?
Вернуться наверх
Starichok51
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Вс июл 02, 2023 18:11:12
Модератор
Карма: 153
Рейтинг сообщений: 2917
Зарегистрирован: Сб авг 14, 2010 15:05:51Сообщений: 18741Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
WorkPage писал(а):
return i; // возвращаем "1" ok
ОК будет, если вернется НОЛЬ. если вернется"1", то ответа от датчика нет.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Вернуться наверх
Martian
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Вс июл 02, 2023 23:00:26
Карма: 68
Рейтинг сообщений: 1961
Зарегистрирован: Сб дек 18, 2021 19:25:32Сообщений: 12867
Рейтинг сообщения: 0
Вернуться наверх
Реклама
WorkPage
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Пн июл 03, 2023 09:16:15
Зарегистрирован: Чт сен 03, 2009 16:42:39Сообщений: 64
Рейтинг сообщения: 0
Сделал проверку контрольной суммы. Убил двх зайцев. Температура точно будет без искажений и присутствие датчика покажет при CRC==0
Всем спасибо. Вопрос закрыт.
Добавлено after 4 minutes 6 seconds: Ну есть же импульс присутствия/подтверждение? Или нефиг?
Да. экспериментировал с ним. После сигнала 480мкс датчик садит шину на землю. Но есть одно но. Высокий уровень между этими событиями отсутствует или почти отсутствует. И если "умный человек" просто закоротил шину на землю, по логике программы получается что датчик есть. Вообщем сделал контроль CRC. Вопрос закрыт.
Вернуться наверх
Реклама
Starichok51
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Пн июл 03, 2023 09:23:02
Модератор
Карма: 153
Рейтинг сообщений: 2917
Зарегистрирован: Сб авг 14, 2010 15:05:51Сообщений: 18741Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 3
Медали: 1
WorkPage , не ври про отсутствие высокого уровня. импульс присутствия появляется не сразу, а через 15 мкс, не ранее. поэтому нужно после 480 мкс сначала проверить появление наличие единицы, тогда кз нет. а уже потом проверять на ноль импульс присутствия.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Вернуться наверх
roman.com
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Пн июл 03, 2023 11:15:55
Карма: 2
Рейтинг сообщений: 67
Зарегистрирован: Вт мар 13, 2012 12:16:13Сообщений: 8190Откуда: .ru
Рейтинг сообщения: 0
Сделал проверку контрольной суммы. Убил двх зайцев. Температура точно будет без искажений и присутствие датчика покажет при CRC==0 Всем спасибо. Вопрос закрыт.
Не закрыт.))
по одному только CRC==0 нельзя сказать точно есть датчик или нет...
Вернуться наверх
Martian
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Пн июл 03, 2023 11:20:44
Карма: 68
Рейтинг сообщений: 1961
Зарегистрирован: Сб дек 18, 2021 19:25:32Сообщений: 12867
Рейтинг сообщения: 0
зато по серийному номеру можно, если при пусконаладочных работах он запоминается. И еще можно считать 85 после сброса. Но, конечно, 100% не достичь никогда - всегда есть какая-то ненулевая вероятность получить шум, идеально совпадающий с сигналами, удовлетворяющими условию "датчик есть".
Вернуться наверх
Реклама
WorkPage
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Чт июл 13, 2023 16:30:18
Зарегистрирован: Чт сен 03, 2009 16:42:39Сообщений: 64
Рейтинг сообщения: 0
Сделал проверку контрольной суммы. Убил двх зайцев. Температура точно будет без искажений и присутствие датчика покажет при CRC==0 Всем спасибо. Вопрос закрыт.
Не закрыт.))
по одному только CRC==0 нельзя сказать точно есть датчик или нет...
При отсутствии датчика CRC будет не 0. Проверено.
Вернуться наверх
Just_Fluffy
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Ср авг 09, 2023 22:11:37
Мучитель микросхем
Карма: 10
Рейтинг сообщений: 155
Зарегистрирован: Ср июн 29, 2022 16:25:45Сообщений: 469
Рейтинг сообщения: 0
Martian писал(а):
И еще можно считать 85 после сброса.
Не всегда. Китайские клоны отдают после сброса последнюю измеренную температуру, поскольку запоминают ее в еепромке.
_________________Белая и Пушистая
Вернуться наверх
roman.com
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Ср авг 09, 2023 22:23:48
Карма: 2
Рейтинг сообщений: 67
Зарегистрирован: Вт мар 13, 2012 12:16:13Сообщений: 8190Откуда: .ru
Рейтинг сообщения: 0
WorkPage писал(а):
Сделал проверку контрольной суммы. Убил двх зайцев. Температура точно будет без искажений и присутствие датчика покажет при CRC==0 Всем спасибо. Вопрос закрыт.
Не закрыт.))
по одному только CRC==0 нельзя сказать точно есть датчик или нет...
При отсутствии датчика CRC будет не 0. Проверено.
При отсутствии датчика CRC будет 0. Проверено.
Вложение:
PCM-256.jpg [150.59 KiB]
Скачиваний: 49
Вернуться наверх
Starichok51
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Чт авг 10, 2023 14:38:21
Модератор
Карма: 153
Рейтинг сообщений: 2917
Зарегистрирован: Сб авг 14, 2010 15:05:51Сообщений: 18741Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
roman.com , CRC с девятью байтами 0xFF НИКОГДА не будет равно НУЛЮ!!! проверено!!!!!
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Вернуться наверх
roman.com
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Чт авг 10, 2023 16:13:30
Карма: 2
Рейтинг сообщений: 67
Зарегистрирован: Вт мар 13, 2012 12:16:13Сообщений: 8190Откуда: .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();
};
////////////////////// ...
а всё потому что Dallas при инициализации CRC использует 0x00...
никто в мире так не делает... только Dallas до такого додумался))
это просто пипец ))
Вернуться наверх
>TEHb<
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Чт авг 10, 2023 17:07:00
Друг Кота
Карма: 17
Рейтинг сообщений: 457
Зарегистрирован: Ср ноя 11, 2009 17:19:30Сообщений: 5205Откуда: Воронеж
Рейтинг сообщения: 0
Starichok51 писал(а):
CRC с девятью байтами 0xFF
roman.com писал(а):
CRC с девятью байтами 0x00
_________________ "Привет!" - соврал он.
Вернуться наверх
Starichok51
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Чт авг 10, 2023 17:42:05
Модератор
Карма: 153
Рейтинг сообщений: 2917
Зарегистрирован: Сб авг 14, 2010 15:05:51Сообщений: 18741Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
roman.com , с какого фуя там будет 0х00, когда есть подтяжка к плюсу, и читаться будут все единицы?
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Вернуться наверх
OKF
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Чт авг 10, 2023 19:33:10
Сверлит текстолит когтями
Карма: 12
Рейтинг сообщений: 124
Зарегистрирован: Вт июн 07, 2011 08:03:18Сообщений: 1223
Рейтинг сообщения: 0
Имеется ввиду инициализация результата 0-м. Просто Роман по своему алгоритму считает. Отличному от Dallas/Maxim.
Вернуться наверх
roman.com
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Чт авг 10, 2023 22:43:37
Карма: 2
Рейтинг сообщений: 67
Зарегистрирован: Вт мар 13, 2012 12:16:13Сообщений: 8190Откуда: .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 всё через... попу))
Вернуться наверх
>TEHb<
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Чт авг 10, 2023 23:45:05
Друг Кота
Карма: 17
Рейтинг сообщений: 457
Зарегистрирован: Ср ноя 11, 2009 17:19:30Сообщений: 5205Откуда: Воронеж
Рейтинг сообщения: 0
Подтяжка на шине должна быть, а не устройстве.
_________________ "Привет!" - соврал он.
Вернуться наверх
Starichok51
Заголовок сообщения: Re: DS18b20 Как проще всего детектить наличие или отсутствие
Добавлено: Пт авг 11, 2023 08:38:20
Модератор
Карма: 153
Рейтинг сообщений: 2917
Зарегистрирован: Сб авг 14, 2010 15:05:51Сообщений: 18741Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
roman.com писал(а):
но у Dallas всё через... попу))
это ты делаешь через попу, а не Dallas.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Вернуться наверх
Страница 1 из 2
[ Сообщений: 30 ]
,
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения