Таймер в Attiny2313

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
ATrosh
Открыл глаза
Сообщения: 64
Зарегистрирован: Пт ноя 18, 2011 18:43:01

Re: Таймер в Attiny2313

Сообщение ATrosh »

В завершении к выше сказанному. Примеры проверенных кодов для Т0 и Т1.

;#####################################
;#### Использование прерывание Т0 ####
;#####################################

.include "tn2313def.inc"
.list
.def temp = R16
.def flag=R17
; начало программного кода

.cseg
.org 0

;передопределение векторов прерываний

start: rjmp init
reti
reti
reti
reti
reti
rjmp PrTim; прерывание по переполнению TCNT0
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
; модуль инициации
init:
;инициализация стека
ldi temp, RAMEND
out SPL, temp


;инициаализация портов
ldi temp, 0
out DDRB, temp

ldi temp, 0xFF
out DDRD, temp


;инициализация таймера
ldi temp, 0b00000101 ;ВЫБОР ИСТОЧНИКА ТАКТОВОГО СИГНАЛА ДЕЛЕНИЕ НА 1024 и соответственно запуск таймера
out TCCR0B, temp

;определение маски прерываний
ldi temp, 0b00000010 ; разрешение прерывания по переполнению таймера Т0
out TIMSK, temp

;инициализация компаратора
ldi temp, 0x80 ; А.В. Белов рекомендует добавлять данный код
out ACSR, temp

;начало основной программы

ldi flag, 0xFF ; моргнем для видимости начала программы
out PORTD, flag

main: ; бесконечный цыкл до момента прерывания
sei ;разрешаем прерывания глобально
rjmp main

PrTim0: ; подпрограмма обработки прерывания

lsl flag ; сдвиг влево
out PORTD, flag
reti

В данном примере светодиоды подключенные к порту D моргнут 1 раз при запуске и поочередно зажгутся.

;#####################################
;#### Использование прерывание Т1 ####
;#####################################

.include "tn2313def.inc"

.list
.def temp = R16
.def rab = R17
.def Flag = R18

.equ kdel=550 ; константа задержки

; начало программного кода

.cseg
.org 0

;передопределение векторов прерываний
start: rjmp init
reti ;внешенее прерывание 0
reti;внешнее прерывание 1
reti;таймер\счетчик 1, захват
rjmp prtim1 ;тймер счетчик 1 совпадение канал А
reti;таймер 1 прерывание по совпадению
reti;таймер 0 прерывание по переполнению
reti;прерывание USART прием завершен
reti;прерывание USART регистр данных пуст
reti;прерывание USART передача завершена
reti;прерывние по компаратору
reti;прерывание по изменению на любом контакте
reti;таймер 1 совпадение канал В
reti;таймер 0 совпадение канал В
reti;таймер 0 совпадение канал А
reti;USI готовность к старту
reti;USI переполнение
reti;EEPROM готовность
reti;переполнение охранного таймера

; модуль инициации
init:
;инициализация стека
ldi temp, RAMEND
out SPL, temp
;инициаализация портов
ldi temp, 0
out DDRB, temp

ldi temp, 0xFF
out DDRD, temp
;инициализация таймера
ldi temp, 0b00001011
out TCCR1B, temp
ldi temp, high(kdel)
out OCR1AH, temp
ldi temp, low(kdel)
out OCR1AL, temp
;определение маски прерываний
ldi temp, 0b01000000
out TIMSK, temp
;инициализация компаратора
ldi temp, 0x80
out ACSR, temp
;начало основной программы
main:
sei
rjmp main

prtim1:
sbrs Flag, 0
rjmp p1
rjmp p2

p1: ldi temp, 0xFF
out PORTD, temp
ldi Flag, 1
reti

p2: ldi temp, 0
out PORTD, temp
ldi Flag, 0
reti

Здесь просто все светодиоды моргают в зависимости от константы и выбора тактовой частоты регистра TCCR1B
Отдельное спасибо А.В. Белову за книги. Хотя даже у такого корифея AVR попадаются нелепые опечатки или недопечатки :dont_know: :lol:
UR5FDG
Открыл глаза
Сообщения: 46
Зарегистрирован: Пт мар 23, 2012 17:11:00

Re: Таймер в Attiny2313

Сообщение UR5FDG »

Здраствуйте! Подскажите пожалуйста как таким макаром можно сделать задержку на час. или нужно делать несколько вложенных циклов и по секунде отсчитывать? Нас в универе учили как с дребезгом бороться с помощью циклов и функций NOP, но там много кода выйдет, высчитывать по тактовой частоте.
Можно кварц в виде банки поставить на 34 КГц?
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Таймер в Attiny2313

Сообщение GP1 »

надо точно на 1 час, или плюс-минус пару минут?
если второе - вообще не проблема
берете любой таймер, к примеру Т1 переполняется за 65536 тактов, что при 1 МГц составит 0.065.. сек
выставляете предделитель на 1024и получаем 67108864 тактов, или ~67сек
организуете счетчик который при каждом переполнении Т1 будет увел./уманьш.
если 1 байт то получим 17179,869184 или 286 минут или почти 5 часов.
Чем дальше, тем больше становлюсь занудой...
Изображение
UR5FDG
Открыл глаза
Сообщения: 46
Зарегистрирован: Пт мар 23, 2012 17:11:00

Re: Таймер в Attiny2313

Сообщение UR5FDG »

берете любой таймер, к примеру Т1 переполняется за 65536 тактов, что при 1 МГц составит 0.065.. сек

Так, это понятно, но не понятно что делает предделитель, можно какой-то другой поставить?
Мне нужно чтоб ~один час на одном из выходов держался уровень лог "1", потом ~20 минут лог "0", потом опять "1"
как примерно это организовать я знаю, единственное задержку не знаю как.
Вот я посчитал что при тактовой частоте 34 КГц = Т1 переполнится через ~1,92 с. то есть можно уже просто организовать счетчик инкремент или декремент 1800?
Нас не учили пользоваться таймерами или другой переферией. Лабы у нас были веселые - в AVR studio 4 писали код под тини, зажигали светодиод с помощью кнопки и гасили его. С этой схемой мы 4-е лабы игрались, дребезг устраняли, ожидание нажатия кнопки делали итд итп.. РГР вообще веселая была, половину книжки Евстифеева переписать от руки...
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Таймер в Attiny2313

Сообщение GP1 »

UR5FDG писал(а):... РГР вообще веселая была, половину книжки Евстифеева переписать от руки...

ну так у Евстифеева про таймеры все подробно расписано.
а частота предделителя выбирается битами CSx3:CSx0, подробно в ДШ, ну и у Евстифеева конечно есть.
Вложения
т2313-Т0.PNG
(44.44 КБ) 910 скачиваний
Чем дальше, тем больше становлюсь занудой...
Изображение
UR5FDG
Открыл глаза
Сообщения: 46
Зарегистрирован: Пт мар 23, 2012 17:11:00

Re: Таймер в Attiny2313

Сообщение UR5FDG »

А, о все, понял, табличку такую рисовал))
Завтра буду собирать
Спасибо
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»