Четверг, 25.04.2024, 17:27
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Реклама Google
Форма входа
Категории раздела
Это нужно знать! [17]
Изучаем AVR [30]
Программаторы [12]
Необходимое ПО [8]
Готовые устройства [73]
Справочная [38]
Инструмент [0]
Технология [8]
Литература [0]
Arduino скетчи [18]
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Микроконтроллеры - это просто!
Главная » Статьи » Готовые устройства

Термометр ATMEGA16 + DS18В20 + LCD (HD44780)
Термометр - устройство для измерения температуры. Очень популярное устройство и имеет широкую область применения, чаще всего в радиолюбительской практике используется для контроля комнатной температуры, температуры за окном, в машине или в каком либо своем устройстве. 

Ниже я приведу пример, как просто сделать термометр на основе микроконтроллера Atmega16, датчика температуры DS18B20 и LCD (HD44780). 

DS18B20 - 1-проводный цифровой термометр, работает по интерфейсу 1-Wire. 

Подключить к микроконтроллеру такой термометр очень просто: 





Подключение DS18B20 в корпусе TO-92Подключение DS18B20 в корпусе SOIC



На рисунках показано как подключить к микроконтроллеру термометр, в зависимости от корпуса. Никаких сложностей это вызвать не должно. Теперь приведу полную схему термометра: 



На схеме: Atmega16,наш управляющий микроконтроллер, LCD и сам термометр. Но просто собрать все детали в кучу и спаять как мы знаем мало, нужно написать программу в микроконтроллер. в одной из предыдущих статей я писал как работать с таким дисплеем, а сейчас покажу как снимать показания с термометра DS18S20. 
Приступим. Открываем CodeVisionAVR и запускаем генератор начального кода, во вкладке Chip, как обычно выбираем микроконтроллер и частоту,во вкладке LCD настраиваем подключение дисплея и переходим во вкладку 1 Wire: 



Как видно из схемы термометр я подключил к ножке PD0 микроконтроллера, поэтому в строке 1 Wire PORT выбрал PORTD,а в строке Data Bit - 0. И обязательно нужно поставить галочку напротив Enabled,галочка напротив Multiple Device нужна в том случае если будет подключаться несколько датчиков на эту линию, чего я сейчас не планирую, поэтому и оставил пустым. С настройкой закончили, выбираем Ganerate Save and Exit и сохраняем наш проект. Теперь перейдем непосредственно к коду. 


#include <mega16.h> 
 #include <delay.h> 
 #include <stdio.h> 
 // 1 Wire Bus functions 
 #asm 
 .equ __w1_port=0x12 ;PORTD 
 .equ __w1_bit=0 
 #endasm 
 #include <1wire.h> 
 // DS1820 Temperature Sensor functions 
 #include <ds18b20.h> 
 #asm 
 .equ __lcd_port=0x15 ;PORTC 
 #endasm 
 #include <lcd.h> 
 #define pause delay_ms(500) // Объявляем переменную pause, которая будет осуществлять задержку 
 char lcd_buffer[33]; //Буфер для хранения данных для вывода на дисплей 
 int temp;  //Переменная для хранения значения температуры 
 void avr_init(void){ 
 PORTA=0x00; 
 DDRA=0x00; 
 PORTB=0x00; 
 PORTC=0x00; 
 DDRC=0x00; 
 PORTD=0x00; 
 DDRD=0x00; 
 TCCR0=0x00; 
 TCNT0=0x00; 
 OCR0=0x00; 
 TCCR1A=0x00; 
 TCCR1B=0x00; 
 TCNT1H=0x00; 
 TCNT1L=0x00; 
 ICR1H=0x00; 
 ICR1L=0x00; 
 OCR1AH=0x00; 
 OCR1AL=0x00; 
 OCR1BH=0x00; 
 OCR1BL=0x00; 
 ASSR=0x00; 
 TCCR2=0x00; 
 TCNT2=0x00; 
 OCR2=0x00; 
 MCUCR=0x00; 
 MCUCSR=0x00; 
 TIMSK=0x00; 
 ACSR=0x80; 
 SFIOR=0x00; 
 }; 
 void main(void) 
 { 
 avr_init(); 
 w1_init(); //инициализация датчика 
 lcd_init(16); //инициилизация LCD 
 while(1) //бесконечный цикл измерения температуры 
 { 
 temp=ds18b20_temperature(0)*10; //читаем температуру 
 
 sprintf(lcd_buffer,"t=%i.%u\xdfC",temp/10,temp%10); //запись в буфер текста и значений температуры в подготовленном виде 
 lcd_clear();  //очистка дисплея 
 lcd_puts(lcd_buffer); //вывод содержимого буфера на LCD  
 pause; //задержка в 500мс (необходимо чтобы термометр заново измерил температуру)  
 }; 
 } 
 




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

При условии исправности всех деталей, устройство должно запустится сразу и не требует каких либо дополнительных настроек.
Категория: Готовые устройства | Добавил: Alex (09.02.2014)
Просмотров: 6064 | Комментарии: 1 | Рейтинг: 5.0/2
Всего комментариев: 1
1 fhgfh17  
0
здравствуйте, можно asm файл кода на данную статью ,чисто для написания курсового проекта не более,спасибо.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright MyCorp © 2024