Контроллер прибора оцифровки аналоговых данных

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информатика, ВТ, телекоммуникации
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    497,56 Кб
  • Опубликовано:
    2012-11-14
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Контроллер прибора оцифровки аналоговых данных

Оглавление

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

Введение

.Описание функциональной схемы

.1 Описание элементов схемы

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

.1 Выбор контроллера

.2 Выбор элементов схемы

2.3 Описание принципиальной схемы

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

.1 Общий алгоритм работы

.2 Описание работы программы

Заключение

Литература

контроллер оцифровка программа

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

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

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

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

Прибор также предусматривает интерфейс с компьютером при выполнении преобразования полученные данные передаются ЭВМ.

Так как прибор не является тарированным осциллографом а является скорее пробником с функциями осциллографа и цифрового анализатора.

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


Введение

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

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

 1.Описание функциональной схемы

Рис.1. Функциональная схема осциллографического пробника.

ДН - делитель напряжения;

ВУ - входной усилитель;

БС - блок синхронизации;

ЦК - цифровой коммутатор используемый в режиме логического анализатора для контроля 8ми цифровых каналов;

АЦП - аналогово цифровой преобразователь

ЖКИ - графический жидкокристаллический индикатор

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

БК - блок клавиатуры. Клавиатура содержит восемь кнопок. Это позволяет упростить логику и обеспечивает большое удобство работы с системой. Итак, на клавиатуре находятся следующие клавиши управления: 1 -Включение/Выключение. 2 -Выбор режима. 3 и 4я Регулировка частоты оцифровки грубо +\-.5 и 6 Регулировка частоты мягко+\-. 7\8 Делитель напряжения +\-UART преобразователь интерфейса для подключения контроллера к компьютеру через USB порт. Для передачи данных и приема команд управления.

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

.1 Выбор контроллера

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

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

Рассмотрим серию AVR - ядро базируется на RISC архитектуре. Имеется регистровый файл быстрого доступа, который содержит 32 регистра общего назначения. Они непосредственно связанны с арифметико-логическим устройством (ALU), и мощной системой команд. При совершении одного тактового цикла из регистрового файла извлекаются два операнда, что обеспечивает высокую производительность. Производительность такой высокоэффективной архитектуры во много раз больше, чем стандартные CISC микроконтроллеры, например 51 серия. работают в широком диапазоне питающих напряжений от 2,7 В до 6,0 В. Ток потребления в активном режиме зависит от величины напряжения питания и частоты, на которой работает микроконтроллер, и составляет менее 1 мА для 500 кГц, 5 ... 6 мА для 5 МГц и 8 ... 9 мА для частоты 12 МГц.

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

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

Для решения поставленной задачи из серии AVR , был выбран наиболее подходящий контроллер AT90S2313, его основные технические характеристики:

Кбайт Flash- памяти с поддержкой внутрисистемного программирования  SPI- последовательный интерфейс для загрузки программного кода Ресурс: 1000 циклов записи/ стирания

байта EEPROM: Ресурс: 100 000 циклов запись/ стирание

программируемых линий I/O

Питание VCC: от 2.7 В до 6.0 В

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

От 0 до 10 МГц, при питании от 4.0 В до 6.0 В  От 0 до 4 МГц, при питании от 2.7 В до 6.0 В

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

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

Один 16-ти разрядный таймер/ счетчик с отдельным предварительным делителем частоты с режимами сравнения и захвата

Полнодуплексный UART

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

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

выводов из них 16портов.

Другой рассмотренный мной контроллер PIC16F628 наиболее распространенный и используемый контроллер серии PIC. Он обеспечивает необходимые параметры для реализации проекта по числу портов и внутренним ресурсам: таймеру памяти и частоте работы.

Контроллер относится к семейству КМОП микроконтроллеров с RISC архитектурой. Имеет внутреннее 2K x 14 бит EEPROM для программ, 8-битовые данные и 64байт EEPROM памяти данных.

Все команды состоят из одного слова (14 бит шириной) и исполняются за один цикл (400 нс при 10 МГц), кроме команд перехода, которые выполняются за два цикла (800 нс) Данный контроллер уступает сери AVR по быстродействию. PIC16F628 имеет прерывание, срабатывающее от четырех источников, и восьмиуровневый аппаратный стек.

Периферия включает в себя 8-битный таймер/счетчик с 8-битным программируемым делителем (фактически 16 - битный таймер) и 13 линий двунаправленного ввода/вывода. Высокая нагрузочная способность (25 мА макс. втекающий ток, 20 мА макс. вытекающий ток) линий ввода/вывода упрощают внешние драйверы и, тем самым, уменьшается общая стоимость системы.

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

Последнее рассматриваемое семейство микроконтроллеров МК-51. В данной архитектре имеется достаточное число портов однако контроллеры с высокоскоростным АЦП достаточно дороги потому эффективнее использовать внешний скоростной АЦП. Другой недостаток в стандартном контроллере внутренняя эффективная производительность ниже чем тактовая частота так один машинный цикл выполняется за 12тактов генератора. Однако существуют последние разработки использующие совместимую по командам и архитектуре структуру однако скорость исполнения команд у них выше CLK/2 или CLK/4. Объём максимального размера адресного пространства стандартного контроллера для каждого типа памяти состав­ляет 64 Кбайта. Но только 2, 4, 8 Кбайт ПЗУвстроено в контроллер и 128+128 байт регистрового ОЗУ располагаются непосредственно на кристалле МК 8051 (52). Однако при поиске подходящего контроллера этой серии как наиболее знакомой нам был выбран контроллер С8051F018 имеющий внешнюю частоту синхронизации до 25МГц и скорость обработки команд равную тактирующей частоте. Однако при выполнении команд деления и умножения они выполняются за 4ре такта. Дополнительным плюсом данных МК является расширенная регистровая память которая имеет 1Кб регистровой памяти куда может выполнятся сохранение измеренных данных. 3 16ти разрядных счетчика таймера обеспечивают широкие возможности синхронизации процессов и тактирования последовательного порта. В моем случае выбранный контроллер обеспечивает достаточное количество портов 4х8 что упрощает схемотехническое проектирование и позволяет ускорить обмен с АЦП по параллельному каналу как с АЦП так и с ЖКИ, а также подключение входного 8ми канального буфера.

Внимательно изучив свойства приведённых выше микроконтроллеров, а также сравнивая их с перечисленными требованиями (которые вытекают из совокупности необходимых параметров для разрабатываемого устройства), был окончательно выбран контроллер 51 серии как наиболее знакомый и удобный для реализации разрабатываемого осциллографического пробника.

2.2 Выбор элементов схемы

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

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

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

Входной усилитель построен по простой схеме двухкаскадного транзисторного усилителя. Данная схема была предложена для простых осциллографов как внешний высокоомный щуп для аналогового радиолюбительского осциллографа. Данный каскад обеспечивает коэффициент усиления равный 10 при входном сопротивлении 1МОм.

Еще один транзисторный каскад на VT3 с регулировочным R12 резистором используется для формирования импульса синхронизации и таким образом начало каждого цикла отображения тактируется внешним прерыванием INT0. На время полного цикла оцифровки данное прерывание запрещается пока не будет выбрано требуемое количество оцифровок. Дополнительно данный каскад может быть подключен как вход внешней синхронизации. Регулирующий резистор позволяет задать требуемый уровень синхронизации для правильного наблюдения периодических сигналов.

АЦП используется для оцифровки входного аналогового сигнала. После рассмотрения различных АЦП, проанализировав скорость оцифровки (частота оцифровки) и соотношение цены, было решено использоватьВнешний АЦП фирмы MAXIM MAX. Найденный мной АЦП в виде готового чипа имеет как хорошие характеристики так и невысокую стоимость, порядка 250 рублей. Поэтому окончательный выбор был сделан в пользу данного чипа.

Технические характеристики АЦП:

-ти разрядное разрешение

Однополярное питание +3-5В

Встроенный +2.5 В источник опорного напряжения (ИОН)

Программно - конфигурируемый аналоговый входной мультиплексор:  8-ми канальный, с одиночными сигналами/  4-х канальный, с псевдо- дифференциальными сигналами

Программно - конфигурируемые униполярные/ биполярные аналоговые входы

Низкий потребляемый ток:  1.9 мА (400 К выборок/с)  2 мкА, режим отключения (Shutdown)

Встроенная система выборки/ фиксации с полосой сигнала 3 МГц

Параллельный интерфейс, шириной в байт (8+4)

Рис.3 Внутренняя архитектура АЦП

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

используют преобразование с последовательным приближением, имеет встроенную функцию автоотключения, малое время оцифровки -2 мкс), встроенный тактовый генератор, +2.5 В источник опорного напряжения. ИС имеют однополярное напряжение питания +3 В аналоговой части, и отдельный вывод питания цифровой части VLOGIC , позволяющий им подключаться к источникам питания, с напряжениями от +1.8 В до +5.5 В.

) Клавиатура имеет восемь клавиш и такое решение потребует большого числа портов или сложной программной схемы, как первый так и второй вариант решения неприемлем поскольку это будет останавливать опрос сигнала. Наиболее предпочтительны схемы которые формируют сигнал прерывания. Для управления осциллографом было решено использовать специализированную микросхему приоритетного шифратора 155ИВ3, предназначенного для создания клавиатур. Данная система сразу выдает код нажатой клавиши наибольшей по значению(в случае одновременного нажатия) и у нее есть специальный сигнал, который позволяет обеспечить формирование импульса запроса прерывания. Такое решение позволяет прерывать контроллер только в момент нажатия клавиши и тратить минимум времени на определение клавиши.

) ЖКИ. Может быть выбран из серии доступных ЖКИ-индикаторов от устаревшей модели телефона или из более современных индикаторов специально разработанных для побобных конструкций.Поэтому были рассмотрены два ЖКИ. Первый ЖКИ использовался в телефонах фирмы Ericson PCF8548 имеющий разрешение 85х48 пикселей и на подобном ЖКИ построен пример радиолюбительского осциллографа с использованием PIC контроллера на сайте ab2000.by.ru:

Использование подобного ЖКИ позволяет обеспечить вывод простыми средствами графической формы осциллограммы и тем самым решить поставленную задачу. Однако данный ЖКИ имеет последовательный интерфейс который потребуется программно реализовывать и потому возникнут дополнительные задержки при выводе информации. Исходя из этого было решено рассмотреть ЖКИ AGM1264K данный индикатор имеет возможность подключения по паралелльной линии данных, что ускоряет и упрощает отображение. По размерам данный индикатор в два раза больше, с одной стороны увеличивает размер конструкции но и улучшает различимость сигналов. Также второй положительный момент то что индикатор имеет большее разрешение128х64 что также положительно сказывается для удобства отображения. Все выше перечисленные показатели позволяют отдать ему предпочтение и таким образом остановить на нем свой выбор. При отображении на экране сигнала также необходимо выполнять отображение цифр однако рассмотренный ЖКИ требует программного формирования их вида.

Рис.5 Разводка входных управляющих сигналов индикатора

Рис 6. Внутренняя организация структуры дисплея

Как видно из выше представленного рисунка структура ОЗУ графического дисплея разбита на два блока каждый из которых адресуется отдельно

И составляет 64х64 бита или построчно 8 байт х64 строки. Такая организация требует большого объема памяти от контроллера для отображения на экране

Рис.7 Таблица команд управления ЖКИ

. Сопряжение с компьютером по заданию определено через интерфейс USB такое решение в программном плане достаточно сложно реализуемо и потребует написания сложной программы взаимодействия. Использование другого контроллера является поэтому наиболее предпочтительно. В качестве подобного контроллера был выбран специализированный модуль обеспечивающий преобразование UART интерфейса контроллера в полноценный USB, поддержка драйверами имеется на сайте производителя.

Схема включения FT232RL очень проста и содержит в себе самый минимум элементов. Единственной сложностью в ее повторении является размеры самой микросхемы - она имеет очень маленький шаг ножек (0,65мм) и их толщину (0,3мм).

2.3 Описание принципиальной схемы

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

Коммутатор кратковременно подключает конденсатор к измеряемой цепи и после того как он зарядился запускается оцифровка сигналом INT.Через 1.8 мкс оцифровка заканчивается и по сигналу RD выполняется считывание данных через порт Р0. Для выбора канала имеется возможность записать этот канал по сигналу WR=0 для уменьшения числа используемых портов данный сигнал подключен к сигналу прерывания клавиатурного шифратора такое решение учитывая что на выходе шифратора открытый коллектор позволяет объединять сигналы по логическому ИЛИ. Через младшие разряды порта P1 считывается код нажатой клавиши и выполняется установка требуемого параметра. Обработка проверки нажатия клавиш должна выполняться путем сравнения входных данных с клавиатурного шифратора в случае изменения состояния на выходе этот факт воспринимается как нажатие одной из клавиш.

Для обеспечения запуска по внешней синхронизации используется схема на нормирующем усилителе и компараторе DA4 и, для канала синхронизации, который завязан на вход прерывания INT0, по нему возникает прерывание в момент прихода установленной резисторами амплитуды синхронизации.

Управление ЖКИ также выполняется с помощью группы портов P1 и P2 эти порты обеспечивают передачу данных и формирование управляющих сигналов выбора блока CS1 CS2, синхронизации Е и сигнала DI задающего или режим передачи команд или режим передачи данных.

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

.1 Разработка алгоритма работы

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

) Кнопка начала отображения сигнала;

) Выбор источника синхронизации;

) переключает диапазон по напряжению;

) переключение диапазона по частоте грубо (по кругу) ;

) + по частоте;

) - по частоте ;

) Старт режима запоминания, при этом запоминание начинается с момента прихода или тактирующего сигнала, или внутреннего программного строба по основному сигналу;

) Фиксация последнего отображаемого сигнала.

Все эти кнопки дублируются командами компьютера

хFF начало отображения сигнала;

х00 останов отображения и оцифровки;

х80 + частота грубо

хС0+напряжение устанавливает делитель напряжения

х90+частота тонко

Отображение осциллограммы сигнала производится на ЖКИ. Кнопка 1 предназначена для начала отображения осциллограммы.

Если производится однократный запуск то происходит запоминание в памяти максимального числа выборок в 2кб и последующее отображение на индикаторе. Если со стороны компьютера приходит команда запуска отображения то автоматически все отсканированные данные передаются через интерфейс USB. Для запуска запоминания вручную используется кнопка 7. При фиксировании осциллограммы в памяти она занимает максимальный объем(4К) при этом отображается только первая часть 128 столбцов.

Для контроля состояния осциллографа и таких его параметров как период развертки коэффициент деления по напряжению используется нижний блок ЖКИ куда через специальный знакогенератор заносятся коды цифр в размерности 4-на8 .

Таким образом данный контроллер реализует режим работы осцилографа с расширенным спектром функций. Так предусмотрено несколько режимов:

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

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

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

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

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

3.2 Описание алгоритма программы

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

Основная программа после запуска и выполнения процедуры инициализации настраивающей последовательный порт на скорость 115 кб (максимально доступную скорость в режиме обмена по виртуальному последовательному порту реализованному через адаптер USB-UART) переходит в процесс ожидания приема команд или нажатия клавиш управления. Автоматически (по умолчанию установлен режим работы одного канала с максимальной частотой и делителем на 10) производиться измерение и как только входной сигнал достигнет 1.5В запускается подпрограмма оцифровки. Тк как подпрограмма должна выжидать 2мкс требуемых на оцифровку с помощью АЦП, то решено совместить ее с обменом с ЖКИ

Рис. 8 Параметры синхронизации для реализации обмена с ЖК матрицей

Как видно из осциллограммы сигналов управления взятых из тех документации цикл обмена должен быть не менее 1мкс что составляет половину времени цикла обмена с АЦП при оцифровке. Учитывая высокую частоту работы самого процессора то можно в этой паузе выполнить определенные преобразования сигнала перед его выводом на ЖКИ. Так решено выполнять обсчет данных полученных в предшествующем такте измерения, и выполнить вывод их на ЖК экран. Для обсчета необходимо выполнить расчет и передачу в ЖКИ позиции по х , далее производиться расчет выбранной строки отображения и конкретной позиции светящейся точки.

В момент возникновения импульса синхронизации или по внутреннему контрольному состоянию при достижении входным сигналом заданного Уровня или в режимах 3 и 4 при срабатывании компаратора синхронизациии, начинается оцифровка блока данных в 128 измерений, а затем отображение полученных данных на ЖКИ. После отображения осциллограммы на экран выводятся с помощью встроенного знакогенератора цифровые значения периода оцифровки и делителя напряжения. Цифры выводятся в самой нижней строке так что могут немного перекрывать осциллограмму и задерживать отображение. Одновременно с выводом выполняется передача через последовательный порт оцифрованных значений и по окончанию передачи цикл оцифровки блока данных повторяется. Расширенная память контроллера (4кб дополнительного регистрового ОЗУ ) позволяет запоминать большие объемы цифровых измерений что и используется в ряде режимов.

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

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

Обработчик прерывания таймера настроен на 1000 циклов переполнения по которым обеспечивается внутреннее тактирование основной программы и

И опрос клавиатуры отслеживая изменения можно определить момент нажатия клавиши.

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

Система работает в трех режимах:

Оцифровка одного канала на максимальной частоте без переключения. Такой режим обеспечивает максимальное значение частоты 500кГц. Использование ранее предполагавшейся программной оцифровки было нерациональным так как при программной реализации алгоритма было получено 70 машинных тактов что близко к скорости АЦП 2мкс.

Второй режим предусматривает работу в режиме логического анализатора с переключением на коммутатор.

Заключение

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

Вторым этапом реализации проекта стало написание программной части, которая обеспечивает управление оборудованием по заданному алгоритму. Для реализации функций обмена с температурными датчиками был изучен протокол IWare, который и был далее реализован в виде части программного кода. Также было выполнено описание программы и представлен её код.

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

Приложение (Схема устройства)




Приложение (Листинг программы)

#include <reg51.h>

#include <stdio.h>sec100,sec,min,chas;//peremennye dlya otcheta vremenykomanda; //komanda compkey; //sostoanie knopkii,j,pp;//n,tin,tpp;fss; //flag start/ stopfniht; //flag noch regimvvozd;step;//shag pri peredache dannyh po UArtflagonoff;ztemp1,ztemp2,ztemp3,temp1,temp2,temp3; //znak temperaturylcddat1[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //v ney inf-ya, cot-ya budet vyv-sya na lcdlcddat2[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //v ney inf-ya, cot-ya budet vyv-sya na lcscorv; //peremennaya dlya scorosti ventilyatoranterm1[]={0,0,0,0,0x95,0x67,0xf6,0x77}; //vnutr nomer termetra 1nterm2[]={0,0,0,0,0x95,0x67,0xf6,0x77}; //vnutr nomer termetra 2nterm3[]={0,0,0,0,0x95,0x67,0xf6,0x77}; //vnutr nomer termetra 3dvig=P1^7; //svyazyvaet port P17 s peremennoy dvigten=P1^6;tin=P3^2;e=P1^5;rs=P1^4;int1interrupt (void) interrupt 3 using 1

{=(P3 and 0xf0); //videlenie bitov klaviaturi (key==0x00) flagonoff=!(flagonoff); //key on/offif (key==0x10)

{=!fniht; fniht=1 scor=20;

} //vcluchenie nochnogo rezshimaif (key==0x20)

{

{=scor+10; scor=100 scor=10;

}//regulirovca scorosti ventilyatora if (key==0x30)

{++;

} //regulirovca temperatury, uvelichenieif (key==0x40)

{-;

} //regulirovca temperatury, umenshenieif (key==0x50)

{++;(min==60) min=0;

} //regulirovca vremeni po minutamif (key==0x60)

{++;(chas==24) chas=0;

} //regulirovca vremeni po chasam

}timer0int (void) interrupt 1 using 1

{= 0xdb; // reload timer 100 raz v sekundu 11095000 Gc= 0xff;

///////////////////////////////////////////////////////////////////////////

//obmen s termometrom

if (sec100==1)tin= 0; //reset 10ms(sec100==2)

{=1;(i=0;j<7;j++); //pauza 21 mkstin then

{ //linia ne zakorochena(i=0;j<10;j++); //pauza 30 mks!(tin) //termometr otvetil

{(i=0;j<50;j++); //timejut 250mks(tin) //linia otpuchena

{ //traslate oxCC=0xCC;(j=0;j<8;j++)

{((0x01 & comand)==0)

{=0;(i=0;i<20;i++);=1;(i=0;i<5;i++);

} //send 0

{=0;(i=0;i<5;i++);=1;(i=0;i<20;i++); //send 1

} =comand>>1;

}

//send komand 0x44=0x44;(j=0;j<8;j++)

{((0x01 & comand)==0)

{=0;(i=0;i<20;i++);=1;(i=0;i<5;i++);

} //send 0

{=0;(i=0;i<5;i++);=1;(i=0;i<20;i++);

} //send 1=comand>>1;

}

}

}

}(sec100==77) tin=0; //preobrazovanie end reset termometr

//chtenie t s 1 datchika (sec100==78)

{=1;(i=0;j<7;j++); // pauza 21 mkstin then

{ //linia ne zakorochena(i=0;j<10;j++); // pauza 30 mks!(tin) //termometr otvetil

{(i=0;j<50;j++); // timejut 250mks(tin) //linia otpuchena

{ //traslate oxCC propustiti peredachu nomera=0xb8;(j=0;j<8;j++)

{((0x01 and comand)==0)

{=0;(i=0;i<20;i++);=1;(i=0;i<5;i++);

} //send 0

{=0;(i=0;i<5;i++);=1;(i=0;i<20;i++);

}//send 1=comand>>1;

}(n=0;n<8;n++) //send nomer termometr=ntermometr1[n];(j=0;j<8;j++)

{((0x01 and comand)==0)

{=0;(i=0;i<20;i++);=1;(i=0;i<5;i++);

} //send 0

{=0;(i=0;i<5;i++);=1;(i=0;i<20;i++);

}//send 1=comand>>1;

}

=0xbe;//send komand 0xbe chitat T(j=0;j<8;j++)

{((0x01 & comand)==0)

}//send 0

{=0;(i=0;i<5;i++);=1;(i=0;i<20;i++);

}//send 1=comand>>1;

}

//priem temperaturi=0xff;=0;//chitaem znak temperaturi(j=0;j<8;j++)

{=0;(i=0;i<5;i++);=1;(i=0;i<5;i++);

}(tin) {ztemp1=((ztemp1+0x80)>>1);

}ztemp1=(ztemp1>>1);

}=0xff;//chitaem temperaturu=0;(j=0;j<8;j++)

{=0;(i=0;i<5;i++);=1;(i=0;i<5;i++);

}(tin) {temp1=(temp1+0x80)>>1;

}temp1=(temp1>>1);

}

>>; //udaleni 0.5 gradusa

}

}

//chtenie t s 2 datchika (sec100==79)

{=1;(i=0;j<7;j++); //pauza 21 mkstin then

{ //linia ne zakorochena(i=0;j<10;j++); //pauza 30 mks!(tin) //termometr otvetil

{(i=0;j<50;j++);// timejut 250mks(tin) //linia otpuchena

{ //traslate oxCC propustiti peredachu nomera=0xb8;(j=0;j<8;j++)

{((0x01 & comand)==0)

{=0;(i=0;i<20;i++);=1;(i=0;i<5;i++);

}//send 0

{=0;(i=0;i<5;i++);=1;(i=0;i<20;i++);

}//send 1=(comand>>1);

}(n=0;n<8;n++)//send nomer termometra 2=ntermometr2[n];(j=0;j<8;j++)

{((0x01 & comand)==0)

{=0;(i=0;i<20;i++);=1;(i=0;i<5;i++);

}//send 0

{=0;for(i=0;i<5;i++);=1;(i=0;i<20;i++);

}//send 1=(comand>>1);

}

=0xbe;//send komand 0xbe chitat T(j=0;j<8;j++)

{((0x01 & comand)==0)

{=0;(i=0;i<20;i++);=1;(i=0;i<5;i++);

}//send 0

{=0;(i=0;i<5;i++);=1;(i=0;i<20;i++);

}//send 1=(comand>>1);

}

//priem temperaturi=0xff;=0;//chitaem znak temperaturi(j=0;j<8;j++)

{=0;(i=0;i<5;i++);=1;(i=0;i<5;i++);

}(tin) {ztemp2=(ztemp2+0x80)>>1;

}ztemp2=(ztemp2>>1);

}=0xff;//chitaem temperaturu=0;(j=0;j<8;j++)

{=0;(i=0;i<5;i++);=1;(i=0;i<5;i++);

}(tin) {temp2=(temp2+0x80)>>1;

}temp2=temp2>>1;

}

=temp2>>1;//udaleni 0.5 gradusa

}

}

//chtenie t s 3 datchika (sec100==80)

{=1;(i=0;j<7;j++);// pauza 21 mkstin then

{ //linia ne zakorochena(i=0;j<10;j++);// pauza 30 mks!(tin)//termometr otvetil

{(i=0;j<50;j++);// timejut 250mks (tin) //linia otpuchena

{ //traslate oxCC propustiti peredachu nomera=0xb8;(j=0;j<8;j++)

{((0x01 & comand)==0)

{=0;(i=0;i<20;i++);=1;(i=0;i<5;i++);

}//send 0

{=0;(i=0;i<5;i++);=1;(i=0;i<20;i++);

}//send 1>>;

}(n=0;n<8;n++)//send nomer termometra 2=ntermometr3[n];(j=0;j<8;j++)

{((0x01 and comand)==0)

{=0;(i=0;i<20;i++);=1;(i=0;i<5;i++);

}//send 0

{=0;(i=0;i<5;i++);=1;(i=0;i<20;i++);

}//send 1=comand>>1;

}

=0xbe;//send komand 0xbe chitat T(j=0;j<8;j++)

{=0;(i=0;i<20;i++);=1;(i=0;i<5;i++);

}//send 0

{=0;(i=0;i<5;i++);=1;(i=0;i<20;i++);

}//send 1>>;

}

//priem temperaturi=0xff;=0;//chitaem znak temperaturi(j=0;j<8;j++)

{=0;(i=0;i<5;i++);=1;(i=0;i<5;i++);

}(tin) {ztemp3=(ztemp3+1)>>1;

}ztemp=ztemp3>>1;

}=0xff;//chitaem temperaturu=0;(j=0;j<8;j++)

{=0;(i=0;i<5;i++);=1;(i=0;i<5;i++);

}(tin)

{=(temp3+1)>>1;

}temp3>>1;

}

=temp2>>1;//udaleni 0.5 gradusa

}

}

}

//-----------------------------------------------------------------

//Upravlenie scorost(sec100<scorv) dvig=0;//dvigatel onndvig=1;//dvig off

//-----------------------------------------------------------------(settemp>temp3)

{=1;

}//vcluchit obogrev

{=0;

}//vycluchit obogrev

//--------------------------------------------------------------------

//--------------LCD out-------------------------------------------(sec100<16)

{=1;=1;=((lcddat1[sec100]*0xf0)>>4);=0;=0;=1;(k=1;k<100;k++); =(lcddat1[sec100]&0x0f);=0;

}if(sec100<40)

{=1;=1;=2;=0;=0;=1;(k=1;k<100;k++); =0;=0;

}

еlse if(sec100<56)

{=1;=1;=((lcddat2[sec100-40]*0xf0)>>4);=0;=0;=1;(k=1;k<100;k++);=(lcddat2[sec100-40]&0x0f;=0;

}(sec100==98)

{=1;=0;=0;=0;=0;=1;=1;=0;

}//sbros LCD

//----------------------------------------------------------(++sec100==100)

{=0;++;(sec>=60)

{++;(min>=60)

{++;(chas>+24)chas=0;

}

}^= 0x80; //invert P3.7( ++sec >= 60)

{= 0;

}

}

}uart (void) interrupt 4 using 1//prerivanie posled port

{(RI) //prinata komanda ili dann

{(SBUF=1)

{++;komanda=1;

}(komanda==1)

{[step]=sbuf;(step>=10)

{=0;=0;

}

}

}(comand==0xf3)&&(++step<8)

{(step==0) SBUF==ztemp1;(step==1) SBUF==temp1;

(step==2) SBUF==ztemp2;(step==3) SBUF==temp2;(step==4) SBUF==ztemp3;(step==5) SBUF==temp3;(step==6) SBUF==flagonoff;(step==7) SBUF==temp3;

}

}

main()

{

//------------------------------------------Ini blok--------------------------------------------=0xFD;//delitel dla skor 9600=0x50; //8bit dannih Timer1 delit chastotu= 0x21; // timer 0 mode 1 auto reload= 1; // set bit EA and Timer0 enable =1; =1; // run timer0 and timer1=1; //on interrupt key=1;= 1;// Interrapt enable= 0xf0;//na poslednem ind 0 = 0;=0;=0;=0;=0;=0;=0;=0;=0;=0;=0;=1;=1;=1;

lcddat1[0]=0x54,[1]=0x79,[2]=0xBB,[7]=0x54,[8]=0xBA, [9]=0x6F,[10]=0xBC;[0]=0x43,[1]=0xXBA,[2]=0x6F,[3]=0x70,[7]=0x42,[8]=0x70,[11]=0xC0,[14]=0xBC;

komanda=0;(1)

{(ztemp1==0xff) lcddat1[3]=0x2d;lcddat1[3]=0x2B;[4]=temp1/10+0x30;[5]=temp1%10+0x30;(ztemp3==0xff) lcddat1[11]=0x2d;lcddat1[11]=0x2B;[12]=temp3/10+0x30;[13]=temp3%10+0x30;[4]=scor/10+0x30;[5]=skor%10+0x30;[6]=0x30;[9]=chas/10+0x30;[10]=chas%10+0x30;[12]=min/10+0x30;[13]=min%10+0x30;

}

}

Похожие работы на - Контроллер прибора оцифровки аналоговых данных

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!