roboforum.ru

Технический форум по робототехнике.
Текущее время: 21 май 2025, 02:41

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Таймер
СообщениеДобавлено: 06 фев 2005, 04:36 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 фев 2005, 13:11 
Не в сети
Аватара пользователя

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

_________________
http://www.avrdevices.narod.ru ICQ 204203081 Жду ваших предложений...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 фев 2005, 18:28 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 фев 2005, 19:07 
Не в сети
Аватара пользователя

Зарегистрирован: 22 янв 2005, 21:47
Сообщения: 60
Откуда: Нетешин Хмельницкая обл. Украина
Для запуска таймера 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:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 фев 2005, 21:17 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Похоже дежавю....
СообщениеДобавлено: 07 фев 2005, 18:08 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 фев 2005, 20:34 
Не в сети

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 фев 2005, 03:53 
Не в сети

Зарегистрирован: 26 окт 2004, 14:16
Сообщения: 171
Откуда: Севастополь сити...
Вот таймером1 научился,yj возник вопрос по расчету времени
Надо частоту делить на делитель?
Допустим при 1 мГц и при делители 1024 получаетсяя 1000000/1024=976 Гц=0.001с
Так или нет?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 фев 2005, 12:56 
Не в сети

Зарегистрирован: 07 фев 2005, 17:41
Сообщения: 367
Откуда: Санкт-Петербург
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:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 фев 2005, 21:21 
Не в сети
Аватара пользователя

Зарегистрирован: 22 янв 2005, 21:47
Сообщения: 60
Откуда: Нетешин Хмельницкая обл. Украина
Для пояснения текущего вопроса привожу фрагмент статьи:

При подаче питания и выполнении условий сброса выполняется процедура сброса (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 Жду ваших предложений...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер
СообщениеДобавлено: 13 мар 2008, 15:15 
Не в сети
Аватара пользователя

Зарегистрирован: 21 сен 2006, 22:42
Сообщения: 76
Откуда: М.О.
не пойму у 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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймер
СообщениеДобавлено: 13 мар 2008, 16:50 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
aliens писал(а):
Расскажите как его включить, настроить, выключить.


Таймеры AVR удобно настраивать с помощью мастера компилятора ICC или CVAVR.
Вот примеры как это сделать : http://tinyurl.com/2egdph


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO