AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
09.09.2014, 00:10
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,975
Сказал спасибо: 2,554
Сказали Спасибо 11,852 раз(а) в 5,940 сообщении(ях)
|
Re: Задержка импульса
Сообщение от SAHA_T
|
Наверное у меня поверхностные знания т.к с этими двигателями уже знаком больше 10-ти лет и лет 10ть назад делал обычный тиристорный коммутатор
|
Ну пардон, показалось.
Сообщение от SAHA_T
|
только время горения зависит от окната бензина.
|
Я же сказал - примерно.
Сообщение от SAHA_T
|
вы лучше мне объясните по какому принципу работает делитель в зависимости от частоты кварца, к примеру 8000000(8мгц)/1024= 7812
|
У таймера есть предделитель, который может делить входную частоту на 1, ...(смотреть по контроллеру). Непонятно - что непонятно. Если кварц 8 МГц поделить предделителем на 8, на вход таймера пойдет 1 МГц. Если посмотреть с другой стороны, период кварца 1/8 мкс и если поделить на 8, то (1/ 8 )*8=1 мкс.
Сообщение от SAHA_T
|
к примеру я хочу сделать превывание 8ми (255) битного счетчика по сравнению. к примеру я хочу что бы в данном счетчике была задержка в 40000мкс и она была равна в таймере 250 или OCR0A = 0xFA, как мне в данном случае рассчитать правильно делитель что бы применить 8-ми битный таймер
|
40000/250=160 мкс - входной период. Период кварца - 1/8 мкс. Делитель - 160/(1/ 8 )=160* 8=1280. Такого коэффициента нет, выбирайте из того, что есть.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
Последний раз редактировалось akegor; 09.09.2014 в 00:13.
|
|
|
|
09.09.2014, 00:25
|
|
Вид на жительство
Регистрация: 15.07.2007
Адрес: Одесса
Сообщений: 434
Сказал спасибо: 71
Сказали Спасибо 125 раз(а) в 78 сообщении(ях)
|
Re: Задержка импульса
Сообщение от SAHA_T
|
объясните по какому принципу работает делитель в зависимости от частоты кварца, к примеру 8000000(8мгц)/1024= 7812
|
Таймеры работают с частотой Fosc/4 (это так определена работа с машинным тактом контроллера). (хотя нет даташит на атмега, но уверен, что здесь разницы с pic быть не должно). Вот отсюда и танцуйте.
Т.е. Ваш таймер (или prescaler) работает не с 8МГц, а с 2МГц. Вот и делите 2 мегагерца как хотите.
__________________
И если б не было Одессы, шоб я делал?!
Последний раз редактировалось val_ka; 09.09.2014 в 00:28.
|
|
|
|
09.09.2014, 00:36
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Задержка импульса
Млин так много информации, сейчас буду переваривать
Сообщение от akegor
|
Такого коэффициента нет, выбирайте из того, что есть.
|
наверное дошло до жирафа, т.е нужную задержку делим на делитель и получаем число, равное данной задержке с делителем и я так понимаю чем меньше делитель, тем точней число.
|
|
|
|
09.09.2014, 00:40
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Задержка импульса
Сообщение от val_ka
|
Таймеры работают с частотой Fosc/4 (это так определена работа с машинным тактом контроллера). (хотя нет даташит на атмега, но уверен, что здесь разницы с pic быть не должно). Вот отсюда и танцуйте.
Т.е. Ваш таймер (или prescaler) работает не с 8МГц, а с 2МГц. Вот и делите 2 мегагерца как хотите.
|
Так что то не складывается, я вот смотрю исходник и там написано
TCCR1B=0x02; //запускаем счётчик 1Мгц
смотрю для тини 0x02 это 1/8 следовательно 8мгц разделить на 8 это и будет 1мгц, дак теперь встречный вопрос на какой реальной частоте работает таймер МК с предделителями, если кварц на 8мгц ?
|
|
|
|
09.09.2014, 00:44
|
|
Вид на жительство
Регистрация: 15.07.2007
Адрес: Одесса
Сообщений: 434
Сказал спасибо: 71
Сказали Спасибо 125 раз(а) в 78 сообщении(ях)
|
Re: Задержка импульса
Обычно таймер работает не с частотой кварца, а F/4. А потом F/4 делите ещё и на заданное в прескейлере число.
Например у Вас кварц 8 Мгц, а заданное число 256, тогда:
8/4 = 2 МГц;
2/ 256 = 7812,5
ps: посмотрите в даташит контроллера схему с таймером. Там должны увидеть на входе одного из элементов нечто вроде Fosc/4.
Если есть, то тогда считать так, как я написал выше.
Есть режимы, когда "делитель" (который в примере 256) можно задавать on-the-fly - в программе.
__________________
И если б не было Одессы, шоб я делал?!
Последний раз редактировалось val_ka; 09.09.2014 в 00:50.
|
|
|
|
09.09.2014, 00:55
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Задержка импульса
Путаница со словом "делитель".
На самом деле всё просто. Таймер - это 16-разрядный счётчик. Допустим, тактовая частота у него 1МГц. Этот счётчик непрерывно считает от 0 до максимального значения 65535. С каждым тактом значение увеличивается на 1. То есть за 65535мкс посчитает от 0 до максимума. Хорошо.
Ещё есть у таймера регистры сравнения. То есть в регистр кладём число, например, 2000. Когда счётчик сравняется с 2000 этот регистр сравнения дёргает ножку процессора.
Вот и всё. Сначала таймер остановлен. Вам нужна задержка 40000мкс? Нет проблем, кладём в регистр сравнения число 40000. При появлении импульса с датчика двигателя немедленно стартуем наш таймер. И ровно через 40000мкс значение таймера и регистра сравняются , и МК дернёт ногой. Вот и получилась нужная задержка. После этого останавливаем таймер и сбрасываем в 0. По таблице смотрим новое значение задержки. Теперь нужно 39999мкс? Не вопрос! Кладём это число в регистр сравнения и ждём импульса с датчика.
Получается необыкновенная гибкость выбора задержки с шагом 1 мкс.
И никаких делителей.
|
|
|
Сказали "Спасибо" Yurkin2014
|
|
|
09.09.2014, 01:04
|
|
Вид на жительство
Регистрация: 15.07.2007
Адрес: Одесса
Сообщений: 434
Сказал спасибо: 71
Сказали Спасибо 125 раз(а) в 78 сообщении(ях)
|
Re: Задержка импульса
Сообщение от SAHA_T
|
Так что то не складывается, я вот смотрю исходник и там написано
TCCR1B=0x02; //запускаем счётчик 1Мгц
|
Т.к. счётчик работает с 2 Мгц, (кварц то на 8 ), то эта команда (по идее) должна устанавливать прескейлер в 2, т.е
2 Мгц/2 (в счётчике) = 1 Мгц;
(это если я правильно понимаю команду TCCR1B=0x02, я на ассемблере работаю).
__________________
И если б не было Одессы, шоб я делал?!
|
|
|
|
09.09.2014, 01:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,982
Сказал спасибо: 0
Сказали Спасибо 4,941 раз(а) в 2,370 сообщении(ях)
|
Re: Задержка импульса
а как жыш вход-выход в прырываниё? непорядок, не успеваем! а поллинг сожрет всё процессорное время, захват-сравнение тоже медленны...
|
|
|
|
09.09.2014, 01:16
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Задержка импульса
Сообщение от jump
|
захват-сравнение тоже медленны..
|
Идите нафиг, господин Жумп! ![Стоп!](images/smilies/icon_stop.gif) Сравнение делается железом, происходит мгновенно. Поллинг не нужон. Вход в прерывание более-менее однообразно, можно учесть пару мкс и вычесть из желаемой задержки!
|
|
|
|
09.09.2014, 01:23
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Задержка импульса
Так, только без глупостей
что за поллинг ?
я хочу применить делитель т.к использую для искры 8-ми битный счетчик а уже для расчета оборотов 16-ти. Вот и пытаюсь разобраться с пред делителями.
сейчас я переварю всю инфу
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:49.
|
|