Реализация ШИМ на 8-ми разрядном таймере

Модератор: boogyman

Ответить
Аватара пользователя
boogyman
Модератор
Сообщения: 183
Зарегистрирован: 25 дек 2011, 22:48
Откуда: Москва

Реализация ШИМ на 8-ми разрядном таймере

#1

Сообщение boogyman »

Пример кода реализации ШИМ сигнала на atmega8, используется 8-ми битный таймер Т2. ШИМ сигнал снимается с вывода 17(OC2), частота также 15625Гц. Остальное описание тут http://radioparty.ru/index.php/prog-avr ... 40-lesson8

Код: Выделить всё

#include <avr/io.h>
#include <util/delay.h> // подпрограмма задержки

int main(void)
{
unsigned int i=0; //определяем переменную i

// Настройка портов ввода-вывода

PORTB = 0x00;
DDRB = (1<<PB3);
PORTD = (1<<PD0)|(1<<PD1); // подключаем внутренние нагрузочные резисторы
DDRD = 0x00;

// Настройка таймера T2

TCCR2 = (1<<WGM21)|(1<<WGM20)| // быстрый ШИМ
             (1<<COM21)|(0<<COM20)| // ШИМ подется на вывод OC2
             (0<<CS22)|(0<<CS21)|(1<<CS20); // включен без делителя

TCNT2 = 0x00; // начальная установка счетчика
OCR2 = 0x00; // начальный коэффициент заполнения ШИМ

//Основной цикл программы

while(1){
             if((PIND&(1<< PD0)) == 0) //если кнопка "больше" нажата
	       {
              if (i < 254)
                  { // коэффициент заполнения ШИМ изменяется от 0 до 255
                  i=i+1; // увеличиваем i на единицу
                  OCR2 = i; // записываем переменную в регистр сравнения
                  _delay_ms(30); // задержка 30ms
                  }
	       }
             if((PIND&(1<< PD1)) == 0) //если кнопка "меньше" нажата
	       {
            if (i > 0) // коэффициент заполнения ШИМ изменяется от 255 до 0
                 {
	         i--; // уменьшаем i на единицу(так тоже можно писать)
                 OCR2 = i; // записываем переменную в регистр сравнения
                 _delay_ms(30); // задержка 30ms  
                 }
	      }
      }
  }
Аватара пользователя
uni-t
Новичок
Сообщения: 1
Зарегистрирован: 19 янв 2012, 10:32

Re: Реализация ШИМ на 8-ми разрядном таймере

#2

Сообщение uni-t »

boogyman огромное спасибо за разъяснения все получилось :D
Ответить