AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
09.09.2014, 01:32
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Задержка импульса
Сейчас смотрю на таймер по даташиту 2313 стр62, вроди никаких делителей на входе таймера не наблюдаю
http://c2.at.ua/3m/F_arx/attiny2313_...ja-polnaja.pdf
Следовательно таймер работает напрямую с частотой кварца
|
|
|
|
09.09.2014, 01:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,982
Сказал спасибо: 0
Сказали Спасибо 4,941 раз(а) в 2,370 сообщении(ях)
|
Re: Задержка импульса
Сообщение от Yurkin2014
|
Идите нафиг
|
дык и идите, вам туда!
Цитата:
|
Сравнение делается железом, происходит мгновенно
|
но прерывание-то никто не ускорит, учесть можно, но это так, для протоколу. кстати, перезагрузку тоже никто не отменял
Поллинг не нужон - да не нужон, но ТС должен о нем знать. поллинг - периодический опрос флага (прерывания) при запрещенном векторе. тоже относится и к портам в/в
конечно, у Т/С есть режим 1:1 с частотой резонатора/генератора, я б поднял кратно частоту до 16-20МГц
|
|
|
|
09.09.2014, 02:00
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Задержка импульса
Я бы сделал так.
Пользовать только один 16-битный таймер на всё.
Прежде всего устанавливаем прескейлер на 1/64, то есть тактовая частота таймера 1/8 МГц. Замечательно.
Заводим сигнал с датчика двигателя на прерывание. В каждом прерывании считываем текущее значение таймера в переменную oborot, обнуляем таймер, он начинает снова считать от 0. Таким образом имеем для 600 об/мин oborot = 12500, при 10000 об/мин значение oborot = 750. Для других оборотов значение будет где-то в промежутке между 12500 и 750. Ну, хорошо.
В том же прерывании лезем в таблицу Tabl[], извлекаем данные на задержку соответственно полученному Tabl[oborot] и записываем в регистр сравнения. Выходим из прерывания. Далее процессор вовремя дёрнет ножкой уже без нашего участия.
Получается в основном теле программы и делать-то нечего.
В данном случае таблица получается слишком длинной, нужно 12500 значений. Не беда. Ужимаемся. Перед считыванием переменную oborot сдвигаем вправо на 3. Получаем пределы изменения oborot от 1562 до 93, так как сдвигом поделили на 8. В таком случае таблица ужимается до 1562 значений. Уже жить можно.
Последний раз редактировалось Yurkin2014; 09.09.2014 в 02:13.
|
|
|
Сказали "Спасибо" Yurkin2014
|
|
|
09.09.2014, 02:19
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Задержка импульса
Парни всем огромное спасибо, вы себе не представляете как мне приятно слышать умных людей.
Сегодня уже баиньки, завтра наверное на работе буду включаться.
Вот что я успел нахимичить.
#define First_Delay 0x9c // начальная задержка // 40000 мкс начальная задержка
// 9С это 40000 с делителем 256, заносим его в таймер для сравнения
OCR0A=First_Delay;
TIMSK=0x07;
while(PIND.2==0); //ждём первый импульс датчика
#asm("cli")
CCR0B=0x04; //запускаем счётчик clock/256
PIND.2=0;
#asm("sei")
while(PIND.2==0); //ждём первый импульс датчика
в этом цикле рассчитывать задержку вторым 16-ти битным таймером
counter_rpm=(TCNT1L|((int)TCNT1H‹‹ ![Горд собой](images/smilies/icon_dovl.gif) ); //читаем скорость вращения
i=(1/counter_rpm)*60*1000000; обороты в минуту
Delay= tablica[i]; tablica[i] содержит значения от 100 до 10000 т.е 104 значения с шагом 100 оборотов
PIND.2=0;
#asm("sei")
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
OCR0A=First_Delay - Delay;
PORTB.4=1;
delay_us(100);
PORTB.4=0;
TCNT0=0x00; //заносим макс. значение
TIFR=0xff; //сбрасываем флаги
};
а на какой максимальной частоте может работать тини 2313, может действительно увеличить частоту и уменьшить делитель.
Yurkin2014, я уже думал что бы все влепить в один таймер, но знаний маловато, темболее с таймерами в данный момент работаю впервые.
Как мне лучше сделать.
Да я еще вот о чем подумал, если у меня в таймерах будут разные делители тогда может быть трабл по значениям,т.е одно значение перепрыгнет другое и не сработает прерывание или я ошибаюсь.
Заранее спасибо
Последний раз редактировалось SAHA_T; 09.09.2014 в 02:26.
|
|
|
|
09.09.2014, 05:44
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,907
Сказал спасибо: 2,543
Сказали Спасибо 11,818 раз(а) в 5,924 сообщении(ях)
|
Re: Задержка импульса
Т0 имеет пять значений предделителя, начиная с "1". Не слушайте фантазеров, рассказывающих про ПИКи, 51 и т.д., изучайте сами и не "по диагонали". За Вас этого никто не сделает.
Стр.64
Цитата:
|
Т/С0 может быть тактирован как внутренним источником, так и внешним. Источник тактирования
выбирается Тактовым Модулем (рисунок 26-27), который, в свою очередь, настраивается битами CS02:0, которые
находятся в Регистре Управления TCCR0B. За детальной информацией об Источниках Тактирования и о Делителе
Частоты (Предделителе) обращайтесь к разделу "Делитель Частоты Таймера/Счетчика 0 и Таймера/Счетчика 1" на
странице 79.
|
Стр.65
Цитата:
|
Тактовые импульсы clkT0 могут быть получены как от внешнего, так и от
внутреннего источника, это определяется битами CS02:0.
|
SAHA_T, какой IDE пользуетесь?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
Последний раз редактировалось akegor; 09.09.2014 в 05:52.
|
|
|
|
09.09.2014, 07:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 15.04.2008
Адрес: г. Томск
Сообщений: 1,988
Сказал спасибо: 29
Сказали Спасибо 778 раз(а) в 435 сообщении(ях)
|
Re: Задержка импульса
Интересно было бы узнать, а что за двигатель с 10 000 об/мин? Со спорт кара что ли?
|
|
|
|
09.09.2014, 08:24
|
|
Заблокирован
Регистрация: 27.07.2011
Адрес: Харьков
Сообщений: 8,236
Сказал спасибо: 4,687
Сказали Спасибо 11,566 раз(а) в 3,474 сообщении(ях)
|
Re: Задержка импульса
Сообщение от SAHA_T
|
У готового китайского модуля нет начальной задержки !!!
|
Может, не стОит изобретать велосипед?
Все уже украдено до нас. (с)
http://www.moto.com.ua/forum.php?id=1348536#1348536
Сообщение от KREN
|
что за двигатель
|
Двухколесного друга, это же очевидно.
...
SAHA_T, нет, я в принципе не против.
Если для общего развития в программировании.
Но здесь главный вопрос - имеете ли Вы соответствующее оборудование,
стенды, для правильной настройки этой приблуды?
(я пытался сделать то, чем Вы занялись, аналоговой схемой, но настройка углов "на ощупь" оказалась довольно тупая - убил кучу времени на покатушки и переделки схемы, в результате забросил не получив результата, которым я бы был доволен)
Но поставив DC-CDI ТАТА с коррекцией УОЗ, моя хиленькая 50сс Дельта просто воспрянула. Подробности найдете по ссылке на мото ком.
Единственное - угол датчика у Вас может не подойти к этому коммутатору.
Не помню, какой он у Дельты/Альфы (139FMB), чтобы сравнить.
|
|
|
|
09.09.2014, 13:26
|
|
Вид на жительство
Регистрация: 09.12.2009
Адрес: Россия, Тула
Сообщений: 377
Сказал спасибо: 192
Сказали Спасибо 156 раз(а) в 99 сообщении(ях)
|
Re: Задержка импульса
Когда-то давно делал октан-корректор для Москвича 2141 на ATMega48.
Алгоритм простейший, можно было бы и тиньку, да только крутилка угла на АЦП висит...
Выкладываю проект в Алгоритм Билдер и Спринт Лэйаут.
Кварц не использовал, ненадежно на вибрациях и температурах.
Да и не нужно, там же относительные измерения.
Это было в 2006 году, до сих насколько я знаю работает.
При любой температуре.
Сбоев не замечено.
Вклинивается в штатную систему, поэтому регулирует именно угол, от оборотов не зависит. Просто смотрит длительность оборота и высчитывает насколько задержать.
Поскольку углы там большие, +- 20 градусов где-то (не помню точно) - то на контакт бегунка трамблера был напаян удлинняющий ус из жести, чтобы не терять контакта искры при больших смещениях.
На печатке видно где вход питания, вход с датчика (там стабилитрон) и выход на замыкание на полевике bs170. Крутилка 4,7к подключена к +-5 и на вход АЦП через 1 мкф.
Корпус smd, две ноги поднять. Которые крестиками обозначены.
Под ними дорожка насквозь для ресета.
Всё в пластике размером со спичечный коробок, валяется в бардачке, поэтому даже лака на плате нет.
|
|
|
Сказали "Спасибо" krug_vv
|
|
|
09.09.2014, 13:31
|
|
Прописка
Регистрация: 23.07.2007
Сообщений: 209
Сказал спасибо: 109
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Задержка импульса
Сообщение от akegor
|
Т0 имеет пять значений предделителя, начиная с "1". Не слушайте фантазеров, рассказывающих про ПИКи, 51 и т.д., изучайте сами и не "по диагонали". За Вас этого никто не сделает.
Стр.64
Стр.65
SAHA_T, какой IDE пользуетесь?
|
в том то и дело, что я сам пытаюсь догнать принцип работы МК, наверное мне мешает то что когда то учил ООП, но тут совершенно иная логика, думаю это мне и мешает догонять. На самом деле прерывания это очень просто(но пару дней назад я думал, что это дебри). Вот так понемногу осваиваю пишу в CVAVR и тестирую в AVR4.0 единственный недостаток, невидно сколько времени занимает данное действие. Может в ПИК действительно изначально стоит делитель, этого я не знаю.
С делителем я думаю я ошибся, нужно будет сегодня еще раз перечитать вышесказанное по поводу делителей и тогда будет точно песня.
Я зна что такое IDE интерфейс т.к ремонтами ноутов занимаюсь более 3-х лет, а до этого лет 10-ть лапатил десктопы , но что такое IDE в МК делитель что ли ?
если делитель, то CCR0B=0x04; //запускаем счётчик clock/256
#define First_Delay 0x9c // начальная задержка // 40000 мкс начальная задержка
// 9С это 40000 с делителем 256, заносим его в таймер для сравнения
это я просто тупо поделил 40000 на делитель 256 но при этом я не учитывал частоту, походу это не правильно.
Ан-162 - скептики ![Очень смешно](images/smilies/icon_veryhappy.gif) , прошу не писать с подковырками, т.к с двигателями знаком давно и ваш коммутатор китайского производителя и Харьковского представителя ТАТА, который вы используете для Дельта является аналоговый УОЗ это совершенно другое и он не подходит для всех двигателей такого плана, тем более у Дельта используется высоковольтная обмотка у меня ее нет и для этого используется ВЧ преобразователь до 30кгц, также у Дельта начальное положение датчика находится на 0 градусов, у меня иначе. Кстати Ан-162 вам запчасти для Японских и Китайских скутеров не нужны ?(сами возим ил Тайвань) - это не реклама.
*Но здесь главный вопрос - имеете ли Вы соответствующее оборудование,
стенды, для правильной настройки этой приблуды?* вы так описали, как будто я космический корабль изобретаю, для настройки двигла особых стендов не нужно достаточно иметь ослика, стробоскоп, тахометр, далее дело техники и тестов.
Сейчас еще раз переварю инфу по поводу делителей.
|
|
|
|
09.09.2014, 13:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 04.12.2009
Сообщений: 5,455
Сказал спасибо: 73
Сказали Спасибо 2,510 раз(а) в 1,414 сообщении(ях)
|
Re: Задержка импульса
Сообщение от SAHA_T
|
достаточно иметь ослика
|
Так и представляю себе - бегом с осликом за мотоциклом ![Весело](images/smilies/icon_laugh.gif) .
|
|
|
Сказали "Спасибо" Scadauser
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:34.
|
|