Процесс разработки контроллера измерителя расстояний

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

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

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

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

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

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

Введение

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

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

Для измерения небольших расстояний (до десятков метров) вполне подходят измерители на основе инфракрасного излучения.

В курсовом проекте рассматривается процесс разработки контроллера измерителя расстояний. В основе устройства лежит микроконтроллер (МК) ATtiny2313 фирмы ATMEL. Особенностями данного контроллера измерителя являются использование инфракрасного светодиода в качестве источника зондирующего излучения, индикация посредством жидкокристаллического дисплея.

1. Потребительские свойства контроллера

1.1 Назначение

Устройство предназначено для измерения расстояния от наблюдателя до какого-либо объекта, находящегося зоне в прямой видимости наблюдателя.

1.2 Технические показатели. Режимы

Измеритель расстояния может работать в следующих режимах:

- режим «отключен»;

- режим «ожидание»;

- режим «измерение и вывод».

Режим «отключен» соответствует отсутствию напряжения питания, что возможно при положении переключателя «ВКЛ/ВЫКЛ» в положении «ВЫКЛ» или при отсутствии батареи питания

Режим «ожидание» соответствует состоянию контроллера, когда на него подано напряжение питания и он ожидает изменения на входах датчиков.

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

Также стоит отметить, что в разрабатываемом контроллере существует также промежуточный режим «очистка», который соответствует очистке результатов предыдущих измерений и выводу пустых строк на жидкокристаллический индикатор. После очистки контроллер вновь находится в режиме «ожидание».

1.3 Средства индикации, сигнализации, подключения, управления. Пульт

Для того чтобы пользователь мог следить за работой устройства, имеется 1 сигнальный светодиод (рисунок ), а также жидкокристаллический дисплей для выдачи результатов измерения (см. ФВС КП 4.468004.017 Э2).

Рисунок - Панель (корпус) прибора

Один светодиод, расположенный на корпусе прибора, сигнализирует о наличии питания. Этот светодиод горит при состоянии «ВКЛ» кнопки “ВКЛ/ВЫКЛ” и исправности батареи питания. Жидкокристаллический дисплей служит для вывода информации о результате измерений в виде расстоянии выраженного в соответствующих единицах измерения.

1.4 Инструкция по применению

Устройство начнет функционировать после подачи питания. Для этого необходимо установить исправные батареи и перевести переключатель «ВКЛ/ВЫКЛ» в положение «ВКЛ».

Если питание присутствует загорится светодиодный индикатор «Питание».

Для измерения расстояния необходимо навести прибор на объект, до которого необходимо измерить расстояние нажать на одну из кнопок «Измерение 1» или «Измерение 2» и дождаться результатов измерения, которые будут выведены на индикатор. При нажатии на кнопку «Измерение 1» результаты измерения будут выведены в первую строчку индикатора, При нажатии на кнопку «Измерение 2» результаты измерения будут выведены во вторую строчку индикатора. После окончания измерения при повторном нажатии на кнопки измерения новый результат заменит собою предыдущий. При нажатии на кнопку «Сброс» обе строчки дисплея очистятся.

Если после измерении на дисплей выведены символы «---------», значит, измерение прошло неудачно и следует повторить попытку. Неудачное измерение возможно в следующих случаях:

-расстояние до объекта слишком велико и превышает предел измерения;

-объект имеет большой угол наклона относительно измерительного луча.

индикация сигнализация датчик адресный

2. Датчики и исполнительные органы контроллера

2.1 Состав датчиков

Датчиками микроконтроллера являются: 3 нефиксируемых переключателя и 1 фотодиод.

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

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

Рисунок - функциональная схема датчиков

Как видно датчики в неактивном состоянии подают на вход контроллера логическую «1», а при активном состоянии логический «0».

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

2.3 Состав исполнительных органов

Исполнительными органами контроллера являются: светодиод видимого диапазона, светодиод инфракрасного диапазона, жидкокристаллический дисплей

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

Приведем функциональную схему подключения светодиодов к контроллеру.

Рисунок - Функциональная схема подключения фотодиодов

Как видно из рисунка светодиоды (индикатор и фотопередатчик) будут гореть излучать свет при наличии на выходе контроллера напряжения низкого уровня, т.е. логического «0», следовательно при наличии на соответствующем выходе контроллера напряжения высокого уровня светодиод излучать ничего не будет.

В качестве индикатора выступает жидкокристаллический дисплей 16 символов 2 строчки со встроенным контроллером HD44780 или его аналогом. Приведем функциональную схему подключения жидкокристаллического дисплея.

Рисунок - Функциональная схема подключения дисплея

Как видно из рисунка дисплей подключается к контроллеру по шести линиям, из которых 4 информационных и 2 управляющих. Вход «rw» дисплея используется для записи в память контроллера дисплея, для данного устройства он не задействован, следовательно он подключен к общему проводу. Вход «Vee» дисплея используется для настройки его контрастности, он подключен к источнику питания через переменный резистор, сопротивление которого при настройке меняется от 10 до20 кОм.

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

DDRAM - память дисплея. Все что запишется в DDRAM будет выведено на экран. Например, если записать туда код 0?31-- на экране появится символ “1? т.к. 0х31 это ASCII код цифры 1.

CGROM - таблица символов. Когда записывается в ячейку DDRAM байт, то из таблицы берется символ и рисуется на экране. CGROM нельзя изменить, поэтому от ее содержания зависит возможность вывода на различных языках. CGRAM - тоже таблица символов, но ее можно менять, создавая свои символы. Всего в CGRAM может быть 8 символов, соответственно CGRAMимеет 64 байта памяти. Для доступа к памяти необходимо указать область памяти в которую производится запись, а следом отправить данные.

Для того чтобы передать команду необходимо выставить на входе «RS» напряжение низкого уровня.

Таблица- Таблица команд дисплея

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

Значение

0

0

0

0

0

0

0

1

Очистка экрана. Счетчик адреса на 0 позицию DDRAM

0

0

0

0

0

0

1

-

Адресация на DDRAM сброс сдвигов, Счетчик адреса на 0

0

0

0

0

0

1

I/D

S

Настройка сдвига экрана и курсора

0

0

0

0

1

D

C

B

Настройка режима отображения

0

0

0

1

S/C

R/L

-

-

Сдвиг курсора или экрана, в зависимости от битов

0

0

1

DL

N

F

-

-

Выбор числа линий, ширины шины и размера символа

0

1

AG

AG

AG

AG

AG

AG

Переключить адресацию на SGRAM и задать адрес в SGRAM

1

AD

AD

AD

AD

AD

AD

AD

Переключить адресацию на DDRAM и задать адрес в DDRAM

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

I/D - инкремент или декремент счетчика адреса.

- S - сдвиг экрана, если поставить 1 то с каждым новым символом будет сдвигаться окно экрана,

- D - включить дисплей.

- С - включить курсор в виде прочерка.

- B - сделать курсор в виде мигающего черного квадрата.

- S/C сдвиг курсора или экрана.

- R/L - определяет направление сдвига курсора и экрана. 0 - влево, 1 - вправо.

- D/L - бит определяющий ширину шины данных. 1-8 бит, 0-4 бита

- N - число строк. 0 - одна строка, 1 - две строки.

- F - размер символа 0 - 5х8 точек. 1 - 5х10 точек (встречается крайне редко)

- AG - адрес в памяти CGRAM

- АD - адрес в памяти DDRAM

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

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

3. Элементная база контроллера

3.1 Мотивация функционального состава контроллера

Для создания измерителя расстояния в качестве логического ядра устройства был выбран микроконтроллер Attiny 2313 фирмы Atmel. Контроллер был выбран, так как подходит по основным показателям для выполнения заданных функций. Он имеет 2 Кб программируемой в системе Flash-память программы, ОЗУ ёмкостью 128 байт, 18 линий ввода/вывода общего применения, что является достаточным для подключения всех нужных устройств, последовательный программируемый USART [3]. Также данный микроконтроллер имеет 32 рабочих регистра общего назначения. При этом все 32 регистра непосредственно связаны с арифметико-логическим устройством (АЛУ), что позволяет получить доступ к двум независимым регистрам при выполнении одной команды. В результате данная архитектура позволяет обеспечить большую производительность, чем стандартная CISC архитектура [5]. К тому же данный микроконтроллер имеет развитую систему команд.

3.2 Сведения о функциональных узлах контроллера

Таблица Описание входов/выходов контроллера

Входы:

Количество входов датчиков

4

Типы подключаемых датчиков

Цифровые (контактные)

Напряжение, подаваемое на входы датчиков

0..5 В

Сопротивление входов датчиков

3,3 кОм

Выходы:

Количество выходов исполнительных устройств

7

Максимальное коммутируемое напряжение

5В (пост)

Максимальный коммутируемый ток

300 мА

Расположение выводов контроллера Attiny 2313 представлена на рисунке.

Рисунок -Расположение выводов контроллера

XTAL1 - вход инвертирующего усилителя генератора и вход внешнего тактового сигнала. XTAL2 - выход инвертирующего усилителя генератора. В нашем случае используется внешний кварцевый резонатор с частотой 10MHz. VCC - вывод источника питания. GND - «общий» провод (земля, корпус). - вход сброса. Порт B (PB0 - PB7) является 8-битовым двунаправленным портом ввода/вывода. Порт D (PD0 - PD6) является 7-битовым двунаправленным портом вводы/вывода [3].

Рисунок - Функциональный состав микроконтроллера

Архитектурная особенность построения портов ввода/вывода у AVR микроконтроллеров заключается в том, что для каждого физического вывода существует 3 бита контроля/управления, а не 2, как у распространенных 8-разрядных микроконтроллеров (Intel, Microchip и т.д.).

Упрощенная схема элемента ввода/вывода, поясняющая логику его работы, приведена на рисунке.

Рисунок - Упрощенная схема вывода PB1

DDRB - бит контроля направления передачи данных. Значение битов в регистре DDRB определяет, чем будут ножки этого порта (входами или выходами). Если в этом регистре какой-либо бит имеет значение “0”, то соответствующая данному биту ножка является входом. Если же бит имеет значение “1”, то соответствующая ножка является выходом.

PINB - бит для отображения логического уровня сигнала на физическом выводе микросхемы. Напряжение на выводе PB1 преобразуется в логические уровни «1» или «0», которые можно прочитать в регистре PINB это бит_1 или PINВ.1.

Чтобы на ножках порта B появился «1» или «0», соответствующий бит в регистре PORTB нужно сделать «1» или «0». При этом такой же бит регистра DDRB должен быть установлен в «1», т.е. ножка должна быть выходом. Если она сконфигурирована как вход (т.е. соответствующий бит в регистре DDRB имеет значение “0”) и соответствующий бит в регистре PORTB тоже имеет значение “0”, ножка будет высокоимпедансным входом (Z-состояние, вход с очень высоким входным сопротивлением более 10 Мом). А если же бит в регистре PORTB установлен в “1”, то включается «подтяжка» (pull-up) высокоимпедансного входа к плюсу питания МК через встроенный резистор примерно 40 КОм, т.е. ножку как бы соединяют таким резистором с питанием МК [2], [3], [5].

Бит_1 в регистре DDRB управляет переключателем - на рисунке 4.2.3 переключатель показан в положении бит_1 равен «0». Диод на схеме идеальный - значит, если бит_1 в PORTB будет тоже равен «0», то вывод PB1 будет высокоомным входом.

А если бит_1 в PORTB сделать «1», то вывод PB1 через диод и резистор 40 КОм подключится к питанию МК - т.е. станет входом с подтяжкой. Если бит_1 в регистре DDRB сделать «1», переключатель изменит состояние, и значение бит_1 в PORTB будет выводиться прямо на PB1 - теперь это будет просто выход [2].

Таблица - Логика работы с портами

Значение бита_x

Состояние вывода МК

Биты только для чтения

Программа управляет этими битами

PBx

PINB.x

DDRB.x

PORTB.x

1

1

1

Высокий лог. уровень

0

0

Низкий лог. уровень

определяется реальным напряжением на ножке МК

0

1

Подтяжка - pull-up Вывод подсоединен к питанию МК через резистор внутренний резистор 40 КОм

0

0

Z-состояние. Высокоомный вход

4. Обоснование и описание функциональной электрической схемы контроллера

Рассмотрим функциональную электрическую схему контроллера (см. ФВС КП 4.468004.043 Э2).

Составные части контроллера измерителя расстояния согласно схеме (см. ФВС КП 4.468004.043 Э2) :

- микроконтроллер AT Tiny2313

- кварцевый резонатор на 10Мгц

- светодиоды

- нефиксируемые переключатели

- резисторы

- конденсаторы

- светодиод инфракрасного диапазона

- фотодиод инфракрасного диапазона

- жидкокристаллический дисплей со встроенным контроллером

- батарея питания

Для проектирования контроллера были использованы доступные и распространенные электронные компоненты.

Основным элементом устройства является 8-разрядный микроконтроллер ATtiny2313 фирмы Atmel.

Для работы микроконтроллера необходим источник динамического питания - кварцевый резонатор, который подключен к выходам XTAL1 и XTAL2 [2]. При этом ножки XTAL1 и XTAL2 заземляют конденсаторами емкостью 22 пФ на GND (см. ФВС КП 4.468004.043 Э2). Кварц имеет частоту 10 МГц (диапазон частот тактового генератора ATtiny2313: 0-20 МГц), данная частота обеспечивает измерение расстояния с высокой степенью точности.

Устройство питается от батареи на 5В. За подачу на устройство питания от батареи отвечает фиксируемый переключатель SA1: в положении «ВКЛ» положительный выход батареи соединен с соответствующим входом контроллера, дисплея и переключателями.

Переключение устройства в режим измерения происходит при нажатии на одну из кнопок SB1, SB2 (выводы PD2,PD3). При нажатии кнопки замыкают соответствующий вывод контроллера на землю «GND», что соответствует логическому нулю. При отпущенной кнопке на входе контроллера находится логическая единица.

Сброс результатов измерений осуществляется нажатием на кнопку SB3 (вывод PD4), при нажатии вход контроллера замыкается на землю.

Светодиод VD1, подключенный к выводу PD0, сигнализирует о наличии питания. В качестве источника зондирующего (измерительного) излучения использован светодиод инфракрасного диапазона (длина волны 940нм) VD2, подключен к выводу PD1. Светодиоды имеют инверсное подключение, т.е. их свечение обеспечивается уровнем логического нуля на выводе контроллера.

В качестве фотоприемника используется фотодиод инфракрасного диапазона (940нм) VD, подключен к выводу PD5. В не засвеченном состоянии на выводе контроллера находится логическая единица. При попадании на фотодиод света нужной длины волны сопротивление его обратно-смещенного перехода резко падает практически до 0 и замыкает вывод контроллера на землю. Таким образом, фотоприемник имеет также инверсное подключение.

Также на данной схеме имеется подтягивающий резистор 10 кОм от ножки .

5. Алгоритм функционирования

5.1 Исходные представления к алгоритму

Работу устройства можно разделить на 2 действия

- ожидание нажатия на кнопки

- обработка нажатий

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

При нажатии на кнопку SB1, SB2, SB3 соответствующий вывод контроллера соединяется с землей, и контроллер начинает обрабатывать нажатие.

Если произошло нажатие на кнопку SB1 или SB2 контроллер начинает измерение расстояния до объекта. По окончании измерения результат выдается на дисплей.

Если произошло нажатие на кнопку SB3 результаты измерений должны быть очищены, также как и дисплей.

5.2 Схема алгоритма

Рисунок - Блок-схема работы контроллера

6. Программное обеспечение контроллера

6.1 Исходные предположения

Алгоритм работы устройства может быть реализован на различных языках программирования (C/C++, Assembler). Размер программируемой памяти программы 2 КБ.

Для хранения и передачи данных в программе должны использоваться регистры контроллера R0…R31, а также область памяти программ для хранения констант и данных для хранения некоторых переменных.

6.2 Характеристика состава и объектов программного продукта контроллера

Программу состоит из следующих блоков:

-начальная инициализация контроллера

-процедура инициализации дисплея

-пустой бесконечный цикл

-обработчик прерывания по изменению состояний на входах кнопок

-процедура умножения для расчета расстояния

-процедура перевода числа из двоичного в двоично-десятичный формат

-процедура вывода на дисплей

-процедуры задержки

Начальная инициализация контроллера состоит в настройке портов контроллера (выводы 0-5 порта B на выход для вывода на LCD, выводы 0,1 порта D на выход - светодиод питания и фотопередатчик, выводы 2-5 порта D на вход - кнопки и фотоприемник). А также происходит запись строк-заготовок для вывода на дисплей формата «1: $», где $ - знак конца строки, будет использован в процедуре вывода.

Процедура инициализации дисплея состоит из настройки дисплея, которая осуществляется путем посылки на него служебных сообщений, устанавливающих разрядность, настройки курсора и вывода. Служебные сообщения отсылаются процедурой WriteCmd (Входные данные: R16(Temp) - адрес DDRAM + 0x80.).

После инициализации контроллер входит в режим ожидания. Этот режим реализован как бесконечный цикл (метка main). В режиме ожидания контроллер ждет возникновения прерывания. Прерывания возникнут при изменении состояния на любом из входов порта D, заданными маской в регистре PCMSK0. После возникновения прерывания контроллер уходит на его обработку.

В теле прерывания контроллер определяет вход, который вызвал прерывание, сравнивая предыдущее состояние входов (хранится в регистре flag) с текущим. Затем происходит переход по соответствующей метке (but0, but1, but2 - для кнопок; foto - для фотоприемника).

При обработке нажатий на кнопки 1 и 2 происходит изменение маски для прерывания PCMSK0, посылка зондирующего импульса и включение счетного таймера. При обработке нажатия на клавишу 3 происходит очистка результатов измерения. Для результатов измерения и последующего вывода на дисплей отведены 34 байта в ОЗУ (izm1: .byte 17). значения по адресам (izm+3) -( izm+7) очищаются записью нулей.

При обработке прерывания от фотоприемника происходит остановка таймера и расчет расстояния. Расчет расстояния ведется при помощи умножения числа из счетчика (tcnt1h, tcnt1l) на константу, полученную в результате отношения скорости света к удвоенной тактовой частоте генератора. После умножения число переводится в двоично-десятичное процедурой bin2BCD16. Затем результаты измерения в подготовленном формате записываются в ОЗУ.

После подсчета расстояния и перевода его в нужную форму происходит вывод на индикатор. Вывод осуществляется подпрограммой display, которая в свою очередь указывает начальный адрес строки в ОЗУ (ldi ZL,Low(izm1) и вызовает подпрограмму вывода строки.

Подпрограмма вывода строки действует следующим образом: в качестве адреса начала строки она извлекает число из регистра Z. Побайтно считывая данные из ОЗУ подпрограмма отправляет их на дисплей, до тех пор пока следующим символом для отправки не будет «$». После вывода маска прерываний вновь устанавливается на срабатывание от кнопок и контроллер переходит в режим ожидания.

Во время инициализации дисплея и вывода используются процедуры задержки Delay40mks и Delay1500mks, для задержки на 40 и 1500мкс соответсвенно.

6.3 Программа "Монитор" контроллера

Исходный текст программы контроллера представлен в приложении А данной пояснительной записки.

6.4 Комментарий к общесистемному программному обеспечению контроллера

Используемый в данном курсовом проекте микроконтроллер имеет 2 КБ программируемой в системе Flash память программы, 128 байтную EEPROM память данных, 128 байтное SRAM (статическое ОЗУ), 32 рабочих регистра общего назначения, последовательный программируемый USART.

7. Оценка объемов ОЗУ, ПЗУ. Распределение адресного пространства контроллера

Микроконтроллер имеет 2 КБ программируемой в системе Flash память программы, 128 байтная EEPROM память данных, 128 байтное SRAM (статическое ОЗУ). Исходный код программы (прошивка) генерируется в шестнадцатеричном формате *.hex, как для загрузки во Flash-память микроконтроллера (память программ), так и в EEPROM (электрически перепрограммируемая постоянная память). Две начальные и одна конечная строка прошивки (файл с расширением *.hex) представлены в таблице:

Таблица - Фрагмент прошивки

:02

0000

02

0000

FC

:10

0000

00

00C0

0FEF

07BB

0FE3

01BB

969A

00C0

8699

B3

...

….

..

….

….

….

….

….

….

….

….

..

:00

0000

01

FF

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

Первый байт - число информационных байт в строке. Для первой строки это 02, т.е. информационных байт (02H=2); для второй это 10H=16; в последней строке их 00H. Следующие два байта - адрес ячейки памяти, по которому записывается первый информационный байт строки (остальные информационные байты строки записываются в последующие ячейки памяти), третий байт отличается от нуля только в служебных строках. Он равен единице в последней строке, являющейся, очевидно, признаком конца файла. Далее идут пары информационных байт, каждая пара составляет ассемблерную команду или часть команды микроконтроллера AVR.

8. Краткая характеристика технических средств и технологии отладки аппаратной и программной сред контроллера

Программу для МК удобно создавать в специальных программах - компиляторах. ATtiny2313 поддерживается различными программными средствами и интегрированными средствами разработки, такими как компиляторы C, макроассемблеры, программные отладчики/симуляторы, внутрисхемные эмуляторы и ознакомительные наборы (CodeVisionAVR, C Compiler, AVR Studio, WinAVR).

AVR Studio 4 представляет собой набор инструментальных средств для работы с микроконтроллерами семейства AVR фирмы ATMEL. Работать с AVR Studio очень просто. Первоначально создается файл с расширением .asm, содержащий исходный текст программы. Далее необходимо загрузить в редактор исходный текст программы (в нашем случае программа написана на Assembler), в меню выбрать Build -> Build (F7). При этом в случае отсутствия ошибок в набранном исходном коде выполнится компиляция исходного кода программы. В случае отсутствия ошибок исходный код преобразуется в специальный файл, который можно записывать во flash память микроконтроллера AVR. При этом в окне "Build" появится сообщение о результате компиляции (рисунок):

Рисунок - Сообщение о компиляции

Если в результате компиляции не было сообщения об ошибках - Error, то в папке с проектом появятся следующие файлы (рисунок):

Рисунок 9.2 - Файлы проекта

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

После этого, используя все ту же AVR Studio 4, можно осуществлять загрузку откомпилированного файла посредством SPI интерфейса с помощью программатора в память программ микроконтроллера.

Заключение

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

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

Список использованных источников

1. В.Б. Бродин, А.В. Калинин «Системы на микроконтроллерах и БИС программируемой логики» - Санкт-Петербург, ЭКОМ, 2002 - 400с.

2. ОС ТУСУР 6.1-99. Работы студенческие учебные и выпускные квалификационные. Общие требования и правила оформления.

3. Торгонский Л.А., Проектирование микроконтроллеров: / Методические указания по курсовому проектированию дисциплины “Проектирование центральных и периферийных устройств ЭВС-2”,-Томск:-Изд. ТУСУР, 2005 г.- 12 с.

Приложение

.include "C:\Program Files\Atmel\AVR\Tools\AvrAssembler\Appnotes\2313def.inc"

.def temp= R22

.def step= R23

.def flag= R24

.def temp2= R25

.org 0

.cseg ;область программы начиная с 0 адресса

rjmp RESET ; Reset Handler

//векторы аппаратных прерываний

rjmp PC_INT0 ; прерывание по изменению на входах порта D

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

; данные для инициализации

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

LCD_INIT_DATA:

.db 0b00000011,0b00000011 ; 30h Установка разрядности

.db 0b00000011,0b00000010 ; 20h Установка разрядности

.db 0b00000010,0b00001000 ; 28h Установка разрядности

.db 0b00000000,0b00001000 ; 0Ch Выглючение дисплея

.db 0b00000000,0b00000110 ; 06h Установка направления и разрешения сдвига

.db 0b00000000,0b00001111 ; 0Fh Включить индикатор и мигающий курсор

.db 0b00001000,0b00000000 ; Курсор домой

.db 0b00000000,0b00000001 ; 01h Очистка, курсор домой

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

;инициализация (настройка портов, инициализация дисплея)

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

Reset:

ldi temp, LOW(RAMEND)

out spl, temp ;установка указателя стека на дно ОП

ldi temp,0b00111111 ;разряды 0-5 порта D на выход (LCD)

out DDRD,temp

ldi temp,0b11111111

out portD,temp

ldi temp,0b01000011 ;0-2 разряды порта В - входы - кнопки

out DDRB,temp ;разряд 3-выход ШИМ-3

ldi temp,0b00111101;зажигаем индикатор «питание», фотопередатчик в 0

out portB,temp

ldi temp,0b01100011 ;разряды 0,1,5 порта D на выход, 2-4 на вход

out DDRD,temp

ldi temp,0b11111111

out portD,temp

ldi zh,high(izm1) ;записываем в ОЗУ начало первой строки (1:)

ldi zl,low(izm1)

ldi temp,0x31

std z+1,temp

ldi temp,0x3a

std z+2,temp

ldi temp,'$' ;символ $ используется как знак конца строки

std z+16,temp

ldi zh,high(izm2) ;записываем в ОЗУ начало второй строки (1:)

ldi zl,low(izm2)

ldi temp,0x33

std z+1,temp

ldi temp,0x3a

std z+2,temp

ldi temp,'$' ;символ $ используется как знак конца строки

std z+16,temp

ldi temp,(1<<pcie0)

sts PCICR,temp ;разрешение прерываний при изменении состояния на входах порта D

ldi temp,0b00011100 ;задание масок для активации прерываний

sts PCMSK0,temp ;прерывания разрешены при изменении состояния на входах 2-4 порта D

ldi temp,(1<<toie1)

sts timsk1,temp

ldi temp,(1<<cs11)

sts tccr1b,temp

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

sei ;разрешаем прерывания

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

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

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

main:

rjmp main ;бесконечный цикл ожидание нажатия на кнопку или прихода импульса

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

; процедура умножения

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

.def mc16uL =r16 ;младший байт множителя

.def mc16uH =r17 ;старший байт множителя

.def mp16uL =r18 ;младший байт множимого

.def mp16uH =r19 ;старший байт множижимого

.def m16u0 =r12 ;1-й байт результата

.def m16u1 =r13 ;2-й байт результата

.def m16u2 =r20 ;3-й байт результата

.def m16u3 =r21 ;4-й байт результата

.def mcnt16u =r22 ;счетчик повторений

;***** Code

mpy16u: clr m16u3

clr m16u2

ldi mcnt16u,16

lsr mp16uH

ror mp16uL

m16u_1: brcc noad8

add m16u2,mc16uL

adc m16u3,mc16uH

noad8: ror m16u3

ror m16u2

ror m16u1

ror m16u0

dec mcnt16u

brne m16u_1

ret

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

; процедура перевода в десятичный формат

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

.equ AtBCD0 =10

.equ AtBCD2 =11

.def tBCD0 =r10 ;двоично-десятичное число цифры 0 и 1

.def tBCD1 =r11 ;двоично-десятичное число цифры 2 и 3

.def fbinL =r12 ;младший байт двоичного числа

.def fbinH =r13 ;старший байт двоичного числа

.def cnt16a =r16 ;счетчик

.def tmp16a =r25 ;переменная

bin2BCD16:

ldi cnt16a,16

clr tBCD1

clr tBCD0

clr ZH

bBCDx_1:lsl fbinL

rol fbinH

rol tBCD0

rol tBCD1

dec cnt16a

brne bBCDx_2

ret

bBCDx_2:ldi r30,AtBCD2+1

bBCDx_3:

ld tmp16a,-Z

subi tmp16a,-$03

sbrc tmp16a,3

st Z,tmp16a

ld tmp16a,Z

subi tmp16a,-$30

sbrc tmp16a,7

st Z,tmp16a

cpi ZL,AtBCD0

brne bBCDx_3

rjmp bBCDx_1

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

; работа с дисплеем

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

display:

rcall Delay40mks ; Пауза перед включением

ldi Temp,0b10000000

rcall WriteCmd ; Установка курсора

ldi ZL,Low(izm1)

ldi ZH,High(izm1)

rcall WriteLn ; Вывод 1-й строки

ldi Temp,0b11000000

rcall WriteCmd ; Установка курсора

ldi ZL,Low(izm2)

ldi ZH,High(izm2)

rcall WriteLn ; Вывод 2-й строки

ret

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

; Инициализация LCD

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

INIT_LCD16S2D:

ldi R16,0

out portC,R16

rcall Delay40mks

ldi b1,16

ldi ZL,Low(LCD_INIT_DATA*2)

ldi ZH,High(LCD_INIT_DATA*2)

Init_next0:

lpm

out portC,r0 ;Temp

adiw ZL,1 ;AddImmedaiate to Word. Инкрементится слово.

nop ;Не менее 40нс

nop

sbi portC,4

nop ;Не менее 230нс

nop

nop

nop

nop

nop

cbi portC,4

rcall Delay40mks

dec b1

brne Init_next0

rcall Delay1500mks

ret

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

; Пауза 40 мксек

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

Delay40mks:

push Temp

ldi Temp,0

Loop:

dec Temp

brne Loop

pop Temp

ret

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

; Пауза 1500 мксек

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

Delay1500mks:

push Temp

push b1

ldi Temp,0

ldi b1,20

Loop3:

dec Temp

brne Loop3

dec b1

brne Loop3

pop b1

pop Temp

ret

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

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

; выбор оласти DDRAM.

; Входные данные: R16(Temp) - адрес DDRAM + 0x80.

; Изменяется регистр R16(Temp).

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

WriteCmd:

push Temp

Swap Temp

andi Temp,0b00001111

out portC,Temp

nop ;Не менее 40нс

nop

sbi portC,4

nop ;Не менее 230нс

nop

nop

nop

nop

nop

cbi portC,4

nop ;Не менее 270нс

nop

nop

nop

nop

nop

nop

pop Temp

andi Temp,0b00001111

out portC,Temp

nop ;Не менее 40нс

nop

sbi portC,4

nop ;Не менее 230нс

nop

nop

nop

nop

nop

cbi portC,4

rcall Delay40mks

ret

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

; Вывод текстовой строки на дисплей.

; Входные данные: регистр Z - адрес строки в

; программной памяти. '$' - конец строки.

; Изменяется регистр R16(Temp), Z.

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

WriteLn:

; lpm

ld temp,z

cpi Temp,'$'

breq WriteLnEnd

adiw ZL,1

push Temp

Swap Temp

andi Temp,0b00001111

ori Temp,0b00100000

out portC,Temp

nop ;Не менее 40нс

nop

sbi portC,4

nop ;Не менее 230нс

nop

nop

nop

nop

nop

cbi portC,4

nop ;Не менее 270нс

nop

nop

nop

nop

nop

nop

pop Temp

andi Temp,0b00001111

ori Temp,0b00100000

out portC,Temp

nop ;Не менее 40нс

nop

sbi portC,4

nop ;Не менее 230нс

nop

nop

nop

nop

nop

cbi portC,4

rcall Delay40mks

rjmp WriteLn

WriteLnEnd:

ret

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

; обработчик прерывания от переключателей

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

PC_INT0:

clr temp2

in temp,pinb ;узнаем какая из кнопок была нажата

andi temp,0b00111100 ;сравнивая текущее положение переклббчателей с предыдущим (flag)

andi flag,0b00111100

eor flag,temp

;в зависимости от нажатой кнопки переходим к обработчику

sbrc flag,2

rjmp but0

sbrc flag,3

rjmp but1

sbrc flag,4

rjmp but2

sbrc flag,5

rjmp foto

exit_int0:

in flag,pinb ;заносим в флаг текущее состояние кнопок

reti

;********

but0: ;обработчик нажатия на кнопку 1

sbic pind,2 ;если кнопка была отпущена выходим из прерывания

rjmp exit_int0

ldi temp2,0x01 ;нажата 1-я кнопка

sts PCICR,temp ;разрешение прерываний при изменении состояния на входах порта D

ldi temp,0b00100000 ;задание маски для активации прерываний

sts PCMSK0,temp ;прерывания разрешены при изменении состояния на входе 5 порта D

sbi portD,1 ;включаем передатчик

rcall timer_clear_start ;обнуляем таймер и запускаем

sbi portD,0 ;вылючаем передатчик

rjmp exit_int0

but1: ;обработчик нажатия на кнопку 2

sbic pinD,3 ;если кнопка была отпущена выходим из прерывания

rjmp exit_int0

ldi temp2,0x02 ;нажата 2-я кнопка

sts PCICR,temp ;разрешение прерываний при изменении состояния на входе 5 порта D

ldi temp,0b00100000 ;задание маски для активации прерываний

sts PCMSK0,temp ;прерывания разрешены при изменении состояния на входе 5 порта D

sbi portD,1 ;включаем передатчик

rcall timer_clear_start ;обнуляем таймер и запускаем

sbi portD,0 ;вылючаем передатчик

rjmp exit_int0

but2: ;обработчик нажатия на кнопку 3

sbic pinD,4 ;если кнопка была отпущена выходим из прерывания

rjmp exit_int0 ;обнуляем результаты измерения в ОЗУ для 2-х строк

ldi temp,0x30

ldi zh,high(izm1+3)

ldi zl,low(izm1+3)

rcall zerowr

ldi temp,0x30

ldi zh,high(izm2+3)

ldi zl,low(izm2+3)

rcall zerowr

rcall display ;выводим на дисплей нули

rjmp exit_int0

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

ldi temp,(1<<cs11) ;останавливаем таймер

sts tccr1b,temp

in mc16uL,tcnt1l ;записываем содержимое таймера в множитель

in mc16uh,tcnt1h

ldi mp16uL,0x07 ;записываем константу в множитель для рассчета расстояния

ldi mp16uh,0x00

rcall mpy16u ;вызоваем процедуру умножения

rcall bin2BCD16 ;вызоваем процедуру перевода в двоично-десячичное число

sbrc temp,0 ;в зависимости от выбранной строчки перходим по метку

rjmp foto1

sbrc temp,1

rjmp foto2

rjmp exit_int0

foto1:

ldi ZL,Low(izm1) ;устанавливам на изменение 1-й строчку

ldi ZH,High(izm1)

rcall digitwr

rjmp exit_int0

foto2:

ldi ZL,Low(izm2) ;устанавливам на изменение 2-ю строчку

ldi ZH,High(izm2)

rcall digitwr

rjmp exit_int0

;*******

timer_clear_start: ;очистка таймера и старт

clr temp

sts tcnt1h,temp

sts tcnt1l,temp

ldi temp,(1<<cs11)

sts tccr1b,temp

ret

digitwr:

mov temp,r11

rcall digitwr2

mov temp,r10

rcall digitwr2

ret

digitwr2:

ldi temp2,0x30

push temp

swap temp

andi temp,0x0f

add temp,temp2

st z+,temp

pop temp

andi temp,0x0f

add temp,temp2

st z+,temp

ret

zerowr:

st z+,temp ;запись в ОЗУ по адрессу Z переменной temp

st z+,temp

st z+,temp

st z+,temp

ret

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

; выделение памяти в озу для результатов измерения

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

.dseg

izm1: .byte 17 ;резервируем 17 байт

izm2: .byte 17

Размещено на Allbest.ur


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

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

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

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

    курсовая работа [757,2 K], добавлен 26.12.2012

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

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

  • Основания для выбора контроллера, который подключается по IDE-шине к устройству CD-ROM. Принцип действия устройства, описание структурной и принципиальной схемы. Выбор элементной базы. Алгоритм работы устройства, разработка программного обеспечения.

    курсовая работа [136,0 K], добавлен 23.12.2012

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

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

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

    презентация [47,7 K], добавлен 26.11.2009

  • Принципы организации и особенности обработки прерываний на основе контроллера 8259A. Общая характеристика аппаратных средств системы прерываний PIC (Programmable Interrupt Controller). История разработки и порядок работы с технологией Plag and Play.

    курсовая работа [305,1 K], добавлен 29.07.2010

  • Этапы следования данных от центрального процессора системы до монитора. Архитектура простейших видеоадаптеров. Характеристика структуры видеопамяти. Внешние регистры: графического контроллера и ЭЛТ; синхронизатора. Регистры контроллера атрибутов.

    реферат [12,9 K], добавлен 19.04.2010

  • Структура корпоративной информационной системы организации. Разработка адресного пространства и системы DNS. Структура домена КИС. Выбор аппаратной и программной конфигурации рабочих станций и серверного оборудования. Конфигурирование типовых сервисов.

    курсовая работа [636,2 K], добавлен 29.07.2013

  • Особенности работы с последовательным портом в среде Visual Studio. Тестирование работы протокола Modbus RTU в режиме Slave. Описание и технические характеристики программируемого логического контроллера Овен 100. Построение диаграммы передачи фреймов.

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

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