Инициализация PWM конструктором класса ( C++ )
Долгое время писал код под МК на С. Друг пишет под МК на С++, посоветовал мне, вот я решил попробовать. Микроконтроллер у меня ATmega88А, IDE Atmel Studio 6.2. Буду использовать 6 апаратных PWM для управления сервоприводами, так как нужно писать 6 одинаковых кусков кода, решил сделать класс Servo:
через конструктор передаем куда будем писать наше значение, тоесть регистр таймера для управления PWM:
Используем:
Вроде код получился читабельней.
Но вот как быть с инициализацией. Писать просто функцию где будут инициализироваться 3 апаратных таймера как то не по ООП. Добавить в конструктор весь код, будет инициализировать всё 6 раз, тоесть делать то же самое. Как можно сделать чтобы получить независимую инициализацию для каждого обьекта (канала) PWM — если регистры конфигурации разные для каждого таймера?
class Servo
{
private:
int* pulse_width;
public:
Servo(int* PWM_Channel);
void write(int data);
}; //Servo
через конструктор передаем куда будем писать наше значение, тоесть регистр таймера для управления PWM:
// default constructor
Servo::Servo(int* PWM_Channel)
{
pulse_width = PWM_Channel;
} //Servo
void Servo:: write(int data)
{
*pulse_width = data;
}
Используем:
int main(void)
{
Servo servo1(&OCR0A);
Servo servo2(&OCR0B);
servo1.write(10);
servo2.write(50);
while(1)
{
}
}
Вроде код получился читабельней.
Но вот как быть с инициализацией. Писать просто функцию где будут инициализироваться 3 апаратных таймера как то не по ООП. Добавить в конструктор весь код, будет инициализировать всё 6 раз, тоесть делать то же самое. Как можно сделать чтобы получить независимую инициализацию для каждого обьекта (канала) PWM — если регистры конфигурации разные для каждого таймера?