Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Avisos
Vaciar todo

Contador tiempo real SIN DESPERTAR al micro. 32 KHz externo

9 Respuestas
5 Usuarios
0 Reactions
1,852 Visitas
morgoz
Respuestas: 208
Topic starter
(@morgoz)
Estimable Member
Registrado: hace 19 años

Hola a todos!!

Como continuación del post en el que resolvímos cómo contar un segundo con un cristal de 32 KHz, ahora abro este como versión final de cómo contar minutos y horas sin necesidad de despertar al micro (a ser posible)

Este post va dedicado en especial a Beamspot, ya que es él el que sugirió esta idea, luego es a él a quien dirijo principalmente las dudas, aunque por supuesto, puede contestar y preguntar cualquiera.

Finalmente voy a implementar un contador con un Atmega8 con un oscilador externo de 32.768 Hz, con el temporizador asíncrono de 8bits.

Voy a utilizar el prescaler a 1024, con el que podría contar un máximo de 8 segundos (256) sin que se generase una interrupción. De esta manera, lo que hago es, una vez el temporizador llega a 8 segundos, se genera una interrupción, en la que incremento en 1 una variable; cuándo la varialbe llega a 225 (30 minutos), paro el contador.

El problema es que, si quiero mantener el micro dormido durante los 30 minutos, no puedo hacerlo porque cada 8 segundos se despierta para incrementar y comparar el valor de la variable, y me gustaría poder mantener el micro dormido el 100% del tiempo durante minutos u horas, ¿se puede hacer algo así o es necesario despertarlo y dormirlo a cada rato?

Gracias!!

Responder
8 respuestas
ranganok
Respuestas: 3875
(@ranganok)
Ardero
Registrado: hace 20 años

Por qué no usas un RTC (reloj de tiempo real) externo y así te olvidas de las cuentas del micro? lo digo porque en este caso puedes dejar el micro dormido todo el tiempo que quieras, y estos dispositivos gastan muy poco (están pensados para que puedan funcionar dos años con una pequeña batería)

S2

Ranganok Schahzaman

Responder
beamspot
Respuestas: 1132
(@beamspot)
Noble Member
Registrado: hace 18 años

Hola:

Siento la tardanza, pero en Segur no tengo internet, sólo en Vilanova (donde resido cuando trabajo, de lunes a viernes).

Bueno, pues sí que hay que despertar al micro cada vez que salta el timer. Es lo que yo hago, ya que la rutina de interrupción cuenta el tiempo real y 'levanta' las 'banderas' de posibles opciones.

En la rutina principal, compruebo si hay 'banderas' activas, y si no las hay, vuelvo a dormir el micro.

Esto me pasa para ahorrarme el RTC externo que tan bien te ha recomendado Ranganok. Claro que el problema en mi caso era de precio. Así, me ahorraba unos céntimos en integrados. Quizás sea más interesante esta opción, ya que te permite tener el micro dormido hasta que vuelva a saltar el 'despertador'. Si el precio no es importante, quizás sea la mejor opción.

Por cierto, si te decantas por un RTC externo, te recomiendo un SPI en lugar de un I2C, por la simplicidad del código.

Que os divirtáis.

Responder
morgoz
Respuestas: 208
Topic starter
(@morgoz)
Estimable Member
Registrado: hace 19 años

Buenas y gracias,

pues si (a todo lo comentado por todos), me habeis ido robando las palabras una a una.
Lo del RTC lo pensé hace tiempo, pero al costar entre 2 y 6 €, me encarece mucho la placa y para mi el coste es importante; a parte de que el gasto en principio no compensa el beneficio en ahorro energético para unos 5 segundos menos de dormir a lo largo de 30 días (16 ciclos de reloj estimados a 2MHz entre que despierta, comprueba la variable, actualiza y vuelve a dormir), pero indudablemente es la mejor opción, que retomaré si tengo problemas de sincronización en la red.
Y por supuesto, si me cojo un RTC, que sea por SPI, que ya lo trae el microcontrolador, que si tengo que poner I2C, además me toca meter otro integrado para la comunicación.

Y nada más, gracias por aclarar el tema de tener que despertar cada 8 segundos, ahora consumiré esta energía con la conciencia más tranquila 😉

Saludos!!!!

Responder
beamspot
Respuestas: 1132
(@beamspot)
Noble Member
Registrado: hace 18 años

Un pequeño detalle: los AVR, muchos, llevan I2C, pero para no pagar royalties, lo llaman TWI, así que revisa los datasheets, a ver si vas a tener una sorpresa...

De todas maneras, eso no conlleva que el TWI sea más fácil de usar que el I2C. Al fin y al cabo, son lo mismo.

Por cierto, usar el timer de 16 bits con el cristal de 32 KHz implica que por narices tienes que poner el cristal como el oscilador maestro, o usar un oscilador externo. Dada la situación, tu opción de ir a 32KHz no es descartable en absoluto.

Que te diviertas.

Responder
Página 2 / 2
Compartir: