Страница 1 из 1

Встроенная библиотека ds18b20.h

Добавлено: Ср окт 14, 2015 20:51:30
zepar
Использую встроенную библиотеку ds18b20.h в CV AVR. Вот код:

Код: Выделить всё

#include <mega8.h>                         //библиотека ввода\вывода
#include <delay.h>                         //библиотека задержки
#asm                                                     //сообщаем куда подключен датчик
                .equ __w1_port=0x15; PORTC
                .equ __w1_bit=3
#endasm                           
#asm                                                     //сообщаем куда подключён экран
        .equ __lcd_port=0x18
#endasm
#include <lcd.h>                                 //библиотека для LCD
#include <1wire.h>                         //библиотека работы с 1Wire
#include <ds18b20.h>                     //библиотека для работы с датчиком ds18b20
#include <stdio.h>                         //ненаю что за библиотека, но без неё неполучается
char lcd_buffer[33];                     //масив с данными для экрана
void main(void)                           
{
unsigned char devices;           //переменная в которой количество присоеденённых датчиков
int temp;                                               //переменная для хранения температуры
lcd_init(16);                                   //инициилизация LCD, и говорим что он на 16 символов
devices=w1_init();                         //ищим датчики
while(devices>0)                                 //бесконечный цикл, если датчик подключон
          {
                  temp=ds18b20_temperature(0);  //читаем температуру  
                  if (temp>1000){                          //если датчик выдаёт больше 1000
                         temp=4096-temp;                        //отнимаем от данных 4096
                         temp=-temp;                            //и ставим знак "минус"
                  }
                  sprintf(lcd_buffer,"t=%i.%u\xdfC",temp,temp%1);       //записуемв масив для экрана температуру и всё такое
                  lcd_clear();                          //чистим дисплей перед выводом
                  lcd_puts(lcd_buffer);         //выводим масив на LCD
                  delay_ms(500);                          //ждём 500мс
          };
          
}
И в cvavr, и в протеусе указал частоту 8мгц, но показания получаются очень странные. Например, если температура 38, то в массиве число 4.0. Почему?
СпойлерИзображение

Re: Встроенная библиотека ds18b20.h

Добавлено: Ср окт 14, 2015 21:11:56
ARV
потому что в коде DS18B20, а в модели DS18S20

Re: Встроенная библиотека ds18b20.h

Добавлено: Чт окт 15, 2015 19:01:25
zepar
Точно..точно.. Теперь не выводит дробную часть. Допустим, температура 106.7, тогда в массиве будет "t=106.0"

Re: Встроенная библиотека ds18b20.h

Добавлено: Чт окт 15, 2015 19:28:02
СКАЗОЧНИК
Интересная библиотека.. Я сам писал на ассемблере 1-Ваер.
и интересно, как это так, "Если датчик выдает больше 1000?" Не совсем догнал...
И еще, почему-то везде по разному написано, но у этих датчиков есть понятие о битности преобразования температуры... Т.е. если всего 8 бит, то они не будет показывать дробную часть. Это настраивается командами при инициализации. (по умолчанию с завода он на 8 бит и настроен (тоже везде по разному пишут)). Вам надо переключить его в 9 или 12 битный режим.