我必须从 10% 的占空比开始,我必须在 4 秒后将其增加 10%,当它达到 90% 的占空比时,它必须再次达到 10%。(周期 100 赫兹 10 毫秒)我正在 tinkercad 中对其进行测试,但它不起作用,它在 10% 和 20% 之间振荡。在这段代码中,我不问它何时达到 90% 的关税,因为它没有达到 90% 的关税。
volatile uint32_t ul_contador = 0;
#define pulsador 5
void setup()
{
pinMode(pulsador,INPUT);
}
void InitPWM1(){
cli();
OCR1A =2500; //64 Preescaler
OCR1B =250;
TCCR1B |= (1<<WGM12)|(1<<WGM13);
TCCR1A |= (1<<WGM10)|(1<<WGM11);
//Timer 1 Preescaler 1
TCCR1B &=~(1<<CS12);
TCCR1B |= (1<<CS11);
TCCR1B |=(1<<CS10);
TCCR1A |= (1<<COM1B1);
TCCR1A &=~ (1<<COM1B0);
TIMSK1 |= (1<<OCIE1A);
sei();
}
int main( void){
DDRB |= (1<< DDB2);
InitPWM1();
while(1)
{
}
}
ISR(TIMER1_COMPA_vect){
ul_contador++;
//PORTB |=(1 << PB2);
if (ul_contador >= 400){
OCR1A =2500;
OCR1B =OCR1B+250;
ul_contador=0;
PORTB ^= ( 1<< PB2 );
}
}