Вы вошли на сайт, как Гость
Регистрация

Управление интенсивностью свечения

Программные примеры для микроконтроллеров AVR - AVRStudio
(Управление интенсивностью свечения)

В данном примере мы использовали для управления состоянием вывода ОС1А прерывание, возникающее при достижении счетчика нулевого состояния. Управление интенсивностью свечения светодиода можно также реализовать, выбирая один из типов рабочего цикла ШИМ с помощью трех переключателей, подключенных к выводам 0-2 порта С. Так, если все переключатели выключены, то это соответствует 10% рабочего цикла, если включен переключатель на выводе 0 — 20%, переключатель на выводе 1 — 30%, переключатели на выводах 0 и 1 — 40%) и т.д. Если все переключатели включены, то это соответствует циклу 80%.

Примечание: при компиляции проекта требуется добавить в проект следующие библиотеки: "avr/io.h".

#if defined(__AVR_AT90S2313__)
#  define OC1 PB3
#  define OCR OCR1
#  define DDROC DDRB
#elif defined(__AVR_AT90S2333__) || defined(__AVR_AT90S4433__)
#  define OC1 PB1
#  define DDROC DDRB
#  define OCR OCR1
#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || \
      defined(__AVR_AT90S4434__) || defined(__AVR_AT90S8535__) || \
      defined(__AVR_ATmega163__)
#  define OC1 PD5
#  define DDROC DDRD
#  define OCR OCR1A
#endif

#if defined(COM11)
#  define XCOM11 COM11
#elif defined(COM1A1)
#  define XCOM11 COM1A1
#endif

#define PWM_DUTY (PINC & 7)

void main (void)
{
  PORTC = 0x07;
  TCCR1A = _BV(XCOM11) | _BV(PWM10);
  TCCR1B = _BV(CS10);
  DDROC = _BV(OC1);
  while(1)
  {
    OCR = (PWM_DUTY + 1) * 2550 / 100;
  }
}

Файлы проекта можно скачать здесь: