Reloj digital miniatura con atmega328p AU y RTC

Perdon por la tardanza pero hasta ahora vuelvo a casa
realice el cambio en los leds y reemplace los optos con transistores 2n2222
no he tenido tiempo de investigar el RTC asi que aun no lo conectare
el pinout quedaria de esta forma con el siguiente formato (salida / pin en arduino / pin del microcontrolador)

A / 0 / PD0
B / 1 / PD1
C / 2 / PD2
D / 3 / PD3
E / 4 / PD4
F / 5 / PD5
G / 6 / PD6
DIG1 / 7 / PD7
DIG2 / 8 / PB0
DIG3 / 9 / PB1
DIG4 / 10 / PB2
DIG5 / 11 / PB3
DIG6 / 12 / PB4

espero este bien esta vez, si pueden darme un link donde se explique bien el funcionamiento del RTC asi como algun modelo para los cristales de cuarzo que necesito seria de gran ayuda
Nano Clock SCH Mk2.png
 
Ahora si va tomando forma.

Como te he dicho, el RTC no es del todo complicado hacerlo funcionar. Y, como bien dice Gudino Roberto, hay muchísima información y ejemplos buscando en internet.

Lo mas importante y primer paso es conseguir el datasheet del integrado. Ahí vas a encontrar información sobre conexión, alimentación, comandos, etc.

Yo diría que primero pruebes leyendo el datasheet, luego los ejemplos que hay en internet, información y todo lo que puedas encontrar, luego se puede despejar las dudas especificas que tengas.

Normalmente usan cristales de 32768 hz ya que es una potencia de 2 y por eso es fácil dividirla digitalmente para obtener 1 pulso por segundo, pero de todo eso se encarga el IC. Lo único que te toca hacer a ti es enviarle los comandos al IC para ya sea, ponerlo en hora, leer la hora, leer el día, etc.

Ahora bien, a tu circuito aun le falta muchas cosas:

- ¿ Como se pondrá en hora, minutos, segundos, día de la semana, etc ? Faltan botones para programar el reloj.
- ¿ Como activaras el circuito para que muestre las horas solo cuando tu lo desees ? Falta el botón para despertar al micro.
- Si quieres agregarle funcionalidades o corregir algún error ¿ Como re-programaras el micro ? Falta un conector para programar el micro.
- ¿ Circuito de reset del micro ?

Ya que vas a usar una sola batería de litio, tu circuito debe funcionar al menos con 2.4v como para obtener la mayor cantidad de tiempo antes de tener que cambiar la batería (si se puede diseñar para 2v seria mejor, pero 2.4v también es una buena tensión de corte).

- ¿ Que LEDs piensas usar ? A olvidarse de los azules, casi que tienen que ser a la fuerza rojos. (hay que pensar que el transistor, en el mejor caso se va a quedar con 0.2v, ademas de lo que se quede el micro por lo que no queda mucho).
- Y siguiendo con lo anterior ¿ Que resistencias vas a usar para los LEDs ? ¡ a hacer cuentas !
- El micro no puede usar cualquier cristal, el fabricante da una tabla donde dice cual es la máxima frecuencia que se puede usar con determinada tensión de alimentación. Si se usa uno de mas frecuencia el micro puede funcionar erráticamente o directamente el oscilador nunca arrancar.
 
Ahora si va tomando forma.

Como te he dicho, el RTC no es del todo complicado hacerlo funcionar. Y, como bien dice Gudino Roberto, hay muchísima información y ejemplos buscando en internet.

Lo mas importante y primer paso es conseguir el datasheet del integrado. Ahí vas a encontrar información sobre conexión, alimentación, comandos, etc.

Yo diría que primero pruebes leyendo el datasheet, luego los ejemplos que hay en internet, información y todo lo que puedas encontrar, luego se puede despejar las dudas especificas que tengas.

Normalmente usan cristales de 32768 hz ya que es una potencia de 2 y por eso es fácil dividirla digitalmente para obtener 1 pulso por segundo, pero de todo eso se encarga el IC. Lo único que te toca hacer a ti es enviarle los comandos al IC para ya sea, ponerlo en hora, leer la hora, leer el día, etc.

Ahora bien, a tu circuito aun le falta muchas cosas:

- ¿ Como se pondrá en hora, minutos, segundos, día de la semana, etc ? Faltan botones para programar el reloj.
- ¿ Como activaras el circuito para que muestre las horas solo cuando tu lo desees ? Falta el botón para despertar al micro.
- Si quieres agregarle funcionalidades o corregir algún error ¿ Como re-programaras el micro ? Falta un conector para programar el micro.
- ¿ Circuito de reset del micro ?

Ya que vas a usar una sola batería de litio, tu circuito debe funcionar al menos con 2.4v como para obtener la mayor cantidad de tiempo antes de tener que cambiar la batería (si se puede diseñar para 2v seria mejor, pero 2.4v también es una buena tensión de corte).

- ¿ Que LEDs piensas usar ? A olvidarse de los azules, casi que tienen que ser a la fuerza rojos. (hay que pensar que el transistor, en el mejor caso se va a quedar con 0.2v, ademas de lo que se quede el micro por lo que no queda mucho).
- Y siguiendo con lo anterior ¿ Que resistencias vas a usar para los LEDs ? ¡ a hacer cuentas !
- El micro no puede usar cualquier cristal, el fabricante da una tabla donde dice cual es la máxima frecuencia que se puede usar con determinada tensión de alimentación. Si se usa uno de mas frecuencia el micro puede funcionar erráticamente o directamente el oscilador nunca arrancar.
bien, una cosa a la vez xd
ya lei la datasheet del DS1302 y de ahi saque el diagrama ideal del RTC que esta junto al micro
luego, para cargar los datos nuevos como la hora y correcciones de codigo pienso pones unos pads como si fuera un modulo de RAM o similares y desoldar un puerto viejo serial que no recuerdo bien como se llama pero es uno pequeño junto a los puertos express
puse transistores 2n2222 y las resistencias son de 330 ohmios
el boton para que muestre los datos aun lo estoy buscando para evitarme un circuito anti rebote
usare 2 baterias 2032 ya que una segun el fabricante debe estar en el RTC y la otra para el resto del circuito, si me echan una mano para corregir el diagrama del RTC podria poner ambas baterias en paralelo para aumentar la capacidad, de todos modos los leds se llevan suficiente espacio para usa 2 baterias
dudas especificas no tengo muchas por ahora, estoy haciendo pruebas para el codigo pero no logro encontrar algun lugar donde se explique como usar la funcion Timer0 que tengo entendido que es para poner un codigo y que funcione como si fuera paralelo al codigo principal
los temas de perdidas de energia y corriente los tratare al final ya que solo es reemplazar un componente por otro modelo que consuma menor cantidad de energia
tu dijiste que se puede poner un cristal de 4 MHz al micro, el fabricante creo que pone 16 pero habias dicho que se puede usar ese
de todos modos no encuentro una libreria para los cristales en eagle, me pueden dar un modelo especifico para buscar la libreria?
tambien estoy considerando reemplazar los leds con una lcd "EA DOGM163x-W" ya que es bastante pequeña, funcional y al parecer consume muy poca energia, pero en este caso necesitare una ayudita para usarla ya que solo he usado una lcd 16x2 de un shield que tengo para el arduino
creo que eso seria por ahora
ya encontre como se llama el puerto que quiero usar, es un PCI express x1
aunque tambien podria usar un x4 para que quepa toda la placa ya que actualmente es de 48x35mm
Conectores PCI Express x16, x8, x4 y x1: diferencias y rendimiento
 
Si empleas un chip rtc autonomo, como que no hace falta el cristal del micro, usas el oscilador interno,
Aqui una librería para el ds1307 que lo conozco....
Para simplificar las cosas aun mas, porque no emplear mini display como los que dejo o los de alta eficiencia (suelen ser de 0.32") y los controlas directo con el micro, los avr pueden manejar hasta 35mA segun hoja de datos, y claro empleando un charliplexing, asi manejas los display con solo nueve pines.
Los modulos display led tipo TM1637, simplifican aun mas el asunto y la interfaz solo requiete dos cables, es simil i2c.





 
Si empleas un chip rtc autonomo, como que no hace falta el cristal del micro, usas el oscilador interno,
Aqui una librería para el ds1307 que lo conozco....
Para simplificar las cosas aun mas, porque no emplear mini display como los que dejo o los de alta eficiencia (suelen ser de 0.32") y los controlas directo con el micro, los avr pueden manejar hasta 35mA segun hoja de datos, y claro empleando un charliplexing, asi manejas los display con solo nueve pines.
Los modulos display led tipo TM1637, simplifican aun mas el asunto y la interfaz solo requiete dos cables, es simil i2c.





Bien eso ni esperaba que existiera, pero por el tamaño creo que dificultaria la visibilidad ademas de que necesito 6 digitos
Si conoces un modelo con 6 digitos pasa el link y podria hacer el arreglo para que el conjunto sea aun mas pequeño

Bien eso ni esperaba que existiera, pero por el tamaño creo que dificultaria la visibilidad ademas de que necesito 6 digitos
Si conoces un modelo con 6 digitos pasa el link y podria hacer el arreglo para que el conjunto sea aun mas pequeño
he estado intentando encontrar la libreria para eagle de este display pero no encuentro nada
alguien puede ayudarme?
 
Por lo que leí en su hoja de datos, se trata de simples LEDs integrados en formato 7seg. Por lo tanto debes tratarlo cómo tal.
Así que debes multiplexar los datos según al dígito a que corresponda, accionando el driver correspondiente.
 
Por lo que leí en su hoja de datos, se trata de simples LEDs integrados en formato 7seg. Por lo tanto debes tratarlo cómo tal.
Así que debes multiplexar los datos según al dígito a que corresponda, accionando el driver correspondiente.
ya vienen multiplexados asi que solo se conectarian al micro
y de todos modos no encontre una libreria
asi que creo que tendre que hacerla
 
hp qdsp-6064
el compañero los menciono, los investigue y serian un buen cambio para reducir tamaño
pero no encontre la libreria

No vas e a encontrar librerías para ese modelo por el simple echo que es exactamente lo mismo que lo que tu haces con los LEDs en tu circuito. Ese modulo no tiene circuitos activos en el encapsulado, tan solo son LEDs.
La librería es exactamente la misma que se usa para multiplexar los dígitos en tu aproximación inicial. Con una linea seleccionas el dígito con otras 8 los segmentos de ese dígito (incluido el punto).

Ahora bien, ese display se usaba en los años dorados cuando los cavernícolas usaban calculadoras. ¿ 30U$s por ese display o centavos usando LEDs comunes ? Difícil decisión...
 
No vas e a encontrar librerías para ese modelo por el simple echo que es exactamente lo mismo que lo que tu haces con los LEDs en tu circuito. Ese modulo no tiene circuitos activos en el encapsulado, tan solo son LEDs.
La librería es exactamente la misma que se usa para multiplexar los dígitos en tu aproximación inicial. Con una linea seleccionas el dígito con otras 8 los segmentos de ese dígito (incluido el punto).

Ahora bien, ese display se usaba en los años dorados cuando los cavernícolas usaban calculadoras. ¿ 30U$s por ese display o centavos usando LEDs comunes ? Difícil decisión...
ese ultimo detalle amigo mio me da igual ya que no tengo el dinero para hacer ninguno de los 2
como he dicho antes estos mini proyectos los hago por pasatiempo y para seguir mis estudios por mi propia cuenta ya que esto no me lo enseñan en el colegio
antes en el foro hice otro reloj pero mas a pata que funiona con pura logica
proximamente intentare hacer uno bastante mas complicado pero necesito encontrar a alguien que sepa de prismas y cristales

volviendo al punto, ese display solo son leds puestos para formar numeros y estan multiplexados
solo considere usarlo por su tamaño ya que uno de mis objetivos es hacer una version lo mas pequeña posible
pero si tuviera que elegir algo supongo que iria por los leds para ahorrar

de todos modos por ahora tengo problemas con la programacion ya que necesito 2 codigos funcionando en paralelo y no logro hacerlo
 
No veo la necesidad de crear un RTOS para este simple ejemplo. ¿ Porque es necesario que dos códigos funcionen en "paralelo" ?

Este proyecto mas simple no puede ser en términos de programación:

- Configurar el micro y enviarlo a dormir.
- Interrupción por cambio en el puerto (al presionar una tecla).
- Leer 1 sola vez la hora del RTC.
- Multiplexar el display para que muestre la hora y ni siquiera hace falta leer de nuevo el RTC, ya que solo va a mostrar la hora unos instantes y luego apagar el display y volver a dormir, los segundos se pueden calcular con un temporizador en el micro. No tiene porque ser exactamente 1 segundo de incremento ya que al apagarse y volver a reiniciar el ciclo se vuelve a leer la hora del RTC y por eso vuelve a sincronizarse con el tiempo mas preciso del RTC.
 
No veo la necesidad de crear un RTOS para este simple ejemplo. ¿ Porque es necesario que dos códigos funcionen en "paralelo" ?

Este proyecto mas simple no puede ser en términos de programación:

- Configurar el micro y enviarlo a dormir.
- Interrupción por cambio en el puerto (al presionar una tecla).
- Leer 1 sola vez la hora del RTC.
- Multiplexar el display para que muestre la hora y ni siquiera hace falta leer de nuevo el RTC, ya que solo va a mostrar la hora unos instantes y luego apagar el display y volver a dormir, los segundos se pueden calcular con un temporizador en el micro. No tiene porque ser exactamente 1 segundo de incremento ya que al apagarse y volver a reiniciar el ciclo se vuelve a leer la hora del RTC y por eso vuelve a sincronizarse con el tiempo mas preciso del RTC.
no entiendo que quieres decir con RTOS
y escribiendo acabo de notar que olvide el RTC con el prototipo que estoy usando
los codigos en paralelo eran para imprimir por un lado los numeros y por otro estar funcionando un reloj interno para saber que numeros imprimir
nose como olvide ese detalle
 
Si vas a hacer un código que haga de reloj, ¿Para que pones un circuito que hace de reloj?
Uno de los dos sobre (el código evidentemente)
 
Si vas a hacer un código que haga de reloj, ¿Para que pones un circuito que hace de reloj?
Uno de los dos sobre (el código evidentemente)
digo que OLVIDE que estaba usando un RTC ya no tengo uno
para experimentar el codigo he estado probando algunos relojes y por eso olvide que estaba usando un RTC
 
¿"Olvide" (él) u "olvidé" (yo)? No acabo de entender que es lo que estás diciendo. ¿Quien olvidó?
Edito: Al final por el contexto he entendido que eras tu el que olvidó. No entendía que relación tenía lo que te pasaba a ti con lo que olvidó otra persona. Ahora no entiendo como olvidaste un chip en un circuito de dos (50%).

Para probar el código haces un contador que sea un reloj rápido o un simple contador.

Si multiplexas por interrupciones siempre irá bien y no parpadeará en cosas raras. Si lo haces con retardos etc pude que de tanto en tanto haga flashes.

Si quieres mira como hice un ejemplo de como multiplexar con interrupciones, está el código y todo en el foro.
Es para arduino, no sé si vas a usar la capa arduino o directamente el AVR.
 
¿"Olvide" (él) u "olvidé" (yo)? No acabo de entender que es lo que estás diciendo. ¿Quien olvidó?
Edito: Al final por el contexto he entendido que eras tu el que olvidó. No entendía que relación tenía lo que te pasaba a ti con lo que olvidó otra persona. Ahora no entiendo como olvidaste un chip en un circuito de dos (50%).

Para probar el código haces un contador que sea un reloj rápido o un simple contador.

Si multiplexas por interrupciones siempre irá bien y no parpadeará en cosas raras. Si lo haces con retardos etc pude que de tanto en tanto haga flashes.

Si quieres mira como hice un ejemplo de como multiplexar con interrupciones, está el código y todo en el foro.
Es para arduino, no sé si vas a usar la capa arduino o directamente el AVR.

Si, yo olvidé que iba a emplear un RTC ya que al estar practicando un reloj sin ese RTC lo olvidé por un momento.
De momento todo está bien en el circuito, solo faltan algunos detalles como la conexión del RTC al micro, el botón para que se encienda y los pines de programación.
Fuera de eso creo que no falta mucho.
 
Arriba