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

|
Народ подскажите как правильно расчитать таймер для Atmega.
|
|
|
|
|
May 25 2006, 09:51
|

Участник

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

|
А если надо быстро подсчитать коэфициенты (разные варианты), то я использую скаченную недавно по каким-то пробегавшим здесь ссылкам программу. Выбираешь тактовую частоту МК, нужную частоту таймера и берешь коэфициенты, которые тебе даются (и для 8-разрядных таймеров и для 16-ти). (поклал к себе, так как исходный сайт не нашел  h_p://avr.kisa.ru/AndyRate.zip
|
|
|
|
|
May 25 2006, 09:52
|

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

|
Цитата(kich @ May 25 2006, 13:24)  Народ подскажите как правильно расчитать таймер для Atmega. Как поставлена задача? Что вы хотите получить от таймера? Какой контроллер планируете использовать?
|
|
|
|
|
Feb 20 2007, 15:40
|
Участник

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

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

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

|
Советую использовать мастер настройки МК по примеру - pid.by.ru/z6.htm вот картинка - диалог настройки таймера :  Аналогичный мастер имеется в CVAVR http://www.roboforum.ru/viewtopic.htm?p=11560по моему и в новом WinAVR есть что-то подобное.
|
|
|
|
|
Feb 20 2007, 16:09
|

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

|
Вот простая программа, сам постоянно ей пользуюсь. В ней есть ещё и расчёты с плавающей точкой.
AvrCalc.zip ( 15.95 килобайт )
Кол-во скачиваний: 2671PS Дежа-вю какое-то. Снова AVR123 ?
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Feb 20 2007, 17:20
|
Участник

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

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

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Feb 20 2007, 17:38
|
Участник

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

|
Цитата Ой, или это я ошибся, 64мкс не похоже на 70 мс.... 65мс получается при генераторе 1МГц (внутрненний). Похоже все дело в фузах 1110 - Ceramic Resonator, fast rising power наверно так надо?
Сообщение отредактировал Artur Nikitin - Feb 20 2007, 17:41
--------------------
начинающий программист
|
|
|
|
|
Feb 20 2007, 17:42
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Feb 20 2007, 17:45
|
Участник

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

|
Осталось только теперь заставить при программировании прописывать фузы. В наследство достался бат-файл, который сам все пишет. Использую альтера байт бластер
--------------------
начинающий программист
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|