close

Вход

Забыли?

вход по аккаунту

?

Записка

код для вставкиСкачать
Содержание
Введение4
1 Анализ исходных данных5
1.1 Анализ исходных данных, создание структурной схемы устройства5
1.2 Выбор и обоснование микроконтроллера5
1.3 Выбор и обоснование среды разработки программы для микроконтроллера7
2 Разработка и реализация системы9
2.1 Выбор и описание используемых элементов и радиодеталей.9
2.2 Электрическая принципиальная схема устройства и описание её работы17
3 Разработка и реализация программы для микроконтроллера18
3.1 Разработка алгоритма программы для микроконтроллера18
3.2 Реализация программы для микроконтроллера и тестирование её работоспособности18
Заключение27
Литература28
Приложения29
Введение
Микроконтроллеры используются во всех сферах жизнедеятельности человека, устройствах, которые окружают его. С помощью программирования микроконтроллера можно решить многие практические задачи аппаратной техники.
Можно считать что микроконтроллер (МК) - это компьютер, разместившийся в одной микросхеме. Отсюда и его основные привлекательные качества: малые габариты; высокие производительность, надежность и способность быть адаптированным для выполнения самых различных задач.
Микроконтроллер помимо центрального процессора (ЦП) содержит память и многочисленные устройства ввода/вывода: аналого-цифровые преобразователи, последовательные и параллельные каналы передачи информации, таймеры реального времени, широтно-импульсные модуляторы (ШИМ), генераторы программируемых импульсов и т.д. Его основное назначение - использование в системах автоматического управления, встроенных в самые различные устройства: фотоаппараты, сотовые телефоны, музыкальные центры, телевизоры, видеомагнитофоны и видеокамеры, стиральные машины, микроволновые печи, системы охранной сигнализации, системы зажигания бензиновых двигателей, электроприводы локомотивов, ядерные реакторы и многое, многое другое. Встраиваемые системы управления стали настолько массовым явлением, что фактически сформировалась новая отрасль экономики, получившая название Embedded Systems (встраиваемые системы).
Достаточно широкое распространение имеют МК фирмы ATMEL, которые располагают большими функциональными возможностями.
Применение МК можно разделить на два этапа: первый - программирование, когда пользователь разрабатывает программу и прошивает ее непосредственно в кристалл, и второй - согласование спроектированных исполнительных устройств с запрограммированным МК. Значительно облегчают отладку программы на первом этапе - симулятор, который наглядно моделирует работу микропроцессора. На втором этапе для отладки используется внутрисхемный эмулятор, который является сложным и дорогим устройством, зачастую недоступным рядовому пользователю.
Целью данного курсового является разработка своей системы управления микроклиматом в теплице на базе датчиков температуры, влажности и освещения, т.к. имеющиеся в продаже готовые решения имеют достаточно высокую цену, а в настоящее время не доставляет труда купить комплектующие и на их основе собрать готовую систему управления микроклиматом в теплице, которая будет на порядок дешевле аналогов.
1 Анализ исходных данных
1.1 Анализ исходных данных, создание структурной схемы устройства
В данном курсовом проекте будет разработана система управления микроклиматом в теплице на базе датчиков температуры, влажности и освещения. Все необходимо реализовать на базе одного микроконтроллера с использованием необходимых устройств. При этом критерием оптимизации системы является максимальная простота.
Для решения поставленной задачи необходимо:
1) 1 датчик температуры
2) 1 датчик дыма
3) 1 LCD дисплей
4) 2 кнопки
5) 1 система звуковой сигнализации
6) 1 клапан для подачи воды
7) Оросители пожарные (количество зависит от помещения)
Принцип работы основан на том, что датчик температуры и дыма подключены к микроконтроллеру, которые постоянно опрашиваются. Так же присутствует 2 кнопки, при помощи которых пользователь устанавливает граничную температуру. При увеличении температуры выше уровня, который установил пользователь, включается распыление воды и звуковая сирена. При пересылки с датчика дыма на микроконтроллер сигнала о появлении в помещении дыма, включается звуковая сирена.
Структурная схема устройства системы автоматического пожаротушения в помещении приведена в приложении А.
1.2 Выбор и обоснование микроконтроллера
В качестве подходящих вариантов были выбраны микроконтроллеры ATmega фирмы Atmel. Критерием оптимизации системы является максимальная простота и цена. Наибольшее быстродействие (наибольшую тактовую частоту), из предоставленных для выполнения задания микроконтроллеров, имеют ATmega8, ATmega16, ATmega32 и с тактовой частотой 16Мгц, а наиболее дешевым из представленных выше микроконтроллеров оказался ATmega16. Сравнительная характеристика параметров микроконтроллеров приведена в таблице 1. Таблица 1 - Сравнение параметров МК
МКТактовая частота, MhzSRAMI/OНаличие 16bit таймераЦена
рос.руб.ATmega8161k23Да82ATmega16161k32Да140ATmega32162k32Да150ATmega163851232Да152ATmega32382k32Да160 Ниже приведены основные характеристика выбранной модели:
1) 8-разрядный высокопроизводительный AVR микроконтроллер с малым потреблением.
2) Энергонезависимая память программ и данных
3) 8 Кбайт программируемой Flash памяти. Обеспечивает 1000 циклов стирания/записи. 4) 512 байт EEPROM. Обеспечивает 100000 циклов стирания/записи 5) 1 Кбайт встроенной SRAM. 6) Программируемая блокировка, обеспечивающая защиту программных средств пользователя.
7) Пять режимов пониженного потребления: Idle, Power-save, Power- down, Standby и снижения шумов ADC.
8) Выводы I/O и корпуса: 23 программируемые линии ввода/вывода 28-выводной корпус PDIP, 32-выводной корпус TQFP и 32-выводной корпус MLF
9) Рабочие напряжения: 2,7 - 5,5 В (ATmega16L) 4,5 - 5,5 В (ATmega16)
10) Рабочая частота: 0 - 8 МГц (ATmega16L) 0 - 16 МГц (ATmega16)
Схема расположения выводов и блок-схема данного микроконтроллера в PDIP-корпусе изображены на рисунке 1 и рисунке 2 соответственно.
Рисунок 1 - Схема расположения выводов микроконтроллера ATmega16.
Рисунок 2 - Блок-схема микроконтроллера ATmega16.
1.3 Выбор и обоснование среды разработки программы для микроконтроллера
Для микроконтроллеров AVR существуют различные языки программирования, но, пожалуй, наиболее подходящими являются ассемблер и С, поскольку в этих языках в наилучшей степени реализованы все необходимые возможности по управлению аппаратными средствами микроконтроллеров.
Ассемблер - это низкоуровневый язык программирования, использующий непосредственный набор инструкций микроконтроллера. Программирование на языке ассемблер оправдано с точки зрения быстродействия и оптимизации. Однако главный недостаток ассемблерных языков заключается в том, что каждый из них привязан к конкретному типу устройств и логике его работы. Кроме того, ассемблер сложен в освоении, что требует достаточно больших усилий для его изучения.
Язык высокого уровня Си непрерывно увеличивает свою популярность для программирования микроконтроллеров. Преимуществами использования Си по сравнению с Ассемблером следующие: сокращенное время проектирования, более простые поиск ошибок и переносимость, а также легкость повторного применения. Главные недостатки: более громоздкий результирующий код и сниженное быстродействие. Для компенсации данных недостатков в архитектуре AVR предусмотрена эффективная дешифрация и выполнение инструкций, которые наиболее часто генерируются Си-компилятором.
Разработка Си-компилятора выполнялась компанией IAR systems еще до завершения составления технических требований к AVR-архитектуре и набору инструкций. В результате тесного сотрудничества команды разработчиков компилятора и команды разработчиков микроконтроллеров AVR является микроконтроллер, для которого сгенерированный код характеризуется высокой эффективностью и высокими техническими характеристиками. Поэтому выбор был сделан в пользу языка C.
Лучшими компиляторами языка С для микроконтроллеров являются CodeVisionAVR и WinAVR. По критериям оптимизации кода они находятся примерно на одном уровне. В интернете достаточно информации по их использованию. Но, на мой взгляд, CodeVisionAVR обладает рядом преимуществ перед WinAVR, а именно:
1) нет необходимости писать Makefile (файл с инструкциями по сборке, компиляции проекта);
2) наличие мастера кода;
3) простота освоения.
По этим причинам в качестве среды разработки был выбран CodeVisionAVR. 2 Разработка и реализация системы
2.1 Выбор и описание используемых элементов и радиодеталей.
Для реализации системы будут использованы следующие радиодетали:
1) Датчик температуры DALLAS DS18B20;
2) LCD дисплей LM016L
3) 2 Транзистора FA57SA50LC
4) Стабилизатор напряжения: 78L05;
5) Конденсаторы;
6) Резисторы;
7) Диодный мост W005M;
8) Трансформатор ТП115-K8;
9) Звуковая сирена ПКИ-1;
10) Датчик дыма потолочный YCC1011A;
11) 2 кнопки 3SA8-BA11;
12) Пожарный ороситель PI-210;
13) Клапан электромагнитный 2W21.
Датчик температуры - это устройство, которое определяет уровень температуры. Для данной системы был выбран датчик температуры DS18B20 (рисунок 3), имеющий характеристики, представленные в таблице 2. Датчик работает по интерфейсу 1-Wire, поэтому для считывания данных с данного датчика используются программные библиотеки 1-Wire.
Рисунок 3 - Датчик температуры DS18B20
Таблица 2- Характеристики датчика температуры DS18B20
Разрядность9...12 битВремя преобразования750 нс(макс.)Точность измерения +-0.5% в области температур-10...+85 СТочность измерения +-1% в области температур-55...+125 СДиапазон напряжения питания3....5,5 ВПотребляемый ток 1 мАСрок эксплуатации5 летВес10 г LCD дисплей - устройство, способное отображать символьную информацию. Для данной системы необходим LCD дисплей для отображения информации о текущих показателях датчиков. Был выбран LCD дисплей LM016L (рисунок 4). Характеристики LCD дисплея LM016L представлены в таблице 3.
Рисунок 4 - LCD дисплей LM016L
Таблица 3 - характеристика LCD дисплея LM016L
Количество отображаемых символов в строке16 Количество строк2Напряжение источника питания 5 ВРазмер дисплея84Ш х 44В х 10.5T мм
Транзистор - устройство, позволяющее входным сигналом управлять током в электрической цепи. В данной системе транзисторы будут использоваться для управления питанием на звуковую сигнализацию и клапан подачи воды. Был выбран транзистор FA57SA50LC (рисунок 5). Характеристики стабилизатора FA57SA50LC представлены в таблице 4.
Рисунок 5 - Транзистор FA57SA50LC
Таблица 4 - характеристика транзистора FA57SA50LC
Напряжение500 ВТок57 АМаксимальная мощность625 ВтRds On (Max) @ Id, Vgs80 mOhm @ 34A, 10V
Клапан - устройство, предназначенное для открытия или закрытия потока при наступлении определенных условий. В данной системе используется клапан электромагнитный 2W21 и ороситель PI-210 (рисунок 6). Характеристики клапана 2W21 представлены в таблице 5.
Рисунок 6 - клапан электромагнитный 2W21 и ороситель PI-210
Таблица 5 - характеристика клапана электромагнитного 2W21
Рабочая средаВода,масла,воздухТемпература-10...120Рабочее давление0...1,0 МпаКорпусЛатунь или нержавеющая сталь Стабилизатор напряжения мы будет применять для преобразования напряжения из 9В в 5В. В качестве стабилизатора напряжения был выбран стабилизатор 78L05 (рисунок 7). Характеристики стабилизатора напряжения 78L05 представлены в таблице 6.
Рисунок 7 - Стабилизатор 78L05
Таблица 6 - характеристика стабилизатора 78L05
Номинальный выходной ток0,1АМаксимальное входное напряжение20ВВыходное напряжение5ВРабочая температура0..125
Блок питания обеспечивает энергией микроконтроллер - 5 В, датчики температуры - 5 В и дисплей - 5В. Исходя из данных требований блок питания на выходе будет выдавать 5 В. Для понижения начального напряжения с 220 В до 9 В будем использовать трансформатор ТП115-K8 (рисунок 8), характеристики которого указаны в таблице 7. На выходе трансформатора будем иметь 9 В переменного напряжения, для его выпрямления будем использовать диодный мост, возьмём наиболее подходящий W005M (рисунок 9), характеристики которого указаны в таблице 8.
Для понижения выходного напряжения до 5 В требуется стабилизатор 78L05. Перед стабилизаторами и после них подключим два конденсатора.
В итоге получается блок питания с выходным напряжением 5 В, что нам как раз и подходит.
Рисунок 8 - Понижающий трансформатор ТП115-K8.
Таблица 7 - характеристики понижающего трансформатора ТП115-K8.
Тип трансформатораТПВыходное напряжение, В9Выходной ток, А1,1Мощность, Вт20 Рисунок 9 - диодный мост W005M
Таблица 8 - диодного моста W005M.
Максимальное постоянное обратное напряжение, В50Максимальное импульсное обратное напряжение, В60Максимальный прямой(выпрямленный за полупериод) ток, А1.5Максимальный допустимый прямой импульсный ток, А50Максимальный обратный ток, мкА10Максимальное прямое напряжение, В1при Iпр., А1Рабочая температура, С-55...125
Датчик дыма - извещатели, реагирующие на продукты горения, способные воздействовать на поглощающую или рассеивающую способность излучения в инфракрасном, ультрафиолетовом или видимом диапазонах спектра. В данном проекте мы будем использовать датчик потолочный YCC1011A (рисунок 10). Технические характеристики указаны в таблице 9.
Рисунок 10 - датчик дыма YCC1011A
Таблица 9 - датчик дыма YCC1011A.
Напряжение питания, В9Ток потребления в статическом режиме, мкА10Температура, С -5 - +50Влажность, %10-90Чувствительность датчика - в соответствии с международным стандартом UL Standart 217Размеры (диаметр/высота) - мм107/36
Сирена предназначена для подачи звукового сигнала в системах пожарной, охранной и охранно-пожарной сигнализации и устанавливается внутри помещений отапливаемого и неотапливаемого типа. Мы будем использовать сирену ПКИ-1 (рисунок 11), характеристики которой показаны в таблице 10.
Рисунок 11 - Звуковая сирена ПКИ-1
Таблица 10 - звуковая сирена ПКИ-1
Потребляемая мощность оповещателя, ВТ0,6Масса, кгне более 0,04Условия эксплуатации, °С-40 - +55 Диапазон напряжения питания, В9±3Уровень звукового сигнала на расстоянии 1 м по оси оповещателя, дБ95 - 110Размеры, мм 85x70x50 Кнопки мы будем использовать для выставления верхней границы температуры, по которой и будет производиться мониторинг. Мы будем использовать кнопки 3SA8-BA11 (рисунок 12). Технические характеристики указаны в таблице 11.
Рисунок 12 - кнопка 3SA8-BA11
Таблица 11 - кнопка 3SA8-BA11
Напряжение питания, В9Ток потребления в статическом режиме, мкА10Температура, С -5 - +50Влажность, %10-90Чувствительность датчика - в соответствии с международным стандартом UL Standart 217Размеры (диаметр/высота) - мм107/36
Остальные радиоэлементы не будут описаны т.к. имеют довольно широкий спектр различных реализаций на рынке и взаимозаменяемы. Более подробный перечень элементов указан в приложении Б.
2.2 Электрическая принципиальная схема устройства и описание её работы
На основе функциональной схемы системы можно построить электрическую принципиальную схему, изображенную в приложении Б.
Входы микроконтроллера PIND.0 и PIND.1 настроены на прием информации с датчиков температуры и дыма соответственно. Датчик температуры использует шину 1-Wire, поэтому мы обрабатываем полученную информацию при помощи соответствующей программной библиотеки. С датчика дыма мы принимаем сигнал, сигнализирующий о появлении дыма в помещении.
Входы PINA.0 и PINA.1 настроены на прием сигнала от кнопок, при помощи которых пользователь может установить уровень температуры. Выходы микроконтроллера PORTC.0 - PORTC.7 используются для вывода информации на LCD дисплей о текущей температуре, пожарной тревоге, для чего используется соответствующая библиотека.
Выход микроконтроллера PORTB.2 используется для включения сигнализации, PORTB.3 используется для разрешения подачи воды на клапан.
3 Разработка и реализация программы для микроконтроллера
3.1 Разработка алгоритма программы для микроконтроллера
Система контроля микроклимата в теплице должна автоматически оповещать о появлении дыма и устранять очаг возгорания при его появлении.
Алгоритм реализации программы будет следующим: Микроконтроллер постоянно получает уровень температуры, и состояние датчика дыма. При включении схемы будет по умолчанию выставлена верхняя граница температуры в 70С, которая может быть изменена пользователем в любой момент.
Уровень температуры считывается по шине 1-Wire при помощи соответствующей программной библиотеки. Сигнал с датчика дыма постоянно считывается в порта.
Если уровень температуры стал выше, чем установлено пользователем, то подается питание на клапан и на звуковую сирену, для оповещения пользователя. Если в помещении появляются следы дыма, то с датчика дыма поступает сигнал на микроконтроллер и подается питание на звуковую сирену.
Вся информация о текущих уровнях температуры и информационные данные отображаются на LCD дисплее при помощи соответствующей библиотеки.
Блок схема алгоритма работы устройства представлена в приложении В.
3.2 Реализация программы для микроконтроллера и тестирование её работоспособности
#include <mega16.h> #include <delay.h> #include <stdio.h> // 1 Wire Bus functions #asm .equ __w1_port=0x12 ; // устанавливаем для 1 Wire шины порт PORTD .equ __w1_bit=0 // используем бит 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(1000) // Объявляем переменную pause, которая будет осуществлять задержку #define SMOKE PIND.1 //Переменная, отвечающая за датчик дыма
char lcd_buffer[33]; //Буфер для хранения данных для вывода на дисплей int temp; //Буферная переменная для хранения значения температуры int curentTemp; //текущая температуры
int tempLevel=70; //граница температуры, после которой включается вода
char buf[16];
//объявление всех портов
void avr_init(void){ PORTA=0x00; DDRA=0xff;
DDRB=0xff; PORTB=0x00; PORTC=0x00; DDRC=0x00; PORTD=0x00; DDRD=0xff; 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); //читаем температуру if (temp>1000)
{ //если датчик выдаёт больше 1000 temp=4096-temp; //отнимаем от данных 4096 temp=-temp; //и ставим знак "минус" } if (temp>0)
{
curentTemp = temp; //костыль для устранения ошибки датчика
}
sprintf(lcd_buffer,"t=%d\xdfC",curentTemp); //запись в буфер текста и значений температуры в подготовленном виде lcd_clear(); //очистка дисплея lcd_puts(lcd_buffer); //вывод содержимого буфера на LCD if (PINA.0 == 1)
{
tempLevel++; //увеличение температуры tempLEVEL
} if (PINA.1 == 1)
{
tempLevel--; //уменьшение температуры tempLEVEL
} if (curentTemp>tempLevel && curentTemp>0) //если текущая температура больше разрешенной, то
{
PORTB.2=1; //вкл сигнализацию
PORTB.3=1; //вкл подачу воды
lcd_clear(); //очищаем дисплей перед выводом на него
lcd_puts("FIRE! ALARM!"); //выводим на первую строку текст
lcd_gotoxy(0,1); //переходим на вторую строку
lcd_puts("WATER GO!"); //выводим на вторую строку текст
}
if (SMOKE == 1) //если с датчика дыма пришел сигнал, то
{
PORTB.2 = 1; lcd_clear();
lcd_puts("SMOKE!");
lcd_gotoxy(0,1);
lcd_puts("ALARM!");
}
if(curentTemp<=tempLevel && SMOKE!=1 && curentTemp>0)
{ PORTB=0x00; //обнуляем порт В
sprintf(lcd_buffer,"t=%d\xdfC",temp); //запись в буфер текста и значений температуры в подготовленном виде lcd_clear(); //очистка дисплея lcd_puts(lcd_buffer); //вывод содержимого буфера на LCD sprintf(buf, "tLV=%d stat:OK",tempLevel);
lcd_gotoxy(0,1);
lcd_puts(buf);
}
pause; //задержка в 1000мс (необходимо чтобы термометр заново измерил температуру) }; } Исходный код программы для микроконтроллера приведен в приложении Г.
Для тестирования работоспособности программы в задании указана среда имитационного моделирования Proteus. Код был скомпилирован CodeVisionAVR в hex-файл, который был подключен к микроконтроллеру в Proteus. Схема системы, смоделированная в Proteus, в выключенном состоянии изображена на рисунке 13. При включении системы, автоматически выставляются значение температуры по умолчанию (рисунок 14).
Если же уровень температуры стал выше, чем установлено пользователем, то подается питание на клапан и сигнализацию и выводится уведомление на дисплее (рисунок 15).
Если поступил сигнал с датчика дыма, то подается питание на сигнализацию и выводится уведомление на дисплее (рисунок 16).
Рисунок 13 - Схема системы в Proteus в выключенном состоянии
Рисунок 14 - Схема системы в Proteus в момент включения Рисунок 15 - Схема системы в Proteus при превышении температуры
Рисунок 16 - Схема системы в Proteus при поступлении сигнала с датчика дыма
Тестирование работы устройства представлено в таблице 12.
Таблица 12 - Тестирование работы устройства
№ тестаУсловие тестаРезультат теста1Температура в помещении выше чем задана пользователем. Включилась звуковая сирена и подана вода для тушения.Выполнено2Поступил сигнал с датчика дыма. Включается сигнализация. Выполнено3Очаг возгорания устранен. Подача воды прекратилась и сигнализация выключилась.Выполнено4Источник дыма устранен. Сигнализация выключиласьВыполнено В приложении Д представлена временная диаграмма работы устройства. На ней продемонстрирована работа самого устройства: включение устройства, срабатывание датчиков. Описание сигналов:
D1 - датчик температуры (температура меньше установленной);
D2 - датчик температуры (температура больше установленной);
D3 - датчик дыма (находится в "покое");
D4 - датчик дыма (находится в "тревожном" состоянии);
C1 - сигнал включения сигнализации;
С1 - сигнал подачи воды;
Заключение
В ходе выполнения данного курсового проекта мною была разработана автоматическая система пожаротушения на основе датчиков температуры и дыма, получены знания в области программирования микроконтроллеров AVR. Также был учтён критерий оптимизации: максимальная простота. Также была составлена электрическая принципиальная схема устройства, по которой устройство может быть собрано.
Литература
1) www.Atmel.com - официальный сайт фирмы Atmel (последнее посещение 27.11.2013).
2) www.chipdip.ru - магазин радиоэлектроники (последнее посещение 28.11.2013).
3) http://radiokot.ru/start/- обучающий ресурс для начинающих (последнее посещение 24.11.2013).
Приложение А
Структурная схема устройства
Приложение Б
Электрическая принципиальная схема
Приложение В
Блок-схема алгоритма работы устройства
Приложение Г
Исходный код программы
#include <mega16.h> #include <delay.h> #include <stdio.h> // 1 Wire Bus functions #asm .equ __w1_port=0x12 ; // устанавливаем для 1 Wire шины порт PORTD .equ __w1_bit=0 // используем бит 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(1000) // Объявляем переменную pause, которая будет осуществлять задержку #define SMOKE PIND.1 //Переменная, отвечающая за датчик дыма
char lcd_buffer[33]; //Буфер для хранения данных для вывода на дисплей int temp; //Буферная переменная для хранения значения температуры int curentTemp; //текущая температуры
int tempLevel=70; //граница температуры, после которой включается вода
char buf[16];
//объявление всех портов
void avr_init(void){ PORTA=0x00; DDRA=0xff;
DDRB=0xff; PORTB=0x00; PORTC=0x00; DDRC=0x00; PORTD=0x00; DDRD=0xff; 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); //читаем температуру if (temp>1000)
{ //если датчик выдаёт больше 1000 temp=4096-temp; //отнимаем от данных 4096 temp=-temp; //и ставим знак "минус" } if (temp>0)
{
curentTemp = temp; //костыль для устранения ошибки датчика
}
sprintf(lcd_buffer,"t=%d\xdfC",curentTemp); //запись в буфер текста и значений температуры в подготовленном виде lcd_clear(); //очистка дисплея lcd_puts(lcd_buffer); //вывод содержимого буфера на LCD if (PINA.0 == 1)
{
tempLevel++; //увеличение температуры tempLEVEL
} if (PINA.1 == 1)
{
tempLevel--; //уменьшение температуры tempLEVEL
} if (curentTemp>tempLevel && curentTemp>0) //если текущая температура больше разрешенной, то
{
PORTB.2=1; //вкл сигнализацию
PORTB.3=1; //вкл подачу воды
lcd_clear(); //очищаем дисплей перед выводом на него
lcd_puts("FIRE! ALARM!"); //выводим на первую строку текст
lcd_gotoxy(0,1); //переходим на вторую строку
lcd_puts("WATER GO!"); //выводим на вторую строку текст
}
if (SMOKE == 1) //если с датчика дыма пришел сигнал, то
{
PORTB.2 = 1; lcd_clear();
lcd_puts("SMOKE!");
lcd_gotoxy(0,1);
lcd_puts("ALARM!");
}
if(curentTemp<=tempLevel && SMOKE!=1 && curentTemp>0)
{ PORTB=0x00; //обнуляем порт В
sprintf(lcd_buffer,"t=%d\xdfC",temp); //запись в буфер текста и значений температуры в подготовленном виде lcd_clear(); //очистка дисплея lcd_puts(lcd_buffer); //вывод содержимого буфера на LCD sprintf(buf, "tLV=%d stat:OK",tempLevel);
lcd_gotoxy(0,1);
lcd_puts(buf);
}
pause; //задержка в 1000мс (необходимо чтобы термометр заново измерил температуру) }; } }
Приложение Д
Временная диаграмма
Документ
Категория
Рефераты
Просмотров
265
Размер файла
975 Кб
Теги
записка
1/--страниц
Пожаловаться на содержимое документа