Термостат

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
master3763
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Сб дек 10, 2011 17:45:25
Контактная информация:

Термостат

Сообщение master3763 »

Привет всем котам ! Помогите пжалуйста разобратся с термостатом. Хочу собрать простой термостат с двумя лампочками. Одна бурет загоратся когда температура будет меньше 18 а другая больше 28.

После кампиляции и визуализации в proteus есть сигнал на D.0 (+5V). Он некогда не гаснет при любом измененее температуры датчика.

Делаю так:

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

#include <mega8.h>
#include <delay.h>
#asm
   .equ __w1_port=0x18 ;PORTB
   .equ __w1_bit=0
#endasm
#include <1wire.h>

#include <ds18b20.h>
void main(void)
{

  unsigned char devices;
  int temp;
  devices = w1_init();
 
PORTD = 0x00; //Выставляем все выходы порта D на 0, то есть, выключаем весь порт D
DDRD = 0xFF;
while (1)
{           
           
      temp=ds18b20_temperature(0);  //читаем температуру                     
     
          if (temp>1000)                      //если датчик выдаёт больше 1000
            {             
                temp=4096-temp;            //отнимаем от данных 4096
                temp=-temp;                //и ставим знак "минус"
             }

       if (temp<18)                          // устанавливаем нижней порог
         PORTD.0 = 1;   
         else PORTD.0=0;
       if (temp>28)                         // установим верхний порог
          PORTD.1=1;
       else PORTD.1=0;
     
        }   

}


В чем проблема ? Чего я недоучел ?
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Термостат

Сообщение pyzhman »

В хелп не заглядывали?
unsigned char ds18b20_init(unsigned char *addr,signed char temp_low,signed char temp_high,usigned char resolution)


this function sets the low (temp_low) and high (temp_high) temperature alarms and specifies the temperature measurement resolution of the DS18B20.
The resolution argument may take the value of one of the following macros defined in the ds18b20.h header file:


DS18B20_9BIT_RES for 9 bit tempearture measurement resolution (0.5°C)
DS18B20_10BIT_RES for 10 bit tempearture measurement resolution (0.25°C)
DS18B20_11BIT_RES for 11 bit tempearture measurement resolution (0.125°C)
DS18B20_12BIT_RES for 12 bit tempearture measurement resolution (0.0625°C)

Docendo discimus
Реклама
master3763
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Сб дек 10, 2011 17:45:25
Контактная информация:

Re: Термостат

Сообщение master3763 »

Заглядывал но не разобрался. С Английским не дружу..

Объясните пожалуйста, что все это значит ? Что тут к чему ?
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Термостат

Сообщение pyzhman »

Прежде чем читать данные, надо DS запараметрировать.
Docendo discimus
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
s_black
Мучитель микросхем
Сообщения: 411
Зарегистрирован: Вс авг 10, 2008 19:35:49
Откуда: Евпатория
Контактная информация:

Re: Термостат

Сообщение s_black »

Здесь есть пример работы с DS18b20.
Реклама
master3763
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Сб дек 10, 2011 17:45:25
Контактная информация:

Re: Термостат

Сообщение master3763 »

КАК пораметрировать DS18b20 ?
Реклама
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Re: Термостат

Сообщение mr_smit »

master3763 писал(а):КАК параметрировать DS18b20 ?

наверное:

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

ds18b20_init( 0, 0, 60, DS18B20_10BIT_RES )

:)
Нельзя всё знать, достаточно понимать.
master3763
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Сб дек 10, 2011 17:45:25
Контактная информация:

Re: Термостат

Сообщение master3763 »

А причем тут " ds18b20_init( 0, 0, 60, DS18B20_10BIT_RES ) " ??

Это же переключения термометра в 10 битный режим..
master3763
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Сб дек 10, 2011 17:45:25
Контактная информация:

Re: Термостат

Сообщение master3763 »

Изменил немного код :

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

#include <mega8.h>                         
#include <delay.h>                       
#asm                                                     
                .equ __w1_port=0x18; PORTB
                .equ __w1_bit=0
#endasm                           

#include <1wire.h>                       
#include <ds18b20.h>                     
#include <stdio.h>                       

void main(void)                           
{
unsigned char devices;         
int temp;                                           
                             
devices=w1_init();                         
while(devices>0)                                 
          {
                  temp=ds18b20_temperature(0);
                  if (temp>1000)
                  {                         
                         temp=4096-temp;                       
                         temp=-temp;                           
                  }   
                 
                  //if
                         
                  if (temp<18)                         
                         { PORTD.0 = 1; } 
                         else
                         { PORTD.0 = 0; }       
                   
                  if (temp>28)                         
                        { PORTD.1 = 1; }
                        else
                        { PORTD.1 = 0; }
               
            // end if
                 
          };
}


Сейчас вообще не один индикатор не загорается. :( Блин что я не так делаю ? Вроде все правильно сейчас, нет и синтасических ошибок..
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Термостат

Сообщение Аlex »

Трудно судить по строкам, которые компилятор разворачивает в неизвестно что.
Пишите свои функции для работы с датчиком, тогда проблемы все уйдут.
А вот это

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

                  if (temp>1000)
                  {                         
                         temp=4096-temp;                       
                         temp=-temp;                           
                  }   
Что такое ?
Не знаю что там возвращает ds18b20_temperature, но сам датчик возвращает нормальное и правильное отрицательное значение.
Кстати, у Вас, мне кажется, порты не проинициализированы.
Аватара пользователя
Dr. Alex
Это не хвост, это антенна
Сообщения: 1438
Зарегистрирован: Вт окт 28, 2008 09:00:18
Откуда: Украина, Харьков
Контактная информация:

Re: Термостат

Сообщение Dr. Alex »

При работе с датчиком отключите прерывания!!!!!!!!!
Порой мне кажется, что я делаю какое-то дерьмо, но когда я вижу, что делают другие, то я чувствую себя гением...
master3763
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Сб дек 10, 2011 17:45:25
Контактная информация:

Re: Термостат

Сообщение master3763 »

Так по идее определяется температура в градусах 0C . Если что не так прошу исправить меня.

Как отключить прерывания ? В коде накаких прерываний нет !
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Термостат

Сообщение phanis »

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

#include <mega8.h>                     
#include <1wire.h>                 
#include <ds18b20.h>                     
#asm                                                     
   .equ __w1_port=0x18; PORTB
   .equ __w1_bit=0
#endasm   
void main(void) {int temp; DDRD = 0x03;
while(1){  if (w1_init()) { temp=ds18b20_temperature(0);           
       if (temp>1000)  {temp=4096-temp; temp=-temp; }                                         
       if (temp<18)  PORTD.0 = 1;else PORTD.0 = 0;                     
       if (temp>28)  PORTD.1 = 1;else PORTD.1 = 0; }}}     

Тактовая частота в проекте и протеусе должна быть выбрана одна и та же .
master3763
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Сб дек 10, 2011 17:45:25
Контактная информация:

Re: Термостат

Сообщение master3763 »

Компиляция проходит успешно но в proteus не работает..

Выставляю файлы проекта. Посмотрите пожалуйста что я не так накрутил.. ?
Вложения
term_project.rar
(58.31 КБ) 197 скачиваний
master3763
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Сб дек 10, 2011 17:45:25
Контактная информация:

Re: Термостат

Сообщение master3763 »

Спасибо большое ! Получилось !
Я в протеусе частоту не туже самую ставил что в CodeVision . :)
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»