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

Обсуждаем контроллеры компании Atmel.
Ответить
zepar
Открыл глаза
Сообщения: 79
Зарегистрирован: Ср май 28, 2014 12:55:56

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

Сообщение 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. Почему?
СпойлерИзображение
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18647
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

потому что в коде DS18B20, а в модели DS18S20
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
zepar
Открыл глаза
Сообщения: 79
Зарегистрирован: Ср май 28, 2014 12:55:56

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

Сообщение zepar »

Точно..точно.. Теперь не выводит дробную часть. Допустим, температура 106.7, тогда в массиве будет "t=106.0"
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

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

Вернуться в «AVR»