Привет, вот при написании статьи о термометре я подумал,
что термометр это дело нужное а вот хорошо было бы для дома спаять термостат,
который бы следил за температурой в квартире, и сигнализировал слишком низкую, или
чересчур большую температуру, а лучше бы еще включал обогреватель или вентилятор, когда это надо.
Итак, приступим, сначала создадим новый проект с помощью мастера (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 градусов.
Schéma:
Статья дополнена и переделана, теперь работает с минусовой температурой.
my-avr.at.ua