AVR mega 164 Real time counter

#1
hola me estoy inciando en esto de los micros avr tengo un problema para usar el rtc
(real time conuter)

este es el codigo que use pero a la hora de cambiar el estado de PD0 (PORTD ^= 0x01 ) se supone que debe de verse el cambio por los pulsos de reloj
PERO NO HACE NADA!! QUISIERA QUE ME AYUDARAN GRACIAS

#define F_CPU 8000000UL //Oscilador interno de 8MHz
#include <avr/io.h> //Definición de puertos y terminales
#include <util/delay.h> //Libreria para retardos
#include <avr/interrupt.h> //Libreria para interrupciones
int main(void)
{
//Habilitar a todo el PORTD como salidas
DDRD = 0xFF;
//Esperar al menos 1 seg para estabilizacion del clk secundario
_delay_ms(1000);
//Habilitar el reloj externo y
//Configurar al micro para que funcione con el cristal externo de 32.768 KHz
//en forma asincrona (independiente del oscilador de 8MHz interno)
ASSR |= (1<<EXCLK) | (1<<AS2);
//32.768 KHz / 128 para hacer tiempos exactos de 1 segundo
//con cada interrupción por sobreflujo
TCCR2B |= (1<<CS22) | (1<<CS20);
//Habilitar la interrupción por sobre flujo
//para el Timer/Counter2 que es de 8 bits
TIMSK2 |= (1<<TOIE2);
//Habilitar las interrupciones
sei();
//Dejar al micro corriendo para que siga
//habiendo pulsos de reloj

for(;;)
{
}
}
//Vector de interrupción por sobreflujo
ISR(TIMER2_OVF_vect)
{
//Hacer toggle en PD0 para
//comprobar el funcionamiento

PORTD ^= 0x01 ;
 
#3
Si mal no veo, te falta habilitar las interrupciones de nuevo, ya que una ves que entras a la interrupcion se deshabilitan, entonces antes de termina la ISR recuerda volver a poner SEI();

Otra cosa el _delay_ms(1000) eso no funciona recuerda que el maximo tiempo de retardo es de 262/F_CLOCK que a 8Mhz te daria algo como maximo 32ms osea _delay_ms(32);
 

Temas similares

Arriba