Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab4.doc
Скачиваний:
6
Добавлен:
20.09.2019
Размер:
124.93 Кб
Скачать

6.1.4.1 Вивід імпульсних сигналів з використанням таймерів-лічильників

У разі жорстких вимог до використання часу виконання основної програми мікроконтролера для формування імпульсних сигналів застосовують таймери-лічильники.

Звичайно за допомогою таймерів вирішують наступні типи задач:

                   Формування тривалості затримки;

                   Формування імпульсів з заданою тривалістю;

                   Формування імпульсів з заданими тривалістю та періодом повторення.

Загальний алгоритм вирішення перших двох задач передбачає ініціалізацію обраного таймеру на реалізацію часу затримки, налаштування системи переривань та запуск таймеру.

Відмінності починаються у підпрограмі переривань. У першому випадку у підпрограмі переривань вимикається таймер. У другому випадку – виконуються також процедури маніпуляції з лініями портів, де формуються сигнали. 

При вирішенні третього типу задач використовують PWM режим роботи. За рахунок ініціалізації таймера можливе безперервне формування PWM- сигналу на певних портах мікроконтролера.

Розглянемо два приклади реалізації задач другого та третього типів.

Приклад 4.1

У цьому прикладі забезпечується формування на лінії порту LED2 негативного  імпульсу тривалістю 2с.  Необхідна тривалість затримки забезпечується вибором коефіцієнту попереднього подільника 1/1024 таймера ТС1 та завантаженням у робочі регістри TCNT1 відповідного початкового значення.

;------------------------------------------------------------------

;Файл   lab4.asm, приклад 2

;Процесор ATmega16-16PI, частота 10 МГц

;------------------------------------------------------------------          

.include "m16def.inc"                            ;Файл опису процесора

;------------------------------------------------------------------

.equ       ini_DDRA       =0b11110000    ;1-передача, 0-прийом

.equ       ini_PORTA     =0b11000000    ;початковий стан порту PА

.equ      LED2    =7                               ;лінія керування світлодіодом VD2 (L_активна)  

;------------------------------------------------------------------

.def      TMP  =R16                             ;символічне ім`я регістру R16

;------------------------------------------------------------------

.equ      TC1_ON_1024=0b00000111     ;вмикання  ТС1/1024

.equ      TC1_OFF=0                            ;вимкнення ТС1

.equ      count_2s = (0xffff-19531)         ;затримка на 2 секунди до переривання (подільник /1024)

;------------------------------------------------------------------

;------------------------------------------------------------------ 

            .CSEG

            .ORG   $0000

            rjmp      init                              ;Вектор розгалуження при рестарті

            .ORG   OVF1addr

            rjmp     INT_TC1_OVF                       ;Вектор переривань переповнення таймера ТС1

;------------------------------------------------------------------

            .ORG $0030      

init:

;           Ініціалізація портів

            ldi         TMP,ini_DDRA           ;визначення типу ліній порту PA - прийом/передача

            out       DDRA,TMP

            ldi         TMP,ini_PORTA         ;визначення початкового стану ліній порту

            out       PORTA,TMP  

;           Ініціалізація стеку

            ldi         TMP,high(RAMEND)  ;завантаження адреси початку стеку

            sts        SPH,TMP       

            ldi          TMP,low (RAMEND)

            sts        SPL,TMP        

;           Ініціалізація таймера ТС1

            ldi         TMP,high(count_2s)     ;завантаження ТС1 на затримку 2 секунди

            out       TCNT1H,TMP

            ldi         TMP,low(count_2s)

            out       TCNT1L,TMP

 

            ldi         TMP,(1<TOIE1)          ;дозвіл переривань переповнення ТС1

            out       TIMSK,TMP

;-------

            sei                                           ;загальний дозвіл переривань                          

;------------------------------------------------------------------

;------------------------------------------------------------------

        ;Основна програма        

;------------------------------------------------------------------

MAIN:            

            cbi        PORTA,LED2             ;початок формування імпульсу на лінії LED2

            ldi         TMP,TC1_ON_1024    ;вмикання ТС1 з попереднім подільником 1/1024

            out       TCCR1B,TMP

MAIN1:

             rjmp    MAIN1

;------------------------------------------------------------------          

;------------------------------------------------------------------

;Підпрограма переривань переповнення ТС1

INT_TC1_OVF:

            sbi        PORTA,LED2             ;кінець формування імпульсу на лінії LED2

            ldi         TMP,TC1_OFF                       ;вимкнення таймера ТС1

            out       TCCR1B,TMP

            reti

;------------------------------------------------------------------

            .exit

 

Приклад 4.2

У цьому прикладі забезпечується формування на лінії порту PWM (PD4 – OC1B) періодичної послідовності позитивних імпульсів з алгоритмом утворення “Fast PWM”.

Використана секція “В” таймера ТС1, попередній подільник 1/256. Реалізовано режим “Fast PWM”, 8 розрядів, порт встановлюється в «1» на інтервалі формування імпульсу.

Параметри імпульсів:

                    Частота імпульсної послідовності – 152,6 Гц. Частота визначається наступним чином

FOC=fCLK / (N*TOP),

де fCLK – частота генератора мікроконтролера; N – коефіцієнт ділення попереднього подільника; TOP – модуль рахування. Для  8-бітової “Fast PWM” величина TOP складає  256.

                    Тривалість – 3,25мс. Константа завантаження регістру OCR визначається  у результаті співставлення константи, що відповідає за період («0» відповідає тривалості періоду 6,5 мс), та модулю рахування ТС1 (TOP =256).

                    Точність PWM – 8 біт.

;------------------------------------------------------------------

;Файл   lab4.asm

;Процесор ATmega16-16PI, частота 10 МГц

;------------------------------------------------------------------          

.include "m16def.inc"                ;Файл опису процесора

;------------------------------------------------------------------

.equ       ini_DDRD= (1<PD4)  ;0b00010000    1-передача, 0-прийом

;------------------------------------------------------------------

.def      TMP =R16                   ;символічне ім`я регістру R16

;------------------------------------------------------------------

;Константи ініціалізації ТС1, секція "В", режим ""Fast PWM" 8 біт

;WGM10=WGM12=1   - 8 біт PWM

;COM1B1=COM1B0=1 - порт встановлюється в "1" після зрівняння

;CS12=1                       - ТС1 увімкнено, попередній подільник 1/256

           

.equ      ini_TCCR1A=(1<COM1B1)|(1<COM1B0)|(1<WGM10)          

.equ      ini_TCCR1B=(1<CS12)|(1<WGM12)

.equ      ini_TCNT1=0                           ;константа завантаження періоду 6,5мс

.equ      ini_OCR1B=(0x00ff-127)         ;константа завантаження тривалості імпульсів 3,25мс

;------------------------------------------------------------------

        ;Програма

;------------------------------------------------------------------ 

             .CSEG

             .ORG $0000

init:

;           Ініціалізація портів

            ldi     TMP,ini_DDRD              ;визначення типу ліній порту PA - прийом/передача

            out     DDRD,TMP

;           Ініціалізація таймера ТС1

            ldi         TMP,high(ini_TCNT1)  ;завантаження в ТС1 періоду

            out       TCNT1H,TMP

            ldi         TMP,low(ini_TCNT1)

            out       TCNT1L,TMP

            ldi         TMP,high(ini_OCR1B) ;завантаження в ТС1 тривалості імпульсів

            out       OCR1BH,TMP

            ldi         TMP,low(ini_OCR1B)

            out       OCR1BL,TMP              

            ldi         TMP,ini_TCCR1B        ;ініціалізація режиму роботи

            out       TCCR1B,TMP

            ldi         TMP,ini_TCCR1A       ;ініціалізація режиму роботи, включення PWM

            out       TCCR1A,TMP

;------------------------------------------------------------------

;------------------------------------------------------------------

        ;Основна програма        

;------------------------------------------------------------------

MAIN:            

             rjmp    MAIN

;------------------------------------------------------------------          

            .exit

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]