AVR mega 164 Real time counter

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 ;
 
hola lrms92 io tengo un rtc pero lo compilo en codevision avr, intenta usarlo y pues el codigo igual lo puedes usar para cualquier micro de avr.
 

Adjuntos

  • PRACTICA 8 (TIMER).rar
    44.1 KB · Visitas: 19
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);
 
Atrás
Arriba