шим atmega16

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
romanF1
Открыл глаза
Сообщения: 42
Зарегистрирован: Пн апр 11, 2011 20:28:48

шим atmega16

Сообщение romanF1 »

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

#include "iom16.h"

unsigned char pwm = 1;
unsigned char inc = 1; // inc = 0 - уменьшать, inc = 1 - увеличивать яркость

void timer2_init()
{
  OCR2 = 1; //ШИМ почти выключена
  // Быстрая ШИМ, переключать OC2 (PD7), увеличение таймера каждые 64 такта
  TCCR2 |= (1 << WGM20) | ( 1 << WGM21) | (1 << COM21) | (1 << CS22);
}

void timer1_init()
{
  OCR1A = 43200; //Прерывание 32 раза в секунду
  TCCR1A = 0;
  // СТС режим, увеличение таймера каждые 8 тактов
  TCCR1B |= (1 << WGM12) | (1 << CS11);
  // Прерывание по совпадению А таймера1
  TIMSK |= (1 << OCIE1A);
  SREG |= (1 << 7); //Разрешить прерывания
}

void io_init() //Инициализация портов ввода-вывода
{
  DDRD = (1 << PD7);
  PORTD = 0;
}

void main ()
{
  timer2_init();
  timer1_init();
  io_init();
  while(1)
  {
  }
}


#pragma vector = TIMER1_COMPA_vect  //объясните пожалуйста участок кода из примера что это за                      
                                                            прерывание и как оно запускается?
__interrupt void PWM_change()
{
  if (inc == 1) 
  {
    if (pwm < 254)
    {
      pwm++;  // Увеличиваем яркость лампы, пока не достигнем максимума
      OCR2 = pwm;
    }
    else
    {
      inc = 0;
    }
  }
  else
  {
    if (pwm > 1)
    {
      pwm--;  // Уменьшаем яркость лампы, пока не остигнем минимума
      OCR2 = pwm;
    }
    else
    {
      inc = 1;
    }
  }
}
подскажите как рассчитывать ШИМ на микроконтроллере Atmega16?
Реклама
Аватара пользователя
Goldsmith
Опытный кот
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону
Контактная информация:

Re: шим atmega16

Сообщение Goldsmith »

В фирменном даташите на ATmega16 и ATmega16L (2466P–AVR–08/07):

Таймер 0 - стр. 77-80.
Таймер 1 - стр. 102-108.
Таймер 2 - стр. 123-125.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»