Четверг, 02.05.2024, 08:19 | Приветствую Вас Гость

Battle Corp

Главная » Статьи » Микроконтроллеры » Firmware

Софтовый ШИМ
Всё намного проще чем может показаться на первый взгляд. 
Во-первых надо завести себе прерывание по таймеру с довольно большой частотой, я взял 8-ми битный счётчик на полной частоте процессора и прерывание по переполнению т.о. прерывание будет происходить через каждые 256 тактов при частоте кварца 16МГц это 62500 раз в секунду.
Во-вторых надо объявить переменную "ШИМ счётчик" которая будет считать время внутри одного периода ШИМ и увеличивать её на единицу по каждому прерыванию счётчика. 
В-третьих для каждой ноги МК на которой нужен ШИМ объявить переменную которая будет определять ширину импульса. Удобно использовать массив из 8-ми значений сразу для целого порта. 
На каждом прерывании сравнив значение "ШИМ счётчика" со значением ширины импульса т.е. если значение счётчика меньше значения ширины мы выставляем на ноге "1", если значение счётчика больше значения ширины мы выставляем на ноге "0".
Пример кода:

char b_values[8];//Широты импульсов

char pmw_counter = 0;//Шим счётчик

 

char GeneratePortValue(char pmw_values[8],char pmw_counter)

//Функция вычисляющая значение порта

{

        char result = 0;

        char mask = 1;

        int i;

        for(i=0;i<8;i++)

        {

                if(pmw_values[i]>pmw_counter)

                {

                        result |=mask;

                }

                mask=mask<<1;

        }

        return result;

}

interrupt [TIM0_OVF] void timer0_ovf_isr(void)

//Прерывание по таймеру

{

  PORTB = GeneratePortValue(b_values,pmw_counter);

        pmw_counter++;

}

Меняя занчения b_values можно менять яркость светодиодов подключенных к порту B. Конечно можно подключать и не только светодиоды, но и двигатели, электромагниты и т.п., но для них уже нужны RC фильтры для сглаживания сигнала и транзисторы для увеличения мощности. 

Категория: Firmware | Добавил: HMHamster (25.11.2009)
Просмотров: 1006 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Меню сайта
Форма входа
Категории раздела
AVR [1]
Микроконтроллеры фирмы Atmel и всё что с ними связано
Firmware [1]
Всё что связано с прошивками для микроконтроллеров
Девайсы [1]
Поиск
Наш опрос
Оцените мой сайт
Всего ответов: 10
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0