TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: flacoclau en 09 de Febrero de 2009, 01:34:05
-
Hola a todos: Les dejo un pequeño proyecto de reloj con un DS1307 para 18F452 y salida en display 16x2, se pueden ajustar el día de la semana, el mes y cada uno de los dígitos mostrados mediante dos pulsadores, uno conectado al pin RB5, llamado MODO que se utiliza para acceder a cada una de las variables y el otro conectado a RB4 llamado MAS para modificar el valor de dicha variable seleccionada, dentro de ciertos límites posibles.
La parte de comunicación I2C está basada en el trabajo que realizó el amigo BRUNOF y que generosamente publicó en este link: Ejemplo de utilizacion del Modulo I2C del 16F877a (http://www.todopic.com.ar/foros/index.php?topic=5979.0) Aunque adaptado para el micro 18F452 y con algunas modificaciones, como por ejemplo el carecer del aviso de error en la comunicación I2C y utilizar el set de instrucciones extendido de la familia 18F entre otras cosas. Adjunto el programa completo en este post.
La inspiración, análisis y también gran parte del diseño del modulo para el DS1307 provienen de este hilo: Real Time Clock o el DS1307 desatado (http://www.todopic.com.ar/foros/index.php?topic=13282.0) obra del maestro REDPIC.
(http://img15.imageshack.us/img15/7746/relojyi4.jpg)
Pido disculpas por la calidad del video, en el cual no se aprecia mucho detalle, pero que intenta mostrar como voy modificando la fecha y la hora mediante los pulsadores
Spielberg y Lucas pueden dormir tranquilos... :)
El esquema es muy simple, aunque no he realizado el mismo en un PCB, simplemente he utilizado los módulos de mi placa de pruebas casera, la cual estoy publicando en un escueto y aún incompleto BLOG (http://elmicroreactor.blogspot.com/) que iré actualizando en la medida que me lo permitan el tiempo, las ganas y mis habilidades. :)
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=24756.0;attach=8538)
El programa Comienza inicializando puertos y variables como es normal, luego lee la memoria del DS1307 y verifica los bits de configuración del módulo y en caso de estar mal seteados los corrige para que empiece a funcionar el reloj, aparte de hacer pulsar todos los dígitos en el display para indicar que se debe ajustar la fecha y la hora. Una vez hecho esto, los números pasan a mostrarse en forma normal.
Para elegir la variable a ajustar se debe pulsar el botón MODO. Para ajustar las variables se debe pulsar el botón MAS. Las variables ajustables son las siguientes: Día de la semana, mes, decena y unidad de fecha, de año, de hora, de minutos y de segundos.
Se debe tener cuidado al poner los valores ya que el DS1307 no reconoce los errores y sus contadores pueden seguir hasta valores extraños.
Espero que les sea de utilidad y si alguien quiere modificar o mejorar el programa bienvenido sea, cualquier duda con respecto al programa la postean aquí y si la memoria me ayuda la despejamos.
Saludos!!!
-
Felicidades, flaco, y gracias por compartirlo.
-
Gracias Manolo, me costó bastante...
pero aquí está :-/ :-/ :-/ :-/
saludos!!!
-
grande Claudio!! :-/ :-/ :-/
te quedó sabroso :D buenísmo Clau, para un 18 todo un lujito
gracias por compartirlo :-/
-
muy interesante tu trabajo flacocau, te felicito....
lo he simulado en el proteus y el lcd no me funciona,
cualquier ayuda que me puedas ofrecer te lo agradeceria.
gracias de antemano
-
Hola cabulo, sí, a veces el proteus tiene sus momentos, quizás variando la rutina del display funcione. es que este proyecto no le he simulado.
-
El problema de Proteus es que no simula la condición de estado del Display, que se verifica por el pin 7 para saber si esta en condiciones de recibir datos.
-
volviendo al tema flacoclau , varie un poco " inicializa_lcd " agregandole unos retardos , podria ser la configuracion de "lcd_comando" la que no me despliega la informacion o modificar la sub rutina del display? gracias por ayudarme
-
Olá, eu nao sei se irão entender o meu portugues entao irei falar em ingles.
Hello all, and great work "flacoclau".... but 2 questions
1- the pic dont use a crystal to work?? if use what is the valor??
2- what is the valor of the crystal for the ds1307?? need to put ceramic cap. too??
well anyway great work.. i loved !!!
-
Hi mwood!! The pic have an internal oscilator, so its not necesary an external one. The ds1307 needs a 32.768kHz crystal. Its not necesary to use ceramic capacitors, but i think it would be better to use them.
Cheers!
-
uff no había visto este hilo!!!
vaya mis felicitaciones Claudio :)
-
Gracias Rodrigo y Pedro por las felicitaciones :-/
Hi mwood!! The pic have an internal oscilator, so its not necesary an external one.
Hello Mwood and Gera: I don´t remember that :mrgreen: , but i thing in this time i have used a 4Mhz Xtal.
The ds1307 needs a 32.768kHz crystal. Its not necesary to use ceramic capacitors.
That´s right!!
but i think it would be better to use them.
Perdón Gera que te corrija... :mrgreen:
I don´t thing so.
From the datasheet: X1, X2 - Connections for a standard 32.768 kHz quartz crystal. The internal oscillator circuitry is
designed for operation with a crystal having a specified load capacitance (CL) of 12.5 pF.
The 32768 KHz crystal has his own capacitance (12.5 pF)
-
Perdón Gera que te corrija... :mrgreen:
I don´t thing so.
From the datasheet: X1, X2 - Connections for a standard 32.768 kHz quartz crystal. The internal oscillator circuitry is
designed for operation with a crystal having a specified load capacitance (CL) of 12.5 pF.
The 32768 KHz crystal has his own capacitance (12.5 pF)
No te perdono, te agradezco q me corrijas :D
Por cierto, felicitaciones por el proyecto!!! Quedo genial!!
-
Changos!!!!! no basta con el anillo de GND para que el cristal este estable? :( A mi me ha funcionado asi sin condensadores ... pero creo que es por el hecho de que el ambiente en el que trabaja es de poco ruido electrico...
Me fie de esto:
(http://img222.imageshack.us/img222/58/ds1307.png)
O es que el cristal posee la carga de capacitancia de 12.5pF?
Saludos
-
Changos!!!!! no basta con el anillo de GND para que el cristal este estable? :( A mi me ha funcionado asi sin condensadores ... pero creo que es por el hecho de que el ambiente en el que trabaja es de poco ruido electrico...
O es que el cristal posee la carga de capacitancia de 12.5pF?
Saludos
Te lo digo en español :) el circuito no necesita capacitores adicionales, el mismo cristal estándar posee una capacidad inherente a su encapsulado.
-
Ok.
Thanks :mrgreen:
-
Te felicito Claudio... gracias por publicarlo.
Saludos desde Banfield
-
Que tal claudio,
Donde puedo ver el programa que implementaste para esta aplicación. Alli dice que lo dejas en el post...pero no lo he podido encontrar.
Gracias por la colaboración.
-
Hola amigo: Está al final del primer mensaje, si te fijas hay dos links uno es el código en asm y otro es el dibujo del circuito.
-
Muchas gracias!!
-
Tengo otra duda Claudio,
Cuál es la fuente de alimentación de todo el circuito??
-
No entiendo ¿te refieres a los 5V?
-
Exacto....mi pregunta va enfocada a lo siguiente....como te decia yo voy a utilizar el puerto USB de un PC...entonces queria saber de donde salia la alimentación?, para constatar si con el voltaje que obtengo por USB es suficiente para poner en funcionamiento el circuito.
Gracias.
-
Si, con el USB está ok.
-
Muy buen diseño, sería interesante agregarle 1 o 2 salidas por rele para poder programar eventos temporizados de encendido y apagado.
-
hola flacoclau.estoy intentando realizar una simulacion en proteus de tu circuito.pero no hay forma de hacerlo funcionar.llegastes alguna vez a poder simularlo?
adjunto los archivos de lo que he realizado.
-
Hola Groundman, no recuerdo haberlo simulado.
-
valla.pues ya estoy loco perdido con esto del DS1307.he visto varios codigos.y he cogido trozos de unos y otros.incluyendo tu programa.
he puesto el osciloscopio del isis para ver si las señales son correctas.y no hay forma de leer o escribir un dato.
ojala encontrara una simulacion en proteus.para ver que es lo que estoy haciendo mal.
-
:-/ :-/ por finnn. :-/ :-/ ya encontre el problema de mi circuito. resulta que al configurar los puertos,el pin clk se ponia a nivel bajo.y esto hacia que el
DS1307 se disparase.y todos los datos que posteriormente mandaba,el RTC no los entendia.porque estaba desincronizado.
pero ademas he tenido que implementa el I2C debugger.sin este,pare no funcionar.
casi dos dias perdidos.no habria sucedido si hubiera analizado los datos de una simulacion que funcionase.pero no he encontrado ninguna por la red.
ya la pondre en el foro cuando la termine.
el tiempo es oro!
-
Interesante amigo gracias por compartir esto ya me ayuda a tener una idea para lo que quiero, lo que quiero es adaptarle que en cada mes encienda una salida durante 10 minutos. cualquieras de las salidas disponibles pero no he usado los pic de la familia 18,, que tengo que hacer para pasarle a pic 16f877a
gracias
-
Tienes que adaptar el programa, ya que el patillaje según recuerdo es el mismo. El programa que hice está escrito, como dice el post, para la familia 18F que tiene alguna instrucciones más que la familia 16F. Básicamente deberías estudiar el set de instrucciones de ambas familias(Las diferencias que no son muchas), cómo funciona el DS1307 y qué hace el programa, de ahí traducirlo de la 18F a la 16F. El programa está más comentado que un partido de futbol, sinceramente ya no recuerdo que hice, si tienes algo de tiempo y ganas adelante!
-
amigo!!, disculpa trato de compilarlo en MPlab, y me lanza errores en varias partes, que version usaste> o como lo podria arreglar
por cierto, gracias por compartir!!
-
Hola amigo, la verdad es que no recuerdo que versión usaba en ese entonces. Creo recordar que no usaba el MPLAB, sino algún editor de texto como el ConText (http://www.contexteditor.org/) y lo compilaba con el MPASMWIN, no recuerdo que versión.
Lo aconsejable sería que pongas qué errores te marca el compilador y lo analizamos en la medida que el tiempo y la memoria lo permitan :)
-
olaa tu video es buenisimo !felicidades!
de hecho debo acer algo similar podrias ayudarm??? solo manejo el cogido BASIC por favor te lo agradeceria mucho si me pasas el codigo en BASIC
-
ola tanvien te puedo henbiar el PCV por correo heléctrico?
-
Hola amigos, si alguien me pudiera orientar para saber como programar una alarma en este programa se los agradeceria bastante.
de antemano muchas gracias por el aporte, me esta sirviendo bastante para estudiar los controladores pic.
-
Hola amigos, si alguien me pudiera orientar para saber como programar una alarma en este programa se los agradeceria bastante.
de antemano muchas gracias por el aporte, me esta sirviendo bastante para estudiar los controladores pic.
Si estas comenzando , empezaria por cosas mas simples y luego entraria a ver que debe hacer una alarma , como debe responder a las señales que entran al micro, etc.
Pero como te decia, primero comenza por algo bien simple, que hasta lo mas simple cuesta al comenzar, tal ves cuando tengas el programa armado pienses que no es nada, pero cuando lo tengas que hacer de 0 es otro cantar.
-
Tienes razon, en cuestion de hacer cosas mas simples, ya las eh hecho, y al momento de escalar conocimientos es de gran ayuda una orientacion solamente, para aclarar un poco el panorama... :oops:
-
Te entiendo, lo que pasa que una alarma puede ir de un concepto muy vago como el de tener contactos NC/NO y cuando uno de estos se abra o cierre segun el caso active la alarma. y con un boton lo reseteas/activas/desactivas la alarma.
Como te podes ir a una alarma que tenga un LCD, te mande un mensajito SMS, que te puedas conectar por bluetooth, que tenga bateria de soporte y tengas que vigilarlo con tu micro, etc, etc.
Por eso no te puedo aclarar mucho el panorama. Puede ser de algo muy simple a muy complejo
Si vas a usar un LCD 2x16 entonces te diria que mires eso, datasheet del LCD o buscar un codigo por ahi que lo maneje y veas como se usa o como lo hace.
Deberias aprender sobre interrupciones si o si.
Lo que pensas usar, deberias hacer un codigo solo para eso y probarlo solo con eso. Asi para cada "componente" y luego si armas tu codigo completo.
-
Hola de nuevo, eh estudiado las inteerrupciones y demas, eh leido bastante el codigo de este programa y podria decir que lo entiendo.
La configuracion que quiero hacer es solo una alarma que me notifique cada hora, para eso supongo que tendria que comparar el registro de los minutos, ya sea en 59 o en 00, con un numero agregado a W en este caso seria 59 o 00, mediante una resta que seria SUBWF. lo eh intentado pero no logro hacerlo, si me equivoco me gustaria una correccion para ver mi error.
-
Vas a tener que tomar cada cierto momento el valor del DS1307 ( Supongamos cada 1 segundo) , y cuando se cumpla por ejemplo que el valor obtenido ( el cual consta de horas, minutos, segundos) corresponde a los valores que queres que ocurra la alarma. Como vos decis con un SUBWF y luego preguntando por si se activo la bandera Z en STATUS podes comprobar que el numero es el correcto.
Un ejemplo seria...
Supongamos por un momento que tenes el registro llamado "minutos" (registro que tiene el valor de los minutos proporcionado por el DS1307). Y que cuando el registro ese este en el minuto 40 envie el dato de la alarma ( por ahora el minutero lo vamos a dejar fijo, es decir un valor constante )
MOVLW .40
SUBWF minutos, W
BTFSS STATUS, Z
GOTO NoEsIgualA40
GOTO EsIgualA40
Solo observar que el ultimo GOTO no es necesario, ya que ahi esa instruccion se ejecutaria cuando sea Igual a 40
-
Gracias por tu respuesta, Seguire intentando... :)
Esto me aclara mas mis dudas
-
hola disculpa estoy realizando vario proyectos con una lcd2x16 ,con un pic18f452 pero la Bytes de configuración que tengo no me limprime bien pero con la configuracion que esta en tu trabajo si me lo imprime en fisico pero se reinicia es un calendario con fecha y hora - Tienes que ingresar para ver archivos adjuntos -
-
Buenas tades amigos del foro, alguien pudo simularlo en proteus ??? yo no pude no se si hay que modificar algo del programa o algo del hard.
El proyecto esta muy bueno y quiero implementarlo en otro proyecto que tengo .
gracias