TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: flacoclau en 09 de Febrero de 2009, 01:34:05

Título: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado 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!!!
Título: [*] Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: Nocturno en 09 de Febrero de 2009, 03:47:44
Felicidades, flaco, y gracias por compartirlo.
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: flacoclau en 09 de Febrero de 2009, 22:45:58
Gracias Manolo, me costó bastante...
pero aquí está :-/ :-/ :-/ :-/
saludos!!!
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: Cryn en 13 de Febrero de 2009, 18:35:33
grande Claudio!! :-/ :-/ :-/

te quedó sabroso :D buenísmo Clau, para un 18 todo un lujito

gracias por compartirlo :-/
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: cabulo en 19 de Mayo de 2009, 14:17:03
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
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: flacoclau en 19 de Mayo de 2009, 14:27:07
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.
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: Suky en 19 de Mayo de 2009, 14:47:47
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.
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: cabulo en 19 de Mayo de 2009, 14:58:07
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
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: mwood en 06 de Agosto de 2009, 21:06:19
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 !!!
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: gera en 06 de Agosto de 2009, 21:32:24
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!
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: PalitroqueZ en 06 de Agosto de 2009, 23:03:27
uff no había visto este hilo!!!

vaya mis felicitaciones Claudio  :)

Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: flacoclau en 06 de Agosto de 2009, 23:46:27
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)

Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: gera en 07 de Agosto de 2009, 00:22:45
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!!
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: MLO__ en 07 de Agosto de 2009, 02:43:47
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
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: flacoclau en 07 de Agosto de 2009, 18:45:54
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.
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: MLO__ en 07 de Agosto de 2009, 21:29:55
Ok.

Thanks  :mrgreen:
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: mexesgroup en 06 de Abril de 2010, 00:07:59
Te felicito Claudio... gracias por publicarlo.
Saludos desde Banfield
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: raraque en 09 de Mayo de 2011, 19:45:12
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.
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: flacoclau en 09 de Mayo de 2011, 22:47:45
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.
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: raraque en 10 de Mayo de 2011, 11:13:08
Muchas gracias!!
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: raraque en 10 de Mayo de 2011, 11:42:59
Tengo otra duda Claudio,
Cuál es la fuente de alimentación de todo el circuito??
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: flacoclau en 10 de Mayo de 2011, 13:19:52
No entiendo ¿te refieres a los 5V?

Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: raraque en 10 de Mayo de 2011, 13:32:02
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.
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: flacoclau en 10 de Mayo de 2011, 14:05:18
Si, con el USB está ok.
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: PulKon en 20 de Diciembre de 2011, 04:05:37
Muy buen diseño, sería interesante agregarle 1 o 2 salidas por rele para poder programar eventos temporizados de encendido y apagado.
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: groundman en 30 de Marzo de 2012, 18:48:01
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.
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: flacoclau en 30 de Marzo de 2012, 23:55:17
Hola Groundman, no recuerdo haberlo simulado.
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: groundman en 31 de Marzo de 2012, 04:52:13
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.
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: groundman en 31 de Marzo de 2012, 18:21:01
 :-/ :-/ 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!
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: lawren en 28 de Septiembre de 2013, 21:19:37
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
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: flacoclau en 28 de Septiembre de 2013, 23:00:06
  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!
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: edymaur en 10 de Noviembre de 2013, 00:55:24
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!!
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: flacoclau en 10 de Noviembre de 2013, 18:08:54
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 :)
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: arrluis en 16 de Febrero de 2014, 01:54:52
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
Título: Re: Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: flacoclau en 15 de Marzo de 2014, 20:13:44
ola tanvien te puedo henbiar el PCV por correo heléctrico?
Título: Re:Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: Leo23 en 03 de Febrero de 2016, 19:23:13
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.
Título: Re:Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: KILLERJC en 03 de Febrero de 2016, 20:27:45
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.
Título: Re:Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: Leo23 en 03 de Febrero de 2016, 21:17:46
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:
Título: Re:Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: KILLERJC en 03 de Febrero de 2016, 23:30:05
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.
Título: Re:Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: Leo23 en 23 de Febrero de 2016, 23:36:42
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.
Título: Re:Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: KILLERJC en 24 de Febrero de 2016, 00:17:39
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 )

Código: ASM
  1. MOVLW .40
  2. SUBWF  minutos, W
  3. BTFSS   STATUS, Z
  4. GOTO   NoEsIgualA40
  5. GOTO   EsIgualA40

Solo observar que el ultimo GOTO no es necesario, ya que ahi esa instruccion se ejecutaria cuando sea Igual a 40
Título: Re:Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: Leo23 en 24 de Febrero de 2016, 03:15:58
Gracias por tu respuesta, Seguire intentando... :)
Esto me aclara mas mis dudas
Título: Re:Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: zam en 05 de Mayo de 2016, 01:42:26
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 -
Título: Re:Reloj con DS1307, 18F452 y LCD 16x2 en assembler
Publicado por: VOLTIO en 14 de Julio de 2016, 14:14:53
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