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

 
 
> Таймеры atmega32a
ishpanec
сообщение Dec 19 2014, 09:57
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 19-12-14
Пользователь №: 84 192



Здравствуйте
Проблема возникла такая, есть у меня atmega32a китайский. постигаю таймеры. использую таймер0 (8 бит).
Логика моих мыслей такова:

если там частота 16МГц а таймер считает до 256 то каждое переполнение таймера будет происходить (1 / 16 000 000) * 256 = 16 микросекунд (0,000016).
Соответственно, что бы получить 1 секунду надо таких отрезков 62 500 (0,000016 * 62 500 = 1 сек.)
Что бы особо не мучиться с 16 битными числами я разбил на две 8 битные, т.е. 250 и 250.
Значит в прерывании по переполнению мы считаем первый счетчик, када он доходит до 250 мы увеличиваем второй и обнуляем первый.
Сразу что скажу что cksel биты не менял, они все отключены, значит частота должна быть нормальной. В коде не устанавливаю предделитель для таймера.
Внешнего кварца, как и осциллографа, не имею. замерить частоту не выходит. пробовал всю партию контроллеров (10 штук) результат один и тот же, либо у них у всех не 16 МГц, либо логика моих действий не верна.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alexeyv
сообщение Dec 22 2014, 04:39
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Зачем для этой цели использовать 8-ми разрядный счетчик? Не проще использовать 16-ти разрядный в режиме CTC ? Один раз настроил - и будет Вам прерывание 1 раз в сек без всяких дополнительных счетчиков на Си/Асме
Go to the top of the page
 
+Quote Post
akl
сообщение Dec 22 2014, 05:57
Сообщение #3


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

Группа: Свой
Сообщений: 127
Регистрация: 4-04-07
Из: Ижевск
Пользователь №: 26 773



Цитата(alexeyv @ Dec 22 2014, 09:39) *
Не проще использовать 16-ти разрядный в режиме CTC ? Один раз настроил - и будет Вам прерывание 1 раз в сек без всяких дополнительных счетчиков на Си/Асме
Проще, конечно. Попробуйте настроить один раз без дополнительных счётчиков формирователь 1.000'000 секунды для частоты 7'890'123 Гц на 16-ти разрядном таймере в режиме CTC.
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Dec 22 2014, 07:35
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Цитата(akl @ Dec 22 2014, 08:57) *
Проще, конечно. Попробуйте настроить один раз без дополнительных счётчиков формирователь 1.000'000 секунды для частоты 7'890'123 Гц на 16-ти разрядном таймере в режиме CTC.

Ну, в обычных мегах эти Ваши 7'890'123 Гц можно было поделить на 256 предделителем и для CTC поставить значение 30820. Будет частота 0,999993283, разве плохо? sm.gif А для Ваших 1.000'000 секунды поди надо кварц специально отобранный да ещё и в термостат всю конструкцию засунуть...
Go to the top of the page
 
+Quote Post
akl
сообщение Dec 22 2014, 09:43
Сообщение #5


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

Группа: Свой
Сообщений: 127
Регистрация: 4-04-07
Из: Ижевск
Пользователь №: 26 773



Цитата(RabidRabbit @ Dec 22 2014, 12:35) *
Будет частота 0,999993283, разве плохо?
По мне, Плохо. И не частота, а период.
Цитата(RabidRabbit @ Dec 22 2014, 12:35) *
...поди надо кварц специально отобранный...
Частота взята для примера. Вот так студия отрабатывает такую частоту. Ничего не мешает в строке задания частоты установить требуемую и получить такой же результат.
Прикрепленное изображение

Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Dec 23 2014, 08:47
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Цитата(akl @ Dec 22 2014, 12:43) *
По мне, Плохо. И не частота, а период.

А по-моему, очень даже неплохо. Чай не для сервера ntp sm.gif И кстати, батенька, вовсе не период, а именно частота: 7890123 / 256 / 30821
Вы то вообще нерабочий код выложили в посте от Dec 20 2014, 09:56 sm.gif А человек Вам поверит и будет удивляться, почему не фурычит...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ishpanec   Таймеры atmega32a   Dec 19 2014, 09:57
- - zombi   Цитата(ishpanec @ Dec 19 2014, 13:57) рез...   Dec 19 2014, 14:11
- - Dust112   ishpanec, Вы раздел 8-bit Timer/Counter0 with PWM...   Dec 19 2014, 14:16
- - stells   Цитата(ishpanec @ Dec 19 2014, 12:57) есл...   Dec 19 2014, 14:26
|- - demiurg1978   У меня такой способ получить 1 мс при 8 и 16 мгц: ...   Dec 19 2014, 15:10
- - akl   С точностью до такта можно временной интервал форм...   Dec 20 2014, 09:56
- - ishpanec   отвечу всем по порядку) Цитата(zombi @ Dec 1...   Dec 21 2014, 13:54
|- - ishpanec   Цитата(ishpanec @ Dec 21 2014, 14:54) не ...   Dec 21 2014, 15:17
|- - stells   Цитата(ishpanec @ Dec 21 2014, 16:54) что...   Dec 21 2014, 16:29
|- - demiurg1978   Цитата(ishpanec @ Dec 21 2014, 19:54) с С...   Dec 22 2014, 21:53
- - zombi   получается Internal Calibrated RC Oscillator 1 MHz...   Dec 21 2014, 16:06
- - ishpanec   да, уже разобрался, всем спасибо за помощь!) п...   Dec 21 2014, 18:19
- - akl   Ваш код дает интервал 1 секунды, за счёт сравнений...   Dec 22 2014, 04:18
|- - ishpanec   Цитата(alexeyv @ Dec 22 2014, 05:39) Не п...   Dec 22 2014, 12:43
- - akl   Каждое прерывание Т0, в котором дополнительно чист...   Dec 22 2014, 14:03
|- - ishpanec   Цитата(akl @ Dec 22 2014, 15:03) в которо...   Dec 22 2014, 14:47
- - akl   Да, действительно, период будет 256*30821=7890176/...   Dec 24 2014, 03:17
- - RabidRabbit   Я одного не понимаю, после первого переполнения в ...   Dec 24 2014, 11:17


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:31
Рейтинг@Mail.ru


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