|
Управление интенсивностью свечения
Программные примеры для микроконтроллеров 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;
}
}
|
Файлы проекта можно скачать здесь:
|
|
|