Разработка устройства показывающего время, температуру воздуха и атмосферное давление

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 04.05.2014
Размер файла 932,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Аннотация

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

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

В приложении приведен текст программы микроконтроллера.

Содержание

Введение

1 Техническое задание

1.1 Наименование и область применения разработки

1.2. Основание для разработки

1.3. Цель и назначение разработки

1.4. Источник разработки

1.5. Режим работы устройства

1.6. Условия эксплуатации

1.7. Технические требования

1.8. Порядок контроля и приема

2. Конструкторская часть

2.1 Разработка и описание функциональной схемы

2.2. Разработка и описание принципиальной схемы

2.3. Параметры контроллера

2.4. Модуль контроллера

2.5. Программа микроконтроллера

2.6. Разработка печатной платы

3. Дополнительное описание устройства

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

3.1.1.Расчет схемы стабилизатора тока

3.2.Датчик давления

3.3.Модуль питания

3.4.Модуль индикации

3.4.1.Прогрммирование вывода информации на ЖКИ

Заключение

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

Приложение (программа)

Введение

В настоящее время микроконтроллеры получили широкое распространение во многих областях жизнедеятельности человека. Контроллеры получили широкое распространение и в промышленности, где они используются для решения многих прикладных задач, таких как: автоматизация диагностики, сбор и обработка информации.

Данный прибор построен на микроконтроллере AT90LS8535, он показывает не только время, но и температуру, а также атмосферное давление, заменяя таким образом три обычных бытовых прибора. Прибор должен быть связан по последовательному интерфейсу с персональным компьютером, который поможет откалибровать шкалы термометра и барометра, а при необходимости -- собрать данные для вывода на экран графиков изменения их показаний за выбранный интервал времени. Графическая часть работы выполнена при помощи программы Компас-3D V8 (принципиальная электрическая схема, структурная схема, блок-схема) и Sprint LayOut 4.0 rus (печатная плата).

1. Техническое задание

1.1 Наименование и область применения разработки

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

1.2 Основания для разработки

Основанием для разработки является учебный план для специальности 220301 "Автоматизация технологических процессов и производств", а также задание на курсовую работу по дисциплине "Общая электротехника и электроника".

В спроектированном устройстве анализ результатов производился программно, что позволило существенно снизить погрешность измерения.

1.3 Назначение разработки

Целью курсовой работы является замена модуля индикации, выполненного на нескольких семисегментных светодиодных индикаторах, на один многострочный индикатор. Устройство предназначено для определения температуры внешней среды и атмосферного давления.

Срок разработки - учебный семестр.

1.4 Источники разработки

Основным источником разработки является статья в журнале “Радио ”, 2003, №4, №5, №7.

1.5 Режим работы устройства

Данное устройство управляется со стороны управляющей программы, написанной с помощью языка программирования Assembler в соответствии с его спецификой для данного микроконтроллера. У устройства реализована связь с компьютером через СОМ-порт, посредством программы внешнего компьютера предназначенная для управления часами, калибровки термометра и барометра. Программа Lclock подготовлена с помощью пакета Delphi версии 3.0.

1.6 Условия эксплуатации

В соответствии с ГОСТ 21552-84 нормальными климатическими условиями для эксплуатации устройства являются:

· температура окружающего воздуха 20±5 0С;

· относительная влажность воздуха 60±15%;

· атмосферное давление 630-800 мм рт.ст.;

Устройство должно обеспечивать нормальное функционирование в условиях температуры окружающего воздуха от 0 0С до +200 0С.

1.7 Технические требования

Разработанное устройство должно быть реализовано на стандартных унифицированных элементах. Повышенных требований к подбору элементов не предъявляется. ассемблер давление модуль программирование

1.8 Порядок контроля и приемки

Перечень материалов проекта:

1. Пояснительная записка.

2. Графическая часть (схема электрическая принципиальная, структурная схема, печатная плата, блок схема алгоритма программы).

3. Спецификация.

Контроль и приемку курсовой работы осуществляет преподаватель.

2. Конструкторская часть

2.1 Разработка и описание функциональной схемы

Разработку функциональной схемы необходимо начинать с определения всех отдельных частей разрабатываемого устройства. Каждый отдельный элемент данного устройства должен выполнять определённые функции и взаимодействовать с другими элементами. Для согласования отдельных элементов устройства необходимо предусмотреть определённые блоки, основной функцией которых должно быть согласование блока контроллера с периферийными устройствами. Структурная схема устройства приведена в графической части расчётно-пояснительной записки.

2.2 Разработка и описание принципиальной схемы

В качестве управляющего микроконтроллера был выбран AVR микроконтроллер AT9OS8535-8JI. Данный выбор обусловлен полным соответствием уровней сигналов и достаточным быстродействием для УПИ.

Рисунок 1 - структурная схема микроконтроллера AT90LS8535

2.3 Параметры контроллеров семейства AVR

* Использована AVR расширенная RISC архитектура

* Мощный набор из 121 команды, большинство которых выполняется за один машинный цикл

* Емкость внутрисистемно программируемой Flash памяти 4 Кбайт 128, 1000 циклов стирания/записи

* SPI интерфейс внутрисистемного программирования

* Емкость встроенной EEPROM 2 Кбайт или 4 Кбайт, 100000 циклов стирания/записи

* Встроенная RAM емкостью , 256 байт или 512 байт

* 32 8-разрядных регистра общего назначения, набор регистров управления периферией

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

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

* Диапазон напряжений питания от 2,7 В до 6,0 В

* Нагрузочная способность выводов до 20 мА

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

* Производительность до 4 MIPS при частоте 4 МГц

* Встроенная система реального времени с отдельным генератором

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

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

* Программируемый сторожевой таймер со встроенным генератором

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

* 8-канальный 10-разрядный аналого-цифровой преобразователь

* Режимы энергосбережения Idle, Power Save и Power Down

* Программная установка тактовой частоты

* Программная блокировка защиты программных средств

Приборы AT90S8535-8JI являются 8-разрядными CMOS микроконтроллерами с AVR усовершенствованной RISC архитектурой. Выполняя большинство команд за один тактовый цикл, микроконтроллеры AT90S8535-JI обеспечивают производительность 1 MIPS на каждый мегагерц тактовой частоты, что позволяет разработчикам оптимизировать потребление, зависящее в основном от тактовой частоты.

AVR ядро базируется на усовершенствованной RISC архитектуре, с регистровым файлом быстрого доступа, содержащим 32 регистра общего назначения, непосредственно связанных с арифметико-логическим устройством (ALU), и мощной системой команд. За один тактовый цикл из регистрового файла извлекаются два операнда, выполняется команда и результат записывается в регистр назначения. Такая высокоэффективная архитектура обеспечивает производительность почти в десять раз большую, чем стандартные CISC микроконтроллеры.

Приборы изготавливаются по технологии энергонезависимой памяти фирмы Atmel. Встроенная ISP Flash память программ может быть перепрограммирована непосредственно в системе, с использованием последовательного SPI интерфейса, или с помощью обычных программаторов энергонезависимой памяти. Объединив 8-разрядное RISC CPU с внутрисистемно программируемой Flash памятью большого объема, фирма создала семейство мощных микроконтроллеров, обеспечивающих реализацию недорогих и очень удобных решений для большого количества встраиваемых применений. Семейство AT90S8535-8JI поддерживается большим количеством средств разработки программ и систем, включающих: С-компиляторы, макроассемблеры, отладчики/симуляторы программ, внутрисхемные эмуляторы и отладочные устройства.

2.4 Модуль контроллера

В модуле контроллера, расположены основные узлы прибора: микроконтроллер DD2; преобразователь сигналов UART микроконтроллера в стандартные уровни интерфейса RS-232 (микросхема DD1); узел преобразования сопротивления датчика температуры RK1 в напряжение (микросхемы DA1, DA2, транзисторы VT1, VT2); датчик давления (ВР1); вилки интерфейса RS-232 (XP1), программирования микроконтроллера (ХР2).

С выводов 6 (РВ5) и 7 (РВ6) микроконтроллера поступает сигнал на двухцветный светодиод, показывающий состояние батареи резервного питания.

Напряжения, пропорциональные измеряемым величинам, поступают на три вывода микроконтроллера DD2, запрограммированные как входы трех из восьми имеющихся каналов встроенного АЦП. Вывод 40 (PA0/ADC0) -- температура, 39 (PA1/ADC1) -- давление, 38 (PA2/ADC2) -- напряжение батареи. Образцовым для АЦП служит поданное на вывод 32 (AREF) микроконтроллера напряжение +5 В (А), что значительно снижает требования к стабильности последнего. Дело в том, что выходное напряжение датчиков температуры и давления пропорционально не только измеряемым параметрам, но и напряжению питания. Изменение вместе с ним образцового напряжения устраняет эту зависимость в выходном коде АЦП. Хотя отклонения образцового напряжения от номинала вносят дополнительную погрешность в результат измерения напряжения батареи, в данном случае это не так уж важно.

Цепь R7C11 обеспечивает надежную установку микроконтроллера DD2 в исходное состояние при включении питания. Конденсаторы C1-C10, C12- блокировочные, С13 и С14 необходимы для возбуждения кварцевого резонатора ZQ1.

2.5 Программа микроконтроллера

Содержимое hex-файла, получаемого в результате трансляции программы, загружается в память программ микроконтроллера DD2. Работа программы после включения питания начинается с инициализации оборудования: микроконтроллера -- установки режимов работы таймеров, системы прерываний, портов ввода-вывода, UART, а также записи в регистры и ячейки памяти данных исходных значений переменных; индикатора. После этого запускается бесконечный цикл ожидания приема команд по последовательному интерфейсу.

По ежесекундным прерываниям от таймера 1 идет счет времени. По прерываниям от таймера 0 происходит считывание результатов работы АЦП. Период прерываний от таймера 0 -- 0,5 мс. Очередной отсчет АЦП получают при обработке каждого 32-го прерывания от таймера 0. Полученные за 1024 мс 64 отсчета одного из параметров (температуры, давления или напряжения) складывают, затем сумму делят на 64, а полученное усредненное значение сохраняют в ОЗУ для дальнейших расчетов. Следующие 1024 мс АЦП измеряет другой параметр. Таким образом, полный цикл опроса датчиков -- чуть более 3 с. После этого микроконтроллер выполняет процедуры расчета физических значений измеренных величин, преобразует их в ASCII коды символов полученных значений и готовит их к выводу на индикатор.

Выводимое на индикатор число X микроконтроллер вычисляет по формуле X=K(N-Z), причем коэффициенты К и Z при вычислении температуры и давления различны. Их значения «зашиты» в программном коде и переносятся из него в ОЗУ во время инициализации. При необходимости коэффициенты можно «подогнать» под реальные характеристики датчиков с помощью подключенного к прибору компьютера. Новые значения действуют до отключения питания микроконтроллера, сохранение их в энергонезависимой памяти не предусмотрено. Микроконтроллер следит за состоянием батареи, сравнивая результат измерения ее напряжения с двумя заложенными в программе порогами. При напряжении батареи более 3,3 В уровни на выходах РВ5 и РВ6 микроконтроллера таковы, что цвет свечения светодиода HL1 (см. графическую часть расчётно-пояснительной записки) зеленый. Если напряжение батареи находится в интервале 1,25...3,3 В, полярность напряжения, приложенного к светодиоду, и цвет его свечения меняются ежесекундно. С падением напряжения ниже 1,25 В светодиод постоянно красный. Приведенные значения порогов приблизительны, так как зависят, например, от напряжения питания +5 В (А).Предусмотренные в микроконтроллере AT90LS8535 режимы сниженного энергопотребления (Idle, Power Down и Power Save) программой не используются даже при работе от резервной батареи. Ее энергии и без того достаточно для питания отключенных от сети часов в течение нескольких суток. Предусмотрены прием по интерфейсу RS-232 и выполнение шести команд. Компьютер, с СОМ-портом которого прибор соединяют нуль-модемным кабелем, подает команды передачей одного--трех указанных в таблице байтов и принимает ответы на них в режиме: скорость обмена -- 9600 Бод, число битов данных -- 8, число стоповых битов -- 1, контроль четности отключен.

2.6 Разработка печатной платы

Разработка печатной платы подразумевает предварительную разработку принципиальной схемы. При разработке данного устройства были использованы: для создания принципиальной схемы - программа KOMPAS 3D V8, для создания печатной платы - программный продукт Sprint LayOut 4.0 Rus.

Печатная плата выполнена на двухстороннем стеклотекстолите. Изготавливается комбинированным методом. Расстояние между проводниками не менее 0.3 мм. Допускается в узких местах занижение контактных площадок до 0.15 мм. Плата должна соответствовать ГОСТ23752-79.

Чертеж печатной платы расположен в графической части расчётно-пояснительной записки. Шаг координатной сетки 5 мм.

3. Дополнительное описание устройства

На индикаторе прибора можно наблюдать текущие значения времени в формате ЧЧ:ММ; температуры в месте установки выносного датчика, °С; атмосферного давления, мм рт. ст. Предусмотрена трехуровневая ("нормально -- внимание -- разряжена") индикация состояния батареи резервного питания. Температуру в интервале -50...+50 °С прибор измеряет с погрешностью 0,1...0,2 °С. Интервал измерения давления -- 700...800 мм рт. ст при погрешности 1...2 мм рт. ст.

Конструктивно устройство состоит из трех модулей (плат) -- контроллера, индикатора и питания, помещенных в корпус размерами 210x160x80 мм с прозрачным окном для индикатора, и выносного датчика температуры, соединяемого с основным блоком трех-проводным кабелем длиной до 20 м. Датчик атмосферного давления находится внутри корпуса.

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

Терморезистором RK1 -- датчиком температуры -- служит обмотка реле РЭС60 (паспорт РС4.569. 435-00) сопротивлением 18 Ом при 20 °С. Здесь можно применить и другие медные обмотки приблизительно такого же сопротивления, в том числе обмотки реле РЭС49 (паспорт РС4.569.421-00), РЭС79 исполнений ДЛТ4.555.011, ДЛТ4.555.011-05. Сопротивление медного провода обмотки линейно зависит от температуры и достаточно стабильно во времени. Если его величина известна при температуре То (например, при 20 °С), то при температуре Т сопротивление станет равным R(T) = R(T0)[1 + 0,004(T - То)].

На ОУ DA1.1, DA1.2 и полевых транзисторах VT1, VT2 собраны два стабилизатора тока 1 мА. Их идентичность обеспечена подачей образцового напряжения от общего делителя R1R2 и равенством сопротивлений резисторов обратной связи R3 и R4. Ток верхнего по схеме стабилизатора течет через датчик RK1 и два соединительных провода, подключенных к контактам 1 и 3 разъема Х1, ток нижнего -- через образцовое сопротивление (резистор R5) и также два провода, подключенных к контактам 2 и 3. Так как результатом измерения служит разность напряжений на истоках транзисторов VT1 и VT2, равные падения напряжения на проводах и контактах разъема при вычитании взаимно уничтожаются.

Номинал резистора R5 немного меньше сопротивления датчика RK1 при минимальной измеряемой температуре, поэтому ей соответствует почти нулевой выходной сигнал преобразователя. Если использован датчик с заметно отличающимся от 1850 Ом сопротивлением при комнатной температуре, необходимо по приведенной выше формуле вычислить его сопротивление при температуре нижней границы интервала измерения (например, -50 °С) и взять в качестве номинала R5 ближайшее меньшее значение из ряда Е24. По этому ряду выпускают резисторы с допустимым отклонением не более ±5 %, однако применять нужно прецизионный, например, С2-29В, с допуском ±1 % и менее, только такой резистор обеспечит минимальное влияние изменений температуры в месте установки прибора на его показания.

Операцию вычитания выполняет прецизионный дифференциальный усилитель постоянного тока на ОУ DA2.1, DA2.2. Необходимо точное равенство сопротивлений резисторов R8--R11, поэтому их следует подбирать с допусками не более ±0,1...±0,25 %, аналогичные допуски должны иметь и резисторы R3, R4.

Коэффициент усиления дифференциального усилителя устанавливают таким, чтобы верхнему пределу измерения температуры соответствовало максимально возможное для ОУ выходное напряжение -- приблизительно 4,4 В. Необходимое значение коэффициента усиления находят по формуле:

где Ro -- сопротивление датчика при комнатной температуре, кОм; io=1 мА -- номинальный ток через датчик и образцовый резистор; Tмакс. и Tмин. -- соответственно верхняя и нижняя границы интервала измерения, °С. Задавшись равными номиналами резисторов R8--R11 (их можно выбирать любыми от 2 до 10 кОм), вычисляют номинал резистора R6 по формуле. Требования к точности номинала этого резистора не очень высоки, погрешности могут быть скомпенсированы программно. Но как и прочие резисторы измерительного узла, он должен быть термостабильным.

3.1.1 Расчет схемы стабилизатора тока

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

Напряжение инвертирующего входа операционного усилителя Uвх равно выходному напряжению делителя напряжения R1, R2. Оно вычисляется по формуле:

Поскольку по цепи обратной связи операционный усилитель стремится поддержать равенство входных напряжений, получаем:

Расчетами подтвердили правильность работы схемы стабилизатора тока на 1мА.

3.2 Датчик давления

Датчик давления BP1 - MPX4115AP выпускает фирма Motorola специально для электронных барометров и барометрических высотомеров.

В интервале 0,15…1,15 кПа(112,5…862,5 мм.рт.ст.) зависимость его выходного напряжения от давления линейная с нормированным наклоном. Однако смещение нуля характеристик разных экземпляров датчиков доходит до 20 мм.рт.ст. Компенсация смещения в данном приборе возложена на программу микроконтроллера. Первый вывод датчика легко определить по полукруглому вырезу на нем.

Если в изготовленном приборе показания нестабильны, чаще всего виноваты наведенные на выходную цепь датчика BP1 помехи. Чтобы избавиться от них, достаточно установить между выводами 1 и 2 датчика не показанный на схеме конденсатор емкостью не менее 0,047 мкФ.

3.3 Модуль питания

Приведенная схема модуля, вырабатывает три напряжения: + 5 В (А) и -5 В -- для питания аналоговых узлов прибора; +5 В (Ц) -- для его цифровых узлов. Напряжения с соответствующих обмоток трансформатора Т1 после выпрямления диодными мостами VD1 -- VD3 поступают на фильтрующие конденсаторы С15--С17 и интегральные стабилизаторы DA3--DA5. В модуле имеются два вывода общего провода: Общ. (А) -- "аналоговый"; Общ. (Ц) -- "цифровой". Они соединены между собой только в одной точке на плате модуля питания, а во всех остальных модулях электрически не связаны.

Это необходимо для снижения уровня помех, создаваемых цифровыми узлами модуля контроллера аналоговым. Трансформатор Т1 -- ТП112-19 с кольцевым магнитопроводом, на который в дополнение к имеющимся обмоткам I--III намотана еще одна: IV (80 витков провода ПЭВ-2 0,2 мм). Можно применить любой другой трансформатор габаритной мощностью не менее 15 Вт с нужным числом вторичных обмоток (II--IV -- по 7...9 В/0,05 А).

Напряжение резервной гальванической батареи GB1 через переключатель SA1 и диод VD5 поступает на выход +5 В (Ц), если отсутствует соответствующее напряжение на выходе стабилизатора DA5. Этим поддерживается работа контроллера при отключении прибора от сети, что необходимо не только для защиты от сбоев при аварии сети, но и, например, для переноски прибора из одного помещения в другое.

Батарея GB1 составлена из трех гальванических элементов типоразмера АА, соединенных последовательно. Большую часть времени потребляемый от батареи ток пренебрежимо мал, поэтому лучше использовать элементы с щелочным (alkaline) электролитом, для которых характерны минимальная саморазрядка и максимальный допустимый срок хранения. Наиболее надежны «фирменные» элементы известных производителей. Они могут прослужить без замены несколько лет, а дешевые подделки иногда оказываются неработоспособными уже через несколько недель. Переключателем SA1 соединяют с общим проводом цепь контроля напряжения батареи GB1 при отсутствии последней. Это устраняет ложные показания индикатора.

Печатная плата модуля питания -- односторонняя с несколькими проволочными перемычками. Размеры платы 120x100 мм. Интегральные стабилизаторы DA3 и DA5 можно заменить любыми отечественными или импортными на положительное напряжение 5 В (КР1158ЕН5, 78L05, LM2931AZ-5.0), DA2 -- на такое же отрицательное (79L05, LM2990T-5.0). Оксидные конденсаторы -- К50-35 или их импортные аналоги. Диоды VD4, VD5 -- любые маломощные. При возможности здесь устанавливаются диоды Шоттки или германиевые. Правда, довольно большой обратный ток последних может негативно сказаться на сроке службы батареи GB1.

3.4 Модуль индикации

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

Для данной замены был выбран символьный жидкокристаллический индикатор PC 1602-L на базе контроллера HD44780 (2 строки по 16 символов).

Электрические характеристики индикатора:

1) напряжение питания - 5В

2) питающий ток - 2-5мА

3) максимальная скорость шины - 1ГГц

Технические характеристики индикатора:

Модель индикатора

РС1602-L

Габаритные размеры, мм

122.0 x 44.0

Размер видимой области, мм

99.0 х 24.0

Размер точки, мм

0.92 х 1.10

Размер символа, мм

4.84 х 9.66

Рассматриваемый ЖКИ при помощи стандартного 14-контактного разъема обменивается информацией с управляющим микроконтроллером (в нашем случае с AVR). AVR-микроконтроллер посылает в ЖКИ команды, управляющие режимами его работы, и ASCII-коды выводимых символов. В свою очередь, ЖКИ может посылать AVR-микроконтроллеру по его запросу информацию о своем состоянии и данные из своих внутренних блоков памяти.

Контроллер ЖК-дисплея обеспечивает интерфейс подобный интерфейсу процессора, который обеспечивает доступ к трем основным блокам памяти:

1) ОЗУ данных дисплея (DDRAM)

2) ПЗУ знакогенератора (CGROM)

3) ОЗУ знакогенератора (CGRAM)

CGROM содержит предопределенный набор символов для ЖК-дисплея. Коды букв и цифр сообщаются в их ASCII кодах.

Память DDRAM хранит символы, отображаемые на ЖК-дисплее. Емкость памяти DDRAM составляет 80 байт. Она приспособлена для отображения до 4 строк по 20 символов в каждом.

CGRAM - это область памяти, зарезервированная для хранения специальных знаков, определенных пользователем. Она может хранить до 8 знаков в формате 5х8 или 4 знака в формате 5х10.

Доступ к памяти CGRAM и DDRAM осуществляется посредством двух промежуточных регистров, которые служат для обмена данных между основным процессором и контроллером ЖК-дисплея. Это регистр команд (IR), и регистр данных (DR).

Регистр команд (IR) служит для приема команд, подлежащих обработке в контроллере ЖК-дисплея.

Регистр данных (DR) служит буфером между ОЗУ данных дисплея (DDRAM), ОЗУ знакогенератора (CGRAM) и внешней шиной данных.

Блок-схема модуля контроллера ЖК-дисплея:

Интерфейс с ЖК-дисплеем типа HD44780 может быть реализован в 8-битном параллельном формате либо в 4-битном двухпосылочном формате на линиях D4-D7 шины данных. Этот способ позволяет оставить 4 канала ввода-вывода и упрощает разводку печатной платы. Недостатком 4-битного интерфейса является требование передачи данных в виде двух 4-битных посылок (старшая часть следует за младшей). Результатом является увеличенное время коммуникации.

Назначение выводов ЖКИ:

Название вывода

Описание

1

VSS

(-) Питание. 0 V.

2

VDD

(+) Питание.+5V.

3

V0

Напряжение смещения, управляющее контрастностью

4

RS

Вход. Высокий уровень - Данные; Низкий - Команды

5

R/W

Вход. Высокий-Чтение, Низкий-Запись

6

E

Вход. Строб, сопровождающий сигналы на шине "команды/данные"

7

DB0

Шина "команды/данные"

8

DB1

9

DB2

10

DB3

11

DB4

12

DB5

13

DB6

14

DB7

Выводы VSS, VDD, V0 предназначены для подачи питающего напряжения и напряжения смещения, которое управляет контрастностью дисплея.

DB0 - DB7 используются для организации мультиплексированной шины "команды / данные". На выводы RS, R/W, E AVR-микроконтроллер выставляет управляющие сигналы.

При помощи сигнала на линии RS микропроцессор сообщает контроллеру индикатора о том, что именно передается по шине: команда или данные. Cигнал на линии Е является стробом, сопровождающим сигналы на шине "команды / данные". Запись информации в ЖКИ происходит по спаду этого сигнала. Потенциал на управляющем выводе R/W задает направление передачи данных: запись в RAM индикатора (R/W=0) или считывание оттуда (R/W=1).

Контроллер ЖКИ после приема байта команды или байта данных требует некоторого времени для обработки полученной информации, в течение которого AVR-микроконтроллер не должен выполнять новых передач.

Временная диаграмма операции записи команд/данных имеет вид:

Для того чтобы определить, когда контроллер ЖКИ закончит свои внутренние операции, AVR может опрашивать BUSY-флаг индикатора (команда "чтение busy-флага"), который сбросится только тогда, когда контроллер ЖКИ освободится. Второй, более простой способ заключается в том, что управляющий микроконтроллер, зная, сколько времени требуется ЖКИ на обработку той или иной команды, просто выполняет временную задержку после каждой передачи информации.

Если во время цикла записи AVR-микроконтроллер передает в контроллер индикатора код команды, то этот код записывается в регистр команд контроллера ЖКИ, и команда сразу же начинает выполняться. Если AVR-микроконтроллер передает в контроллер ЖКИ данные, которые представляют собой ASCII-коды отображаемых символов, то они записываются в буфер данных (DDRAM), который обычно содержит 80 ячеек. При записи или считывании буфера данных обращение осуществляется к ячейке, на которую в данный момент указывает курсор.

Система команд контроллера НD4478:

Код

Описание команды

Время

исполнения

команды

(fosc=

250кГц)

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

0

0

0

0

0

0

0

0

0

1

Очистить дисплей и установить курсор в нулевую позицию (адрес 0)

82мкс до 1.64мс

0

0

0

0

0

0

0

0

1

*

Установить курсор в нулевую позицию (адрес 0). Установить дисплей относительно буфера DDRAM в начальную позицию. Содержимое DDRAM при этом не меняется.

40мкс до 1.6мс

0

0

0

0

0

0

0

1

I/D

S

Установить направление сдвига курсора вправо (I/D=1) или влево (I/D=0) при записи/чтении очередного кода в DDRAM. Разрешить (S=1) сдвиг дисплея вместе со сдвигом курсора.

40мкс

0

0

0

0

0

0

1

D

C

B

Включить(D=1)/выключить(D=0) дисплей. Зажечь(C=1)/погасить(C=0) курсор. Изображение курсора сделать мигающим (B=1).

40мкс

0

0

0

0

0

1

S/C

R/L

*

*

Переместить курсор (S/C=0) или сдвинуть дисплей (S/C=1) вправо (R/L=1) или влево(R/L=0).

40мкс

0

0

0

0

1

DL

N

F

*

*

Установить разрядность шины данных 4 бита (DL=0) или 8 бит (DL=1), количество строк дисплея - одна (N=0) или две (N=1), шрифт - 5х7 точек (F=0) или 5х10 точек (F=1).

40мкс

0

0

0

1

ACG

Установка адреса CGRAM. После этой команды данные будут записываться/считываться в/из CGRAM.

40мкс

0

0

1

ADD

Установка адреса DDRAM. После этой команды данные будут записываться/считываться в/из DDRAM.

40мкс

0

1

B

F

AC

Чтение состояния busy-флага (BF) и счетчика адреса.

1мкс

1

0

Данные

Запись данных в DDRAM или CGRAM.

40мкс

1

1

Данные

Чтение данных из DDRAM или CGRAM.

40мкс

Условные обозначения битов:

В нашем случае интерфейс микроконтроллера AVR и ЖКИ реализован в 8-битном параллельном формате. Выводы шины данных контроллера (DB0-DB7) ЖКИ подсоеденены к порту С микроконроллера (PC0-PC7).

Подача питающего напряжения и напряжения смещения, которое управляет контрастностью дисплея осуществляется посредством схемы включения с использованием потенциометра R13.

Выбор данного типа индикатора обусловлен следущими положениями:

1) Нагрузочная способность выводов микроконтроллера AT90LS8535 составляет до 20 мА, питающий ток индикатора - 2-5мА;

2) Диапазон напряжений питания микроконтроллера от 2,7 В до 6,0 В, напряжение питания ЖКИ - 5В.

3.4.1 Программирование вывода информации на ЖКИ

Для облегчения работы с ЖКИ, программирования вывода информации предназначен набор подпрограмм, используемых в качестве процедур основной программы:

1) Main

2) Initlcd

3) Icom (вывод байта-команды в контролер ЖКИ)

4) tim0_lcd

Функцией программы "main" является задание режима работы ЖКИ в инициализирующей части программы.

В основном цикле головной программы задачей процессора является получение очередного отсчета и сохранение этого отсчета в промежуточном буфере ЖКИ "ind_buf", который организуется в RAM. Сохранение отсчета в RAM происходит приблизительно в 100 раз быстрее, чем его вывод на индикатор, так как при этом головной программе не нужно ждать после записи каждого байта.

Подпрограмма инициализации контроллера ЖКИ "initlcd", посылая в индикатор последовательность команд при помощи подпрограммы "icom", задает режим работы ЖКИ.

Подпрограмма "tim0_lcd", которую можно считать основной частью драйвера ЖКИ, вызывается по прерыванию от таймера 0 с временным интервалом, достаточным для обработки информации внутри контроллера ЖКИ.

Задачей подпрограммы "tim0_lcd" является вывод в ЖКИ очередного байта данных из буфера "ind_buf".

Таким образом, головная программа "main" быстро помещает результат в буфер, а подпрограмма обработки прерывания "tim0_lcd" по мере готовности ЖКИ байт за байтом выводит результат из буфера на индикатор.

При использовании прерываний и организации взаимодействия программ через буфер данных, в системе возникают несколько (в нашем случае два) параллельных асинхронных процесса: головная программа работает в своем ритме, зависящем от конкретной задачи, а периодичность подпрограммы обслуживания прерывания определяется быстродействием ЖКИ.

Из-за асинхронности программ возможна ситуация, когда обе программы одновременно начнут обращаться к буферу "ind_buf". Например, после того, как на индикатор выведена только часть результата, головная программа может обновить данные в буфере. И тогда последующие байты, выводимые на индикатор, будут относиться уже к новому отсчету, что, конечно, будет являться недопустимой ошибкой. Для того чтобы таких ситуаций не возникало, необходимо решить задачу взаимоисключения доступа программ к промежуточному буферу. Для решения этой задачи используют специальные биты управления, которые называют семафорами или флагами. В рассматриваемой программе в качестве такого флага выбран бит PB.0 и принято, что если PB.0=0, то открыт доступ к буферу для головной программы; если PB.0=1, то открыт доступ к буферу для подпрограммы обслуживания прерывания. В самый первый раз флаг устанавливается при инициализации, разрешая доступ к буферу головной программе, а затем каждая программа, завершив работу с буфером, переключает флаг в противоположное состояние.

Заключение

В данной курсовой работе было изучено устройство - Часы с термометром и барометром, выполненное на основе микроконтроллера AT90LS8535.

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

Имеет достоинства такие как: простота использования, удобный вид представления результатов измерений.

Недостаток: необходимость сопряжения с компьютером.

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

При выполнении данной курсовой работы были выполнены основные задачи, поставленные перед разработчиком:

1.Систематизация и расширения объема теоретических знаний по дисциплине "Электроника".

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

3.Получение навыков работы с литературными справочниками и патентными источниками информации.

4.Изучение и использование нормативной технической информации.

5.Получение навыков использования стандартов при оформлении работы.

Возможные варианты модернизации данного устройства:

1) Установление кнопок на устройстве, для ручного ввода часов, температуры и давления в случаях неправильности данных

2) Увеличения диапазона давления до 10 доли (имеет смысл при смене датчика)

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

4) Возможность замены датчика давления, который сейчас установлен на датчик MPXY8020A . Он имеет возможность кроме измерения давления, измерять температуру, т.е. можно упростить схему заменив 2-а датчика на один.

5) Теоретически возможный вариант: добавить в данное устройство датчик влажности радиоактивности. И получится устройство с более широкими возможностями, показывающие основные параметры необходимые для человека.

6) Повысить точность измерений, уменьшить погрешность (при условии замены датчика)

7) Создание будильника

Приложение 1

Текст программы

; кварц 4096 КГц

.include "8535def.inc";включаемый файл

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

.equ segG = 6 ;PC6,28

.equ segF = 5 ;PC5,27

.equ segE = 4 ;PC4,26

.equ segD = 3 ;PC3,25

.equ segC = 2 ;PC2,24

.equ segB =1 ;PC1,23

.equ segA = 0 ;PC0,22

.equ RazrDH = 6 ;PA6,34 дес час

.equ RazrEH = 5 ;PA5,35 ед час

.equ RazrDM = 4 ;PA4,36 дес мин

.equ RazrEM = 3 ;PA3,37 ед мин

.equ RazrTdH = 2 ;PB2,3

.equ RazrTdM = 1 ;PB1,2

.equ RazrTdL = 0 ;PB0,1

.equ drv0= 3 ;PB3,4 - мл. управл КП1

.equ drv1= 4 ;PB4,5 - ст. управл КП1

.equ RazrPdH = 4 ;PD4,18

.equ RazrPdM = 3 ;PD3,17

.equ RazrPdL = 2 ;PD2,16

.equ kod1= 6 ;PD6,20 - первый бит кода будилн с КП1

.equ kod2= 7 ;PD7,21 - второй бит кода будилн с КП1

.equconst_W = 0xA0;запись ЕЕ

.equconst_R = 0xA1;читать ЕЕ

.equconst_E = 0xA2;проверка ЕЕ

.equconst_RAM = 0xA3;читать RAM

.equConst_TZ = 0xA4;A4 читать знак T

.equConst_H = 0xA5;установка часов

.equConst_S0 = 0xA6;сброс сек

.equConst_59 =0xA7;установка сек в 59

;адреса SRAM старший байт адреса SRAM=0x01

.equTram=0x0 ;0x0,0x1 - старший и младший байты температуры

.equPram=0x2 ;0x2,0x3 - старший и младший байты давления

.equBram=0x4 ;0x4,0x5 - старший и младший байты батареи

.equTres=0x6 ;0x6,0x7 - старший и младший байты температуры ;результат

.equPres=0x8 ;0x8,0x9 - старший и младший байты давления

;результат

.equBres=0x0A;0xA,0x0B - старший и младший байты батареи ;результат

.equHh=0x0C ;часы hex

.equMh=0x0D ;мин hex

.equTdH=0x0E ;темпр старший дес

.equTdM=0x0F ;темпр средний дес

.equTdL=0x10 ;темпр младший дес

.equPdH=0x11 ;prs старший дес

.equPdM=0x12 ;prs средний дес

.equPdL=0x13 ;prs младший дес

.equDdH=0x14 ;часы старш дес

.equDeH=0x15 ;часы младш дес

.equDdM=0x16 ;мин старш дес

.equDeM=0x17 ;мин младш дес

.equtZH=0x20;ст. разряд коэффициента Z температуры

.equtZL=0x21;мл. разряд коэффициента Z температуры

.equtKH=0x22;ст. разряд коэффициента К температуры

.equtKL=0x23;мл. разряд коэффициента К температуры

.equpZH=0x24;ст. разряд коэффициента Z давления

.equpZL=0x25;мл. разряд коэффициента Z давления

.equpKH=0x26;ст. разряд коэффициента К давления

.equpKL=0x27;мл. разряд коэффициента К давления

.equdQH=0x1A;cтарший разряд делителя частоты кварца

.equdQL=0x1B;мл. разряд делителя частоты кварца

.equAtBCD0=5;address of ResL для процедуры преобразования Bin-Dec

.equAtBCD2=6;address of ResH

;переменные

.defAregH= r01 ;результат измерения hex, старший байт

.defAregL= r02 ;результат измерения hex, младший байт

.defKoeffH= r03 ;коэффициент, старший байт

.defKoeffL= r04 ;коэффициент, младший байт

.defResL= r05 ;результат измерения упакованный дес.,младший байт

.defResH= r06 ;результат измерения упакованный дес.,старший байт

.deftemp= r16 ;рабочий регистр

.deftemp1= r17 ;вспомогательная переменная

.deftemp2= r18 ;вспомогательная переменная

.defcount= r19 ;счетчик преобразований - до 64

.defcountCyk= r20 ;счетчик циклов АЦП - до 32, 32х64 = 2000 гц раз ;в сек

.defFlag= r21 ;регистр флагов биты: изм 0 - темпр, 1 - давл, ,2- ;бат, 3-batLow

; 4-мигбат

; 5 -работа от батарей (зарезервирован)

.defcRazr= r22 ;счетчик мультиплексирования разр до 10

.def cSek= r23 ;счетчик sek

.def cMin= r24 ;счетчик min

.def cHour= r25 ;счетчик hours

.equ ind_buf=$60 ;задание символического имени адресу буфера ЖКИ

.def enter_counter=r16 ;счетчик входа в подпрограмму прерывания

.include "8535def.inc"

.cseg

.org 0

rjmp main

.org OVF0addr

rjmp tim0_lcd ;установка вектора прерывания по переполнению таймера 0

.org 20 ;индикатора

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

;прерывания

rjmp RESET ;Reset Handle ;относительный безусловный переход

;на метку RESET

reti;INT_0

;reti - возврат из подпрограммы обработки прерывания, выполняет ;возврат в то место, в котором выполнение программы было прервано в результате ;возникновения прерывания

reti;INT_1 External Interrupt1 Vector Address

reti;Timer_2 compare

reti;Timer_2 ovflow

reti;Timer_1 Capture

rjmpTIM1 ;Timer_1 compare A

reti;Timer_1 compare B

reti;Timer_1 ovflow

rjmpTIM0;Timer_0 ovflow

reti;SPI serial tramsfer complete

reti;UART Rx complete

reti;UART Data Register Empty

reti;UART Tx Transmit Complete

rjmp readADC ;ADC conversion complete

reti;EEPROM ready

reti;Analog Comparator Interrupt Vector Address

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

;Инициализация индикатора

main:

ldi r31,$ff ;настроить порт В на вывод

out ddrb,r31

out ddrd,r31

;

ldi r25,RAMEND ;установка стека

out spl,r25

;

rcall initlcd ;инициализация ЖКИ

;

ldi r25,1 ;инициализация таймера 0

out TCCR0,r25 ;установка частоты счетных импульсов fсч=fclk

ldi r25,2 ;разрешение прерывания по переполнению Т0

out TIMSK,r25

;

sei ;установка глобального флага разрешения прерываний

initlcd:

ldi r25,$28

rcall icom_2313

rcall del

ldi r25,$0c

rcall icom_2313

rcall del

ldi r25,$28

rcall icom_2313

rcall del

ldi r25,$1

rcall icom_2313

rcall delay

;

;Основной цикл

Loop:

sbic portb,0 ;если бит PB.0 сброшен, то:

rjmp Loop

;

ldi r30,low(ind_buf) ;записать новый результат в буфер ЖКИ

ldi r31,high(ind_buf)

ldi r25,'0'

st z+,r25

st z+,r25

sbis portb,1

rjmp pcc

ldi r25,'1'

cbi portb,1

rjmp pc1

pcc: sbi portb,1

pc1: st z+,r25

;

sbi portb,0 ;установить бит PB.0

rjmp Loop ;все повторить

;

;Инициализация переменных взаимосвязи

;подпрограммы прерывания и основной программы

cbi portb,0 ;Буфер ЖКИ открыт для доступа основной программе

clr enter_counter ;Cброс счетчика входа в подпрограмму прерывания

ret

;

tim0_lcd:

sbis portb,0 ;Если бит PB.0=1, то доступ к буферу ЖКИ разрешен

rjmp indend

;

push r25

push r30

push r31

cpi enter_counter,0 ;если это нулевой вход в пп после открытия доступа

brne tim1 ;к буферу ЖКИ, то:

ldi r25,$80+72 ;установить курсор индикатора на 9-ю позицию 2-й строки

rcall icom_2313

inc enter_counter ;увеличить на 1 счетчик входов

rjmp end0 ;выход из прерывания

;

tim1: cpi enter_counter,1 ;если это первый вход в пп после открытия доступа

brne tim2 ;к буферу ЖКИ, то:

ldi r30,low(ind_buf)

ldi r31,high(ind_buf)

ld r25,z ;вывести на ЖКИ первый символ из буфера

rcall idat_2313

inc enter_counter ;увеличить на 1 счетчик входов

rjmp end0 ;выход из прерывания

tim2: cpi enter_counter,2 ;если это второй вход в пп после открытия доступа

brne tim3 ;к буферу ЖКИ, то:

ldi r30,low(ind_buf+1)

ldi r31,high(ind_buf+1)

ld r25,z ;вывести на ЖКИ второй символ из буфера

rcall inddat

inc enter_counter ;увеличить на 1 счетчик входов

rjmp end0 ;выход из прерывания

tim3: cpi enter_counter, 3 ;если это третий вход в пп после открытия доступа

brne tim4 ;к буферу ЖКИ, то:

ldi r30,low(ind_buf+2)

ldi r31,high(ind_buf+2)

ld r25,z ;вывести на ЖКИ третий символ из буфера

rcall inddat

inc enter_counter ;увеличить на 1 счетчик входов

rjmp end0 ;выход из прерывания

;

tim4: cbi portb,0

clr enter_counter

;

end0: pop r31

pop r30

pop r25

indend:

reti

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

out_com: ;посылка байта из temp с ожид. готовности

sbisUSR,UDRE;ждем готовности буфера передатчика

;sbis A,b - проверяет состояние разряда b регистра в/в А, если разряд установлен ;команда следующая за sbis пропускается.

rjmpout_com

outUDR,temp;запись temp в порт UDR

ret

;ret - возврат из подпрограммы, выполняет возврат в то место откуда подпрограмма ;была вызвана.

in_com: ;прием байта в temp с ожид. готовности

sbisUSR,RXC ;ждем готовности буфера приемника

rjmpin_com

intemp,UDR;чтение из порта UDR в temp

ret

Mp16: ;умножение двух 16-разрядных величин

clrtemp2;clear 2 highest bytes of result

clrtemp1

;clr Rd - очистка регистра общего назначения, сбрасывает все разряды РОН путем ;выполнения операции «исключающее ИЛИ» регистра с самим собой.

ldicount,16;init loop counter

;ldi RD,k - загрузка константы в РОН, загружает 8-разрядное число в РОН

m16u_1:

lsrKoeffH

;lsr Rd - логический сдвиг вправо, разряд b7 сбрасывается в «0», а разряд b0 ;загружается в флаг С регистра SREG.

rorKoeffL

;ror RD - сдвиг вправо через перенос.

brccnoad8;if bit 0 of multiplier set

;brcc k -переход, если не было переноса, провряет флаг переноса (С), и выполняет ;переход, если этот разряд сброшен.

addtemp1,AregL;add multiplicand Low to byte 2 of res

adctemp2,AregH;add multiplicand high to byte 3 of res

;adc Rd,Rr - сложение двух РОН с переносом, Rd=Rd+Rr+C

noad8:

rortemp2;shift right result byte 3

rortemp1;rotate right result byte 2

rorResH;rotate result byte 1 and multiplier High

rorResL;rotate result byte 0 and multiplier Low

deccount;decrement loop counter

brnem16u_1;if not done, loop more

;brne k - условный относительный переход по условию «не равно», проверяет флаг нуля (Z), и выполняет переход, если этот разряд сброшен.

ret

TIM1: ;счет времени

cpicSek,60

;cpi Rd,k - сравненеие содержимого РОН с константой, путем вычитания константы ;из содержимого регистра.

breqmcontinue ;если сек не=60, то считаем дальше

;breq k - условный относительный переход по условию «равно», проверяет флаг нуля ;(Z) и выполняет переход, если этот разряд утановлен.

inccSek

reti

mcontinue: ;если сек=60 то их обнуляем и увеличиваем минуты

clrcSek

inccMin

cpicMin,60

brnemm1

clrcMin ;если мин=60, то их обнуляем

mm1:

ldi r28,Mh ;минуты в память - hex

stY,cMin

;st X,Rr - косвенная запись в память данных содержимого Rr.

mov temp,cMin

rcallbin2bcd8 ;преобразование hex-dec

ldi r28,DdM ;минуты в память - dec

stY+,temp1

;st X+,Rr - косвенная запись в память данных с постинкрементом, Х=Х+1.

stY,temp

cpicMin,0 ;минуты=0 - увеличиваем часы

brnemmcontinue

inccHour

cpicHour,24

brnemm2

clrcHour ;если часы=24 - обнуляем

mm2:

ldi r28,Hh ;часы в память - hex

stY,cHour

mov temp,cHour

rcallbin2bcd8 ;преобразование hex-dec

;rcall k - относительный вызов подпрограммы.

ldi r28,DdH ;часы в память - dec

stY+,temp1

stY,temp

mmcontinue:

reti ;TIM1

rADC:inccountCyk ;обработка АЦП

sbrscountCyk,5 ;если бит 5 в countCyk равен 1, то прошло 32 такта

;таймера 0.

;sbrs Rr,b - пропустить команду, если разряд b РОН установлен, команда следующая за sbrs пропускается.

;будем читать АЦП (см. readADC)

reti

clrcountCyk

inccount

cpicount,65 ;если прошло 64 чтения, то сразу на обработку

breq endADC

sbrc Flag,0 ;если бит 0 флага - читаем температуру

;sbrc Rr,b - пропустить следующую команду, если разряд b РОН сброшен.

lditemp,0

sbrc Flag,1 ;если бит 1 флага - читаем давление

lditemp,1

sbrc Flag,2 ;если бит 2 флага - читаем батарею

lditemp,2

outADMUX, temp ;установили АЦП канал

sbiADCSR,ADSC ;запуск нов. преобраз - на всякий

;sbi A,b - устанавливает разряд b регистра в/в, расположенного по адресу А ;пространства в/в.

reti

endADC:

;сначала мигаем

sbrsFlag,3 ;если флаг стоит будем мигать

rjmpcalcA

sbrsFlag,4

rjmpset4

cbrFlag,0b00010000

cbiPortB,5

;cbi A,b - сбрасывает разряд b регистра в/в.

sbi PortC,7 ;будем гореть зеленым

rjmpcalcA

set4:

sbrFlag,0b00010000

cbiPortC,7

sbiPortB,5 ;горим красным

calcA:;расчет по 64 значениям

clrcount

sbrc Flag,0

ldi r28,Tram ;установка адреса - T

sbrc Flag,1

ldi r28,Pram ;установка адреса - P

sbrc Flag,2

ldi r28,Bram ;установка адреса - Bat

ldAregH,Y+ ;загрузка суммы из памяти

ldAregL,Y

div64L: ;деление на 64

lsrAregH ;сдвинули старший

rorAregL;сдвинули младший

inccount

cpi count,6

brnediv64L ;сдвинули-поделили на 64

subir28,1

;subi Rd,k - вычитание константы из регистра.

clr temp

stY+,temp

stY,temp ;очистили память для следующего цикла

bat:

sbrs Flag,2 ;расчет батареи

rjmptempr

cbrFlag,0b00001000 ;гасим мигалку

;cbr Rd,k - сброс разрядов РОН в соответствии с маской, задаваемой константой к.

movtemp,AregH

cpitemp,0

brneContC ;старший 0 - если меньше 1,25 В

cbiPortC,7

sbiPortB,5 ;бат в 0 горим красным

rjmpcontPT

contC:

mov temp,AregL

cpitemp,0xAA ;3,3 В

lditemp,0x02

cpcAregH,temp

;cpc Rd,Rr - сравнение содержимого двух РОН путем вычитания регистра Rr и значения флага переноса (С) из регистра Rd.

brsh contG

;brsh k - условный относительный переход по условию «выше или равно», проверяет ;флаг переноса (С), и выполняет переход, если этот разряд сброшен.

sbrFlag,0b00001000 ;напряжение упало - мигать будем

rjmpcontPT

contG:

cbiPortB,5

sbi PortC,7 ;если норма, будем гореть зеленым

rjmpcontPT

tempr:

sbrs Flag,0 ;расчет температуры

rjmpprs

ldi r28,tZH ;установка адреса

ldtemp,Y+

movKoeffH,temp

ldtemp,Y

movKoeffL,temp ;получили коэфф Z темпер

;вычисление знака:

cpAregL,KoeffL

;cp Rd,Rr - сравнение содержимого РОН путем вычитания, Rd-Rr, содержимое ;регистров не изменяется.

cpcAregH,KoeffH

brsh b0

subKoeffL,AregL

sbcKoeffH,AregH

movAregL,KoeffL

movAregH,KoeffH

sbiPortB,6 ; знак -

rjmpm0

b0: ;если больше

subAregL,KoeffL

sbcAregH,KoeffH

cbiPortB,6 ;знак +

m0: ;умножение на коэфф К

ldi r28,tKH ;установка адреса

ldtemp,Y+

movKoeffH,temp

ldtemp,Y

movKoeffL,temp ;получили K темпер

rcall Mp16 ;умножили

;деление на 1024

mov AregL,ResH

mov AregH,temp1 ;на 256

lsrAregH ;сдвинули старший

rorAregL ;сдвинули младший

lsrAregH ;сдвинули старший

rorAregL ;сдвинули младший; еще на 4

rjmpcontPT

prs:

sbrs Flag,1 ;расчет давления

rjmpcontPT

ldi r28,pZH ;установка адреса

ldtemp,Y+

movKoeffH,temp

ldtemp,Y

movKoeffL,temp ;получили коэфф Z давления

adcAregL,KoeffL

addAregH,KoeffH ;прибавили к величине

ldi r28,pKH ;установка Y

ldtemp,Y+

movKoeffH,temp

ldtemp,Y

movKoeffL,temp ;получили коэфф. K давления

rcall Mp16 ;умножили

;деление на 1024

mov AregL,ResH

mov AregH,temp1 ;на 256

lsrAregH ;сдвинули старший

rorAregL ;сдвинули младший

lsrAregH ;сдвинули старший

rorAregL ;сдвинули младший; еще на 4

contPT:

adiwr28,5;запоминаем в памяти hex результат

;adiw Rd,k - сложение регистровой пары с константой, Rd+1:Rd= Rd+1:Rd+1

stY+,AregH

stY,AregL

sbrc Flag,0

ldi r28,TdH ;установка адреса - T

sbrc Flag,1

ldi r28,PdH ;установка адреса - P

sbrc Flag,2

rjmpeADC ;для батареи и так установлено, если флаг=2

rcall bin2BCD16 ;преобразование в двоично-десятичный

stY+,ResH ;запоминаем в памяти старший BCD

movtemp,ResL ;младший распаковываем

swap temp

;swap Rd - перестановка тетрад РОН

anditemp,0b00001111

stY+,temp

movtemp,ResL

anditemp,0b00001111

stY,temp ;и тоже сохраняем в памяти

eADC:

;установка флагов и переменных для следующего цикла

clrcount

sbrc Flag,0

rjmp_F0

sbrc Flag,1

rjmp_F1

cbr Flag,0x7

sbr Flag,0x1

reti

_F0:

cbr Flag,0x7

sbr Flag,0x2

reti

_F1:

cbr Flag,0x7

sbr Flag,0x4

reti; TIME0

readADC: ;чтение АЦП по прерыванию

sbrc Flag,0

ldi r28,Tram ;установка адреса - T

sbrc Flag,1

ldi r28,Pram ;установка адреса - P

sbrc Flag,2

ldi r28,Bram ;установка адреса - Bat

ldAregH,Y+

ldAregL,Y

in temp1,ADCL;получаем младший

in temp,ADCH ;старший

addAregL,temp1 ;суммируем

adcAregH,temp

dec r28

stY+,AregH ;запоминаем сумму

stY,AregL ;в памяти

reti ;ADC

bin2BCD16: ;преобразование 16-разрядного hex в упакованный BCD

;input: hex value low=AregL hex value high = AregH

;output: BCD value digits 1 and 0 ResL

;BCD value digits 2 and 3(=0) ResH

lditemp1,16;Init loop counter

clrResH

clrResL

clrZH;clear ZH (not needed for AT90Sxx0x)

bBCDx_1:lslAregL;shift input value

rolAregH;through all bytes

;rol Rd - сдвиг влево через перенос, в b0 заносится С, в С - b7.

rolResL

rolResH

dectemp1;decrement loop counter

brnebBCDx_2;if counter not zero

ret;return

bBCDx_2:ldir30,AtBCD2+1;Z points to result MSB + 1

bBCDx_3:

ldtemp,-Z;get (Z) with pre-decrement

subitemp,-$03;add 0x03

sbrctemp,3;if bit 3 not clear

stZ,temp; store back

ldtemp,Z;get (Z)

subitemp,-$30;add 0x30

sbrctemp,7;if bit 7 not clear

stZ,temp;store back

cpiZL,AtBCD0;done all three?

brnebBCDx_3;loop again if not

rjmpbBCDx_1

bin2bcd8: ;преобразование 8-разрядного hex в неупакованный ;BCD

;вход hex= temp, выход BCD temp1-старш; temp - младш

; эта процедура работает только для исходного меньше 100

clrtemp1;clear result MSD

bBCD8_1:

subitemp,10;input = input - 10

brcsbBCD8_2;abort if carry set

inctemp1;inc MSD

rjmpbBCD8_1;loop again

bBCD8_2:

subitemp,-10;compensate extra subtraction

ret

RESET: ;точка запуска программы после вкл

cli ;запрещаем прерывания

ldi temp,low(RAMEND) ;загрузка указателя стека

outSPL,temp

ldi temp,high(RAMEND) ;загрузка указателя стека

outSPH,temp

lditemp,1<<ACD

outACSR,temp ;выкл. аналог. компаратор на всякий

;установка UART

lditemp,26 ;9600

outUBRR,temp;скор. передачи

ldi temp,(1<<RXEN|1<<TXEN|1<<RXB8|1<<TXB8)

outUCR,temp ;разреш. приема/передачи 8бит

;установка портов вход-выход

lditemp,0b01111000 ;разр часов

outDDRA,temp

ldi temp,0b00111100 ;разр давл

outDDRD,temp

lditemp,0xFF ;PortPB6- выход для мигалки batt - зеленый, ост- ;сегменты


Подобные документы

  • Создание программного модуля, выполненного на языке программирования VBA (Visual Basic for Applications) и позволяющего во введенном массиве символов удалить все повторные вхождения этих символов. Разработка пользовательского интерфейса. Код программы.

    курсовая работа [317,4 K], добавлен 11.10.2012

  • Проектирование устройства контроля температуры в холодильных установках. Устройство измеряет температуру с помощью схемы измерения температуры. Значение температуры представлены в 8-битном формате. Создание компьютерной программы для устройства.

    курсовая работа [29,5 K], добавлен 22.02.2008

  • Ввод и вывод чисел при помощи подключаемого модуля IO. Особенности работы с одномерными и двухмерными массивами. Тестирование состояние флагов. Рринципы и навыки работы с компилятором и отладчиком. Разработка схемы алгоритма программы на языке ассемблер.

    курсовая работа [1,3 M], добавлен 02.12.2009

  • Проектирование устройства, выполняющего функцию определения минимального давления на основе информации о показаниях полученных от 7 датчиков. Разработка набора команд управления микроконтроллером в среде программного обеспечения Code Vision AVR.

    курсовая работа [24,5 K], добавлен 28.06.2011

  • Расчет статического модуля оперативной памяти и накопителя. Построение принципиальной схемы и временной диаграммы модуля оперативного запоминающего устройства. Проектирование арифметико-логического устройства для деления чисел с фиксированной точкой.

    курсовая работа [3,2 M], добавлен 13.06.2015

  • Задача и цели практики: модернизация сайта, разработка базы данных, отображающей время прихода и ухода сотрудников. Разработка формы представления данных на экране. Формирование данных, пригодных для вывода. Реализация технологии всплывающих подсказок.

    отчет по практике [1,3 M], добавлен 16.09.2012

  • Разработка принципиальной электрической схемы микропроцессорного устройства управления двигателем постоянного тока на базе контроллера ATmega 128. Разработка пакета подпрограмм на языке Assembler в целях регулирования и корректной работы устройства.

    курсовая работа [271,5 K], добавлен 14.01.2011

  • Изучение команд для обработки строк, приемов, используемых в работе со строками, приемы их использования. Команды префикса повторения. Приемы программирования на языке Ассемблера с использованием подпрограмм, работа с командами вызова подпрограмм.

    методичка [121,0 K], добавлен 18.12.2011

  • Изучение языка низкого уровня ассемблер для написания примера программы для 16 битного приложения. Разработка и реализация алгоритма поднесения чисел к степени чисел над полем за основанием 2 (mod 2). Иллюстрация техники создания DOS приложения.

    курсовая работа [33,3 K], добавлен 08.11.2011

  • Изучение некоторых аспектов языка Ассемблера и ЭВМ в целом. Построение алгоритмов решения поставленной задачи на языках программирования Си, Ассемблер УМ и IBM PC. Составление блок-схем решений и написание программ на каждом из перечисленных языков.

    курсовая работа [691,5 K], добавлен 20.10.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.