COMPARACION DE BITS EN REGISTROS

Hola a todos.
Quiero comparar el registro TIFR1 en el bit TOV1 si ha babido desbordamiento, para poder sumar 1 a una variable y colocar el timer1 a 0 otra vez( TCNT1).

Lo he hecho asi y no me sale.

if((TIFR1 & (1<<TOV1))==(1<<TOV1))
{
Overflow++;
TIFR1 |= (0<<TOV1); //el flag a 0;
}
rogaria me pudieran ayudar.
muchas gracias de antemano.
PD: no quiero prescaler.
un saludo.

Saludos No se que quieres hacer pero no es mejor usar millis() y micros()

gracias max por contestar. si, ya se que se puede hacer por millis pero se pierde mucho tiempo y no funciona bien.

Hola. Prueba a ver así:

if(TIFR1 & (1<<TOV1)) // también valía como lo tenías tú, pero más sencillo así
{
Overflow++;
TIFR1 &= ~(1<<TOV1); // No estabas poniendo el flag a cero con el otro comando
}

Saludos

hola noter,
tienes razon es mas facil y mas legible por nosotros.
Estoi con esto de los timer y se pueden hacer muchas cosas con esto,
me gustaria hacerte una pregunta.
si TIFR1 es un registro de 8bits
y TOV1 es 1 bit
Y & es and
1<<TOV1 significa que TOV1 lo pongas a 1
como se compara la instruccion que has puesto?
que es lo que hace 1&1=1, es asi?
sino corrigeme por favor.
Otra cosa no consigo escribir el signo encima de la ñ
se que es alt+126 pero en el arduino no lo consigo
hay algun truco
gracias.
un saludo.

SAludos

ñ = ALT +164 ===> Serial.write(164) Ñ = ALT + 165 ===> Serial.write(165) ~ = ALT + 126 ===> Serial.write(126)

pincho41700:
hola noter,
tienes razon es mas facil y mas legible por nosotros.
Estoi con esto de los timer y se pueden hacer muchas cosas con esto,
me gustaria hacerte una pregunta.
si TIFR1 es un registro de 8bits
y TOV1 es 1 bit
Y & es and
1<<TOV1 significa que TOV1 lo pongas a 1
como se compara la instruccion que has puesto?
que es lo que hace 1&1=1, es asi?
sino corrigeme por favor.
Otra cosa no consigo escribir el signo encima de la ñ
se que es alt+126 pero en el arduino no lo consigo
hay algun truco
gracias.
un saludo.

Deberías echar un vistazo a las operaciones a nivel de bit. No obstante intentaré darte unas nociones rápidas.
Efectivamente, TIFR1 es un registro de 8 bits.
TOV1 es un bit de ese registro. Para arduino es un número que indica en qué posición (0 - 7) está ese bit. No sé ahora mismo qué posición es, pero supongamos que es el bit 2 (es decir, tercera posición por la derecha, recordemos que la primera es el bit 0). Entonces si hacemos un desplazamiento de 1 (00000001) dos (TOV1) posiciones, obtendremos 00000100 (1<<TOV1) . Si hacemos un or de bits con ese número a un registro que por ejemplo contenía 10101010, obtendremos 10101110, es decir, ponemos a 1 el bit de la posición 2, sin afectar al resto de bits. Para apagarlo, lo que debemos hacer es un and de bits con el número negado. Para ello, si negamos ~(00000100) obtenemos (11111011), y haciendo un and a nivel de bit lo que conseguimos es poner a 0 el bit 2 sin afectar a los demás.

ok
muchas gracias a los 2
un saludo

Saludos Noter tambien estoy aprendiendo con esto, mi pregunta y si usamos las instrucciones bitClear y bitSet? No es ma rapido que usar and's y or's? claro si es para un silo bit.

Faltan datos para hacer un código correcto sobre lo que quieres hacer, pero vamos, yo haría uso de las interrupciones, un código básico sobre lo que quieres hacer sería algo así como:

#include <avr/io.h>
#include <avr/interrupt.h>

void Timer1_Init (void);

Overflow = 0;

int main(void)
{

Timer1_Init ();
sei();

while(1)
{
}
}

void Timer1_Init (void)
{
TCCR1B = (1 << WGM12);
OCR1A = (Valor hasta el cual quieres que cuentes);
TIMSK1 = (1 << OCIE1A);
}

ISR(TIMER1_COMPA_vect)
{
Overflow++;
}

La bandera de interrupción se limpia sola y el registro de conteo del Timer se reinicia sólo al llegar al valor máximo de conteo.

Como ya te he dicho, faltan muchos datos en tu enunciado para hacer un código correcto, pero un código básico sería ese.

muchas graciias iburol lo tendre en cuenta y te cuento a ver que tal.