|
|
  |
Таймеры., Настройка таймера в CVAVR |
|
|
|
May 7 2006, 20:40
|
Частый гость
 
Группа: Новичок
Сообщений: 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 МГц показан выше. Просто в формулу подтавляете частоту, коэффициент деления и собственно период срабатывания в секундах.
|
|
|
|
|
May 7 2006, 21:32
|
Местный
  
Группа: Свой
Сообщений: 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 Мгц вроде  . Хмм... А как целиком выглядит формула ну вроде: TCNT1=x/y+z И еще, чтобы поменять частоту внутреннего генератора надо править фузы, но я боюсь потому что уже привел таким образом в нерабочее состояние один камешек. В CVAVR там галочки соответствуют 0? Если знаете, скажите как выставить 4 и 8 Мгц... Заранее спасибо
|
|
|
|
|
May 7 2006, 22:09
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
Цитата(vet @ May 8 2006, 01:35)  >>В CVAVR там галочки соответствуют 0? Да. Про частоты есть в даташите. Кроме группы CKSEL больше изменять ничего не надо? Все еще интересно насчет таймера... Кстати, точно секунду получить не получится? Еще гдето валялся кварц от китайских часов, может его приспособить?
|
|
|
|
|
May 7 2006, 23:09
|
Местный
  
Группа: Свой
Сообщений: 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 Непомогло. Мигает с любой частотой, но только не ровно секунда... Кстати CVAVR в визарде показывает огромною кучу частот для таймера 2 начиная от 0,061 Кгц и каждая следующая в два раза выше, но отсчитать ровно секунду не выходит. 0,061 кГц = 6,1 Гц ну никак не 6 Гц ровно
|
|
|
|
|
May 8 2006, 08:17
|

Познающий...
     
Группа: Свой
Сообщений: 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 Непомогло. Мигает с любой частотой, но только не ровно секунда... Кстати CVAVR в визарде показывает огромною кучу частот для таймера 2 начиная от 0,061 Кгц и каждая следующая в два раза выше, но отсчитать ровно секунду не выходит. 0,061 кГц = 6,1 Гц ну никак не 6 Гц ровно  Чтобы получить период ровно в 1 секунду, нужно просто подобрать соответствующую частоту тактирования МК. Wizard'ом пользоваться не рекомендую, это не способствует пониманию происходящего, особенно на начальном этапе освоения программирования.
--------------------
Выбор.
|
|
|
|
|
May 8 2006, 12:51
|
Местный
  
Группа: Свой
Сообщений: 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 Непомогло. Мигает с любой частотой, но только не ровно секунда... Кстати CVAVR в визарде показывает огромною кучу частот для таймера 2 начиная от 0,061 Кгц и каждая следующая в два раза выше, но отсчитать ровно секунду не выходит. 0,061 кГц = 6,1 Гц ну никак не 6 Гц ровно  Чтобы получить период ровно в 1 секунду, нужно просто подобрать соответствующую частоту тактирования МК. Wizard'ом пользоваться не рекомендую, это не способствует пониманию происходящего, особенно на начальном этапе освоения программирования.Таким образом, в моем случае имеем: Частота 1/2/4/8 Мгц В Тини26 есть только 8 битный таймер Требуется 1 Гц или 100 гц (чтобы отсчитывать каждую секунду) т.е. (1 000 000/1)/256=3906,25 (8 000 000/1)/256=31250 либо (1 000 000/100)/256=39,0625 (более реально) (8 000 000/100)/256=312,5 (я так понял не подходит ибо не влезает в 0хFF) что делать?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|