¿Puedo generar el pulso con el temporizador1 en modo normal en ATmega 2560 utilizando el indicador TOV?

0

El temporizador tiene CTC y PWN para generar pulso. Sin embargo, si quiero generar un pulso cuando el temporizador alcanza su nivel máximo, el uso de CTC o PWN no es necesario cuando se establece el TOV cuando el temporizador se desborda. Mi idea es que el pin de salida cambiará cada vez que se establezca el indicador TOV, luego se borra el indicador TOV y se espera otro desbordamiento del temporizador. Aquí está mi código en C, aunque no estoy seguro porque aún no entiendo cómo manejar cada bit en el registro y no sé cómo lo simulo en proteus.

#include <avr/io.h>
int main(void)
{
    TOV1 = 0; // clear timer 1 overflown flag 
    DDRD = 0xFF; // set port D as output
    TCCR1B = 0b00000001; // using internal I/O clock with prescaler 1 
    while(1){
        if (TOV1 = 1){
            PORTD ^= (1<<PORTD0); // toggle bit 0 on port D
            TOV1++; // clear TOV by adding 1 to TOV
        }
    }
}
    
pregunta aukxn

1 respuesta

2

Veo algunas cosas mal aquí ...

1. ¿Asignación en lugar de comparación?

if (TOV1 = 1){

... probablemente debería ser ...

if (TOV1 == 1){

enlace

  1. TOV1 se trata como un registro cuando en realidad está un poco en el registro TIFR1 .

TOV1 = 0;

... probablemente debería ser ...

TIFR1 |= (1<<TOV1);

(según la hoja de datos, la bandera se borra al escribirle 1 bit)

... y ...

if (TOV1 == 1)

... probablemente debería ser ...

if (TIFR1 & (1<<TOV1) )

2. No creo que puedas despejar un poco agregándole 1

TOV1++; // clear TOV by adding 1 to TOV

... probablemente debería ser ...

TIFR1 |= (1<<TOV1); // borrar el bit TOV '

(según la hoja de datos, la bandera se borra al escribirle 1 bit)

3. Mejor manera de alternar un poco

Si realmente quieres cambiar un pin GPIO, el registro de PIN es probablemente lo que quieres. Entonces ...

PORTD ^= (1<<PORTD0); // toggle bit 0 on port D

... sería mejor que ...

PIND = (1<<PORTD0); // toggle bit 0 on port D

Puedes leer más sobre esto en la hoja de datos ...

  

13.2.2 Alternar el pin

     

Al escribir una lógica en PINxn, se alterna el valor de PORTxn, independientemente del valor de DDRxn. Tenga en cuenta que la instrucción SBI se puede usar para alternar un solo bit en un puerto.

    
respondido por el bigjosh

Lea otras preguntas en las etiquetas