roboforum.ru

Технический форум по робототехнике.
Текущее время: 03 дек 2024, 01:46

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: ШИМ на любую ногу. Задержка.
СообщениеДобавлено: 25 мар 2012, 09:43 
Не в сети

Зарегистрирован: 25 мар 2012, 08:46
Сообщения: 2
Доброго дня всем!
Пролог. Давно почитываю ваш сайт. Нравятся самоделки и проекты, порой интересно понаблюдать за созданием устройства. Самому тоже нравится поднапрячь мозги, но практического опыта все же не хватает.
Итак! Имеется контроллер ATmega16 на тестовой плате. Имеется очень большое желание плавного управления яркостью светодиода. Вполне логично, что для этого имеет смысл использования ШИМ, что я и делаю. Однако, если же хочу использовать не стандартную ногу OC1A, а любую на мой выбор, то придется изменить ШИМ. Отключаю ногу и ставлю два прерывания по сравнению и по переполнению. В одном случае устанавливаю нужную мне ногу, в другом сбрасываю. Однако, даже когда регистр OCR1A равен нулю, то все равно имеется некая задержка во времени, которая не дает моему светодиоду потухнуть полностью. Вот пример на COdeVision:

Код:
//Настройка таймера:
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Fast PWM top=00FFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x01;
TCCR1B=0x09;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

//Включение прерываний:
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x14;

//Прерывания:
// Timer1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Place your code here
  PORTD.0=1;
}

// Timer1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
// Place your code here
  PORTD.0=0;
}


Вложение:
Задержка ШИМ.png
Задержка ШИМ.png [ 130.9 КиБ | Просмотров: 1596 ]


Собственно, вот и ситуация. А хотелось бы если не избавиться, то минимизировать эту задержку. Предполагаю, что это происходит в связи с обработкой прерывания, или нет? Возможно ли избавиться? Менять скорость ШИМ на более низкую не очень-то хотелось бы - а если не один светодиод решу сделать, а, допустим, 50. Тогда надо на максимальной скорости работать, чтобы успевать переключаться. Выходить на 10 битное разрешение тоже, наверное, будет неудобно.
Есть ли другие варианты решения? Гуру, подскажите! :-)
З.Ы. Глюканул форум, второй раз набиваю сообщение :-(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ на любую ногу. Задержка.
СообщениеДобавлено: 26 мар 2012, 02:54 
Не в сети
Аватара пользователя

Зарегистрирован: 25 июл 2007, 10:38
Сообщения: 354
Откуда: Москва (Троицк, МО)
ФИО: Антон Миронов
Сделай проверку в лоб: выставлять 1 только если OCR1A!=0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ на любую ногу. Задержка.
СообщениеДобавлено: 26 мар 2012, 03:32 
Не в сети

Зарегистрирован: 25 мар 2012, 08:46
Сообщения: 2
Пробовал, но при этом получается некий скачок. Светодиод не плавно загорается, а начиная с состояния 0x0F, т.е. первые 16 позиций тупо "прощелкиваются".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ШИМ на любую ногу. Задержка.
СообщениеДобавлено: 26 мар 2012, 08:04 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
а такт у таймера какой ? а то могет оч быстрый.. и просто не успеваешь выйти с прерывания и обработать..

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO