Problemas con ICP Atmega328p

0

Estoy tratando de usar la funcionalidad ICP (Pin de captura de entrada) de ATMEGA328p (placa Arduino Uno) y de alguna manera parece que no funciona. He conectado un interruptor a ICP pin PB0 en este caso, y quiero cambiar un LED a PC0 cada vez que se presiona el interruptor. De alguna manera no estoy aterrizando en el ISR. ICRL parece mostrar cero también. Aquí está mi código:

void init_input_capture()
{
    TIMSK0 = ( (1<<ICIE1) );                     /*Enable ICP Interrupt */
    TCCR1B = ( (1<<ICES1) | (1<<ICNC1) | (1<<CS11));  /*Enable rising edge detection, noise cancellaton*/ 



}
void Transmit_string(char *str )
{
    for(i=0; i<strlen(str)+1;i++)
        Transmit(&str[i]);

        Transmit("\n");
        Transmit("\r");

        for(i=0; i<strlen(str)+1;i++)
          str[i]=0;

}



void capture_function()
{
    if(capture_occured==1)
    {
     LED_PIN(SET);

    } 
    else
      LED_PIN(CLEAR);
}   

void main()
{


   DDRC  = 1<<PC0;  /*Pin PC0 os output LED */   
   PORTC = 1<<PC0;  /*Enable PC0 internal pullup */      

   DDRB  = 0x00;   /*PB0 as INPUT*/
   PORTB= 1<<PB0;

   usart_init(baud);

   init_input_capture();      
   sei();

   while(1)
   {
        capture_function();
        sprintf(value_buf,"%1u", temp);
        Transmit_string(value_buf);
        _delay_ms(300);
    }       
}

ISR(TIMER1_CAPT_vect)
{   
    capture_occured ^= 0x01;
    PORTC ^= 1<<PC0;  //not working
    temp=ICR1L; 

}
    
pregunta Abel Tom

0 respuestas

Lea otras preguntas en las etiquetas