Помощь в написании студенческих работ
Антистрессовый сервис

Основные приемы программирования универсальных портов ввода-вывода микроконтроллеров AVR

Лабораторная работаПомощь в написанииУзнать стоимостьмоей работы

Применение светодиодной индикации в микроконтроллерных системах часто бывает недостаточно, например, для вывода числовой и символьной информации, для этого применяют сегментные или жидкокристаллические индикаторы (ЖКИ). Наиболее популярными из алфавитно-цифровых ЖКИ-модулей являются модули, построенные на базе контроллера HD44780. Контролер HD44780 потенциально может управлять 2-мя строками по 40… Читать ещё >

Основные приемы программирования универсальных портов ввода-вывода микроконтроллеров 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 МГц. Тогда время одного такта

TCLK = 1/FCLK = 1/(4•106) = 250 нс.

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

NCLK = TD / TCLK = 40 000/0,25 = 160 000.

NCLK = TD / TCLK = 27 000/0,25 = 108 000.

Осциллограммы Режим «Прыгающий огонек»:

Режим «Пожарная сигнализация»:

Текст управляющей программы для компилятора mikroPascal

program Lab1Var6;

var c: byte;

s:integer;

begin

Lcd4_Custom_Init (PORTA, 7,6,5,4,PORTA, 0,1,2);

ddrD:=0xff;

portd:=0xff;

ddrC:=%11 110 111;

s:=0;

while (true) do

begin

Lcd4_Custom_Cmd (LCD_CLEAR);

Lcd4_Custom_Out (1,1,'Prygauyshiy');

Lcd4_Custom_Out (2,1,'ogonek');

c:=pinc;

c:=c and not (%11 110 111);

if c=%1 000 then

while s<>1 do begin

portD:=0xff;

portd:=portd and not (1 shl 1);

delay_Cyc (160 000);

portd:=portd or (1 shl 1);

delay_Cyc (160 000);

c:=pinc;

c:=c and not (%11 110 111);

if c=0 then break;

portd:=portd and not (1 shl 4);

delay_Cyc (160 000);

portd:=portd or (1 shl 4);

delay_Cyc (160 000);

c:=pinc;

c:=c and not (%11 110 111);

if c=0 then break;

portd:=portd and not (1 shl 7);

delay_Cyc (160 000);

portd:=portd or (1 shl 7);

delay_Cyc (160 000);

c:=pinc;

c:=c and not (%11 110 111);

if c=0 then break;

portd:=portd and not (1 shl 0);

delay_Cyc (160 000);

portd:=portd or (1 shl 0);

delay_Cyc (160 000);

c:=pinc;

c:=c and not (%11 110 111);

if c=0 then break;

portd:=portd and not (1 shl 5);

delay_Cyc (160 000);

portd:=portd or (1 shl 5);

delay_Cyc (160 000);

c:=pinc;

c:=c and not (%11 110 111);

if c=0 then break;

portd:=portd and not (1 shl 2);

delay_Cyc (160 000);

portd:=portd or (1 shl 2);

delay_Cyc (160 000);

c:=pinc;

c:=c and not (%11 110 111);

if c=0 then break;

portd:=portd and not (1 shl 1);

delay_Cyc (160 000);

portd:=portd or (1 shl 1);

delay_Cyc (160 000);

c:=pinc;

c:=c and not (%11 110 111);

if c=0 then break;

end else

while s<>1 do

begin

Lcd4_Custom_Cmd (LCD_CLEAR);

Lcd4_Custom_Out (1,1,'Pojarnaya');

Lcd4_Custom_Out (2,1,'signalizaciya');

portd:=0xff;

portd:=portd and not (1 shl 1);

portd:=portd and not (1 shl 2);

portd:=portd and not (1 shl 3);

portd:=portd and not (1 shl 4);

portd:=portd and not (1 shl 5);

delay_Cyc (108 000);

c:=pinc;

c:=c and not (%11 110 111);

if c=%1 000 then break;

portd:=portd or (1 shl 1);

portd:=portd or (1 shl 2);

portd:=portd or (1 shl 3);

portd:=portd or (1 shl 4);

portd:=portd or (1 shl 5);

delay_Cyc (108 000);

c:=pinc;

c:=c and not (%11 110 111);

if c=%1 000 then break;

portd:=portd and not (1 shl 4);

portd:=portd and not (1 shl 5);

portd:=portd and not (1 shl 6);

portd:=portd and not (1 shl 7);

portd:=portd and not (1 shl 0);

delay_Cyc (108 000);

c:=pinc;

c:=c and not (%11 110 111);

if c=%1 000 then break;

portd:=portd or (1 shl 4);

portd:=portd or (1 shl 5);

portd:=portd or (1 shl 6);

portd:=portd or (1 shl 7);

portd:=portd or (1 shl 0);

delay_Cyc (108 000);

c:=pinc;

c:=c and not (%11 110 111);

if c=%1 000 then break;

end;

end;

end.

Листинг файла проекта VMLab содержащий описание устройства

.MICRO «ATmega16»

.TOOLCHAIN «GENERIC»

.TARGET «LAB1VAR6.hex»

.CLOCK 4meg

.POWER VDD = 5 VSS = 0;

D8 VDD uzel0

R8 uzel0 PD0 330

D1 VDD uzel1

R1 uzel1 PD1 330

D2 VDD uzel2

R2 uzel2 PD2 330

D3 VDD uzel3

R3 uzel3 PD3 330

D4 VDD uzel4

R4 uzel4 PD4 330

D5 VDD uzel5

R5 uzel5 PD5 330

D6 VDD uzel6

R6 uzel6 PD6 330

D7 VDD uzel7

R7 uzel7 PD7 330

K0 PC3 VSS LATCHED

R9 VDD PC3 2K

Xdisp LCD (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. В результате чего по заданию была спроектирована елочная гирлянда с микроконтроллерным управлением, реализующим два режима работы: «Прыгающий огонек» и «Пожарная сигнализация». Переключение между режимами осуществляется при нажатии кнопки на панели управления. Результат работы представлен в виде диаграмм сигналов с заданной задержкой на виртуальном осциллографе.

Показать весь текст
Заполнить форму текущей работой