Реализация динамической индикации в микроконтроллерах AVR




Цель работы: изучение методов динамического отображения информации на сегментных индикаторах.

Краткий обзор

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

Возьмём для примера микроконтроллер Atmega16, у него имеется 4 порта по 8 выводов.

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

 

Следовательно для того чтобы подключить допустим кнопку надо менять микроконтроллер, или использовать динамическую индикацию-это метод отображения целостной картины через быстрое последовательное отображение отдельных элементов этой картины. Причем, «целостность» восприятия получается благодаря инерционности человеческого зрения. То есть мы последовательно включаем индикаторы с частотой примерно 30 Гц(30 кадров в секунду).

Динамическая индикация на примере Attiny2313

Данный проект находится в папке с лабораторной\005lab\005.dsn

Программа:

.include "2313def.inc"

.def Temp1=R16

.def Temp2=R17

.def Temp3=R18

.def Temp4=R19

.def Temp=R20

.dseg

Digit:.byte 4

.cseg

.org 0

rjmp RESET; Reset Handler

rjmp EXT_INT0; IRQ0 Handler

rjmp EXT_INT1; IRQ1 Handler

rjmp TIM_CAPT1; Timer1 Capture Handler

rjmp TIM_COMP1; Timer1 Compare Handler

rjmp TIM_OVF1; Timer1 Overflow Handler

rjmp TIM_OVF0; Timer0 Overflow Handler

rjmp UART_RXC; UART RX Complete Handler

rjmp UART_DRE; UDR Empty Handler

rjmp UART_TXC; UART TX Complete Handler

rjmp ANA_COMP; Analog Comparator Handler

 

EXT_INT0: ret

EXT_INT1: ret

TIM_CAPT1: ret

TIM_OVF0: ret

TIM_OVF1: ret

UART_RXC: ret

UART_DRE: ret

UART_TXC: ret

ANA_COMP: ret

TIM_COMP1: ret

reset: ldi Temp1,RamEnd;инициализация стека

out SPL,Temp1

cli

 

ldi Temp,0b11111111;настройка портов

out ddrb,Temp

 

ldi Temp,0b00001111

out ddrd,Temp

 

ldi Temp,4

sts Digit,Temp;загрузка начальных сначений

ldi Temp,3

sts Digit+1,Temp

ldi Temp,2

sts Digit+2,Temp

ldi Temp,1

sts Digit+3,Temp

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

;MAIN

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

IndicCycle: rcall Display;цикл индикации

rjmp IndicCycle

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

Display:

;последовательный вывод на индикацию содержимого

;переменной Digit

 

lds Temp1,Digit;загружаем 0-ю ячейку

ldi Temp,0b00001110;активируем 0-й разряд

;индикации

out PortD,Temp

rcall Decoder;вызываем 7-сегм. декодер

out PortB,Temp1;выводим значение в порт

rcall Delay1;ждем

 

lds Temp1,Digit+1;и.т.д

ldi Temp,0b00001101

out PortD,Temp

rcall Decoder

out PortB,Temp1

rcall Delay1

 

lds Temp1,Digit+2

ldi Temp,0b00001011

out PortD,Temp

rcall Decoder

out PortB,Temp1

rcall Delay1

 

lds Temp1,Digit+3

ldi Temp,0b00000111

out PortD,Temp

rcall Decoder

out PortB,Temp1

rcall Delay1

 

ret

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

Decoder:

;преобразование двоичного числа

;в код 7-сегментного индикатора

ldi ZL,Low(DcMatrix*2);инициализация массива

ldi ZH,High(DcMatrix*2)

ldi Temp2,0;прибавление переменной

add ZL,Temp1;к 0-му адресу массива

adc ZH,Temp2

 

lpm;загрузка значения

mov Temp1,r0

ret

DcMatrix:

;массив - таблица истинности декодера

; hgfedcba hgfedcba

.db 0b00111111,0b00000110;0,1

.db 0b01011011,0b01001111;2,3

.db 0b01100110,0b01101101;4,5

.db 0b01111101,0b00000111;6,7

.db 0b01111111,0b01101111;8,9

 

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

Delay1:

;цикл задержки

push Temp1

push Temp2

ldi Temp1,0

ldi Temp2,50

 

d11: dec Temp1

brne d11

dec Temp2

brne d11

pop Temp2

pop Temp1

ret

Данный проект находится в папке с лабораторной\005lab\005.aps

Лабораторное задание

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

 

Вариант Число
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

Разводка индикатора:



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-04-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: