unsigned char devices; int temp; devices = w1_init();
PORTD = 0x00; //Выставляем все выходы порта D на 0, то есть, выключаем весь порт D DDRD = 0xFF; while(devices>0) {
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 (18>=temp<=28) // устанавливаем рабочую температура Желтый PORTD.2 = 1; else PORTD.0=0;
if (temp>28) // установим верхний порог Красный PORTD.1=1; else PORTD.1=0;
}
}
Собрав подобную схему в протеусе мне показалось этого мало и я добавил индикацию интервала температур от 18 до 28 градусов желтым светодиодом а так же исполнительным механизмом (реле)
К схеме добавились:
1. Микроконтроллер Atmega8
2. Термодатчик DS18B20
3. 4 резистра (r 100x2шт, R4700х1шт (он же R4k7) и R10kх1шт )
4. 3 светодиода (3.2v синий,красный и желтый)
5. 1 конденсатор 100n
6. 1 транзистор TIP122
7. 1 Диод 1N4001
8. 1 Реле 5V
Дальше для проверки использовал моторчик и батарейку, чисто для эксперимента.
Приступим: Итак, приступим, сначала создадим новый проект с помощью мастера (Wizard).
Выбираем микроконтроллер ATmega 8 потом в закладке 1-Wire выбираем порт В dsts bit = 0. File -> generate,save and exit.
стираем код что нам сгенерировал визард и вставляем вот этот код: