roboforum.ru

Технический форум по робототехнике.

Таймер

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Таймер

Сообщение aliens » 06 фев 2005, 04:36

Расскажите как его включить, настроить, выключить. Спасибо
aliens
 
Сообщения: 171
Зарегистрирован: 26 окт 2004, 14:16
Откуда: Севастополь сити...

Сообщение chief » 06 фев 2005, 13:11

В примере для 7-ми сегментных индикаторов как раз в рестарте помещен код пуска таймера 1 с предделителем 1024. А вообще
такие элементарные вещи нужно в доках читать на процессор,
да и в том же AVR Studio 4.0 с этим разобраться не сложно...
Одним словом дерзай, читай... Что не получится - обращайся.
Просто с такими вопросами на форум ходить не стоит...
PS Если нету доки, обращайся, вышлю, или например на
http://www.atmel.ru Удачи...
http://www.avrdevices.narod.ru ICQ 204203081 Жду ваших предложений...
Аватара пользователя
chief
 
Сообщения: 60
Зарегистрирован: 22 янв 2005, 21:47
Откуда: Нетешин Хмельницкая обл. Украина

Сообщение aliens » 06 фев 2005, 18:28

Доки все есть, но я туго английский понимаю (лсобенно технический)
Нужно именно про регистры управления им (что,куда)
aliens
 
Сообщения: 171
Зарегистрирован: 26 окт 2004, 14:16
Откуда: Севастополь сити...

Сообщение chief » 06 фев 2005, 19:07

Для запуска таймера 0 служит регистр TCCR0. В зависимости от кода, который в него заносится зависит в каком режиме будет работать таймер.
0х01 - прямой счет
0х02 - предделитель на 8
0х03 - предделитель на 64
0х04 - предделитель на 256
0х05 - предделитель на 1024
0х06 - работа от внешнего входа по нарастающему фронту
0х07 - тоже по спадающему
результат счета находится в регистре TCNT0
TIFR - флаг переполнения
TIMSK - регистр разрешения на прерывание от таймера
Для того что бы написать программу прерывания необходимо программу оформить следующим образом:

код:

.include "2313def.inc"

.def tmp =r25

.org 00
rjmp reset
.org 06
; текст программы обработчика
reset:
  clr tmp ;очистка регистра
ldi tmp,0x02 ;установка значений битов регистра
out TIMSK,tmp ;установка битов в TIMSK
dec tmp
ldi tmp,0x01
out TCCR0,tmp ;запуск таймера
loop:
               rjmp loop                  ;пустой цикл

А для таймера 1 попробуй изучить документацию, это занимательно  :roll:
Аватара пользователя
chief
 
Сообщения: 60
Зарегистрирован: 22 янв 2005, 21:47
Откуда: Нетешин Хмельницкая обл. Украина

Сообщение aliens » 06 фев 2005, 21:17

Спасибо!!! Очень помог!!
aliens
 
Сообщения: 171
Зарегистрирован: 26 окт 2004, 14:16
Откуда: Севастополь сити...

Похоже дежавю....

Сообщение Mike_MA » 07 фев 2005, 18:08

Где то я уже на эти вопросы отвечал..... :shock:  8)  :wink:  :?:  :!:
Mike_MA
 
Сообщения: 367
Зарегистрирован: 07 фев 2005, 17:41
Откуда: Санкт-Петербург

Сообщение aliens » 07 фев 2005, 20:34

Да, но так до практики и не дошли, а у меня фулкрум не работает :?
aliens
 
Сообщения: 171
Зарегистрирован: 26 окт 2004, 14:16
Откуда: Севастополь сити...

Сообщение aliens » 09 фев 2005, 03:53

Вот таймером1 научился,yj возник вопрос по расчету времени
Надо частоту делить на делитель?
Допустим при 1 мГц и при делители 1024 получаетсяя 1000000/1024=976 Гц=0.001с
Так или нет?

Еще.
Прочитал в своей книжке, что 16разрядный таймер в меге8 может
работать как часы реального времени, так это? если да то подскажите
как настроить.
aliens
 
Сообщения: 171
Зарегистрирован: 26 окт 2004, 14:16
Откуда: Севастополь сити...

Сообщение Mike_MA » 09 фев 2005, 12:56

aliens писал(а):Надо частоту делить на делитель?
Допустим при 1 мГц и при делители 1024 получаетсяя 1000000/1024=976 Гц=0.001с
Так или нет?

Это конечно так, но это не вся правда....То что ты имел в виду - это предделитель . То есть ты получил такт таймера равный 1 мсек.
После этого нужно разделить заданный тебе период импульса на этот такт и ты получишь значение регистра счётчика. Т.е если ты запишешь в регистр счётчика 0xFF и расчитанным выше делителем , то получите таймер с периодом в 1 мсек.

Короче последовательность следующая:
- выбираем предделитель (8, 64,1024) подсчитываем такт
- берем заданный период и делим на такт получаем число
-  а)выполняем операцию делитель= 0xFF- число
-  б) выполняем операцию делитель= 0xFFFF- число если счётчик двухбайтный

- после этого вставляем в программу как константу и каждый раз в обработчике загружаем в регистры
:wink:  :wink:

aliens писал(а):Еще.
Прочитал в своей книжке, что 16разрядный таймер в меге8 может
работать как часы реального времени, так это? если да то подскажите
как настроить.


Если конечно кварц у тебя будет 32 767 Гц :lol:  :lol:
Mike_MA
 
Сообщения: 367
Зарегистрирован: 07 фев 2005, 17:41
Откуда: Санкт-Петербург

Сообщение chief » 10 фев 2005, 21:21

Для пояснения текущего вопроса привожу фрагмент статьи:

При подаче питания и выполнении условий сброса выполняется процедура сброса (Reset) для инициализации системных устройств. Все линии портов настраиваются на высокий уровень для выключения всех нагрузок. При этом порты настраиваются на выход записью числа 255 в регистры направления обеих портов. Направление порта В в дальнейшем кратковременно меняется для выполнения функции опроса клавиатуры. Для предделителя таймера выбирают коэффициент деления тактовой частоты 256, при этом, если таймер перезагружать кодом 176, период переполнения таймера и генерации прерываний равен 5 мс. Прерывание по переполнению таймера становится активным после разрешения глобальных прерываний (команда sei).

При использовании кварцевого резонатора 4.096 МГц длительность цикла инструкции равна 0.2441 мкс. С учетом этого, при записи числа n в регистр таймера 0 TCNT0 период его переполнения определяется по выражению:

(256-n)*256*02441, мкс

Таким образом запись числа 176 обеспечит период переполнения 5мс с высокой для счета реального времени точностью.
Мой код:

.include "2313def.inc"
rjmp    RESET           ;Reset Handle
       reti                    ;irq0
       reti                    ;irq1
       reti                    ;timer1
       reti                    ;timer1 comA
       reti        ;timer1 over
       rjmp OVER0           ;timer0 over
       reti                    ;spi
       reti                    ;uart
       reti                    ;uart
       reti                    ;uart
       reti                    ;anacomp
OVER0:

ldi tmp,177
out TCNT0,tmp
reti
reset:
clr tmp ;очистка регистра
ldi tmp,$6f ;установка значений битов регистра
out SPL,tmp ;установка начального адреса стека
clr tmp
sei
clr tmp
ldi tmp,0x02 ;установка значений битов регистра
out TIMSK,tmp ;установка битов в TIMSK
clr tmp
ldi tmp,0x04
out TCCR0,tmp ;запуск таймера
ldi tmp,177
out TCNT0,tmp
next:
rjmp next
http://www.avrdevices.narod.ru ICQ 204203081 Жду ваших предложений...
Аватара пользователя
chief
 
Сообщения: 60
Зарегистрирован: 22 янв 2005, 21:47
Откуда: Нетешин Хмельницкая обл. Украина

Re: Таймер

Сообщение D'Ark Trouyan » 13 мар 2008, 15:15

не пойму у AT90S2313 таймер по другому как-то запускается ??? Хочу сделать задержку с использованием таймера а не delay ... кварц 4 МГц.

Код: Выделить всёРазвернуть
#include <90s2313.h> 

void main (void)
{
TCCR0 = 0x05;
DDRB = 0xFF;

while (1)
{
               if(PORTB.3==0)
               {PORTB.3=1;} else
               PORTB.3=0;
               while (!(TIFR&0x01));
               TIFR = 0x01;
          };
}


Добавлено спустя 40 минут 37 секунд:
Таак проблема решена. Причина неполадки - расположение TOV0 в AT90S2313 не такое как у мег.
Код: Выделить всёРазвернуть
#include <90s2313.h> 

void main (void){
TCCR0 = 0x05;
DDRB = 0xFF;
TIFR=0b00000010;

while (1){
if(PORTB.3==0)
{PORTB.3=1;} else
PORTB.3=0;
while (!(TIFR&0b00000010));
TIFR=0b00000010;
          };
}
vivere militare est
Аватара пользователя
D'Ark Trouyan
 
Сообщения: 76
Зарегистрирован: 21 сен 2006, 22:42
Откуда: М.О.

Re: Таймер

Сообщение avr123.nm.ru » 13 мар 2008, 16:50

aliens писал(а):Расскажите как его включить, настроить, выключить.


Таймеры AVR удобно настраивать с помощью мастера компилятора ICC или CVAVR.
Вот примеры как это сделать : http://tinyurl.com/2egdph
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron