Библиотека работы с DS18B20 с возможностью работы нескольких датчиков на разных портах

Приведу пример использования.

 

Проводим инициализацию датчиков


ds18b20_pin(0); //сначало определили линию с которой будем работать 0 init_w1_ds(-55,125,DS18B20_12BIT); //настроили 1 датчик из найденых ром кодов на 12 бит ds18b20_pin(2); //сначало определили линию с которой будем работать 2 init_w1_ds(-55,125,DS18B20_12BIT); //настроили 1 датчик из найденых ром кодов на 9 бит 

Далее прописываем функции:

void pr() { #asm ("cli"); // t1 = temp_18b20(0); //t2 = temp_18b20(2); tf1 = Ftemp_18b20(0); tf2 = Ftemp_18b20(2); #asm ("sei");

if(t1 > 1000) //если температура <0 { t1 = 4096 - t1 ; t1 = -t1 ; } if(t2 > 1000) //если температура <0 { t2 = 4096 - t2 ; t2 = -t2 ; }

//lcd_gotoxy(1,0); sprintf(buff,"%i.%iC ",t1/10,t1%10); lcd_puts(buff); //lcd_gotoxy(1,1); sprintf(buff,"%i.%iC ",t2/10,t2%10); lcd_puts(buff); lcd_gotoxy(1,0); sprintf(buff,"%0.1fC ",tf1); lcd_puts(buff); lcd_gotoxy(1,1); sprintf(buff,"%0.1fC ",tf2); lcd_puts(buff); delay_ms(150); }

Это пример работы с функцией ожидания.

Результат симуляции в Proteus 8:

Чтобы воспользоватся раздельными функциями без ожидания действуем по такому алгоритму:

  1. Определяем пин с которым будем работать в данный момент функцией : ds18b20_pin(unsigned char pin_ds)
  2. ds18b20_convert_t_rom() // запустить конвертирование температуры
  3. тут что то делаем в течении секунды или меньше, в зависимости от разрядности датчика или же можно проверять состояние шины на результат функцией ds18b20_convert_ok(unsigned char pin_ds) — возратит «1» когда можно будет забирать результат.
  4. Забираем результат преобразования int ds18b20_result_t_rom()

Вот и все 🙂

В архиве проект тестовый и библиотека)

Скачать Библиотека работы с DS18B20 с возможностью работы нескольких датчиков на разных портах Скачали 3436 раз

Библиотека работы с DS18B20 с возможностью работы нескольких датчиков на разных портах: 2 комментария

  1. Пожалуй единственное решение которое вменяемо заработало 🙂 Единственный косяк, если вдруг какой то из датчиков замкнет на минус (ну мыши там провод перегрызут) то из-за того что присутствие датчика определяется только по наличию минуса на сигнальном проводе через 70мс то зависает все это дело при попытке считать температуру на функции ds18b20_convert_ok. Она никогда не отработает потому что датчика то нет. Решение в скриншоте. Добавил пару строк.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *