Процесс разработки контроллера измерителя расстояний
Средства индикации, сигнализации, подключения. Датчики и исполнительные органы. Краткая характеристика технических средств и технологии отладки аппаратной и программной сред контроллера. Распределение адресного пространства. Алгоритм работы устройства.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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