70 lines
1.5 KiB
C
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
|