·Распространенность и дешевизна газа в России ·Высокий КПД (а значит - низкие расходы н">

Разработка системы управления отопительного котла

 

Введение


Микроконтроллер - микросхема <#"justify">·Распространенность и дешевизна газа в России

·Высокий КПД (а значит - низкие расходы на эксплуатацию)

·Высокая надежность

·Нет проблем с доставкой топлива

·Широкий спектр мощностей

·Экологичность

·Очень малое количество сажи (реже нужно чистить дымоход и котел)

При этом, газовые котлы обладают двумя серьезными недостатками:

·низкой автономностью (при отключении или падении давления газа в магистрали котел перестает работать)

·высокой стоимостью и сложностью процесса согласования и получения разрешения для подключения магистрального газа (нужно оформить множество документов, разрешений, соглашений) и длительным временем(1-2 года) подключения.

Тем не менее, газовые котельные - является оптимальным решением с точки зрения стоимости дальнейшей эксплуатации системы отопления. Затраты на топливо в газовой котельной ниже затрат на топливо для котельной на жидком или твердом топливе в 1,5 - 2 раза!

Рис. 1 - Функциональная схема котла:

. Панель управления; 2. Съемная панель отверстия для чистки; 3 Фланец дымохода; 4. Коллектор продуктов сгорания с термостатом дымовых газов; 5. SKKT (система контроля тяги дымохода); 6. Выход ОВ; 7. Подача газа; . Чугунный теплообменник; 9. Вход ОВ; 10. Камера сгорания; 11. Подача вторичного воздуха; 12. Атмосферная горелка; 13. "Вечное пламя"; 14. Подача первичного воздуха; 15. Форсунки горелки; 16. Катушка газовой арматуры; 17. Управление газовой арматурой; 18. Пьезоразжигатель; 19. Кожух котла; 20. Место для датчиков термометра, аварийного и рабочего термостатов

Структурная схема системы управления такого котла будет иметь вид:


Рис. 2 - Структурная схема


На схеме:

Микроконтроллер - центральное процессорное устройство.

Клавиатура - устройство ввода информации.

LCD - жидкокристаллический дисплей (устройство вывода информации).

Кварц - схема кварцевого тактового генератора.

Питание МК - питания микроконтроллера.

Питание АЦП - питания встроенного аналого-цифрового преобразователя контроллера.

Программатор - устройство для программирования микроконтроллера.

Датчик температуры - измеряет температуру жидкости, его основу составляет терморезистор.

Концевой датчик - указывает крайнее положение форсунки горелки.

Схема усиления управляющего сигнала - схема, выполненная на дискретных компонентах, работающая в ключевом режиме.

Драйвера управления асинхронными двигателями - электрическая схема подключения двигателя, основой которой является биполярные транзисторы и симисторы.

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


2. Выбор элементной базы


Для проектирования данной системы необходимо выбрать: концевой датчик, датчик температуры, входной и выходной клапаны жидкости, шаговый двигатель, клавиатуру, LSD - дисплей, газовую горелку и микроконтроллер. Микроконтроллер выберем исходя их количества задействованных ножек.


.1 Концевой датчик


Для определения конечного положения форсунки газовой горелки выберем концевой выключатель L5K13PUM211, представленный на рисунке 3.

Рис. 3 - Концевой датчик L5K13PUM211


Характеристики датчика.

·Предназначен для коммутации электрических цепей управления под воздействием управляющих упоров в определённых точках пути контролируемого объекта.

·Степень защиты: IP65.

·Номинальное напряжение: 240 В, 50 Гц.

·Номинальный ток: 3 А.

·Контактная группа: 1 замыкающийся + 1 размыкающийся контакты.

·Материал корпуса: пластик.

·Тип привода: кнопочный толкатель.

·Материал толкателя: металл.

·Количество кабельных вводов: 1.

·Габаритные размеры: 94,5×30,0×30,5 мм.

·Изготовитель: «EMAS», Турция.


.2 Датчик температуры


Датчик ОВЕН дТС3014-Pt1000.B2.50/2 предназначен для измерения температуры воды в контурах нагрева (в защитной гильзе) и измерения температуры воздуха.

Датчик имеет длину погружной части (гильзы) 50 мм и соединительный кабель длиной 2 м.

Чувствительный элемент - Pt1000.


Рис. 3 - Габаритный чертеж термопреобразователя ОВЕН дТС3014


.3 Усилитель сигнала датчика температуры

- это совершенный измерительный усилитель и компенсатор холодного спая термопары на монолитной микросхеме. Он сравнивает эталон точки плавления льда с предварительно калиброванным усилителем, чтобы получить выходной сигнал высокого уровня (10 мВ/°С) непосредственно из сигнала термопары. Расположение ножек микросхемы позволяет использовать ее как линейный усилитель-компенсатор или как контроллер с переключаемым выходным сигналом, используя встроенный или удаленный контроль установки. Может использоваться непосредственно для усиления собственного компенсированного напряжения, таким образом превращая его в автономный преобразователь в градусы Цельсия с выходом низкого сопротивления.включает в себя сигнализацию разрыва термопары, которая срабатывает, если на одном или обоих концах термопары разрывается цепь. Выход сигнализации выполнен в универсальной форме, которая включает в себя управление TTL.может питаться напряжением одной полярности (+5В) и напряжением обоих полярностей при необходимости измерения температуры ниже 0°С. Чтобы минимизировать саморазогрев, разгруженный AD594 обычно потребляет питание 160 мкА, но он также может потреблять ±5 мА в нагруженном состоянии.


Рисунок 4 - Подключение термопары к AD594

содержит кондиционер термопары. При использовании одного питания +5 В изображенного на схеме (рис.4) можно получить точное напряжение на выходе.

Можно использовать любое удобное напряжение от +5 В до +30 В, при этом возникают ошибки, связанные с самонагревом, более низкое значение которой соответствует более низкому уровню напряжения. В случае одиночного питания +5 В подключается на ножку 11, а «земля» - на ножку 7 (для обеспечения питания) и на ножку 4 (общий сигнал). Термопара подключается к ножкам 1 и 14, либо непосредственно в месте измерения, либо через проводники, соответствующие типу термопары. В случае, когда сигнализация не используется, ножку 13 необходимо подключить на «землю». Калиброванный выходной сигнал с ножки 8 вместе с выходом ножки 9 позволяет получить номинальную температурную характеристику в 10 В/°С для передачи.действует как два дифференциальных усилителя. Выходные сигналы суммируются и используются для управления повышающим усилителем, как показано на рисунке 5.


Рисунок 5 - AD594


При нормальном режиме работы выходы главного усилителя, на ножке 9, подключены к цепи обратной связи на ножке 8. Сигналы термопары, подключенные к буферу выходного уровня на ножках 1 и 14, усиливаются в блоке G дифференциального усилителя и дальше усиливаются в блоке А главного усилителя. Выход главного усилителя подключен ко второму уровню дифференцирования путем обратной связи. На этом уровне сигнал обратной связи усиливается и тоже подается на вход главного усилителя через суммирующую цепь. Из-за инверсии усилитель в обратной цепи приводит к снижению дифференциального сигнала до маленького значения. Два дифференциальных усилителя G сделаны таким образом, чтобы соответствовать друг другу и иметь одинаковый коэффициент усиления. В результате сигнал обратной связи, который подается на правый дифференциальный усилитель будет в точности соответствовать входному сигналу термопары, когда дифференциальный сигнал был снижен до нуля. Цепь обратной связи настроена таким образом, что эффективное усиление на выходе, на ножках 8 и 9 соответствует напряжению в 10 мВ на °С возбуждения термопары. В добавление к сигналу обратной связи на правый дифференциальный усилитель подается напряжение компенсации холодного спая. Компенсацией является дифференциальное напряжение, пропорциональное температуре чипа по Цельсию. Этот сигнал влияет на дифференциальный вход таким образом, что выходной сигнал усилителя должен регулировать возвратным сигналом входа, который равен напряжению термопары. Компенсационный сигнал подается через встроенные резисторы таким образом, что влияние на главный выход тоже равно 10 мВ/°С. В результате компенсационное напряжение добавляется к эффективному напряжению термопары как сигнал, прямо пропорциональный разнице между 0°С и температурой чипа. Если температура холодного спая термопары соответствует температуре AD594, выходной сигнал чипа будет соответствовать читаемому сигналу, который получен путем усиления сигнала термопары погруженной в ледяную ванну. AD594 также содержит в себе детектор разрыва цепи входа, который открывает транзистор сигнализации. Этот транзистор фактически является токоограниченным выходным буфером, но в пределе может быть использован как переключающий транзистор для операций включения и выключения внешней сигнализации. Цепь компенсации «ледяной» точки обладает напряжением, позволяющим получить как положительные, так и отрицательные температурные коэффициенты. Эти напряжения могут использоваться вместе с внешними резисторами для изменения точки плавления льда и калибровки AD594. Резистор обратной связи подключен таким образом, что значение его сопротивления может быть увеличено последовательным подключением резистора, или уменьшено подключением внешнего резистора на ножках 5 и 9.

2.4 Клапан регулирующий шаровой с электроприводом


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

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

Рабочая среда: вода, горячая вода, пар, воздух, масла, бензин, мазут, слабые кислоты, спирт.

Материалы. Корпус: нержавеющая сталь. Уплотнение: PTFE.

Рабочая температура: 0°С…+185°С.

Рабочее давление: 0,0...1,6 MПa.

Присоединение: Резьбовое ½" ¾" 1" 1¼" 1½" 2" ДУ, мм: 15 20 25 32 40 50

Питание: ~220В, выводной провод 1 м.

Время открытия/закрытия: 5...6 (10...15) с или 30 с.

Применение: Упаковочная промышленность, пивоварение, пищевая промышленность, химические системы и смесительное оборудование, линии водоподготовки.

Рис. 6 - Клапан регулирующий шаровой LD-15 с электроприводом


Рис. 7 - Схема подключения электропривода


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


.5 Схема подключения асинхронных двигателей клапанов


Рис. 8 - Схема подключения асинхронных двигателей клапанов

В схеме используется даже не тиристор, а мощный семистор TC106-10. Этот семистор позволяет коммутировать нагрузку до 10 ампер. Для справки: семистор отличается от тиристора тем, что он работает с обоими полупериодами переменного напряжения, то есть, в открытом состоянии он пропускает как положительную, так и отрицательную полуволны. Для гальванической развязки цепей микроконтроллера и силовых цепей нагрузки используется оптодинистор АОУ103Б. Для того, что бы не создавать лишней нагрузки на выход микроконтроллера для управления светодиодом фотодинистора используется ключ на транзисторе КТ361. Что бы отключить нагрузку от источника питания 220В микроконтроллер должен выставить на своем выходе (в данном случае на выходе PB4 сигнал логической единицы. При этом ключ VT1 закрывается, ток через светодиод фотодинистора не течет, и семистор тоже закрыт. Когда нужно включить нагрузку, микроконтроллер устанавливает на своем выходе логический ноль. Транзистор VT1 открывается, светодиод фотодинистора зажигается и освещает динистор. Динистор начинает открываться в каждом полупериоде напряжения. Через диодный мостик, обозначенный, как VD1 динистор подключен к управляющему электроду семистора VS1. Поэтому в каждом полупериоде семистор тоже открывается и на нагрузку поступает полное напряжение питания. Диодный мостик VD1 необходим потому, что динистр может работать лишь в одном направлении. Он открывается только тогда, когда на его верхнем по схеме выводе плюс а на нижнем минус. В обратном направление динистор не открывается. Если подключить динистор к семистору напрямую, то и семистор тоже сможет пропускать лишь одну из полуволн питающего напряжения. В качестве мостика VD1 можно применить любой маломощный мостик либо составить его из четырех диодов КД522Б. Светодиод HL1 служит просто для индикации включения нагрузки.

2.6 Шаговый двигатель


Для закрытия/открытия форсунки газовой горелки выберем шаговый двигатель FL42STH33-0316A.


Таблица 1 - Основные технические характеристики двигателя

НаименованиеЗначениеУгловой шаг1.8°Погрешность углового шага±5% (полный шаг, без нагрузки)Погрешность сопротивления±10%Погрешность индуктивности±20%Повышение температуры80°C Max.(рабочий ток, 2 фазы)Рабочая температура-20°C ~ +50°CСопротивление изоляции100M?Min. ,500VDCДиэлектрическая проницаемость500VAC for one minuteРадиальное биение вала0.02Max. (450 g-load)Осевое биение вала0.08Max. (450 g-load)Напряжение питания12ВТок0,31АСопротивление38,5 ОмКрутящий момент1,6 Кг*СмКоличество выводов6Момент инерции35 г*см2Вес0,22 кгДлина34 мм

Рис. 9 - Эскиз шагового двигателя

2.7 Схема подключения шагового двигателя


К выходам микроконтроллера подключается драйвер - силовые ключи коммутирующие обмотки шагового двигателя. Драйвер состоит из 4х транзисторов КТ 972.


Рис. 10 - Схема подключения шагового двигателя


Диоды можно использовать любые с допустимым импульсным током 200мА. (BAS21)


.8 Клавиатура


Ввод информации будем производить с матричной 12-клавишной клавиатуры, имеющей 4 линии строк и три линии столбцов.


Рис. 11 - Клавиатура


Все вертикальные линии матрицы подключены через резисторы к источнику питания +5 В.

Устанавливая по очереди на каждой из вертикальных линий уровень напряжения, соответствующий логическому 0, опрашивается состояние горизонтальных линий. Если ни одна клавиша не нажата, уровень напряжения на всех горизонтальных линиях соответствует логической 1 (т.к. все эти линии подключены к источнику питания +5 В через резисторы).

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

Как только на одной из горизонтальных линий появится уровень логического 0 фиксируется нажатие на клавишу. На микроконтроллер поступает запрос на прерывание и номер клавиши в матрице. Аналогичные действия выполняются и тогда, когда оператор отпускает нажатую ранее клавишу.


.9 LСD - дисплей


Рис.12 - Дисплей


Жидкокристалический модуль MT-10S1 состоит из БИС контроллера управления и ЖК панели. Контроллер управления КБ1013ВГ6, производства ОАО «АНГСТРЕМ», аналогичен HD44780 фирмы HITACHI и KS0066 фирмы SAMSUNG.

Модуль выпускается со светодиодной подсветкой. Внешний вид приведен на рисунке 12. Модуль позволяет отображать 1 строку из 10 символов. Символы отображаются на матрице 5*8 точек между символами имеются интервалы шириной в одну отображаемую точку. Каждому отображаемому на ЖКИ символу соответствует его код в ячейке ОЗУ модуля. Модуль содержит два вида памяти - кодов отображаемых символов и пользовательского знакогенератора, а также логику для управления ЖК панелью.

Модуль позволяет:

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

работать как по 8-ми, так и по 4-х битной шине данных

принимать команды с шины данных;

записывать данные в ОЗУ с шины данных;

читать данные из ОЗУ на шину данных;

читать статус состояния на шину данных;

запоминать до 8-ми изображений символов, заданных пользователем;

выводить мигающий (или не мигающий) курсор двух типов;

управлять подсветкой.

микроконтроллер архитектура котел датчик

2.10 Газовая горелка


Для подогрева жидкости выберем газовую горелку CRONO 4G-8G 15G-20G


Рис. 13 - Газовая горелка

. Реле давления воздуха; ;2. 6-ти шрырьковая вилка для подключения газового мультиблока; 3. Автомат горения; 4. Кнопка разблокировки горелки со световым сигнализатором блокировки; 5. Крепежный фланец с теплоизоляционной прокладкой; 6. Винт регулировки воздушной заслонки; 7. Держатель головки горелки; 8. Штуцер для присоединения реле давления воздуха; 9. Электродвигатель


Таблица - Технические характеристики горелки

2.11 Микроконтроллер


Выбор микроконтроллера завис от количества задействованных ножек. Для наших целей выберем микроконтроллер фирмы Atmel AtMega103.

Отличительные особенности:

·Основан на AVR® RISC архитектуре;

·AVR® - высокая производительность и RISC архитектура с низким энергопотреблением;

·120/ 121 мощных инструкций - большинство выполняются за один такт;

·32 х 8 рабочих регистров общего назначения + регистры управления периферией;

·Производительность, вплоть до 6 MIPS при 6 МГц;

·Память данных и энергонезависимая память:

·64/128 Кбайт Flash- программная память с поддержкой внутрисистемного программирования;

·ресурс: 1000 циклов запись/ стирание;

·4 Кбайт встроенной SRAM;

·2К/4К байт EEPROM с поддержкой внутрисистемного программирования;

·Ресурс: 100 000 циклов записи/ стирания;

·Программируемая блокировка для безопасности содержимого Flash и EEPROM;

·Периферия:

· Встроенный аналоговый компаратор;

· Программируемый следящий таймер с встроенным генератором;

· Программируемый последовательный UART;

· Ведущий/ ведомый SPI- последовательный интерфейс;

· Контроллер реального времени (RTC) с выделенным тактовым генератором;

·Два 8-ми разрядных таймера/ счетчика с отдельным предварительным делителем частоты;

·Расширенная система с 16-ти разрядным таймером/ счетчиком с отдельным; предварительным делителем частоты режимами сравнения и захвата, а также с 8-ми, 9-ти и 10-ти разрядным ШИМ;

·Программируемый следящий таймер с встроенным тактовым генератором;

·8-ми канальный, 10-ти разрядный АЦП;

·Специализированные функции микроконтроллера:

·Режимы пониженного энергопотребления:

·Покоя (Idle), экономичный (Power Save) и отключения (Power Down);

·Программно- выбираемая частота тактового генератора;

·Внешние и внутренние источники прерывания;

·Спецификации:

·Микромощная, высокоскоростная CMOS технология;

·Полностью статический режим работы;

·Потребляемая мощность при 4 МГц, 3 В, 25°С:

·Активный режим: 5.5 мА;

·Режим покоя: 1.6 мА;

·Режим отключения: <1 мкА;

·Функции I/O и корпуса:

·32 программируемые линии I/O, 8 выходных линий, 8 входных линий;

·корпус 64-pin TQFP;

·Напряжение питания: от 2.7 В до 3.6 В

·Диапазон тактовых частот: от 0 до 4 МГц

Рис. 14 - Расположение выводов

/103 является 8-ми разрядным CMOS микроконтроллером с низким уровнем энергопотребления, основанным на AVR RISC архитектуре. Благодаря выполнению высокопроизводительных инструкций за один период тактового сигнала, ATmega603/103 достигает производительности, приближающейся к уровню 1 MIPS на МГц, обеспечивая разработчику возможность оптимизировать уровень энергопотребления в соответствии с необходимой вычислительной производительностью.

Ядро AVR, основанное на усовершенствованной RISC архитектуре, содержит мощный набор инструкций и 32 рабочих регистра общего назначения. Все 32 регистра напрямую подключены к арифметико - логическому устройству (АЛУ), что обеспечивает доступ к двум независимым регистрам при выполнении одной инструкции за один такт. В результате, данная архитектура имеет более высокую эффективность кода, при повышении пропускной способности, вплоть до 10 раз, по сравнению со стандартными микроконтроллерами CISC./103 имеет: 64/128 Кбайт Flash - памяти с поддержкой внутрисистемного программирования, 2К/4К байт EEPROM, 4Кбайт SRAM, 32 линии I/O общего назначения, 8 выходных линий, 8 входных линий, 32 рабочих регистра общего назначения, контроллер реального времени (RTC), 4 универсальных таймера/ счетчика с режимами сравнения и ШИМ, UART, программируемый следящий таймер с встроенным тактовым генератором, SPI- последовательный порт, а также, три программно выбираемых режима экономии энергопотребления. Режим ожидания «Idle Mode» останавливает CPU, но позволяет функционировать SRAM, таймеру/ счетчикам, порту SPI и системе прерываний. Режим экономии энергопотребления «Power Down» сохраняет содержимое регистров, но останавливает тактовый генератор, отключая все остальные функции микроконтроллера, вплоть до следующего внешнего прерывания, или до аппаратной инициализации. В режиме экономии энергопотребления (Power Save) тактовый генератор таймера продолжает функционировать, позволяя пользователю поддерживать контроль времени в то время, как все остальные функции микроконтроллера отключены.

Устройство производится с применением технологи энергонезависимой памяти с высокой плотностью размещения, разработанной в корпорации Atmel. Встроенная Flash - память обеспечивает возможность перепрограммирования программного кода в составе системы посредством последовательного интерфейса, или с помощью стандартного программатора энергонезависимой памяти. Благодаря совмещению усовершенствованного 8-ми разрядного RISC CPU с Flash- памятью с поддержкой внутрисистемного программирования на одном кристалле получился высокопроизводительный микроконтроллер ATmega603/103, обеспечивающий гибкое и экономически- высокоэффективное решение для многих приложений встраиваемых систем управления.ATmega603/103 поддерживается полным набором программ и пакетов для разработки, включая: компиляторы С, макроассемблеры, отладчики/ симуляторы программ, внутрисхемные эмуляторы и наборы для макетирования.

. Разработка программы


Алгоритм программы управления представлен на рисунке 15.


Рис. 15 - Алгоритм


Заключение


В ходе данного курсового проекта была разработана система управления отопительного котла. Была выбрана элементная база, разработан алгоритм и программа управления системой. Программа написана для микроконтроллеров фирмы Atmel с архитектурой AVR на языке Assembler. Чертежи выполнены с помощью САПР, элементарная база представлена в пояснительной записке.


Список литературы


1.Мортон Д. Микроконтроллеры AVR. Вводный курс. 2006

2.Голубцов М.С. Микроконтроллеры AVR от простого к сложному.2003

.Баранов В.Н. Применение микроконтроллеров AVR.Схемы, алгоритмы, программы.2004


Приложение А


Код основной программы


.include "m103def.inc"

.include "LCD4_macro.inc"


.dseg:.byte 4:.byte 1

;*****************************************************************************


.cseg

.org 0

INT00; External Interrupt Request 0INT01; External Interrupt Request 1


.equ DT =PF0 ; вход датчика температуры

.equPC0=PC0;

.equPC1=PC1;

.equPC2=PC2;

.equPC3=PC3; Шаговый двигатель

.equPC4=PC4; открытие входного клапана

.equPC5=PC5; закрытие входного клапана

.equPC6=PC6; открытие выходного клапана

.equPC7=PC7; закрытие выходного клапана


;--------------------------------------------------------------------------------------

; ТАБЛИЦА ВЕКТОРОВ ПРЕРЫВАНИЙ

:RESET ;переход на RESET при срабатывании прерывания INT00 (кнопка "СТОП"):can1, 0b00000001 ;запрещаем прерывание

out EIMSK, can1 ;INT01 ("ПУСК"). EIMSK - регистр масок внешних прерываний


;*********************************************************

;MAIN

:

; устанавливаем вершину стека

; RAMEND - конец памяти SRAM

ldi r16,LOW(RAMEND)

out SPL,r16r16,HIGH(RAMEND)SPH,r16

ldi r16, 1<<TOIE0; r16=TOIE0TIMSK, r16 ; разрешаем прерывание по переполнению таймера-счётчика 0port_init; инициализация портов; разрешаем использование прерываний

rcall KeyReadKeyboard_LCD ; инициализация дисплея

WR_DDADR 0 ; Указатель на начало видео памяти (ячейка с координатми 0,0)DATA_WR ; Вывод значения на экранCUR_R ; сдвиг курсора вправо

rcall KeyReadKeyboardDATA_WR ; Вывод значения на экран

; опрашиваем кнопку пуск:PINA, 5; пропустить следующую команду, если кнопка нажатаPUSKPORTC, 6 ; открываем выходной клапанPORTC, 4 ; открываем входной клапанWait15s ;

cbi PORTC, 4;OPEN_SHD ; открытие форсунки

rcall Wait15s ;DATA_RD ; считываем температуру с экранаCMP ; сравниваем температуру


;*************************************************************

; ПОДПРОГРАММА ИНИЦИАЛИЗАЦИИ ПОРТОВ_init:

; ножки PA4-PA5 на ввод, остальные на вывод

ldir16, 0b11001111DDRA, r16r16, 0b00110000PORTC, r16

; ножки порта С на выводr16

outPORTC, r16


; ножки PD0-PD7 на вводr16DDRD, r16


;ножки PЕ2-PЕ4 на выводr16, 0b11100011PORTD, r16


ret


;*********************************************************:

;проверяет нажатие клавиши в клавиатуре возвращает номер клавиши в случае нажатия

;иначе возвращает -1 (255) также -1 возвращается в случае, если в прошлый раз была ;нажате та же кнопка возвращаемое значение - переменная Key


;блок проверки строки (всего их 4)R17,PinD ; читаем порт DKeyTest ;вызываем программу проверки

;программа возвращает номер кнопки: 0..2

;или -1 - если нет нажатых кнопок

R17,0 ;загружаем код текущей строкиR18,255 ;если ничего не нажато - идем дальшеSetKey ;иначе - переходим на обработку

;конец 0-го блока

R17,PinD

rcall KeyTestR17,3R18,255SetKey

R17,PinDKeyTestR17,6R18,255SetKeyR17,PinDKeyTestR17,9R18,255SetKey

R17,0


SetKey:R17,R18 ;прибавляем номер кнопки к коду строчкиR18,Key ;грузим код кнопки, прочитанный в прошлый разR18,0b00001111 ;"чистим" его по маскеR17,R18 ;если в прошлый разEndKeyRead ;была нажата не та же кнопка, выходим

R17,0b10000000 ;иначе - пишем флажок "повтор":Key,R17 ;сохраняем код кнопки в ОЗУ

;выходим


;*********************************************************

KeyTest:R17,0b01110000 ;обрезаем по маскеR18,0b01110000R17,R18 ;инвертируем биты по маскеNoButtons ;если все нули (нет нажатых), переходим по метке

R18,0 ;инициализируем счетчик

R17,0b00010000 ;проверяем 0-ю кнопкуEndKeyTest ;нажато - выходR18 ;иначе - инкремент счетчика

R17,0b00100000 ;проверка 2 кнопкиEndKeyTestR18

R17,0b01000000 ;проверка 3 кнопкиEndKeyTest

:R18,255 ;если ничего не нажато - возвращаем 255

: ret


;*********************************************************:

;запускает выполнение операции, закрепленной за кнопкой

R17,Key ;загружаем переменную KeyR18,R17 ;проверяем на наличие флажкаR18,0b10000000 ;"повтор" или -1EndKeyboard ;если повтор или -1 - выходим

ZH,High(KeysLUT*2) ;загружаем таблицуZL,Low (KeysLUT*2) ;истинности (клавиша -> значение)

R18,0 ;смещаемся на номер клавиши

add ZL,R17ZH,R18


lpm ;загружаем значение элементаR17,R0

R18,Digit+2 ;сдвигаем разряды индикатораDigit+3,R18 ;на один влево

lds R18,Digit+1Digit+2,R18R18,DigitDigit+1,R18


sts Digit,R17 ;пишем в млад. разряд индикатора текущее значение


EndKeyboard: ret

;*********************************************************:

.db 1,2,3,4,5,6,7,8,9,10,0,11 ;массив (таблица истинности клавиатуры)


;**********************************************************

;подрограмма опроса датчика:

; ADEN - разрешаем работу АЦП

; ADSC - начало преобразованияr22, DT; АЦП для датчика температурыADMUX, r22

; опрос датчика:

ldi r22,1<<ADEN|1<<ADSC

out ADCSRA, r22


; ожидание завершения преобразования ADC

rADC:ADCSRA, ADSCrADC

PINA, 4; опрос кнопки стопEND; перейти на END, если нажата


; сравниваем текущую температуру

in r22, ADCL

cp R17, r22eq ADC; продолжаем, если равныR17, r22lo CLOSE;переход, если меньше

;OPEN

sbi PORTC,4 ;открытие входного клапана

rcall Wait1sPORTC,4: PORTC,5 ;закрытие входного клапана

rcall Wait1s

cbi PORTC,5

ret


;--------------------------------------------------------------------------------------

; ПОДПРОГРАММА ЗАДЕРЖКИ в 1 сек

Wait1s:r28, 20 r29, 255s_mid:r30, 255s_in:r30Wait1s_inr29 Wait1s_mid r28 Wait1s_out

;--------------------------------------------------------------------------------------

; ПОДПРОГРАММА ЗАДЕРЖКИ в 15 сек

Wait15s:

ldi r28, 230 s_out:r29, 255

sbic PINA, 4; опрос кнопки стопEND; перейти на END, если нажата

Wait15s_mid:r30, 255

Wait15s_in:r30Wait15s_in r29 Wait15s_midr28 Wait15s_out

ret

;--------------------------------------------------------------------------------------

; ПОДПРОГРАММА ЗАДЕРЖКИ в 1 мкс

Wait1mks:r28, 5 mks_out:r29, 255mks_mid:r29Wait1mks_midr28Wait1mks_out


;***************************************************************************

; открытие форсунки

OPEN_SHD:

ldi r1, 0b00000001r2, 0b00000011r3, 0b00000010r4, 0b00000110r5, 0b00000100r6, 0b00001100r7, 0b00001000r8, 0b00001001_R:

sbic PIND, 7; опрос концевого датчика

rjmp STOP_SHD; перейти на STOP_SHD, если нажат

out PORTC, r1 ; Крутим двигатель вправо

out PORTC, r2PORTC, r3PORTC, r4PORTC, r5PORTC, r6PORTC, r7PORTC, r8Wait1mks ; задержка между шагомSHD_R_SHD:

;************************************************************

; закрытие форсунки

CLOSE_SHD:

ldi r1, 0b00001001r2, 0b00000100r3, 0b00001100r4, 0b00000100r5, 0b00000110r6, 0b00000010r7, 0b00000011r8, 0b00000001_L:

out PORTC, r1 ; Крутим двигатель влево

out PORTC, r2PORTC, r3PORTC, r4PORTC, r5PORTC, r6PORTC, r7PORTC, r8Wait1mks ; задержка между шагомSHD_L


;**********************************************************: CLOSE_SHD ; закрываем форсунку

sbi PORTC, 7; закрываем выходной клапанPORTC, 5; закрываем входной клапан

rjump Reset;


.include "LCD4.asm"


Приложение Б


Программа управление дисплеем


LCD4.asm

;===========LCD Define ======================================================

.equ DATA_PORT = PORTA; LCD Data Port

.equ DATA_PIN= PINA

.equ DATA_DDR = DDRA


.equ CMD_PORT = PORTE; LCD Control Port

.equ CMD_PIN = PINE

.equ CMD_DDR = DDRE


.equ E = 4

.equ RW = 3

.equ RS = 2


.equ SPEED = 14 ; 14 для XTAL=16MHz, 10 для XTAL=8MHz,

; 6 для XTAL=4MHz, 5 для XTAL<4MHz

;==========================================================================

;===========LCD Proc ========================================================: CBI CMD_PORT,RS ; Выставляем нужные уровни на

; управляющих выводахCMD_PORT,RW ; Порты на выходCMD_PORT,E ; И сразу же выставляются на 1CMD_DDR,RSCMD_DDR,RWCMD_DDR,E

PortIn; Порт данных на вход


;==========================================================================:CLI; Ожидание флага занятости контроллера дисплеяPortIn; Порты на вход

CMD_PORT,RS; Идет Команда!

SBI CMD_PORT,RW ; Чтение!

:SBI CMD_PORT,E; Поднять стробLCD_Delay; Подождать

R16,DATA_PIN ; Считать байт


PUSH R16 ; Сохранить его в стек. Дело в том, что у нас R16

; убивается в LCD_Delay

CMD_PORT,E ;Бросить строб - первый цикл (старший полубайт)LCD_Delay; Подождем маленько

CMD_PORT,E; Поднимем стробLCD_Delay; ПодождемCMD_PORT,E; Опустим строб- нужно для

; пропуска второго полубайтаLCD_Delay; Задержка сноваR16 ; А теперь достаем сныканый байт - в нем наш флаг.R16,0x80 ; Продавливаем по маске. Есть флаг?BusyLoop ; Если нет, то переход

:SEI; Разрешаем прерывания.

;==========================================================================

; Запись команды в дисплей. Код команды в R17_WR:CLI ; Запрет прерыванийBusyWait ; Ждем готовности

CMD_PORT,RS; Идет команда!WR_END; Переход на запись


;-----------------------------------------------------------------------------------------

; Запись данных в дисплей. Код данных в R17_WR:CLI; Запрет прерыванийBusyWait; Ждем готовности

CMD_PORT,RS; Идут данные!

WR_END:CBI CMD_PORT,RW; Запись!

SBI CMD_PORT,E; Поднять строб

PortOut; Порт настроить на выход!R17; Сохраним данные которые будем выводить в стекеR17,0xF0 ; Отдавим по маске данным младшую тетраду.

R16,DATA_PORT ; Возьмем из порта данных старое значениеR16,0x0F ; Отдавим ему старшую тетраду

R16; Сохраним результа в стеке. Пригодится

R16,R17 ; Склеим младшую тетраду из порта со старшей тетрадой данных

DATA_PORT,R16; Выдадим этого мутанта в порт.

LCD_Delay; ПодождемCMD_PORT,E; Бросим строб вниз - данные ушли в индикатор

LCD_Delay; ПодождемCMD_PORT,E; Поднимем стробR16; Достанем из стека младшую тетраду из портаR17; И данные которые мы выводим

R17; Поменяем тетрады местами у байта данныхR17,0xF0 ; Отдавим младшую тетраду

R16,R17; Склеим младшую тетраду из

; порта с старшей тетрадой данных (бывшая младшая)

OUT DATA_PORT,R16 ; Выдадим в порт

LCD_Delay; ПодождемCMD_Port,E; Бросим строб


RCALLPortIn ; Порт вернем в прежнее состояние - на вход; Разрешим прерывания; Возврат


;==========================================================================

; Чтение команды из дисплея. Результат в R17_RD:CLI; Запрет прерыванийBusyWait ; Ждем контроллерCMD_PORT,RS ; Команда!RD_END ; Идем на чтение


;-----------------------------------------------------------------------------------------

; Чтение команды из дисплея. Результат в R17_RD:CLI; Запрет прерыванийBusyWait; Ждем контроллер

SBI CMD_PORT,RS; Данные!_END:SBI CMD_PORT,RW ; Чтение!


SBI CMD_PORT,E; Поднимаем стробLCD_Delay; ЖдемR17,DATA_PIN ; Читаем из порта байтCMD_PORT,E; Бросем строб вниз

R17,0xF0 ; Отдавливаем ему младшую тетрадуR17; Обмениваем тетрады местами

LCD_Delay; ЖдемCMD_PORT,E ; Поднимаем стробR16,R17 ; Прячем старшую тетраду в R16

R17,DATA_PIN ; Берем еще один байтCMD_PORT,E; Бросаем строб

R17,0xF0 ; Отдавливаем младшую тетрадуR17,R16 ; Склеиваем результат с старшим байтомR17 ; Разорваичаем байт. Т.к. первой

; выходила старшая тетрада

; разрешаем прерывания ; Возврат.


;==========================================================================:IN R16,DATA_DDR; Данные из DDR в регистрR16,0x0F; Отдавливаем старшую тетраду - нам нужно

; сохранить младшую и обнулить старшуюDATA_DDR,R16; Выдаем результат в порт.

R16,DATA_PORT; Берем данные из портаR16,0xF0; Выставляем все биты старшей тетрады,не трогая младшую

OUT DATA_PORT,R16; Выдаем в порт

RET

;==========================================================================:INR16,DATA_DDR; Данные из ДДР в регистрR16,0xF0 ; Выставляем все биты старшей тетрады, не

; трогая младшуюDATA_DDR,R16; Выдаем данные в порт

;==========================================================================_Delay:LDI R16,SPEED ; Задержка на несколько тактов. Для того чтобы

; дисплей_loop:DEC R16; Успевал обрабатывать данные

BRNE L_loop

_macro.inc

;==========================================================================

; LCD InitLCD_CLR = 0 ; DB0: clear displayLCD_HOME = 1 ; DB1: return to home position

LCD_ENTRY_MODE = 2 ; DB2: set entry modeLCD_ENTRY_INC = 1 ; DB1: incrementLCD_ENTRY_SHIFT = 0 ; DB2: shift

LCD_ON = 3 ; DB3: turn lcd/cursor onLCD_ON_DISPLAY = 2 ; DB2: turn display onLCD_ON_CURSOR = 1 ; DB1: turn cursor onLCD_ON_BLINK = 0 ; DB0: blinking cursor

LCD_MOVE = 4 ; DB4: move cursor/displayLCD_MOVE_DISP = 3 ; DB3: move display (0-> move cursor)LCD_MOVE_RIGHT = 2 ; DB2: move right (0-> left)

LCD_F = 5 ; DB5: function setLCD_F_8B = 4 ; DB4: set 8BIT mode (0->4BIT mode)LCD_F_2L= 3 ; DB3: two lines (0->one line)LCD_F_10D = 2 ; DB2: 5x10 font (0->5x7 font)LCD_CGRAM = 6 ; DB6: set CG RAM addressLCD_DDRAM = 7 ; DB7: set DD RAM address

SCR_L = 0b00011000; Сдвиг экрана влево

equ SCR_R = 0b00011100; Сдвиг экрана вправоCUR_L = 0b00010000 ; Сдвиг курсора влевоCUR_R = 0b00010100; Сдвиг курсора вправо


; Init ConfigINIT_LCD; нициализация LCD

RCALLInitHW; Настроить контрольный порт

LCD_DELAY; Подождать_CMD (1<<LCD_F)|(0<<LCD_F_8B);Выдать функции в порт.

; Команда инициализации адресации_CMD (1<<LCD_F)|(0<<LCD_F_8B)|(1<<LCD_F_2L) ;

Так как на 4

; байтах нельзя передать сразу второй байт

WR_CMD (1<<LCD_CLR) ;0x01_CMD (1<<LCD_ENTRY_MODE)|(1<<LCD_ENTRY_INC)

x06_CMD (1<<LCD_ON)|(1<<LCD_ON_DISPLAY)|(0<<LCD_ON_CURSOR)|(0<<LCD_ON_BLINK)

;0x0C_CMD (1<<LCD_HOME)

.ENDM


;==================================================================================

;Write Data

.MACRO WR_DATAR17,@0DATA_WR

.ENDM

;==================================================================================

;Write CMD

.MACRO WR_CMDR17,@0CMD_WR

.ENDM

;==================================================================================

; Read Data

.MACRO RD_DATADATA_RD

.ENDM

;==================================================================================

; Read CMD

.MACRO RD_CMDCMD_RD

.ENDM


;==================================================================================

;Set COORD

;Syntax LCD_COORD X,Y

.MACRO LCD_COORDR17,(1<<LCD_DDRAM)|(@0+0x40*@1)CMD_WR

.ENDM

;==================================================================================

;Shift SCREEN/CURSOR

.MACRO SHIFTR17,@0CMD_WR

.ENDM


;==================================================================================

;LCD Clear

.MACRO LCDCLRR17,(1<<LCD_CLR)CMD_WR

.ENDM


;==================================================================================

;Write CGRAM

.MACRO WR_CGADRR17,(1<<LCD_CGRAM)|(@0)CMD_WR

.ENDM

;Write DDRAM

.MACRO WR_DDADRR17,(1<<LCD_DDRAM)|(@0)CMD_WR


Введение Микроконтроллер - микросхема <#"justify">·Распространенность и дешевизна газа в России ·Высокий КПД (а значит - низкие расходы н

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ