Читайте также:
|
|
Выход микроконтроллера AVR способен «поглащать» выходной ток до 20 мА (то есть ток втекает в выход и через внутренний n-канальный МОП-транзистор отводится на «землю»). Благодаря чему становится принципиально возможно подключать сегменты светодиодного дисплея непосредственно к выходам микроконтроллера AVR через токоограничительные резисторы R1…R8
Несмотря на то что каждый из выходов микроконтроллера способен работать при силе выходного тока 20 мА, в отношении предельно допустимых параметров устройства действуют определенные ограничения. Так, например, сумма всех выходных токов не должна превышать 200 мА, а сумма выходных токов портов В и С – 100 мА. Учитывая эти ограничения, сила тока должна быть выше 100 мА:8 = 12,5 мА, при условии, что включены все семь сегментов и десятичная запятая. Также можно допустить, что порт В, изображенный на Рис.7 – единственный порт, работающий с упомянутым выше током.
Для того чтобы определить номинал резисторов R1…R8, предназначенных для получения тока требуемой силы 12,5 мА, используем заданное в спецификации индикатора hp 5082-7730 прямое напряжение светодиода Uled = 1.5 В, а также указанное в характеристиках микроконтроллера AVR падение напряжения на выходном каскаде Us≈ 0.3 В.
Значение сопротивления определяется по формуле:
Ближайшее значение в стандартном ряду составляет 270 Ω.
Учитывая достаточно высокую нагрузку по току микроконтроллера AVR при непосредственном управлении светодиодным дисплеем, в глаза бросается еще один недостаток: даже одна отображаемая на дисплее позиция требует восемь выводов порта микроконтроллера! По этой причине при отображении нескольких позиций они, как правило, представляются в виде матрицы и обрабатываются в многоканальной системе с временным разделением каналов.
Программа
.device ATmega64
.include "m64def.inc"
;переопределения регистров и бит
.def temp =r16
.def out_data =r17
.def deley =r18
.def rab =r23
.def adw0 =r4
.def adw1 =r5
.def dig1 =r19
.def dig2 =r20
.def dig3 =r21
.def deley =r22
.def deley1 =r23
.equ razr1 =PF4
.equ razr2 =PF5
.equ razr3 =PF6
.equ row1 =PA0
.equ row2 =PA1
.equ row3 =PA2
.equ row4 =PA3
.equ col1 =PA4
.equ col2 =PA5
.equ col3 =PA6
.equ kdel1 =256; коэф. деления таймера Т0
.equ kdel2 =103; коэф. деления таймера Т1
.equ baud =233; задаем скорость обмена 2400 для частоты кварца 9МГц
.equ seg =PORTC
.equ TxD =PD1
;*****таблица векторов прерываний***********************************
.CSEG
.org $0000;начальный адpес пpогpаммы
rjmp Start;пеpеход к основной части пpогpаммы
.org $0026
reti;Регистр данных USART0 пуст
.org $0028
reti;USART0, передача завершена
Display:
mov temp, dig1
rcall _rd_tb1
cbi PORTF
rcall deley
sbi PORTF, razr1
mov temp, dig2
rcall _rd_tb1
cbi PORTF
rcall deley
sbi PORTF, razr2
mov temp, dig3
rcall _rd_tb1
cbi PORTF
rcall deley
sbi PORTF, razr3
ret
;*** подпрограмма перекодировки значения в семисегментный код****
_rd_tb1:
ldi ZH, High (seg table*2); загружаем указатель на таблицу
ldi ZL, Low (seg_table*2)
add ZL, temp; вычисляем адрес
lpm; читаем байт в r0
out seg, r0; включаем нужные сегменты
ret
;******Подпрограмма задержки для индикатора*****
_deley:
ldi deley1,1
_deley1:
dec deley
brne _deley1
dec deley1
brne _deley1
ret
;***** Основная программа******************************************
Start:
ldi temp, High(RAMEND);инициализация стека
out SPH, temp;
ldi temp, Low(RAMEND);
out SPL, temp;
;очищаем регистры
clr dig1
clr dig2
clr dig3
;настройка выходных линий разрядов на их выключение
in temp, DDRF
sbr temp, (1<<razr1)+(1<<razr2)+(1<<razr3)
out DDRF, temp
in temp, PORTF
sbr temp, (1<<razr1)+(1<<razr2)+(1<<razr3)
out PORTF, temp
; настройка выходных линий сегментов и их включение
ldi temp, $FF
out DDRA, temp
out seg, temp
;настройка выходных линий разрядов и их выключение
ldi temp, 1<<TxD
out DDRD, temp; настройка порта D на вывод
;устанавливаем скорость обмена
clr temp
sts UBRR0H,temp
ldi temp,Baud
out UBRR0L,temp
;Разрешение работы приемника и передатчика
ldi temp,(1<<RXEN0)|(1<<TXEN0)
out UCSR0B,temp
; Установка формата посылки: 8 бит данных, 1стоп-бита
ldi temp, (1<<UCSZ01)|(1<<UCSZ00)
sts UCSR0C,temp
clr out_data;очистка регистра
sei;разрешение всех прерываний
;Инициализация таймера Т1
ldi temp,0x05;установка коэффициента предварительного
out TCCR1B,temp;делителя 1024 таймера Т1
;программа измерения
Haupt
ldi rab,0b10010000;
out MCUCR,rab; «спящий режим» АЦП
sleep
in adw0,ADCL;младший разряд байта результата АЦП
in adw1,ADCH; старший разряд байта результата АЦП
out UDR,UCSRA;передача данных через UART
rcall wait1;вызов подпрограммы задержки на 2с
rjmp Haupt
;Подпрограмма задержки
wait1:
push temp;сохранение содержимого регистра temp
ldi temp,0;запись 0 в temp
out TCNT1H, temp;запись 0 в старший регистр таймера T1
out TCNT1L, temp; запись 0 в младший регистр таймера T1
ldi deley,0; запись 0 в deley
out TCNT0, deley; запись 0 в регистр таймера T0
wt1:
in temp,TCTN1L;чтение младшей части счетного регистра Т1
cpi temp,low(kdel2);сравнение с числом 67h
brlo wt1;переход если temp меньше чем kdel2
in temp,TCTN1H; чтение старшей части счетного регистра Т1
cpi temp, high(kdel2); сравнение с числом 00h
brlo wt1; переход если temp меньше чем kdel2
wt2:
in deley,TCTN0; чтение счетного регистра Т0
cpi temp, kdel1; сравнение с числом 256
brlo wt2; переход если deley меньше чем kdel1
pop temp;восстановление значения регистра temp
ret;выход из подпрограммы
main:
rcall Display
rjmp main
; таблица констант в памяти подпрограммы
seg_table:
.db $C0, $F9,$A4,$B0,$99,$92,$82,$F8,$80,$90,$88,$83,$C6,$A1,$86,$8E,$FF
.EXIT
Заключение
В соответствии с техническим заданием был разработан измерительный комплекс температуры на базе микроконтроллера фирмы Atmel Mega8 с тактовой частотой 9МГц. Измерение освещенности происходит каждые 2 с. Измеренная информация по интерфейсу UART передается в ПК со скоростью 2400 бит/с. Для реализации данного измерительного прибора была написана программа на языке Ассемблер. Измеренные данные так же можно увидеть на светодиодном индикаторе LED hp 5082-7730. Схема
Список литературы
1. Трамперт В. Измерение, управлениеи регулирование с помощью AVR-микроконтроллеров.: Пер. с нем. – К.: «МК-Пресс», 2006. – 208с.
2. Белов А.В. Самоучитель разработчика устройств на микроконтроллерах AVR. – СПб.: Наука и техника, 2008. – 544с.
3. Как превратить компьютер в измерительный комплекс. Пер. с фр./ П.Гёлль. – М.: «ДМК», 1999. – 144с.
Дата добавления: 2015-10-23; просмотров: 97 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Описание выводов микроконтроллера, используемых в устройстве | | | Мотиви громадської та інтимної лірики В.Сосюри. Прочитати напам’ять вірш поета |