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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Расчет таймера
kich
сообщение May 25 2006, 09:24
Сообщение #1





Группа: Новичок
Сообщений: 10
Регистрация: 21-01-06
Пользователь №: 13 445



Народ подскажите как правильно расчитать таймер для Atmega.
Go to the top of the page
 
+Quote Post
Kovrov
сообщение May 25 2006, 09:43
Сообщение #2


Мастер-фломастер
****

Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700



А так и считайте, учитывая частоту процессора...
мне удобней всего опираться на время одного такта
например 16мгц=62,5 нс
таймер с делителем 1/8 = 1 такт такого таймера будет 62,5*8=500 нс
и так далее.


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
KisaLove
сообщение May 25 2006, 09:51
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 5-05-06
Пользователь №: 16 807



А если надо быстро подсчитать коэфициенты (разные варианты), то я использую скаченную недавно по каким-то пробегавшим здесь ссылкам программу. Выбираешь тактовую частоту МК, нужную частоту таймера и берешь коэфициенты, которые тебе даются (и для 8-разрядных таймеров и для 16-ти).
(поклал к себе, так как исходный сайт не нашел sad.gif
h_p://avr.kisa.ru/AndyRate.zip
Go to the top of the page
 
+Quote Post
ILYCHOFF
сообщение May 25 2006, 09:52
Сообщение #4


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

Группа: Свой
Сообщений: 78
Регистрация: 5-07-05
Из: Великий Новгород
Пользователь №: 6 536



Цитата(kich @ May 25 2006, 13:24) *
Народ подскажите как правильно расчитать таймер для Atmega.


Как поставлена задача? Что вы хотите получить от таймера? Какой контроллер планируете использовать?
Go to the top of the page
 
+Quote Post
BVU
сообщение May 26 2006, 05:55
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(kich @ May 25 2006, 13:24) *
Народ подскажите как правильно расчитать таймер для Atmega.

Лучше всего об этом почитать в DataSheet на конкретный контроллер. Как правило подобные методики там приводятся. Конкретная точность - зависит от выбранной частоты тактирования (частота кварц. резонатора/генератора).


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
Atashi
сообщение Jun 8 2006, 18:08
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 66
Регистрация: 30-04-05
Пользователь №: 4 630



Жаль, что постановка задачи неконкретная.
Может, нужно просто задержки где-то сделать - тогда немецкая AVRdelayLoop вполне прокатит, ничего считать не надо.
Если же просто таймер настроить (как генератор итп) - можно
использовать заготовки в CodeVision... А если серьезное что - придется думать и считать, и тогда - то, что было предложено выше.
Жизнь...
Go to the top of the page
 
+Quote Post
Artur Nikitin
сообщение Feb 20 2007, 15:40
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 30
Регистрация: 28-11-06
Из: Набережные Челны
Пользователь №: 22 856



Задача такая:
проц атмега163, кварц 4МГц (Т4.000)
Если задать таймеру (не важно какому) частоту, равную частоте процессора и при каждом прерывании менять значение ножки с 1 на 0 и наоборот (меандр), то по идее длительность импульса должна быть равной 1/4000000=250нс. Смотрю осциллографом, длительность импульса примерно 70мс. Шо це такое?


--------------------
начинающий программист
Go to the top of the page
 
+Quote Post
Abakt
сообщение Feb 20 2007, 15:47
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 73
Регистрация: 10-01-07
Пользователь №: 24 292



Советую использовать мастер настройки МК по примеру - pid.by.ru/z6.htm

вот картинка - диалог настройки таймера :



Аналогичный мастер имеется в CVAVR
http://www.roboforum.ru/viewtopic.htm?p=11560

по моему и в новом WinAVR есть что-то подобное.
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Feb 20 2007, 16:09
Сообщение #9


За битами по регистрам гоняюсь
***

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



Вот простая программа, сам постоянно ей пользуюсь. В ней есть ещё и расчёты с плавающей точкой.
Прикрепленный файл  AvrCalc.zip ( 15.95 килобайт ) Кол-во скачиваний: 2671


PS Дежа-вю какое-то. Снова AVR123 ?


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
Палыч
сообщение Feb 20 2007, 16:12
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Artur Nikitin @ Feb 20 2007, 15:40) *
Если задать таймеру (не важно какому) частоту, равную частоте процессора и при каждом прерывании менять значение ножки с 1 на 0 и наоборот (меандр), то по идее длительность импульса должна быть равной 1/4000000=250нс. Смотрю осциллографом, длительность импульса примерно 70мс. Шо це такое?


Это - время выполнения процедуры обработки прерывания

Цитата(kich @ May 25 2006, 09:24) *
Народ подскажите как правильно расчитать таймер для Atmega.


В ImageCraft C Compiler тоже есть калькулятор настроек. Его можно запускать автономно (отдельно от IDE)

Прикрепленный файл  avrcalc.rar ( 13.09 килобайт ) Кол-во скачиваний: 453


Сообщение отредактировал Палыч - Feb 20 2007, 16:19
Go to the top of the page
 
+Quote Post
Artur Nikitin
сообщение Feb 20 2007, 17:20
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 30
Регистрация: 28-11-06
Из: Набережные Челны
Пользователь №: 22 856



Нашел причину, но пока не понял как ее устранить. Дело в том, что по умолчанию контроллер работает от внутреннего генератора (1МГц). Чтобы его изменить на внешний, нужно изменить в фузах CKSEL. В книге Евстифеева на 204 стр. написано, что в модели 163 оптимизация кварцевого резонатора отсутствует, а различные установки вышеуказанных ячеек определяют только длительность задержки сброса.
Так как всетаки работать от внешнего 4-мегагерцового генератора?


--------------------
начинающий программист
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 20 2007, 17:33
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Artur Nikitin @ Feb 20 2007, 14:40) *
Задача такая:
проц атмега163, кварц 4МГц (Т4.000)
Если задать таймеру (не важно какому) частоту, равную частоте процессора и при каждом прерывании менять значение ножки с 1 на 0 и наоборот (меандр), то по идее длительность импульса должна быть равной 1/4000000=250нс. Смотрю осциллографом, длительность импульса примерно 70мс. Шо це такое?
Прерывание происходит при каждом переполнении таймера. Поэтому если таймер 8-битный, то длительность импульса будет 1/4000000*256 = 64мкс, что вы и наблюдаете.

Ой, или это я ошибся, 64мкс не похоже на 70 мс....

Цитата(Artur Nikitin @ Feb 20 2007, 16:20) *
Дело в том, что по умолчанию контроллер работает от внутреннего генератора (1МГц). Чтобы его изменить на внешний, нужно изменить в фузах CKSEL. В книге Евстифеева на 204 стр. написано, что в модели 163 оптимизация кварцевого резонатора отсутствует, а различные установки вышеуказанных ячеек определяют только длительность задержки сброса.
А в даташите написано, что комбинация 0100-0010 соответствует внутреннему генератору, а 1111-1010 внешнему кварцу/резонатору. Я бы в данном случае верил даташиту - производителю виднее.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Artur Nikitin
сообщение Feb 20 2007, 17:38
Сообщение #13


Участник
*

Группа: Новичок
Сообщений: 30
Регистрация: 28-11-06
Из: Набережные Челны
Пользователь №: 22 856



Цитата
Ой, или это я ошибся, 64мкс не похоже на 70 мс....


65мс получается при генераторе 1МГц (внутрненний). Похоже все дело в фузах

1110 - Ceramic Resonator, fast rising power
наверно так надо?

Сообщение отредактировал Artur Nikitin - Feb 20 2007, 17:41


--------------------
начинающий программист
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 20 2007, 17:42
Сообщение #14


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Artur Nikitin @ Feb 20 2007, 16:34) *
65мс получается при генераторе 1МГц (внутрненний). Похоже все дело в фузах
значит у вас еще включен предделитель (0.065/ (1 / 1000000 * 256)) = ~256 или вы смотрите таймер1 (который 16-битный), тогда да, 1/1000000 * 65536 = 0,065536, как раз ваши 65мс. Еще раз обращаю внимание - прерывание происходит не по каждому тику, а только при переполнении таймера.

Цитата(Artur Nikitin @ Feb 20 2007, 16:34) *
1110 - Ceramic Resonator, fast rising power
наверно так надо?
Ну если у вас питание нарастает быстро, то так. А если вам не принципиально - стартанет сразу или через 100мс - ставьте 1010 и забудьте.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Artur Nikitin
сообщение Feb 20 2007, 17:45
Сообщение #15


Участник
*

Группа: Новичок
Сообщений: 30
Регистрация: 28-11-06
Из: Набережные Челны
Пользователь №: 22 856



Осталось только теперь заставить при программировании прописывать фузы. В наследство достался бат-файл, который сам все пишет. Использую альтера байт бластер


--------------------
начинающий программист
Go to the top of the page
 
+Quote Post

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

 


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


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