Autor Tema: Problema con programacion de la alarma  (Leído 7100 veces)

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

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Problema con programacion de la alarma
« en: 13 de Febrero de 2010, 21:13:42 »
Hola compañeros, despues de leer varios post sigo sin saberlo hacer "NO ENTIENDO MUY BIEN LO QUE LEO" :oops:  necesito de vuestra ayuda para seguir aprendiendo, mi duda es la siguiente....
No se como almacenar una alarma en la eeprom para despues compararla con la hora del ds1307 y al coincidir suene un buzzer.
 
PD:Agradeceria el trocito de codigo necesario para hacerlo ya que llevo mas de 15 dias intentandolo sin resultado.
Os dejo lo que tengo hecho hasta el momento:
 
 
Código: CSS
  1. #include <16f877a.h>
  2. #fuses XT,NOWDT,NOPROTECT,NODEBUG,NOBROWNOUT,NOWRT,NOLVP,PUT
  3. #use delay(clock=4000000)
  4. #use i2c(Master, sda=PIN_C4, scl=PIN_C3)
  5. #define LCD_DB4 PIN_B4                    //Configuramos pines...
  6. #define LCD_DB5 PIN_B5
  7. #define LCD_DB6 PIN_B6
  8. #define LCD_DB7 PIN_B7
  9. #define LCD_E   PIN_B0
  10. #define LCD_RS  PIN_B1
  11. #define LCD_RW  PIN_B2                    //...para el LCD
  12.  
  13. #define DAL_SCL   PIN_A0
  14. #define DAL_SDA   PIN_A1
  15.  
  16. #include <flex_lcd.0.c>               //Libreria manejo LCD
  17. #include <_ds1307.c>             //Libreria manejo RTC
  18. #include <ds1621.c>
  19.  
  20.  byte hr,min,sec,day,month,yr,dow;
  21.  char sdow[11];
  22.  byte value;
  23.  
  24.  void main(){
  25.    lcd_init();
  26.    lcd_gotoxy(2,1);
  27.    printf(lcd_putc,"Reloj Alarma");      //Menu de presentacion.
  28.    lcd_gotoxy(5,2);
  29.    printf(lcd_putc,"Miquel_S");
  30.    delay_ms(1500);
  31.    lcd_putc("\f");
  32.    
  33. ///INICIALIZA DS1307
  34.    ds1307_init(DS1307_ALL_DISABLED);
  35.    printf(lcd_putc,"Inicializando\nDS1307...");
  36.    delay_ms(1000);
  37.    ds1307_set_date_time(11,2,10,3,22,05,0);
  38.    
  39. ///LEE FECHA Y HORA ACTUAL DS1307
  40.    ds1307_get_day_of_week((char*) sdow);
  41.    ds1307_get_date(day,month,yr,dow);
  42.    ds1307_get_time(hr,min,sec);
  43.    printf(lcd_putc,"\f%s  %02d-%02d-%02d",sdow,day,month,yr);
  44.    printf(lcd_putc,"\n%02d:%02d:%02d",hr,min,sec);
  45.    
  46. ///INICIALIZA Y LEE TEMPERATURA DS1621
  47.    init_temp();
  48.    read_temp();
  49.    value=read_temp();
  50.    lcd_gotoxy(10,2);
  51.    printf(lcd_putc,"Temp:%u  ",value);
  52.    //delay_ms(1000);
  53.    
  54. ///AJUSTE ALARMAS
  55.    //printf(lcd_putc,"\fAjuste alarmas");
  56.  }

Saludos y gracias
 Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con programacion de la alarma
« Respuesta #1 en: 14 de Febrero de 2010, 00:50:16 »
Lo más rápido sería almacenar directamente las variables  hr,min,sec,day,month,yr de la alama sin ningún formato y luego comparar uno a uno  :tongue:


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

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema con programacion de la alarma
« Respuesta #2 en: 14 de Febrero de 2010, 00:53:07 »
Hola.

Guardas en un buffer la info de los datos de hora y fecha ingresados y en otro buffer almacenas los datos leidos del reloj. Luego comparas los dos buffer's y cuando sean iguales disparas la alarma.

Saludos
El papel lo aguanta todo

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Problema con programacion de la alarma
« Respuesta #3 en: 14 de Febrero de 2010, 06:06:05 »
 :PGracias a los dos ahora lo tengo un poco mas claro, intentare hacerlo de una forma u otra.
¿Cual de las dos es mas correcta?
Gracias y a probarlo.
Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con programacion de la alarma
« Respuesta #4 en: 14 de Febrero de 2010, 08:53:45 »
Las 2 son correctas, pero al ir comparando individualmente puedes desarrollar un algoritmo para que realice la búsqueda más rápido y si no es sale.  ;-)


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

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Problema con programacion de la alarma
« Respuesta #5 en: 14 de Febrero de 2010, 11:49:51 »
¿Puedo de esta manera almacenar una variable en la eeprom interna para luego una vez leida compararla con los datos del ds1307?

Código: CSS
  1. const char alarma1[]="08:00";
  2. const char alarma2[]="08:30";
Gracias
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema con programacion de la alarma
« Respuesta #6 en: 14 de Febrero de 2010, 13:36:43 »
Hola.

Es mejor todo de seguido, por ejemplo, si programas tu alarma para las 12:00 del 21 de Febrero, puedes guardar el dato como:

Código: [Seleccionar]
SetAlarm[] = "12002102";

Y al leer los datos del reloj lo guardas de la misma forma, es decir: hhmmDDMM. Para comparar puedes usar la funcion strncmp().

Saludos
El papel lo aguanta todo

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: Problema con programacion de la alarma
« Respuesta #7 en: 14 de Febrero de 2010, 15:05:35 »
recuerden que en la eeprom interna se guada los datos tipo byte asi que tengan eso presente por lo demas no veo problema otra recomencacion seria primero comparar hora y si la hora son igual luegos comparas minutos.

Saludos y cualquier cosa estare al pendiente para ver como resolvieron.
Atten.
Alexander Santana.
Venezuela-Barcelona
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Problema con programacion de la alarma
« Respuesta #8 en: 14 de Febrero de 2010, 15:58:21 »
Lamento su perdida de tiempo, llevo casi un mes y no se como hacerlo abandono. :(

Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: Problema con programacion de la alarma
« Respuesta #9 en: 14 de Febrero de 2010, 19:24:30 »
Anda tío no tires la toalla llevo unos meses en c y créeme que lo que pretendes no es nada complejo  :-/ :-/ :-/

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Problema con programacion de la alarma
« Respuesta #10 en: 14 de Febrero de 2010, 19:42:22 »
Hola de nuevo, despues del  :5] he vuelto a las andadas (perdonad).
Aqui dejo el codigo al cual he añadido el guardado de alarmas en la eeprom y su correspondiente lectura, para asi poder saber si es correcto esta manera de hacerlo:
Código: CSS
  1. #include <16f877a.h>
  2. #fuses XT,NOWDT,NOPROTECT,NODEBUG,NOBROWNOUT,NOWRT,NOLVP,PUT
  3. #use delay(clock=4000000)
  4. #use i2c(Master, sda=PIN_C4, scl=PIN_C3)
  5. #define LCD_DB4 PIN_B4                    //Configuramos pines...
  6. #define LCD_DB5 PIN_B5
  7. #define LCD_DB6 PIN_B6
  8. #define LCD_DB7 PIN_B7
  9. #define LCD_E   PIN_B0
  10. #define LCD_RS  PIN_B1
  11. #define LCD_RW  PIN_B2                    //...para el LCD
  12.  
  13. #define DAL_SCL   PIN_A0
  14. #define DAL_SDA   PIN_A1
  15.  
  16. #include <flex_lcd.0.c>               //Libreria manejo LCD
  17. #include <_ds1307.c>             //Libreria manejo RTC
  18. #include <ds1621.c>              //Libreria sensor Temp
  19.    
  20.  byte hr,min,sec,day,month,yr,dow;
  21.  char sdow[11];
  22.  byte value;
  23.  
  24.  void main(){
  25.  //ESCRITURA DE LA EEPROM
  26.    int direccion=0,dato;
  27.    int alarma1[]="0830";
  28.    int alarma2[]="0900";
  29.    int alarma3[]="0925";
  30.    int alarma4[]="1000";
  31.    int alarma5[]="1020";
  32.    write_eeprom(direccion,alarma1);
  33.    direccion++;
  34.    write_eeprom(direccion,alarma2);
  35.    direccion++;
  36.    write_eeprom(direccion,alarma3);
  37.    direccion++;
  38.    write_eeprom(direccion,alarma4);
  39.    direccion++;
  40.    write_eeprom(direccion,alarma5);
  41.    
  42.  //MENU DE PRESENTACION  
  43.    lcd_init();
  44.    lcd_gotoxy(2,1);
  45.    printf(lcd_putc,"Reloj Alarma");      //Menu de presentacion.
  46.    lcd_gotoxy(2,2);
  47.    printf(lcd_putc,"Miquel_S");
  48.    delay_ms(1500);
  49.    
  50.  //LECTURA EEPROM
  51.    printf(lcd_putc,"\fListado alarmas");
  52.       for(direccion=0;direccion<5;direccion++){
  53.       dato=read_eeprom(direccion);
  54.       lcd_gotoxy(1,2);
  55.       printf(lcd_putc,"%s",dato);
  56.       delay_ms(1500);
  57.    }
  58.    
  59.  //INICIALIZA DS1307
  60.    ds1307_init(DS1307_ALL_DISABLED);
  61.    printf(lcd_putc,"\fInicializando\nDS1307...");
  62.    delay_ms(1000);
  63.    ds1307_set_date_time(11,2,10,3,22,05,0);
  64.    
  65.  //LEE FECHA Y HORA ACTUAL DS1307
  66.    ds1307_get_day_of_week((char*) sdow);
  67.    ds1307_get_date(day,month,yr,dow);
  68.    ds1307_get_time(hr,min,sec);
  69.    printf(lcd_putc,"\f%s  %02d-%02d-%02d",sdow,day,month,yr);
  70.    printf(lcd_putc,"\n%02d:%02d:%02d",hr,min,sec);
  71.    
  72.  //INICIALIZA Y LEE TEMPERATURA DS1621
  73.    init_temp();
  74.    read_temp();
  75.    value=read_temp();
  76.    lcd_gotoxy(10,2);
  77.    printf(lcd_putc,"Temp:%u  ",value);
  78.    //delay_ms(1000);
  79.  }

Gracias

Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con programacion de la alarma
« Respuesta #11 en: 14 de Febrero de 2010, 20:47:28 »
Primero que nada aclaro algo que no se si tienes en cuenta, de la forma que estas guardando las alarmas en la eeprom, no guardas cada carácter ascii sino la dirección del primer carácter dentro de la memoria ram del string.

Segundo, donde está el código que implementas para la comparación de fecha actual y de las alarmas? Revisa sobre la función strcmp, seguramente te va a dar una idea.


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

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: Problema con programacion de la alarma
« Respuesta #12 en: 14 de Febrero de 2010, 22:13:47 »
Si se te complica hacerlo con string  hazlo con variables tipo byte
Guardas hora ,minutos, etc. en la dirección 0, 1,2 etc. de la eeprom y luego realizas la comparación con if anidados.
If hora=dirección 0  then
If minutos=dirección 1 then
Bla
Bla
Bla
If  año= dirección n
Alarma=1
Endif
 Endif
Bla
Bla
 :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Problema con programacion de la alarma
« Respuesta #13 en: 15 de Febrero de 2010, 05:45:39 »
Gracias Suky por tu aclaracion:

1º- no se si tienes en cuenta, de la forma que estas guardando las alarmas en la eeprom, no guardas cada carácter ascii sino la dirección del primer carácter dentro de la memoria ram del string.

* Referente a la manera de guardar las alarmas sabia que solo guardaba la direccion, pero crei que se podia hacer de esta manera.

2º- donde está el código que implementas para la comparación de fecha actual y de las alarmas? Revisa sobre la función strcmp, seguramente te va a dar una idea.

* Contestando a tu segunda pregunta, te dire que no hay codigo de comparacion por una razon muy simple, si para empezar no se guardar los datos, que puñetas voy a comparar. Solo hice una lectura de la eeprom y visualice en el lcd para saber si habia guardado algo.

Gracias septiembre_negro por tu idea, la tendre en cuenta y la estudiare parece mas facil, Suky habia comentado algo parecido pero no tenia muy claro como hacerlo. Despues de ver tu post entiendo mejor la manera de hacerlo.

Gracias a los dos y no me abandoneis  :oops:

 Miquel_S
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: Problema con programacion de la alarma
« Respuesta #14 en: 15 de Febrero de 2010, 13:53:02 »
Buenos dias, estimado colega te noto muy lidiado con el tema que estas desarrollando pero lo mejor sera que ataques los temas por parte y asi vas viendo que te funciona y que no por ejemplo haste un codigo que puedas leer y escribir la eeprom interna y veras que no es mayor cosa y luego anexas eso a tu desarrollo.

Saludos y  estamos en contacto y en el ultimo de los caso yo me comprometo en hacerte la parte que te compare tu hora fijada con la que vamos obteniendo del reloj de tiempo real el ds1307.

Atten.
Alexander Santana.
Venezuela-Barcelona.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE