Autor Tema: el reloj ds1307 no cambia la fecha  (Leído 2109 veces)

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

Desconectado Isabel Espejel

  • PIC10
  • *
  • Mensajes: 8
el reloj ds1307 no cambia la fecha
« en: 21 de Junio de 2017, 01:42:12 »
Hola buenas noches, estoy realizando una programación en PIC CCS, utilizando el reloj DS1307, un PIC18F4550 y 13 logic state, hasta ahora todo va bien ya que utilizo botones para incremento y decremento pero cuando trato de cambiar la fecha no me deja y solo se queda en lunes
A continuación les dejo mi código para ver si encuentran mi error, lo eh intentado de diferentes maneras pero nada funciona


Código: CSS
  1. #include <18f4550.h>  //incluye la libreria del pic//
  2. #fuses INTRC_IO,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,NOVREGEN
  3. #use delay (clock = 4000000)//Velocidad del reloj interno del pic//
  4. #include <lcd.c>  //libreria para manejo del LCD//
  5. #include <DS1307.c> //libreria del reloj digital
  6. #define use_portd_lcd //define el puerto de comunicacion del micro con la lcd
  7.  
  8.  
  9. int sec_ctd,min_ctd,hr_ctd,dia_ctd,mes_ctd,anio_ctd,sem_ctd;  
  10. int sec,min,hora,dia,mes,anio,dow,sem;
  11. char fecha[7];
  12.  
  13.  
  14. #define entrada input
  15. #define enciende output_high
  16.  
  17.  
  18. #define btnDiaLet PIN_B3     //se coloca la semana
  19. #define btnDiaMen PIN_B6
  20.  
  21.  
  22. #define btnStr PIN_C0     //comienza el reloj a ejecutarse desde la hora y fechas indicadas
  23.  
  24.  
  25. #define btnIn_hr PIN_A0
  26. #define btnDe_hr PIN_A1
  27.  
  28.  
  29. #define btnIn_min PIN_A2
  30. #define btnDe_min PIN_A3
  31.  
  32.  
  33. #define btnin_dia PIN_A4
  34. #define btnde_dia PIN_B4
  35.  
  36.  
  37. #define btnin_mes PIN_A5
  38. #define btnde_mes PIN_B5
  39.  
  40.  
  41. #define btnIn_ano PIN_A6
  42. #define btnDe_ano PIN_B2
  43.  
  44.  
  45.  
  46.  
  47. void main()
  48.    {
  49.       lcd_init();
  50.       ds1307_set_date_time(dia,mes,anio,dow,hora,min,sec);
  51.      
  52.  
  53.  
  54. for(;;)
  55.          {
  56.    
  57.            if(entrada(btnIn_min)==1)//se configuran los botones de las horas
  58.                {
  59.                   min=min_ctd++;
  60.                   if(min_ctd==59)
  61.                   {
  62.                     min_ctd=0;
  63.                   }
  64.                }
  65.  
  66.            if(entrada(btnIn_hr)==1)
  67.                {
  68.                   hora=hr_ctd++;
  69.                   if(hr_ctd==23)
  70.                   {
  71.                     hr_ctd=0;
  72.                   }
  73.                }
  74.                
  75.            if(entrada(btnDe_min)==1)
  76.                {
  77.                   min=min_ctd--;
  78.                   if(min_ctd==0)
  79.                   {
  80.                     min_ctd=59;
  81.                   }
  82.                }
  83.  
  84.            if(entrada(btnDe_hr)==1)
  85.                {
  86.                   hora=hr_ctd--;
  87.                   if(hr_ctd==0)
  88.                   {
  89.                     hr_ctd=23;
  90.                   }
  91.                }
  92.         //se terminan de configurar los botones de hora
  93.                
  94.                
  95.  
  96.  
  97.             if(entrada(btnin_dia)==1)//se comienzan a configurar los botones de la fecha
  98.             {
  99.                dia=dia_ctd++;
  100.                if(dia_ctd>31)
  101.                {
  102.                  dia_ctd=0;
  103.                }
  104.             }
  105.             if(entrada(btnde_dia)==1)
  106.             {
  107.                dia=dia_ctd--;
  108.                if(dia_ctd<0)
  109.                {
  110.                   dia_ctd=31;
  111.                }
  112.             }
  113.            
  114.             if(entrada(btnin_mes)==1)
  115.                {
  116.                   mes=mes_ctd++;
  117.                   if(mes_ctd>12)
  118.                   {
  119.                      mes_ctd=0;
  120.                   }
  121.                }
  122.                
  123.              if(entrada(btnde_mes)==1)
  124.                {
  125.                   mes=mes_ctd--;
  126.                   if(mes_ctd<0)
  127.                   {
  128.                      mes_ctd=12;
  129.                   }
  130.                }
  131.                          
  132.             if(entrada(btnIn_ano)==1)
  133.             {
  134.                anio=anio_ctd++;
  135.                if(anio_ctd==99)
  136.                {
  137.                   anio_ctd=0;
  138.                }
  139.             }
  140.            
  141.              if(entrada(btnDe_ano)==1)
  142.             {
  143.                anio=anio_ctd--;
  144.                if(anio_ctd==0)
  145.                {
  146.                   anio_ctd=99;
  147.                }
  148.             }
  149.    
  150.           //se termina de configurar los botones de fecha
  151.          
  152.           if(enciende(btnDiaLet)==1)//se configura los dias de la semana
  153.              {
  154.              dow=sem++;
  155.              if(dow==7)
  156.              {
  157.              dow=0;
  158.              }
  159.                }
  160.        
  161.                
  162.                
  163.     if(entrada(btnStr))
  164.     {
  165.       enciende(btnIn_min);
  166.       enciende(btnDe_min);
  167.       enciende(btnIn_hr);
  168.       enciende(btnDe_hr);
  169.  
  170.  
  171.       enciende(btnin_mes);
  172.       enciende(btnin_dia);
  173.       enciende(btnde_mes);
  174.       enciende(btnde_dia);
  175.       enciende(btnIn_ano);
  176.      enciende(btnDe_ano);
  177.      enciende(btnDiaLet);
  178.      enciende(btnDiaMen);
  179.         ds1307_set_date_time(dia,mes,anio,dow,hora,min,sec);
  180.        }  
  181.  
  182.  
  183.         ds1307_get_date(dia,mes,anio,dow);        /// se obtiene la fecha  
  184.         ds1307_get_time(hora,min,sec);             /// se obtiene la hora
  185.         ds1307_get_day_of_week(fecha);            //coloca el dia
  186.  
  187.  
  188.         lcd_gotoxy(1,1);
  189.         printf(lcd_putc," \f%s%02u/%02u/20%02u",fecha,dia,mes,anio);
  190.  
  191.  
  192.         lcd_gotoxy(5,2);
  193.         printf(lcd_putc, "%02u:%02u:%02u",hora, min, sec);
  194.         delay_ms(200);
  195.  
  196.  
  197.    } //for
  198.    }// void main
« Última modificación: 21 de Junio de 2017, 10:02:08 por RedPic »

Desconectado fandiño

  • PIC10
  • *
  • Mensajes: 12
Re:el reloj ds1307 no cambia la fecha
« Respuesta #1 en: 24 de Junio de 2017, 21:54:35 »
No soy para nada experto pero tratare de ayudarte.

Creo que el problema es que estás configurando el día de la semana, sin tener en cuenta el día del mes. Es decir, no puedes cuadrarle al DS1307 una fecha como por ejemplo 24 de junio de 2017, y decirle que es (por ejemplo) un Lunes. 24 de junio de 2017 siempre será Sábado, así que creo que por eso no te deja cambiar la fecha.

Además, si el problema es que no solo no te deja cambiar el dia de la semana si no que tampoco puedes cambiar el dia del mes o el mes o el año, entonces puede ser un problema de comunicación con el DS1307, sería bueno que subieras un vídeo mostrando tu error, así te podríamos colaborar.

Espero haberte ayudado

Desconectado juandavidcy

  • PIC10
  • *
  • Mensajes: 18
Re:el reloj ds1307 no cambia la fecha
« Respuesta #2 en: 27 de Junio de 2017, 14:14:04 »
este es mi codigo

uso cuatro botones
1 para habilitar modificacion
2 para cambiar de dia a mes a año etc
3 para aumentar
4 para disminuir

me gustan muchos los if jejejeje igualmente le puede añadir la condicion de limite como hiciste, por ejemplo si es minuto 59 vuelva a 0 (cero)

el se actualiza automaticamente despues cada cambio al terminar de hacer tus cambios apagas el primer boton y se desabitara el cambio

Código: C
  1. #include <18f25k20.h>
  2. #use delay(clock=4M)
  3. #include <DS1307.c>
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. #define LCD_DB4   PIN_B4
  9. #define LCD_DB5   PIN_B5
  10. #define LCD_DB6   PIN_B6
  11. #define LCD_DB7   PIN_B7
  12.  
  13. #define LCD_RS    PIN_B1
  14. #define LCD_RW    PIN_B2
  15. #define LCD_E     PIN_B3
  16. #include "flex_lcd_c2.c"
  17.  
  18. #define HORA            PIN_B0
  19. #define CAMBIO          PIN_C5
  20. #define HIGH            PIN_C6
  21. #define LOW             PIN_C7
  22.  
  23. int  contador=0;
  24. int  apagado=0;
  25.  
  26. int  sec;
  27. int  min;
  28. int  hrs;
  29. int  day;
  30. int  month;
  31. int  yr;
  32. int  dow;
  33. char fecha[3];
  34.  
  35.  
  36. void main(){
  37.    
  38. while(true){
  39.  
  40.         ds1307_get_date (day, month, yr, dow);  /// se obtiene la fecha
  41.         ds1307_get_time (hrs, min, sec);   /// se obtiene la hora
  42.      
  43.         if(dow==7)         //esto era porque me pasaba de domingo a un dia 8 y me daba error
  44.           {dow=0;          //entonces lo forzaba a 0 que es lunes
  45.             ds1307_set_date_time(day,month,yr,dow,hrs,min,sec);}
  46.          
  47.         ds1307_get_day_of_week((char*) fecha);
  48.         lcd_init();
  49.         lcd_gotoxy(1,1);
  50.         printf(lcd_putc,"%02u %02u/%02u/20%02u",dow,day,month,yr);
  51.         lcd_gotoxy(2,2);
  52.         printf(lcd_putc, "HORA: %02u:%02u:%02u",hrs, min, sec);
  53.         delay_ms(200);
  54.        
  55.        if(dow>=0 && dow<=4)           //lunes a viernes
  56.           apagado=1;                          //esto es porque queria apagar una maquina en cierto horario de lunes a viernes
  57.        else{
  58.        apagado=0;}
  59.        
  60.        if((hrs>=6 && hrs<20) || (hrs>5 && min>=30 && hrs<20))     //de 5:30 am a 8 pm
  61.             apagado=1;                       // y aca apagar de cierta hora a tal hora entan arribita
  62.         else{
  63.             apagado=0;}
  64.        
  65.         if(input(HORA)==1){            //configuracion hora con botones
  66.        
  67.          if(input(CAMBIO)==1){         //Cambia de dia a mes, etc
  68.              contador++;
  69.               delay_ms(2000);
  70.               if(contador>6)
  71.                contador=0;
  72.                }
  73.          
  74.              
  75.                  if(contador==0){              //cambia dia
  76.                  if(input(HIGH)==1)
  77.                    day++;
  78.                  if(input(LOW)==1)
  79.                    day--;
  80.                  ds1307_set_date_time(day,month,yr,dow,hrs,min,sec);}
  81.                  
  82.                  if(contador==1){              //cambia mes
  83.                  if(input(HIGH)==1)
  84.                    month++;
  85.                  if(input(LOW)==1)
  86.                    month--;
  87.                  ds1307_set_date_time(day,month,yr,dow,hrs,min,sec);
  88.                  }  
  89.                  
  90.                  if(contador==2){              //cambia año
  91.                  if(input(HIGH)==1)
  92.                    yr++;
  93.                  if(input(LOW)==1)
  94.                    yr--;
  95.                  ds1307_set_date_time(day,month,yr,dow,hrs,min,sec);
  96.                  }
  97.  
  98.                  if(contador==3){              //cambia dia de la semana
  99.                  if(input(HIGH)==1)
  100.                    dow++;
  101.                  if(input(LOW)==1)
  102.                    dow--;
  103.                  ds1307_set_date_time(day,month,yr,dow,hrs,min,sec);
  104.                  }
  105.                  
  106.                  if(contador==4){               //cambia hora
  107.                  if(input(HIGH)==1)
  108.                    hrs++;
  109.                  if(input(LOW)==1)
  110.                    hrs--;
  111.                  ds1307_set_date_time(day,month,yr,dow,hrs,min,sec);
  112.                  }
  113.                  
  114.                  if(contador==5){                //cambia minutos
  115.                  if(input(HIGH)==1)
  116.                    min++;
  117.                  if(input(LOW)==1)
  118.                    min--;
  119.                  ds1307_set_date_time(day,month,yr,dow,hrs,min,sec);
  120.                  }
  121.                  
  122.                  if(contador==6){                 //cambia segundos
  123.                  if(input(HIGH)==1)
  124.                    sec++;
  125.                  if(input(LOW)==1)
  126.                    sec--;
  127.                  ds1307_set_date_time(day,month,yr,dow,hrs,min,sec);
  128.                  }
  129.      }
  130.    }
  131.  }


* Sin título.png
(44.14 kB, 1154x488 - visto 390 veces)

« Última modificación: 27 de Junio de 2017, 14:18:13 por juandavidcy »

Desconectado Isabel Espejel

  • PIC10
  • *
  • Mensajes: 8
Re:el reloj ds1307 no cambia la fecha
« Respuesta #3 en: 11 de Julio de 2017, 21:46:27 »
Muchas gracias, ambos me fueron de mucha ayuda   :)   :D


 

anything