0

我必须从 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 );
    }

}
4

0 回答 0