// // Created by FSB-PC on 22.05.2023. // #ifndef INC_8_PMW_PMW_H #define INC_8_PMW_PMW_H struct PWM { uint8_t pin; // номер пина uint16_t frequency; // частота ШИМ сигнала uint8_t duty_cycle; // коэффициент заполнения }; void pwm_begin(struct PWM *pwm) { TCCR0A = (1 << COM0A1) | (1 << WGM00) | (1 << WGM01); TCCR0B = (1 << CS00) | (1 << CS01); OCR0A = 0; pwm->duty_cycle = 0; } void pwm_set_duty_cycle(struct PWM *pwm, uint8_t duty_cycle) { pwm->duty_cycle = duty_cycle; OCR0A = (duty_cycle * 255) / 100; } void pwm_increase_speed(struct PWM *pwm) { pwm->duty_cycle += 25; TCCR0B = (1 << CS00) | (1 << CS01); } void pwm_decrease_speed(struct PWM *pwm) { pwm->duty_cycle -= 20; TCCR0B = (1 << CS00) | (1 << CS01); } void pwm_end(struct PWM *pwm) { TCCR0B = 0; } //void pmw_begin(PMW *pmw) { // TCCR0A = (1 << COM0A1) | (1 << WGM00) | (1 << WGM01); // TCCR0B = (1 << CS00) | (1 << CS01); // OCR0A = 0; // pmw->speed = 0; // pmw->duty_cycle = 0; //} // //void pmw_set_duty_cycle(PMW *pmw, uint8_t duty_cycle) { // pmw->duty_cycle = duty_cycle; // OCR0A = (duty_cycle * 255) / 100; //} // //void pmw_increase_speed(PMW *pmw) { // pmw->speed += 25; // TCCR0B = (1 << CS00) | (1 << CS01); //} // //void pmw_decrease_speed(PMW *pmw) { // pmw->speed -= 20; // TCCR0B = (1 << CS00) | (1 << CS01); //} // //void pmw_end(PMW *pmw) { // TCCR0B = 0; //} #endif //INC_8_PMW_PMW_H