Вторник, 19.11.2019, 01:46
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Помоги сайту
Поддержи наш сайт
Через WebMoney
U222865683087
R391933670808
Z877043628365
E649133782052

или пополни нашу SMS копилку
SMS.копилка

Ссылки

 Каталог статей
Главная » Статьи » Учимся работать с AVR

Простой термостат для дома.
Привет, вот при написании статьи о термометре я подумал,
что термометр это дело нужное а вот хорошо было бы для дома спаять термостат,
который бы следил за температурой в квартире, и сигнализировал слишком низкую, или
чересчур большую температуру, а лучше бы еще включал обогреватель или вентилятор, когда это надо.

Итак, приступим, сначала создадим новый проект с помощью мастера (Wizard).
Выбираем микроконтроллер ATmega 8 потом в закладке  1-Wire выбираем порт В dsts bit = 0.
File -> generate,save and exit.

стираем код что нам сгенерировал визард и вставляем вот этот код:

#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;
     
        }    

}

Алгоритм следующий: если температура упадет ниже +18 градусов, на ножке порта D.0 появиться логическая единица,
и если темперетура поднимется выше +28, тогда на порту D.1 будет +5вольт(лог.1),
светодиоды не будут гореть, если температура от 18 до 28 градусов.

Схема:

Статья дополнена и переделана, теперь работает с минусовой температурой.

Категория: Учимся работать с AVR | Добавил: my-avr (07.09.2008)
Просмотров: 30911 | Комментарии: 16 | Рейтинг: 3.0/2 |
Всего комментариев: 161 2 »
15 baby_vikr  
Вот исправленный и немножко доработанный код
Добавил еще один диод отображающий рабочую температуру в интервале


16 kollyuchka89  
Помогите ! Копирую код, нажимаю F9 -нет ошибок, жму SHIFT+F9  появляется ошибка :еrror(s) occured during assembly. Что делать??

14 Игумыч  
уважаемый автор! помогите сделать регулятор температуры.
Принцип работы такой: в обычном режиме на 7-и сегментном индикаторе(4 разряда) отображается текущая температура. при нажатии кнопки SET переходим в режим установки температуры. кнопками + и - выставляем температуру. повторно жмём SET выходя из режима настройки. Если Т уст.>Т реал. то portb.0=1 portb.1=0
Если Т уст.<Т реал. то portb.0=0 portb.1=1
Если Т уст.=Т реал. то portb.0=0 portb.1=0

11 Виталий  
Можно даже упростить. Пусть желтый светодиод просто горит, без мерцания. Можно поставить специальный мерцающий светодиод.
Как я понимаю, кусок кода с выводом минусовой температуры можно убрать.
Собрать все на конструкции If-Else
вроде этого
if (temp>90) // Зажигаем желтый светодиод
PORTD.0 = 0;
else PORTD.0=1;
То есть, если температура выше 90, зажечь желтый светодиод.
А вот как быть с красным? Его нужно зажечь после выхода температуры за 100 градусов и при этом погасить желтый.

10 Виталий  
Скажите пожалуйста.
Хочу собрать устройство контроля температуры двигателя автомобиля на МК Atmega8.
Задача такова: Есть два светодиода на панели, один желтый, второй красный.
Нужно чтобы в диапазоне 90 градусов начинал моргать желтый светодиод, а когда температура превысила 100 градусов, загорался постоянным свечением красный светодиод.
То есть ничего никуда выводить не нужно, просто контролировать светодиодами.
Ваш код максимально подходит под эту задачу. Не могли бы вы подсказать, что в нем нужно поменять что бы заработало?
Заранее благодарен!

9 Denis  
А я вот такой из головы придумал http://vkontakte.ru/avrlabcom?z=photo-27477651_268059436%2Falbum-27477651_135815666%2Frev и есть еще версия на тиньке 2313

8 jon1582  
Как такой же термостат сделать на Attiny2313? Просто у нас в городе ATMEGA8 не где не найти, а хотелось бы сделать свой пбогреватель с температурным контролем

7 Павел  
Спасибо за статейку. Очень пригодилась :)
Поблагодарил в копилку копеечкой ;)

6 vet  
В этой версии кодевижна по другому выставляются параметры для подключения датчика. Проджект-Конфигуре-С компилер, Либрариес. Либо через файл проекта .прож

13 master3763  
А какой codevision используете вы ?
У меня стоит CodeVision 2.05.4.
У меня такая же проблема как и у Nixie. Выводит
invalid redefinition of '__w1_port'
invalid redefinition of '__w1_bit'

5 Nixie  
Чего-то у меня CodeVision не хочет ему bild делать, ругается на ошибки :

invalid redefinition of '__w1_port'
invalid redefinition of '__w1_bit'

Версия CodeVision 2.05.0 professional/
Где косяк ?


3 Arm  
компилятор говорит devices должен бит глобалним

4 rox  
devices = w1_init();
[b]while(devices>0)[/b]

1-10 11-12
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright My-AVR © 2019
Наша кнопка
У нас появилась кнопка, код кнопки:

Лаборатория самоделок на микроконтроллерах AVR

Форма входа
Наш опрос
Какой МК вы используете?
Всего ответов: 3207
Статистика/Друзья
CY-PR.com



Онлайн всего: 1
Гостей: 1
Пользователей: 0

РадиоКОТ - популярно об электронике. Авторские схемы, новые разработки. Обучение по электронике, микроконтроллерам, ПЛИС. Форум Сайт по радиоэлектронике. У нас все просто и интересно… ARV Reserch: Электроника — просто, полезно, увлекательно. Электронные устройства и программные средства для радиолюбителей и профессионалов, только авторские разработки, плагиата нет! Разработки на заказ. AVR projects Создание электронных роботов своими руками Схемы и программы на AVR http://ur5yfv.ucoz.ua/BANNER.gif Блог начинающего эмбеддера. Дай волю паяльнику! Самоделки на all-make.ru Принципиальные схемы Модулі автозапуску бензогенератора та системи АВР, електромонтажні роботи
Хостинг от uCoz