В примере timer демонстрируется использование класса, реализующего функции 16-битного таймера-счётчика 1, для управления временем задержки мигающего светодиода с помощью потенциометра.
Исходный код примера:
/* * timer.cpp * * VE_AVR_Library Timer/Counter LED Blinking Using ADC Control Example. * * Created on: 11.05.2012 * Author: andrey */ #include <ve_avr.h> #include <misc/ve_led.h> #include <misc/ve_pot.h> #define LED DEV_GPIOB, 7 // Светодиод LED подключен к выводу PB7 микроконтроллера #define LED_POT_CHANNEL AnalogMux::CH_ADC0 // Потенциометр LED_POT_CHANNEL подключен к выводу ADC0 // микроконтроллера volatile bool bLedOn = false; // Флаг состояния светодиода LED (false - выключен) volatile uint16_t potValue; // Значение напряжение потенциометра LED_POT_CHANNEL умноженное на 64 int main() { DEV_POWER.adcOn(); // Включаем питание АЦП DEV_POWER.timer1On(); // Включаем питание таймера-счётчика 1 led::setup(LED); // Предварительная настройка вывода светодиода LED Pot pot; pot.setup(LED_POT_CHANNEL); // Предварительная настройка канала АЦП LED_POT_CHANNEL potValue = pot.getValue() << 6; // Первый опрос АЦП // Предварительная настройка таймера-счётчика 1 DEV_TIMER1.setClockSelect(TimerW::Prescaler_64); // Рабочая частота CLKIO/64 (например 16 МГц / 64 = 250 кГц) DEV_TIMER1.setWaveGenMode(TimerW::FastPWM_OCRA); // Режим быстрого ШИМ со сравнением TCNT1 == OCR1A DEV_TICTRL1.outCompIntEnableA(); // Разрешить прерывание сравнения (TIMER1_COMPA_vect) enableInterrupts(); // Разрешить прерывания while(true) { potValue = pot.getValue() << 6; // Опрос состояния потенциометра и рассчёт времени задержки if (bLedOn) // Если светодиод LED должен светиться led::on(LED); // включить светодиод LED else // и наоборот led::off(LED); }} ISR(TIMER1_COMPA_vect) // Обработчик прерывания TIMER1_COMPA_vect { DEV_TIMER1.setOutputCompareA(potValue); // Установить интервал времени до следующего прерывания bLedOn = ! bLedOn; // Переключить состояние светодиода через флаг состояния }Следующий пример: usart - передача данных по последовательному порту USART.
Предыдущий пример: adc - считывание значения напряжения потенциометра.
Автор: Андрей Шаройко <vanyamboe@gmail.com>