Основные приемы программирования универсальных портов ввода-вывода микроконтроллеров AVR
Цель работы: изучить основные приемы
программирования универсальных портов ввода-вывода микроконтроллеров AVR.
Задание:
Спроектировать елочную гирлянду с
микроконтроллерным управлением, реализующим два режима работы: «Прыгающий
огонек» и «Пожарная сигнализация». Гирлянда должна состоять из 8 светодиодных
индикаторов, подключенных к порту ввода-вывода D
микроконтроллера. Переключение между режимами осуществляется с помощью
двухпозиционного ключа, который соединен с линией PC3.
Название текущего режима отображается на ЖК-дисплее c
использованием транслитерации. Временную задержку формировать с использованием
стандартной процедуры компилятора mikroPascal
delay_Cyc.
Режим «Прыгающий огонек»: «огонек» перескакивает
с одного индикатора на другой в следующей последовательности D1
- D4 - D7
- D8 - D5
- D2 - D1.
После того, как «огонек» возвращается в исходное состояние, все повторяется
вновь. Пауза, в течение которой «огонек» не движется, составляет 40 мс.
Режим «Пожарная сигнализация»: сначала в течение
27 мс горят светодиоды 1, 2, 3, 4, 5, потом в течение того же времени горят
светодиоды 4, 5, 6, 7, 8, после чего все повторяется с начала.
программирование
микроконтроллер гирлянда
Принципиальная схема
Принцип работы и описание спроектированного
устройства
Светодиодные индикаторы D0
- D7 подключается к
выводу PD0 - PD7
микроконтроллера. Резисторы R1
- R8 ограничивают ток,
протекающий через светодиод, на уровне 20 мА (ток потребления светодиода).
После того как на выводе PD0
- PD7 устанавливается
уровень логической единицы, ток через светодиод не протекает и светодиод не
светится. При появлении низкого потенциала на данном выводе микроконтроллера
через диод начинает протекать ток, что вызывает его свечение.
Микроконтроллер кроме выдачи управляющих
воздействий может также принимать сигналы извне. Эта задача часто возникает при
подключении различного рода датчиков. Рассмотрим случай подключения дискретного
датчика, роль которого будет играть дискретная кнопка с фиксацией (двухпозиционный
ключ). При замыкании контактов кнопки должен «загораться» светодиод, при
размыкании - «гаснуть». Рассмотрим приведенную схему подробней. Кнопка SС0
подключена к линии PC3.
Когда она находится в разомкнутом состоянии, то на линии присутствует высокий
уровень сигнала. При замыкании кнопки на линии PC3
потенциал падает до нуля, микроконтроллер воспринимает это как низкий
логический уровень. Резистор R9
сопротивлением 2 кОм ограничивает ток короткого замыкания.
Применение светодиодной индикации в микроконтроллерных
системах часто бывает недостаточно, например, для вывода числовой и символьной
информации, для этого применяют сегментные или жидкокристаллические индикаторы
(ЖКИ). Наиболее популярными из алфавитно-цифровых ЖКИ-модулей являются модули,
построенные на базе контроллера HD44780.
Контролер HD44780
потенциально может управлять 2-мя строками по 40 символов в каждой,
поддерживает символы с матрицей 5х7 точек.
Расчет длительности временных интервалов пауз
Для формирования задержки 40мс и 27мс с помощью
команды delay_Cyc необходимо провести операции:
Частота тактирования микроконтроллера (частота
кварца) FCLK составляет 4 МГц. Тогда время одного такта
= 1/FCLK = 1/(4∙106) = 250 нс.
Далее необходимо подсчитать количество тактов,
необходимых для реализации требуемой задержки
NCLK = TD / TCLK = 40000/0,25 =
160000.= TD / TCLK = 27000/0,25 = 108000.
Осциллограммы
Режим «Пожарная сигнализация»:
Текст управляющей программы для компилятора mikroPascal
program
Lab1Var6;c:byte;:integer;_Custom_Init(PORTA,7,6,5,4,PORTA,0,1,2);:=0xff;:=0xff;:=%11110111;:=0;(true)
do_Custom_Cmd(LCD_CLEAR);_Custom_Out(1,1,'Prygauyshiy');_Custom_Out(2,1,'ogonek');:=pinc;:=c
and not(%11110111);c=%00001000 thens<>1 do begin:=0xff;:=portd and not(1
shl 1);_Cyc(160000);:=portd or (1 shl 1);_Cyc(160000);:=pinc;:=c and
not(%11110111);c=0 then break;:=portd and not(1 shl 4);_Cyc(160000);:=portd or
(1 shl 4);_Cyc(160000);:=pinc;:=c and not(%11110111);c=0 then break;:=portd and
not(1 shl 7);_Cyc(160000);:=portd or (1 shl 7);_Cyc(160000);:=pinc;:=c and
not(%11110111);c=0 then break;:=portd and not(1 shl 0);_Cyc(160000);:=portd or
(1 shl 0);_Cyc(160000);:=pinc;:=c and not(%11110111);c=0 then break;:=portd and
not(1 shl 5);_Cyc(160000);:=portd or (1 shl 5);_Cyc(160000);:=pinc;:=c and
not(%11110111);c=0 then break;:=portd and not(1 shl 2);_Cyc(160000);:=portd or
(1 shl 2);_Cyc(160000);:=pinc;:=c and not(%11110111);c=0 then break;:=portd and
not(1 shl 1);_Cyc(160000);:=portd or (1 shl 1);_Cyc(160000);:=pinc;:=c and
not(%11110111);c=0 then break;elses<>1
do_Custom_Cmd(LCD_CLEAR);_Custom_Out(1,1,'Pojarnaya');_Custom_Out(2,1,'signalizaciya');:=0xff;:=portd
and not(1 shl 1);:=portd and not(1 shl 2);:=portd and not(1 shl 3);:=portd and
not(1 shl 4);:=portd and not(1 shl 5);_Cyc(108000);:=pinc;:=c and
not(%11110111);c=%00001000 then break;:=portd or(1 shl 1);:=portd or(1 shl
2);:=portd or(1 shl 3);:=portd or(1 shl 4);:=portd or(1 shl
5);_Cyc(108000);:=pinc;:=c and not(%11110111);c=%00001000 then break;:=portd
and not(1 shl 4);:=portd and not(1 shl 5);:=portd and not(1 shl 6);:=portd and
not(1 shl 7);:=portd and not(1 shl 0);_Cyc(108000);:=pinc;:=c and
not(%11110111);c=%00001000 then break;:=portd or(1 shl 4);:=portd or(1 shl
5);:=portd or(1 shl 6);:=portd or(1 shl 7);:=portd or(1 shl
0);_Cyc(108000);:=pinc;:=c and not(%11110111);c=%00001000 then break;;
end;.
Листинг файла проекта VMLab
содержащий описание устройства
.MICRO "ATmega16"
.TOOLCHAIN "GENERIC"
.TARGET "LAB1VAR6.hex"
.CLOCK 4meg
.POWER VDD = 5 VSS = 0;VDD
uzel_0uzel_0 PD0 330VDD uzel_1uzel_1 PD1 330VDD uzel_2uzel_2 PD2 330VDD
uzel_3uzel_3 PD3 330VDD uzel_4uzel_4 PD4 330VDD uzel_5uzel_5 PD5 330VDD
uzel_6uzel_6 PD6 330VDD uzel_7uzel_7 PD7 330PC3 VSS LATCHEDVDD PC3 2KLCD(16 2
250K) PA0 PA1 PA2 PA7 PA6 PA5 PA4 nc3 nc2 nc1 nc0
.PLOT V(PD1)
.PLOT V(PD2)
.PLOT V(PD4)
.PLOT V(PD5)
.PLOT V(PD7)
.PLOT V(PD0)
.PLOT
V(PC3)
Вывод
В ходе данной лабораторной работы были получены
навыки работы с портами ввода-вывода микроконтроллера AVR.
В результате чего по заданию была спроектирована елочная гирлянда с
микроконтроллерным управлением, реализующим два режима работы: «Прыгающий
огонек» и «Пожарная сигнализация». Переключение между режимами осуществляется
при нажатии кнопки на панели управления. Результат работы представлен в виде
диаграмм сигналов с заданной задержкой на виртуальном осциллографе.