TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Miquel_S en 13 de Febrero de 2010, 21:13:42

Título: Problema con programacion de la alarma
Publicado por: Miquel_S 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
Título: Re: Problema con programacion de la alarma
Publicado por: Suky 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!
Título: Re: Problema con programacion de la alarma
Publicado por: MLO__ 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
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S 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
Título: Re: Problema con programacion de la alarma
Publicado por: Suky 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!
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S 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
Título: Re: Problema con programacion de la alarma
Publicado por: MLO__ 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
Título: Re: Problema con programacion de la alarma
Publicado por: ASTROCAR 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
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S 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
Título: Re: Problema con programacion de la alarma
Publicado por: septiembre_negro 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  :-/ :-/ :-/
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S 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
Título: Re: Problema con programacion de la alarma
Publicado por: Suky 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!
Título: Re: Problema con programacion de la alarma
Publicado por: septiembre_negro 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
 :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S 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
Título: Re: Problema con programacion de la alarma
Publicado por: ASTROCAR 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.
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S en 15 de Febrero de 2010, 15:36:34
Gracias por la ayuda ASTROCAR, francamente me tiene  :angry: pero no me vencera o eso espero, me pongo con el programa de grabar la eeprom y una vez hecho lo posteare para que me digais si voy por buen camino.

PD: Suerte que lo hago para aprender, que con las horas que llevo con el si tuviera que venderlo  :D

Gracias de nuevo y un saludo
   
      Miquel_S
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S en 16 de Febrero de 2010, 18:18:40
Hola de nuevo, siguiendo el consejo de ASTROCAR empece con el programa para grabar la eeprom cogiendo parte del codigo de BrunoF. Lo he simulado con PIC Simulator y creo tenerlo correcto.
Pero me surge una duda: ¿Debo hacer la conversion de BCD a BINARIO antes de hacer la comparacion con el ds1307?

Os dejo el programa para que me digais si voy por buen camino.

Código: CSS
  1. #include <16f877a.h>
  2. #fuses XT,NOWDT,NOPROTECT,NODEBUG,NOBROWNOUT,NOWRT,NOLVP,PUT
  3. #use delay(clock=4000000)
  4.  
  5. void write_string_eeprom(int address,char *data){
  6.    while(*data!=0){
  7.       write_eeprom(address++,*data);
  8.       data++;
  9.    }
  10.    write_eeprom(address,0);
  11. }
  12.  
  13. void read_string_eeprom(int address,char *sl){
  14.      sl--;
  15.    do{
  16.       sl++;
  17.       *sl=read_eeprom(address++);
  18.    }
  19.    while(*sl!=0);
  20. }
  21.  
  22. void main(){
  23.    char alarma1[6]="0830";
  24.    char alarma2[6]="0900";
  25.    char *leido;
  26.    //....
  27.    
  28.    write_string_eeprom(0x00,alarma1);
  29.    delay_ms(5);
  30.    write_string_eeprom(0x05,alarma2);
  31.    delay_ms(5);
  32.    read_string_eeprom(0x00,leido);
  33.    //....
  34. }


 Gracias
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S en 17 de Febrero de 2010, 19:48:53
Buenas noches, una pregunta:
Repitiendo un poco el post anterior ¿es correcto almacenar las horas de la forma que expongo mas abajo?

Código: CSS
  1. #include <16f877a.h>
  2. #fuses XT,NOWDT,NOPROTECT,NODEBUG,NOBROWNOUT,NOWRT,NOLVP,PUT
  3. #use delay(clock=4000000)
  4. #define LCD_DB4 PIN_B4                    //Configuramos pines...
  5. #define LCD_DB5 PIN_B5
  6. #define LCD_DB6 PIN_B6
  7. #define LCD_DB7 PIN_B7
  8. #define LCD_E   PIN_B0
  9. #define LCD_RS  PIN_B1
  10. #define LCD_RW  PIN_B2                    //...para el LCD
  11.  
  12. #include <flex_lcd.0.c>               //Libreria manejo LCD
  13.  
  14. void write_string_eeprom(int address,char *data){
  15.    while(*data!=0){
  16.       write_eeprom(address++,*data);
  17.       data++;
  18.    }
  19.    write_eeprom(address,0);
  20. }
  21.  
  22. void read_string_eeprom(int address,char *sl){
  23.      sl--;
  24.    do{
  25.       sl++;
  26.       *sl=read_eeprom(address++);
  27.    }
  28.    while(*sl!=0);
  29. }
  30.  
  31. void main(){
  32.    char mystr[40];
  33.    char alarma1[]="08:30";
  34.    char alarma2[]="09:00";
  35.    char alarma3[]="09:25";
  36.    char alarma4[]="10:00";
  37.    char alarma5[]="10:20";
  38.    char alarma6[]="10:30";
  39.    char *leido=mystr;
  40.    //....
  41.    
  42.    write_string_eeprom(0x00,alarma1);
  43.    write_string_eeprom(0x06,alarma2);
  44.    write_string_eeprom(0x0C,alarma3);
  45.    write_string_eeprom(0x12,alarma4);
  46.    write_string_eeprom(0x18,alarma5);
  47.    write_string_eeprom(0x1E,alarma6);
  48.    
  49.    read_string_eeprom(0x00,leido);
  50.    delay_ms(1000);
  51.  
  52.  
  53.    lcd_init();
  54.    printf(lcd_putc,"LISTA ALARMAS");
  55.    printf(lcd_putc,"\n%s",leido);
  56.    //....
  57. }

 Miquel_S
Título: Re: Problema con programacion de la alarma
Publicado por: septiembre_negro en 17 de Febrero de 2010, 20:52:17
Hola de nuevo, siguiendo el consejo de ASTROCAR empece con el programa para grabar la eeprom cogiendo parte del codigo de BrunoF. Lo he simulado con PIC Simulator y creo tenerlo correcto.
Pero me surge una duda: ¿Debo hacer la conversion de BCD a BINARIO antes de hacer la comparacion con el ds1307?

Os dejo el programa para que me digais si voy por buen camino.

Código: CSS
  1. #include <16f877a.h>
  2. #fuses XT,NOWDT,NOPROTECT,NODEBUG,NOBROWNOUT,NOWRT,NOLVP,PUT
  3. #use delay(clock=4000000)
  4.  
  5. void write_string_eeprom(int address,char *data){
  6.    while(*data!=0){
  7.       write_eeprom(address++,*data);
  8.       data++;
  9.    }
  10.    write_eeprom(address,0);
  11. }
  12.  
  13. void read_string_eeprom(int address,char *sl){
  14.      sl--;
  15.    do{
  16.       sl++;
  17.       *sl=read_eeprom(address++);
  18.    }
  19.    while(*sl!=0);
  20. }
  21.  
  22. void main(){
  23.    char alarma1[6]="0830";
  24.    char alarma2[6]="0900";
  25.    char *leido;
  26.    //....
  27.    
  28.    write_string_eeprom(0x00,alarma1);
  29.    delay_ms(5);
  30.    write_string_eeprom(0x05,alarma2);
  31.    delay_ms(5);
  32.    read_string_eeprom(0x00,leido);
  33.    //....
  34. }


 Gracias

Hola
Si estas utilizando alguna librería para el ds1307 estas por lo general realizan la conversión de bcd a binario por lo cual no es necesario.
Si  por el contrario tu la estas desarrollando si debes realizar la conversión para que puedas trabajar con la información (comparar, mandarla a un lcd etc.)
Con respecto a la otra pregunta no puedo ayudarte por que miro que lo estas asiendo por string y eso es algo que tengo pendiente. :mrgreen: :mrgreen:
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S en 19 de Febrero de 2010, 05:54:17
Hola de nuevo sigo posteando los avances, de momento puedo grabar la eeprom interna para luego leerla y visualizar en el lcd, ahora a por la comparacion con las horas del ds1307.

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.  
  21.  //FUNCIONES ESCRITURA Y LECTURA EEPROM INTERNA
  22.  void write_string_eeprom(int address,char *data){
  23.    while(*data!=0){
  24.       write_eeprom(address++,*data);
  25.       data++;
  26.    }
  27.    write_eeprom(address,0);
  28. }
  29.  
  30. void read_string_eeprom(int address,char *sl){
  31.      sl--;
  32.    do{
  33.       sl++;
  34.       *sl=read_eeprom(address++);
  35.    }
  36.    while(*sl!=0);
  37. }
  38.  
  39.  byte hr,min,sec,day,month,yr,dow;
  40.  char sdow[11];
  41.  byte value;
  42.  
  43.  void main(){
  44.    char mystr[40];
  45.    char alarma1[]="08:30";
  46.    char alarma2[]="09:00";
  47.    char alarma3[]="09:25";
  48.    char alarma4[]="10:00";
  49.    char alarma5[]="10:20";
  50.    char alarma6[]="10:30";
  51.    char *leido=mystr;
  52.    //....
  53.    
  54.  //MENU DE PRESENTACION  
  55.    lcd_init();
  56.    lcd_gotoxy(2,1);
  57.    printf(lcd_putc,"Reloj Alarma");      //Menu de presentacion.
  58.    lcd_gotoxy(2,2);
  59.    printf(lcd_putc,"Miquel_S");
  60.    delay_ms(1500);
  61.    lcd_putc("\f");  
  62.  
  63. //ESCRITURA ALARMAS
  64.    write_string_eeprom(0x00,alarma1);
  65.    write_string_eeprom(0x06,alarma2);
  66.    write_string_eeprom(0x0C,alarma3);
  67.    write_string_eeprom(0x12,alarma4);
  68.    write_string_eeprom(0x18,alarma5);
  69.    write_string_eeprom(0x1E,alarma6);
  70.    
  71. //LECTURA ALARMAS
  72.    lcd_init();
  73.    printf(lcd_putc,"LISTA ALARMAS");
  74.    delay_ms(800);
  75.    read_string_eeprom(0x00,leido);
  76.    printf(lcd_putc,"\n%s",leido);
  77.    delay_ms(1000);
  78.    read_string_eeprom(0x06,leido);
  79.    printf(lcd_putc,"\n%s",leido);
  80.    delay_ms(1000);
  81.    read_string_eeprom(0x0C,leido);
  82.    printf(lcd_putc,"\n%s",leido);
  83.    delay_ms(1000);
  84.    read_string_eeprom(0x12,leido);
  85.    printf(lcd_putc,"\n%s",leido);
  86.    delay_ms(1000);
  87.    read_string_eeprom(0x18,leido);
  88.    printf(lcd_putc,"\n%s",leido);
  89.    delay_ms(1000);
  90.    read_string_eeprom(0x1E,leido);
  91.    printf(lcd_putc,"\n%s",leido);
  92.    delay_ms(1000);
  93.    
  94.  //INICIALIZA DS1307
  95.    ds1307_init(DS1307_ALL_DISABLED);
  96.    printf(lcd_putc,"\fInicializando\nDS1307...");
  97.    delay_ms(1000);
  98.    ds1307_set_date_time(11,2,10,3,22,05,0);
  99.    
  100.  //LEE FECHA Y HORA ACTUAL DS1307
  101.    ds1307_get_day_of_week((char*) sdow);
  102.    ds1307_get_date(day,month,yr,dow);
  103.    ds1307_get_time(hr,min,sec);
  104.    printf(lcd_putc,"\f%s  %02d-%02d-%02d",sdow,day,month,yr);
  105.    printf(lcd_putc,"\n%02d:%02d:%02d",hr,min,sec);
  106.    
  107.  //INICIALIZA Y LEE TEMPERATURA DS1621
  108.    init_temp();
  109.    read_temp();
  110.    value=read_temp();
  111.    lcd_gotoxy(10,2);
  112.    printf(lcd_putc,"Temp:%u  ",value);
  113.    //delay_ms(1000);
  114.  }

 Miquel_S
Título: Re: Problema con programacion de la alarma
Publicado por: ASTROCAR en 19 de Febrero de 2010, 07:17:45
ok  perfecto ya veo tu avance ahora haste  una rutina de comparacion con la alarma guardada y la hora actual y listo tomas decision segun tu caso y objetivo terminado.

Saludos y cualquier cosa has tgu comentario nuevamente.
Atten.
Alexander Santana.
Venezuela-Barcelona.
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S en 19 de Febrero de 2010, 14:19:46
Gracias ASTROCAR, con tu respuesta me quitas un peso de encima, me pongo con la rutina de comparacion a ver que sale y os trendre informados.

  :-/ :-/ :-/

 Miquel_S
 
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S en 23 de Febrero de 2010, 19:03:15
Buenas noches, alguien puede decirme por que no reconoce el strcmp:
Undefined identifier strcmp

Código: CSS
  1. #include <16F877a.h>
  2. #fuses XT,NOWDT,NOPROTECT,NODEBUG,NOBROWNOUT,NOWRT,NOLVP,PUT
  3. #use delay(clock=4000000)
  4.  
  5. //FUNCIONES LECTURA/ESCRITURA EEPROM INTERNA
  6. void write_string_eeprom(int address,char *data){
  7.    while(*data!=0){
  8.       write_eeprom(address++,*data);
  9.       data++;
  10.    }
  11.    write_eeprom(address,0);
  12. }
  13.  
  14. void read_string_eeprom(int address,char *sl){
  15.      sl--;
  16.    do{
  17.       sl++;
  18.       *sl=read_eeprom(address++);
  19.    }
  20.    while(*sl!=0);
  21. }
  22.  
  23. void main(){
  24.    char alarmas[40];
  25.    char alarma1[]="0830";
  26.    char alarma2[]="0830";
  27.    
  28. //ESCRITURA/LECTURA EEPROM
  29.    write_string_eeprom(0x00,alarma1);
  30.    write_string_eeprom(0x06,alarma2);
  31.    
  32. //COMPARACION DE ALARMAS
  33.    if (strcmp(alarma1,alarma2)==1);
  34.       output_high(PIN_A0);
  35. }

Gracias
 Miquel_S
Título: Re: Problema con programacion de la alarma
Publicado por: MLO__ en 24 de Febrero de 2010, 01:00:55
Te falta incluir la libreria string.h.

Saludos
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S en 25 de Febrero de 2010, 18:44:21
Hola de nuevo, creo poder leer y comparar strings solo falta adaptarlo al proyecto,  seria leer la hora del ds1307 leer la hora almacenada en la eeprom y hacer sonar el buzzer.
No se si como lo hago sera la forma correcta espero que si ya que habra sido como un parto  :D
 
 
Código: CSS
  1. #include <16F877a.h>
  2. #fuses XT,NOWDT,NOPROTECT,NODEBUG,NOBROWNOUT,NOWRT,NOLVP,PUT
  3. #use delay(clock=4000000)
  4. #include <string.h>
  5.  
  6. //FUNCIONES LECTURA/ESCRITURA EEPROM INTERNA
  7. void write_string_eeprom(int address,char *data){
  8.    while(*data!=0){
  9.       write_eeprom(address++,*data);
  10.       data++;
  11.    }
  12.    write_eeprom(address,0);
  13. }
  14.  
  15. void read_string_eeprom(int address,char *sl){
  16.      sl--;
  17.    do{
  18.       sl++;
  19.       *sl=read_eeprom(address++);
  20.    }
  21.    while(*sl!=0);
  22. }
  23.  
  24. void main(){
  25.    char alarmas[40];
  26.    char alarma1[]="0830";
  27.    char alarma2[]="0900";
  28.    char *leido=alarmas;
  29.    
  30. //ESCRITURA EEPROM
  31.    write_string_eeprom(0x00,alarma1);
  32.    write_string_eeprom(0x05,alarma2);
  33.    
  34. //LECTURA Y COMPARACION DE ALARMAS
  35.    read_string_eeprom(0x00,leido);
  36.    if(strcmp(alarma1,leido)==1)
  37.       output_high(PIN_A0);
  38.    else
  39.       output_low(PIN_A0);
  40.    read_string_eeprom(0x05,leido);
  41.    if(strcmp(alarma2,leido)==0)
  42.       output_high(PIN_A0);
  43.    else
  44.       output_low(PIN_A0);
  45.    
  46. }

 Gracias por su atencion y ayuda
 
 Miquel_S
Título: Re: Problema con programacion de la alarma
Publicado por: Suky en 25 de Febrero de 2010, 20:44:44
Parece estar bien. Ahora ten cuidado cuando armes el string al leer el ds1307, que corresponda como has guardado la alarma  ;-)


Saludos!
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S en 26 de Febrero de 2010, 05:40:00
Gracias Suky lo tendre en cuenta, una cosa mas que se me olvido preguntar  :mrgreen:

Código: CSS
  1. //LECTURA Y COMPARACION DE ALARMAS
  2.    read_string_eeprom(0x00,leido);
  3.    if(strcmp(alarma1,leido)==0)
  4.       output_high(PIN_A0);
  5.    else
  6.       output_low(PIN_A0);
  7.    read_string_eeprom(0x05,leido);
  8.    if(strcmp(alarma2,leido)==0)
  9.       output_high(PIN_A0);
  10.    else
  11.       output_low(PIN_A0);

En las sentencias if como distingo si poner 0 o 1 (Verdadero o Falso) ya que si pongo 0 auque no coincida la lectura se me enciende el led

 Miquel_S
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S en 26 de Febrero de 2010, 21:06:37
Lo siento, no acierto a saber como hacer la comparacion de las alarmas con el ds, alguien puede explicarme como.

 
Código: CSS
  1. //LECTURA ALARMAS Y COMPARACION DS1307
  2.    read_string_eeprom(0x00,leido);
  3.       if(strcmp(leido,hr)==0)
  4.       if(strcmp(leido,min)==0)
  5.          output_high(PIN_C0);
  6.       else
  7.          output_low(PIN_C0);

 Gracias
 Miquel_S
Título: Re: Problema con programacion de la alarma
Publicado por: Suky en 27 de Febrero de 2010, 11:50:29
Lo que pasa que en la eeprom estás guardando las alarmas en ascii, osea por ejemplo para 0830, guardas 0x30,0x38,0x33,0x30. Ahora cuando leer la hora de un ds, lo recibes en BCD, por ejemplo al leer la hora 18, en realidad recibes el binario 0001 1000, entonces debes tratar ese dato para hacer la compración correctamente. Puede que la libreria que utilices ya te trabaje el dato recibido y te lo devuelva en binario, osea recibirias 00010010, pero este debes pasarlo a ascii.


Saludos!
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S en 27 de Febrero de 2010, 12:56:54
Gracias Suky por tu respuesta, referente a la libreria que estoy usando es la de Redpic, y si no la entiendo mal convierte los datos de binario a bcd y viceversa. Lo que no tengo claro es la forma de hacerlo, no se si para leer la hora del ds debo usar ds1307_get_time(hr,min,sec); y luego comparar los datos por separado o comparar el string completo, auque creo que es el string completo.
O si por otro lado deberia leer la hora del ds con otra instruccion para luego guardar los datos en una variable antes de hacer la comparacion, de todos modos no creo que lo publicado en el post anterior sea la forma correcta de hacerlo auque tenga los datos en ascii.

En las sentencias if como distingo si poner 0 o 1 (Verdadero o Falso) ya que si pongo 0 auque no coincida la lectura se me enciende el led.
PD:Perdon por repetir la pregunta del 0 o 1 pero necesito saberlo.

Gracias
Título: Re: Problema con programacion de la alarma
Publicado por: Suky en 27 de Febrero de 2010, 14:12:23
Formar el string de los datos recibidos es sencillo:


Código: [Seleccionar]
char ValoresLeidos[5];

sprintf(ValoresLeidos,"02%u02"u",hour, min);

Con eso ya deberías de tener en ValoresLeidos un string idéntico al guardado en eeprom. El tema de los if puedes buscar en la ayuda de CCS, no recuerdo que devuelve en cada caso la comparación.

En estos casos ir haciendo un debug en MPLab o en proteus ayuda a entender que se está haciendo mal, se van aprendiendo detalles, y uno se vuelve más independiente  ;-)

Saludos!
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S en 27 de Febrero de 2010, 15:47:03
Gracias de nuevo Suky ahora lo veo mas facil, referente al debug lo hare como dices e intentare entenderlo.

 Miquel_S
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S en 27 de Febrero de 2010, 21:11:14
Al fin creo tenerlo funcionando  :-/ :-/

Pero..... , en la simulacion el reloj que visualizo en el lcd no anda,  os dejo el codigo y el esquema en proteus por si alguien sabe el porque, es el unico problema lo demas funciona bien.

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 <string.h>
  17. #include <flex_lcd.0.c>               //Libreria manejo LCD
  18. #include <_ds1307.c>             //Libreria manejo RTC
  19. //#include <ds1621.c>              //Libreria sensor Temp
  20.  
  21.  
  22.  //FUNCIONES ESCRITURA Y LECTURA EEPROM INTERNA
  23.  void write_string_eeprom(int address,char *data){
  24.    while(*data!=0){
  25.       write_eeprom(address++,*data);
  26.       data++;
  27.    }
  28.    write_eeprom(address,0);
  29. }
  30.  
  31. void read_string_eeprom(int address,char *sl){
  32.      sl--;
  33.    do{
  34.       sl++;
  35.       *sl=read_eeprom(address++);
  36.    }
  37.    while(*sl!=0);
  38. }
  39.  
  40.  byte hr,min,sec,day,month,yr,dow;
  41.  char sdow[11];
  42.  //byte value;
  43.  char ValoresLeidos[65];
  44.  
  45.  void main(){
  46.    char alarmas[65];
  47.    char alarma1[]="0830";
  48.    char alarma2[]="0900";
  49.    char alarma3[]="0925";
  50.    char alarma4[]="1000";
  51.    char alarma5[]="1020";
  52.    char alarma6[]="1030";
  53.    char alarma7[]="1115";
  54.    char alarma8[]="1135";
  55.    char alarma9[]="1200";
  56.    char alarma10[]="1230";
  57.    char alarma11[]="1245";
  58.    char alarma12[]="1315";
  59.    char alarma13[]="1430";
  60.    //char alarma14[]="1530";
  61.    //char alarma15[]="1630";
  62.    char *leido=alarmas;
  63.  
  64.    
  65.  //ESCRITURA ALARMAS
  66.    write_string_eeprom(0x00,alarma1);
  67.    write_string_eeprom(0x05,alarma2);
  68.    write_string_eeprom(0x0A,alarma3);
  69.    write_string_eeprom(0x0F,alarma4);
  70.    write_string_eeprom(0x14,alarma5);
  71.    write_string_eeprom(0x19,alarma6);
  72.    write_string_eeprom(0x1E,alarma7);
  73.    write_string_eeprom(0x23,alarma8);
  74.    write_string_eeprom(0x28,alarma9);
  75.    write_string_eeprom(0x2D,alarma10);
  76.    write_string_eeprom(0x3D,alarma11);
  77.    write_string_eeprom(0x44,alarma12);
  78.    write_string_eeprom(0x4B,alarma13);
  79.    //write_string_eeprom(0x52,alarma14);
  80.    //write_string_eeprom(0x59,alarma15);  
  81.    
  82.  //INICIALIZA DS1307 Y LCD
  83.    lcd_init();
  84.    ds1307_init(DS1307_ALL_DISABLED);
  85.    ds1307_set_date_time(11,2,10,3,14,30,0);
  86.    
  87.  //LEE FECHA Y HORA ACTUAL DS1307
  88.    ds1307_get_day_of_week((char*) sdow);
  89.    ds1307_get_date(day,month,yr,dow);
  90.    ds1307_get_time(hr,min,sec);
  91.    printf(lcd_putc,"\f%s  %02u-%02u-%02u",sdow,day,month,yr);
  92.    printf(lcd_putc,"\n%02u:%02u:%02u",hr,min,sec);
  93.    
  94.  //LECTURA ALARMAS/DS1307 Y COMPARACION
  95.    sprintf(ValoresLeidos,"%02u%02u",hr,min);
  96.    read_string_eeprom(0x00,leido);
  97.       if(strcmp(ValoresLeidos,leido)==0)
  98.          output_high(PIN_C0);
  99.       else
  100.          output_low(PIN_C0);
  101.    read_string_eeprom(0x05,leido);
  102.       if(strcmp(ValoresLeidos,leido)==0)
  103.          output_high(PIN_C0);
  104.       else
  105.          output_low(PIN_C0);
  106.    read_string_eeprom(0x0A,leido);
  107.       if(strcmp(ValoresLeidos,leido)==0)
  108.          output_high(PIN_C0);
  109.       else
  110.          output_low(PIN_C0);
  111.    read_string_eeprom(0x0F,leido);
  112.       if(strcmp(ValoresLeidos,leido)==0)
  113.          output_high(PIN_C0);
  114.       else
  115.          output_low(PIN_C0);
  116.    read_string_eeprom(0x14,leido);
  117.       if(strcmp(ValoresLeidos,leido)==0)
  118.          output_high(PIN_C0);
  119.       else
  120.          output_low(PIN_C0);
  121.    read_string_eeprom(0x19,leido);
  122.       if(strcmp(ValoresLeidos,leido)==0)
  123.          output_high(PIN_C0);
  124.       else
  125.          output_low(PIN_C0);
  126.    read_string_eeprom(0x1E,leido);
  127.       if(strcmp(ValoresLeidos,leido)==0)
  128.          output_high(PIN_C0);
  129.       else
  130.          output_low(PIN_C0);
  131.    read_string_eeprom(0x23,leido);
  132.       if(strcmp(ValoresLeidos,leido)==0)
  133.          output_high(PIN_C0);
  134.       else
  135.          output_low(PIN_C0);
  136.    read_string_eeprom(0x28,leido);
  137.       if(strcmp(ValoresLeidos,leido)==0)
  138.          output_high(PIN_C0);
  139.       else
  140.          output_low(PIN_C0);
  141.    read_string_eeprom(0x2D,leido);
  142.       if(strcmp(ValoresLeidos,leido)==0)
  143.          output_high(PIN_C0);
  144.       else
  145.          output_low(PIN_C0);
  146.    read_string_eeprom(0x3D,leido);
  147.       if(strcmp(ValoresLeidos,leido)==0)
  148.          output_high(PIN_C0);
  149.       else
  150.          output_low(PIN_C0);
  151.    read_string_eeprom(0x44,leido);
  152.       if(strcmp(ValoresLeidos,leido)==0)
  153.         output_high(PIN_C0);
  154.       else
  155.          output_low(PIN_C0);
  156.    read_string_eeprom(0x4B,leido);
  157.       if(strcmp(ValoresLeidos,leido)==0)
  158.          output_high(PIN_C0);
  159.       else
  160.          output_low(PIN_C0);      
  161.  }

He quitado dos alarmas y el sensor de temperatura por falta de ram.

 Gracias por vuestra ayuda y a por otro proyecto.

 Miquel_S
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S en 27 de Febrero de 2010, 21:20:19
Perdon me deje el esquema  :-/  :-/

 Miquel_S
Título: Re: Problema con programacion de la alarma
Publicado por: Suky en 27 de Febrero de 2010, 22:03:32
Me parece que lo único que falta es un while después de setear todo  ;-)


Saludos!
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S en 28 de Febrero de 2010, 10:10:54
Gracias Suky por tu ayuda,  pense con ello mas tarde,  pero ya estaba en la cama  :sleepy:

 Saludos
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S en 21 de Marzo de 2010, 18:19:27
 :5] Todavia sigo liado y no me funciona y no encuentro el fallo, he probado con diferentes librerias y hace lo mismo.
       Os dejo el codigo de la parte del reloj por si me podeis decir el fallo:

 
Código: CSS
  1. #include <16f877a.h>
  2. #fuses HS,NOWDT,NOPROTECT,NODEBUG,NOBROWNOUT,NOWRT,NOLVP,PUT
  3. #use delay(clock=20000000)
  4. #define RTC_SDA  PIN_C4
  5. #define RTC_SCL  PIN_C3  
  6. #define use_portb_lcd TRUE
  7. #include <LCD.c>            
  8. #include <DS_1307.c>          
  9.  
  10. byte hr,min,sec,day,mth,year,dow;
  11. //char sdow[11];
  12.  
  13.  void main()
  14.  {
  15.  ds1307_init();
  16.    ds1307_set_date_time(21,3,10,2,18,00,0);
  17.    //ds1307_get_day_of_week((char*) sdow);
  18.    ds1307_get_date(day,mth,year,dow);
  19.    ds1307_get_time(hr,min,sec);
  20.    
  21.  lcd_init();
  22.    printf(lcd_putc,"Reloj ds1307");
  23.    printf(lcd_putc,"\nMiquel_S 2010");
  24.    delay_ms(1500);
  25.    lcd_putc("\f");
  26.    printf(lcd_putc,"%02u   %02u-%02u-%02u",dow,day,mth,year);
  27.    printf(lcd_putc,"\n%02u:%02u:%02u",hr,min,sec);
  28.  }

 Libreria ds_1307
Código: CSS
  1. ////////////////////////////////////////////////////////////////////////////////
  2. ///                               DS1307.C                                   ///
  3. ///                     Driver for Real Time Clock                           ///
  4. ///                                                                          ///
  5. /// ds1307_init() - Enable oscillator without clearing the seconds register -///
  6. ///                 used when PIC loses power and DS1307 run from 3V BAT     ///
  7. ///               - Disable squarewave output                                ///
  8. ///                                                                          ///
  9. /// ds1307_set_date_time(day,mth,year,dow,hour,min,sec)  Set the date/time   ///
  10. ///                                                                          ///
  11. /// ds1307_get_date(day,mth,year,dow)               Get the date             ///
  12. ///                                                                          ///
  13. /// ds1307_get_time(hr,min,sec)                     Get the time             ///
  14. ///                                                                          ///
  15. ////////////////////////////////////////////////////////////////////////////////
  16.  
  17. #define RTC_SDA  PIN_C4
  18. #define RTC_SCL  PIN_C3
  19.  
  20. #use i2c(master, sda=RTC_SDA, scl=RTC_SCL)
  21.  
  22. BYTE bin2bcd(BYTE binary_value);
  23. BYTE bcd2bin(BYTE bcd_value);
  24.  
  25. void ds1307_init(void)
  26. {
  27.    BYTE seconds = 0;
  28.  
  29.    i2c_start();
  30.    i2c_write(0xD0);      // WR to RTC
  31.    i2c_write(0x00);      // REG 0
  32.    i2c_start();
  33.    i2c_write(0xD1);      // RD from RTC
  34.    seconds = bcd2bin(i2c_read(0)); // Read current "seconds" in DS1307
  35.    i2c_stop();
  36.    seconds &= 0x7F;
  37.  
  38.    delay_us(3);
  39.  
  40.    i2c_start();
  41.    i2c_write(0xD0);      // WR to RTC
  42.    i2c_write(0x00);      // REG 0
  43.    i2c_write(bin2bcd(seconds));     // Start oscillator with current "seconds value
  44.   i2c_start();
  45.   i2c_write(0xD0);      // WR to RTC
  46.   i2c_write(0x07);      // Control Register
  47.   i2c_write(0x80);     // Disable squarewave output pin
  48.   i2c_stop();
  49.  
  50. }
  51.  
  52. void ds1307_set_date_time(BYTE day, BYTE mth, BYTE year, BYTE dow, BYTE hr, BYTE min, BYTE sec)
  53. {
  54.  sec &= 0x7F;
  55.  hr &= 0x3F;
  56.  
  57.  i2c_start();
  58.  i2c_write(0xD0);            // I2C write address
  59.  i2c_write(0x00);            // Start at REG 0 - Seconds
  60.  i2c_write(bin2bcd(sec));      // REG 0
  61.  i2c_write(bin2bcd(min));      // REG 1
  62.  i2c_write(bin2bcd(hr));      // REG 2
  63.  i2c_write(bin2bcd(dow));      // REG 3
  64.  i2c_write(bin2bcd(day));      // REG 4
  65.  i2c_write(bin2bcd(mth));      // REG 5
  66.  i2c_write(bin2bcd(year));      // REG 6
  67.  i2c_write(0x80);            // REG 7 - Disable squarewave output pin
  68.  i2c_stop();
  69. }
  70.  
  71. void ds1307_get_date(BYTE &day, BYTE &mth, BYTE &year, BYTE &dow)
  72. {
  73.  i2c_start();
  74.  i2c_write(0xD0);
  75.  i2c_write(0x03);            // Start at REG 3 - Day of week
  76.  i2c_start();
  77.  i2c_write(0xD1);
  78.  dow  = bcd2bin(i2c_read() & 0x7f);   // REG 3
  79.  day  = bcd2bin(i2c_read() & 0x3f);   // REG 4
  80.  mth  = bcd2bin(i2c_read() & 0x1f);   // REG 5
  81.  year = bcd2bin(i2c_read(0));            // REG 6
  82.  i2c_stop();
  83. }
  84.  
  85. void ds1307_get_time(BYTE &hr, BYTE &min, BYTE &sec)
  86. {
  87.  i2c_start();
  88.  i2c_write(0xD0);
  89.  i2c_write(0x00);            // Start at REG 0 - Seconds
  90.  i2c_start();
  91.  i2c_write(0xD1);
  92.  sec = bcd2bin(i2c_read() & 0x7f);
  93.  min = bcd2bin(i2c_read() & 0x7f);
  94.  hr  = bcd2bin(i2c_read(0) & 0x3f);
  95.  i2c_stop();
  96.  
  97. }
  98.  
  99. BYTE bin2bcd(BYTE binary_value)
  100. {
  101.  BYTE temp;
  102.  BYTE retval;
  103.  
  104.  temp = binary_value;
  105.  retval = 0;
  106.  
  107.  while(1)
  108.  {
  109.    // Get the tens digit by doing multiple subtraction
  110.    // of 10 from the binary value.
  111.    if(temp >= 10)
  112.    {
  113.      temp -= 10;
  114.      retval += 0x10;
  115.    }
  116.    else // Get the ones digit by adding the remainder.
  117.    {
  118.      retval += temp;
  119.      break;
  120.    }
  121.  }
  122.  
  123.  return(retval);
  124. }
  125.  
  126.  
  127. // Input range - 00 to 99.
  128. BYTE bcd2bin(BYTE bcd_value)
  129. {
  130.  BYTE temp;
  131.  
  132.  temp = bcd_value;
  133.  // Shifting upper digit right by 1 is same as multiplying by 8.
  134.  temp >>= 1;
  135.  // Isolate the bits for the upper digit.
  136.  temp &= 0x78;
  137.  
  138.  // Now return: (Tens * 8) + (Tens * 2) + Ones
  139.  
  140.  return(temp + (temp >> 2) + (bcd_value & 0x0f));
  141. }

 Os dejo una foto.

 Saludos y Gracias

 Miquel_S
Título: Re: Problema con programacion de la alarma
Publicado por: Miquel_S en 12 de Mayo de 2010, 17:43:36
 :-/ :-/ :-/ :-/ :-/ :-/

Al fin os lo dejo funcionando al 100%

Miquel_S

Saludos