Autor Tema: CCS - temporizar eventos - DS1307 - PIC16F877A - Proteus  (Leído 7998 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
CCS - temporizar eventos - DS1307 - PIC16F877A - Proteus
« en: 28 de Agosto de 2009, 14:36:07 »
Hola amigos

Tengo un reloj con un chip  DS1307, me he propuesto con este reloj calendario,
ponerle alarmas o jecucion de eventos trascurrido un determinado tiempo o cuando el reloj llegue a una determinada hora de un dia.

1.-Como cuenta atras, en 10 minutos enciende un led.

2.- si la son las 14.00 del 30/08/2009 activa este proceso.

3.- No quiero que el pic este pendiente de estos procesos en todo momento,


En un perimer momento pense hacerlo con lo que lei del post del amigo REdpic.
http://www.todopic.com.ar/foros/index.php?topic=24801.msg202369#msg202369

tambien  pense que deberia ser preciso y le eche un ojo a este otro post
http://www.todopic.com.ar/foros/index.php?topic=4840.0

más concretamente este mensaje del amigo Nocturno:
http://www.todopic.com.ar/foros/index.php?topic=4840.msg36679#msg36679

Empece probando el programita de redpic , cambio el encedido de un rele por el de un led, lo intente simular con protesu, pero me quede ahi... no se me enciende el led nunca, intente cambiale el tiempo, pero nada , pueden ayudarme.


Un saludo.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: CCS - temporizar eventos - DS1307 - PIC16F877A - Proteus
« Respuesta #1 en: 28 de Agosto de 2009, 15:14:36 »
Si vas a usar el DS1307 no te preocupes por generar otro temporizador interno exacto, usa la señal generada por el ds1307 (SQW/OUT) para controlar los eventos.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: CCS - temporizar eventos - DS1307 - PIC16F877A - Proteus
« Respuesta #2 en: 28 de Agosto de 2009, 15:27:13 »
Efectivamente, tal como indica Suky, el DS1307 tiene esa salida (SQW/OUT) que genera una salida programable de 1Hz, 4kHz, 8kHz ó 32kHz
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: CCS - temporizar eventos - DS1307 - PIC16F877A - Proteus
« Respuesta #3 en: 28 de Agosto de 2009, 17:14:13 »
Hola amigos

Pero si por ejemplo quiero hacer una lectura del DS1307 a cada segundo, configuro esta salida a 1hz.
Pero... como configuro para hacer el caso 1.-   y  el caso 2.-  anteriormente nombrado.

En algunos post he leido que con esa señal activada, la pila dura menos que un chupachus en la puerta de un colegio.

Alguna idea.

Un saludo.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: CCS - temporizar eventos - DS1307 - PIC16F877A - Proteus
« Respuesta #4 en: 29 de Agosto de 2009, 01:01:06 »
Hola,

A mi se me ocurre que debes comparar el string completo, es decir, guardas los datos de hora, minutos, fecha, mes, año en un string y lo comparas con el que tu programas. Usa la funcion strcmp(string1,string2).

Para la cuenta de minutos, pues, creo que al momento de activar la función, deberias leer el valor de los minutos y sumarle los diez de mas.

Saludos
El papel lo aguanta todo

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: CCS - temporizar eventos - DS1307 - PIC16F877A - Proteus
« Respuesta #5 en: 30 de Agosto de 2009, 12:42:23 »
hola amigo

Este proceso de comparacion lo tendria que hacer siempre de la misma forma que se lee la hora del ds1307,
 se compara la hora actual.

alguna otra forma que se le les ocurra.

Un saludo

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: CCS - temporizar eventos - DS1307 - PIC16F877A - Proteus
« Respuesta #6 en: 30 de Agosto de 2009, 12:48:13 »
Hola.

La lectura del reloj debes hacerla siempre, ya que es tu base de tiempo. La ventaja es que el mismo reloj te da un pulso que te avisa por un evento externo que ha pasado un segundo (o menos).

Lo mejor es aprovechar ese evento para que cada segundo hagas tu comparación, si quieres mas tiempo, por ejemplo: minutos, pues simplemente asigna un contador a 60 y mediante un if habilitas la rutina de comparación.

Saludos
« Última modificación: 30 de Agosto de 2009, 12:50:37 por MLO__ »
El papel lo aguanta todo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: CCS - temporizar eventos - DS1307 - PIC16F877A - Proteus
« Respuesta #7 en: 30 de Agosto de 2009, 13:02:10 »
La resolución de la temporización va a ser de un segundo, así que comparar string no va ser ningún problema, aparte ser muy sencillo.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: CCS - temporizar eventos - DS1307 - PIC16F877A - Proteus
« Respuesta #8 en: 30 de Agosto de 2009, 15:06:06 »
Desde luego lo mejor para un reloj de tiempo real es el ds1307, ya que se puede alimentar por la patilla 3 y 4 una bateria que sustenta el horario(fecha y hora) en el que se encuentra el octopodo, y ademas restrasa o adelanta horas automaticamente asi como los dias bisiestos....

yo cree un controlador de acuario al cual le añadi un ds1307 y os dire que es lo mejor, el en cuanto a lo de las alarmas.. pues bien facil

if((horas==horas_alarma)&(minutos==min_alarma)&(segundos=seg_alarma)).... cosa facil

pero ojo, si usas alguna interrupcion, antes de la lectura del ds1307  deberas de deshabilitarla... ya que la comunicacion por I2C no puede ser pospuesta por una interrupcion
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: CCS - temporizar eventos - DS1307 - PIC16F877A - Proteus
« Respuesta #9 en: 31 de Agosto de 2009, 15:22:51 »
Hola amigos..

entonces hay un pequeño problema con el I2C y las interrupciones?

Me estais asustando.

La idea de hacer comparacion para el tema de las alarmas, habia pensado hacerla por funcion,

en principio queria poderle predefinir de 10 a 20 alarmas, pero el tema esta un poco . .. puntiagudo..

si suena y tengo que parar la alarma tendra que pulsar una tecla para parar el evento,
y eso es por interrupcion, verdad?

un saludo

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: CCS - temporizar eventos - DS1307 - PIC16F877A - Proteus
« Respuesta #10 en: 31 de Agosto de 2009, 17:48:30 »
si y no, solo durante la lectura del ds1307 deberas desabilitarlas, pero acto segui do la puedes volver a activar

ejemplo.... aqui tienes una funcion de lectura del ds1307...

void lectura()
{
   disable_interrupts(global);        //se desabilitan
   i2c_start();
   i2c_write(0xd0);
   i2c_write(0x00);
   i2c_stop();
      
   i2c_start();
   i2c_write(0xd1);
   segundos = i2c_read();
   minutos = i2c_read();
   horas = i2c_read();
    dia_semana=i2c_read();
   dia = i2c_read();
   mes = i2c_read();
   anio = i2c_read(0);
   i2c_stop();
   enable_interrupts(global);         //se vuelven a habilitar
}

es muy corto el tiempo en el que estan dehabilitadas asi que no tendras problemas
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...