реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Таймеры., Настройка таймера в CVAVR
ps1x
сообщение May 7 2006, 20:09
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Как расчитать значения таймеров? Есть программка, но она не подходит для Tiny26 ибо нету у него 16 битного таймера. Не могли бы вы написать пример для расчета частоты 1 Гц?
Go to the top of the page
 
+Quote Post
CSB
сообщение May 7 2006, 20:40
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 100
Регистрация: 9-03-06
Пользователь №: 15 088



Если Вы имели ввиду период срабатываний таймеров, то поступаем следующим образом:

Код
#define F_XTAL 7372800L
// Расчет инициализации таймера. Порядок следования имеет значение, для того чтобы препроцессор производил округление (компилятор CV AVR 1.24.4 Standart)
// 0x100 - предельное значение счетчика
// 600L / 1000000L - период срабатываний в секундах
// 64L - коэффициент деления тактового сигнала
#define INIT_TIMER0 TCNT0 = 0x100 - 600L * F_XTAL / 64L / 1000000L

......
......
......

void main()
{
................
    // Период работы 600 мкс
    // Fclk = 7.3728 MHz    
    TCCR0 = 0x03;    // Fclk/64 - задаем делитель
    INIT_TIMER0;      // инициализируем счетный регистр

    TIMSK = 0x01;
    #asm("sei");
...................


В обработчике прерывания при переполнении таймера следует выполнить INIT_TIMER0; для новой инициализации счетного регистра.

Цитата
Не могли бы вы написать пример для расчета частоты 1 Гц

Нужна тактовая частота МК. Пример с 7.3728 МГц показан выше. Просто в формулу подтавляете частоту, коэффициент деления и собственно период срабатывания в секундах.
Go to the top of the page
 
+Quote Post
CSB
сообщение May 7 2006, 20:55
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 100
Регистрация: 9-03-06
Пользователь №: 15 088



Забыл добавить как получить делитель:
берем требуемое время срабатывания(600 мкс), умножаем на входную частоту(7.3728 МГц) и делим на максимальное значение счетчика(2^8 или 256; для 16-разрядного счетчика будет 2^16 или 0xFFFF).
n = t * Fclk / 2^8.
Так получили n = 17.28. Из таблицы делителей (см. datasheet) берем ближайшее значение делителя. В данном случае n = 64. Считаем
t = 256 * n / Fclk. Полученное время долно быть больше требуемого, иначе придется делать програмные счетчики в обработке прерывания для получения требуемого периода.
Go to the top of the page
 
+Quote Post
ps1x
сообщение May 7 2006, 21:32
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Цитата(CSB @ May 8 2006, 00:55) *
Забыл добавить как получить делитель:
берем требуемое время срабатывания(600 мкс), умножаем на входную частоту(7.3728 МГц) и делим на максимальное значение счетчика(2^8 или 256; для 16-разрядного счетчика будет 2^16 или 0xFFFF).
n = t * Fclk / 2^8.
Так получили n = 17.28. Из таблицы делителей (см. datasheet) берем ближайшее значение делителя. В данном случае n = 64. Считаем
t = 256 * n / Fclk. Полученное время долно быть больше требуемого, иначе придется делать програмные счетчики в обработке прерывания для получения требуемого периода.

Тактовая частота, по умолчанию с завода 1 Мгц вроде glare.gif .

Хмм... А как целиком выглядит формула ну вроде: TCNT1=x/y+z

И еще, чтобы поменять частоту внутреннего генератора надо править фузы, но я боюсь потому что уже привел таким образом в нерабочее состояние один камешек. В CVAVR там галочки соответствуют 0?
Если знаете, скажите как выставить 4 и 8 Мгц...
Заранее спасибо smile.gif
Go to the top of the page
 
+Quote Post
vet
сообщение May 7 2006, 21:35
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



>>В CVAVR там галочки соответствуют 0?
Да.
Про частоты есть в даташите.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
ps1x
сообщение May 7 2006, 22:09
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Цитата(vet @ May 8 2006, 01:35) *
>>В CVAVR там галочки соответствуют 0?
Да.
Про частоты есть в даташите.

Кроме группы CKSEL больше изменять ничего не надо?

Все еще интересно насчет таймера...

Кстати, точно секунду получить не получится? Еще гдето валялся кварц от китайских часов, может его приспособить?
Go to the top of the page
 
+Quote Post
ps1x
сообщение May 7 2006, 23:09
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Цитата([banned] @ May 8 2006, 02:12) *
Цитата(ps1x @ May 8 2006, 00:09) *

Как расчитать значения таймеров?


использовать мастер компилятора как в задачах 1 3 и 3new


-> http://electronix.ru/redirect.php?http://[banned]/avrpic06.htm


Непомогло. smile3046.gif
Мигает с любой частотой, но только не ровно секунда...
Кстати CVAVR в визарде показывает огромною кучу частот для таймера 2 начиная от 0,061 Кгц и каждая следующая в два раза выше, но отсчитать ровно секунду не выходит.

0,061 кГц = 6,1 Гц ну никак не 6 Гц ровно wacko.gif
Go to the top of the page
 
+Quote Post
haker_fox
сообщение May 8 2006, 08:17
Сообщение #8


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(ps1x @ May 8 2006, 05:09) *
Как расчитать значения таймеров? Есть программка, но она не подходит для Tiny26 ибо нету у него 16 битного таймера. Не могли бы вы написать пример для расчета частоты 1 Гц?


Я делал так.
1. Тактовая частота МК X гц.
2. Используем Y-разрядный тамер.
3. Нужно получить период срабатываения Z гц.

Для примера:
X = 16 000 000;
Y = 8 (8 разрядный таймер);
Z = 1000.

(X/Z)/2^Y

(16 000 000/1000)/256=62.5

После этого в обработчике по переполнению таймера мы в регистр счеткика (например TCNT0) записываем 256 - 63 (округленное 62.5). Перед разрешением перрываний от таймера, также инициализируем TCNTx значением 193. При этом счетчик будет переполняться каждые 0,001 с или с частотой 100 Гц.




Цитата(ps1x @ May 8 2006, 08:09) *
Цитата([banned] @ May 8 2006, 02:12) *

Цитата(ps1x @ May 8 2006, 00:09) *

Как расчитать значения таймеров?


использовать мастер компилятора как в задачах 1 3 и 3new


-> http://electronix.ru/redirect.php?http://[banned]/avrpic06.htm


Непомогло. smile3046.gif
Мигает с любой частотой, но только не ровно секунда...
Кстати CVAVR в визарде показывает огромною кучу частот для таймера 2 начиная от 0,061 Кгц и каждая следующая в два раза выше, но отсчитать ровно секунду не выходит.

0,061 кГц = 6,1 Гц ну никак не 6 Гц ровно wacko.gif


Чтобы получить период ровно в 1 секунду, нужно просто подобрать соответствующую частоту тактирования МК.

Wizard'ом пользоваться не рекомендую, это не способствует пониманию происходящего, особенно на начальном этапе освоения программирования.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
ps1x
сообщение May 8 2006, 12:51
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Цитата(haker_fox @ May 8 2006, 12:17) *
Цитата(ps1x @ May 8 2006, 05:09) *

Как расчитать значения таймеров? Есть программка, но она не подходит для Tiny26 ибо нету у него 16 битного таймера. Не могли бы вы написать пример для расчета частоты 1 Гц?


Я делал так.
1. Тактовая частота МК X гц.
2. Используем Y-разрядный тамер.
3. Нужно получить период срабатываения Z гц.

Для примера:
X = 16 000 000;
Y = 8 (8 разрядный таймер);
Z = 1000.

(X/Z)/2^Y

(16 000 000/1000)/256=62.5

После этого в обработчике по переполнению таймера мы в регистр счеткика (например TCNT0) записываем 256 - 63 (округленное 62.5). Перед разрешением перрываний от таймера, также инициализируем TCNTx значением 193. При этом счетчик будет переполняться каждые 0,001 с или с частотой 100 Гц.




Цитата(ps1x @ May 8 2006, 08:09) *
Цитата([banned] @ May 8 2006, 02:12) *

Цитата(ps1x @ May 8 2006, 00:09) *

Как расчитать значения таймеров?


использовать мастер компилятора как в задачах 1 3 и 3new


-> http://electronix.ru/redirect.php?http://[banned]/avrpic06.htm


Непомогло. smile3046.gif
Мигает с любой частотой, но только не ровно секунда...
Кстати CVAVR в визарде показывает огромною кучу частот для таймера 2 начиная от 0,061 Кгц и каждая следующая в два раза выше, но отсчитать ровно секунду не выходит.

0,061 кГц = 6,1 Гц ну никак не 6 Гц ровно wacko.gif


Чтобы получить период ровно в 1 секунду, нужно просто подобрать соответствующую частоту тактирования МК.

Wizard'ом пользоваться не рекомендую, это не способствует пониманию происходящего, особенно на начальном этапе освоения программирования.



Таким образом, в моем случае имеем:

Частота 1/2/4/8 Мгц
В Тини26 есть только 8 битный таймер
Требуется 1 Гц или 100 гц (чтобы отсчитывать каждую секунду)

т.е.
(1 000 000/1)/256=3906,25 blink.gif
(8 000 000/1)/256=31250 blink.gif blink.gif blink.gif
либо
(1 000 000/100)/256=39,0625 (более реально)
(8 000 000/100)/256=312,5 (я так понял не подходит ибо не влезает в 0хFF)

что делать?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01471 секунд с 7
ELECTRONIX ©2004-2016