|
|
  |
Как использовать ШИМ в МК от атмел? |
|
|
|
Apr 24 2006, 18:37
|
Частый гость
 
Группа: Новичок
Сообщений: 100
Регистрация: 9-03-06
Пользователь №: 15 088

|
Вот с исходников насобирал: Код // скважиность ШИМ-сигнала #define PORE_PWM OCR1A
// частота ШИМ-сигнала #define FREQUENCY_PWM OCR1B
void main(void) { TCCR1 |= BIT(6); // enable PWM TCCR1 |= BIT(5); // инвертированный TCCR1 |= BIT(4); // ШИМ-сигнал // Frequency PWN 20 kHz TCCR1 &= ~ BIT(3); // источник тактового сигнала - PCK/8 TCCR1 |= BIT(2); TCCR1 &= ~ BIT(1); TCCR1 &= ~ BIT(0); FREQUENCY_PWM = 159; PORE_PWM = 13; ... ... Под конкрентые задачи частоту и скважиность можно посмотреть из datasheet используемого МК
|
|
|
|
|
Apr 24 2006, 19:47
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
Цитата(CSB @ Apr 24 2006, 22:37)  Вот с исходников насобирал: Код // скважиность ШИМ-сигнала #define PORE_PWM OCR1A
// частота ШИМ-сигнала #define FREQUENCY_PWM OCR1B
void main(void) { TCCR1 |= BIT(6); // enable PWM TCCR1 |= BIT(5); // инвертированный TCCR1 |= BIT(4); // ШИМ-сигнал // Frequency PWN 20 kHz TCCR1 &= ~ BIT(3); // источник тактового сигнала - PCK/8 TCCR1 |= BIT(2); TCCR1 &= ~ BIT(1); TCCR1 &= ~ BIT(0); FREQUENCY_PWM = 159; PORE_PWM = 13; ... ... Под конкрентые задачи частоту и скважиность можно посмотреть из datasheet используемого МК но как с помощью этого зажечь, например, в пол-накала светодиод?
|
|
|
|
|
Apr 25 2006, 01:27
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(ps1x @ Apr 24 2006, 22:47)  но как с помощью этого зажечь, например, в пол-накала светодиод? В даташите все расписано более чем доступно. У 16-ти разрядного таймера есть два регистра OCR1A/OCR1B которые можно задействовать для PWM. Имеется несколько режимов PWM из которых Fast PWM наиболее прост как для понимания так и для использования. Идея такова: в один из регистров или в оба регистра OCR1X заносится некоторое число, при достижении которого счетчиком (TCNT1) таймера будет осуществлено переключение определенного пина. При сбросе счетчика TCNT1 будет осуществлено обратное переключение пина. Т.о. если в OCR1A или OCR1B записать значение равное половине (127/255/511) от максимально возможного значения (в зависимости от режима 8, 9, 10bit Fast PWM - 255/511/1023) TCNT, вы получите яркость как раз в "пол-накала". Есть еще один из путей - когда можно воспользоваться любыми пинами и сделать PWM любой разрядности с гибкой подстройкой частоты следования импульсов. Для этого можно задействовать режим CTC, задать частоту следования импульсов регистром OCR1A и задать ширину пульса регистром OCR1B, соответственно переключать требуемые пины по прерываниям от OCR1A и OCR1B.
|
|
|
|
|
Apr 25 2006, 13:16
|
Профессионал
   
Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712

|
Цитата(defunct @ Apr 25 2006, 07:27)  Есть еще один из путей - когда можно воспользоваться любыми пинами и сделать PWM любой разрядности с гибкой подстройкой частоты следования импульсов. Для этого можно задействовать режим CTC, задать частоту следования импульсов регистром OCR1A и задать ширину пульса регистром OCR1B, соответственно переключать требуемые пины по прерываниям от OCR1A и OCR1B. К сожалению, не все модели камней от Атмел (точнее - не все таймеры) имеют OCRхA и OCRхB. А использовать для генерации ШИМ именно Т1 не всегда удобно. Сталкивался с аналогичной проблемой на Меге 8 (Timer2), там только один регистр задает параметры ШИМ, и регулировать одновременно частоту и скважность ШИМа не удается. Но для регулировки яркости светодиода Т2 - в самый раз, можно выбрать любой период переполнения таймера, и регулировать только скважность импульсов.
--------------------
Закономерность: Чем больше узнаю, тем меньше знаю... Любые мнения, даже ошибочные, имеют право на существование. Чем лучше узнаю людей, тем больше нравятся собаки...
|
|
|
|
|
Apr 25 2006, 15:21
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Валентиныч @ Apr 25 2006, 16:16)  К сожалению, не все модели камней от Атмел (точнее - не все таймеры) имеют OCRхA и OCRхB. Да Вы безусловно правы, не во всех камнях и не все таймеры оснащены этими регистрами, но это не беда, т.к. наиболее популярные (все Mega) и (Tiny 13/2313) содержат по крайней мере один таймер с двумя регистрами OCRxA/B. Цитата А использовать для генерации ШИМ именно Т1 не всегда удобно. С этим тоже бесусловно согласен. Однако это не отменяет приведенного, одного из возможных путей, генерации ШИМ. ;>
|
|
|
|
|
Apr 26 2006, 04:56
|
Местный
  
Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589

|
Цитата(ps1x @ Apr 24 2006, 19:59)  Хочется научится использовать шим, но не нашел доступного материала, как это реализовать. Я использую CVAVR, в code warior про шим или pwm ничего нет... Дайте пожалуйста ссылку или пример программы с использованием ШИМа. Заранее спасибо  Почитайте здесь: http://forum.roboclub.ru/IPBoard/index.php?showtopic=35и вот здесь: http://forum.roboclub.ru/IPBoard/index.php?showtopic=72Думаю Вам поможет. Успехов.
--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
|
|
|
|
|
May 7 2006, 15:43
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 4-08-05
Пользователь №: 7 369

|
А вот как получить два сигнала, сдвинутых по фазе? Например, _____/~~~~~\____ _________/~~~~~\____
|
|
|
|
|
May 7 2006, 18:11
|
Знающий
   
Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32

|
Цитата(-=user=- @ May 7 2006, 19:43)  А вот как получить два сигнала, сдвинутых по фазе? Например, _____/~~~~~\____ _________/~~~~~\____ Если нужна скважность 1/2, то так: Включить инверсию выходов OC1A и OC1B при совпадении с OCR1A и OCR1B соответственно. Занести в OCR1A и OCR1B числа, задающие фазы сигналов. Занести в ICR1 число, задающее период. Включить на таймере 1 режим CTC со счётом от 0 до ICR1, время счёта равно половине периода сигнала. Прерывания - по необходимости.
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|