Теперь в нашем онлайн-магазине доступна уникальная книга «BEAM-робототехника. От азов до создания практических устройств», идеально подходящая как для кружков робототехники, так и для самообучения дома. Вы можете приобрести её по привлекательной цене в 699 рублей. Дополнительная информация о книге доступна на нашем сайте. Также в ассортименте нашего онлайн-магазина представлены готовые наборы для сборки роботов, с помощью которых ваш ребенок сможет легко собрать своего первого робота, следуя нашим подробным инструкциям. Перейти в магазин


[ Раскрыть online-чат / Закрыть ] · [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: nightmare, Huntswarrior, Aleks_Crow  
Настройка таймеров в BascomAVR
Отправлено 29.08.2012 - 22:041
Участник
5 сообщений
Мужчина
Здравствуйте
наткнулся на код:
Config Timer1 = Counter , Edge = Rising , Prescale = 8 , Compare A = Toggle
Compare1a = 222
Я понял что это настройка таймера, но больше ничего.
Я понял что Config Timer1-это начало строки в которой мы конфигурируем таймер.
Затем я так понял что-то присваевается: = Counter , но непонятно что, в одной из статей, которую я нашёл, есть настройка таймера для шим, так вот там в место = Counter стоит = Pwm, Pwm = 8-это разрядность шим, но порывшись в интернете, я наткнулся на ещё один пример использования таймера так вот там вобще стоит = Timer, я не могу понять что такое присваивается
Затем строка Edge = Rising, я вобще не знаю что это такое, но я понял что Rising это не переменная так как она ранее не объявлялась.
Prescale = 8 -это мы выбираем предделитель таймера, здесь всё понятно.
Compare A = Toggle-эта строка тоже не понятна так как в том курсе что вы мне посоветовали в место Toggle было Pwm = Clear Down, было написанно что это конфигурация активного состояния для шим с этим понятнее, а вот что такое Toggle-это тоже не переменная так как нигде не употреблялась. Однако смущает последняя строчка в которой вычсчитывается значение Compare1a, можете объяснить что здесь к чему?
И ещё я так понимаю что всё здесь настраивается регистрами, не могли бы вы дать какую нибудь ссылку в которой все эти регистры бы ли бы упорядоченны?
Заранее спасибо?


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 30.08.2012 - 00:442
Модераторы
211 сообщений
Мужчина
Прежде чем говорить о таймерах необходимо заглянуть в даташит к микроконтроллеру. Кол-во таймеров и их разрядность отличается для разных видов мк.
Строку расшифровать не сложно. Config Timer1 = Counter , Edge = Rising , Prescale = 8 , Compare A = Toggle
Командой Config Timer1 задаём конфигурацию для таймера 1 (а можно задать для таймера 0). Полная запись Config Timer1 = Counteг означает. Задать конфигурацию для таймера 1 как счётчика (counter). При этом таймер будет подсчитывать импульсы на выводе T1 (это функциональное обозначение). Следующая строка Edge = Rising означает, что входящие импульсы будут подсчитываться по фронту (при переходе/смене от низкого лог уровня 0 к высокому лог уровню 1). Кусочек кода Prescale = 8 означает настройку коэффициента деления счётчика. Сompare A=Toggle|SET|Clear|Disconnet – переключить, установить, очистить, вывод ОС1х при совпадении значений счётчика и Сompare; В нашем случае последняя строка Compare A = Toggle переключает вывод OC1A. По сути на этом выходе генерируется импульсная последовательность.
Пример использования команды Toggle. Поскольку любой порт этот тот же регистр, то можно с помощью команды toggle изменять его отдельный бит на противоположный (0/1). Пишется это так Toggle PortB.1 (инвертируем бит B.1 для PortB). А для переменной допустим flag будет такая запись Toggle flag здесь командой Toggle каждый раз будет инвертироваться бит переменной flag.
Разбираем последнюю строку Compare1a = 222. Compare1a -это регистр сравнения. 222-это число которое записано в регистр сравнения. Полная запись Compare1a = 222 означает что таймер сконфигурированный как счётчик будет считать от нулевого значения до числа записанного в регистр сравнения, то есть до 222. Кстати счёт можно начать вообще от любого числа. Для этого нужно записать в Timer1 число от которого нужно вести счёт. Например Timer1=10 означает что отсчёт начнётся от 10.
Config Timer1 = Counter , Edge = Rising , Prescale = 8 , Compare A = Toggle
Compare1a = 222
Timer1 =10
Если числовое значение для Timer1 не указано то он будет считать от нуля. А если убрать строку Compare1a = 222, то подсчёт будет идти до максимального значения для данного таймера (65536).


Профиль Личное сообщение Дом. страница icq Skype
50
Отправлено 30.08.2012 - 10:263
Участник
5 сообщений
Мужчина
Quote (Artem1)
Прежде чем говорить о таймерах необходимо заглянуть в даташит к микроконтроллеру. Кол-во таймеров и их разрядность отличается для разных видов мк.

Эта программа для микроконтроллера ATmega8 я проверял, огромное спасибо всё понятно, но не могли бы вы ещё раз написать на какой ножке мк будет выходить сигнал, если я правильно понял то это OC1A?


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 31.08.2012 - 21:364
Модераторы
211 сообщений
Мужчина
Pin15 (PortB.1)


Профиль Личное сообщение Дом. страница icq Skype
50
  • Страница 1 из 1
  • 1
Поиск: