реклама на сайте
подробности

 
 
> Как использовать ШИМ в МК от атмел?
ps1x
сообщение Apr 24 2006, 15:59
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284



Хочется научится использовать шим, но не нашел доступного материала, как это реализовать. Я использую CVAVR, в code warior про шим или pwm ничего нет... Дайте пожалуйста ссылку или пример программы с использованием ШИМа.
Заранее спасибо smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
CSB
сообщение Apr 24 2006, 18:37
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 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 используемого МК
Go to the top of the page
 
+Quote Post
ps1x
сообщение Apr 24 2006, 19:47
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 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 используемого МК


но как с помощью этого зажечь, например, в пол-накала светодиод?
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 25 2006, 01:27
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 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.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 13:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016