8.Master_I2C_PWM/pwm.h
2023-05-22 19:58:05 +03:00

70 lines
1.5 KiB
C

//
// 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