Autor Tema: Puesta en hora del reloj con pulsadores.  (Leído 1702 veces)

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

Desconectado Minato

  • PIC10
  • *
  • Mensajes: 1
    • La Espada del Cielo
Puesta en hora del reloj con pulsadores.
« en: 10 de Junio de 2015, 23:26:27 »
Hola! Antes que nada soy nuevo en este foro y me gustaría que supieran que es simplemente fenomenal tanto conocimiento colectivo,
realmente me impresiona todo esto y ciertamente aquí se aprende con solo pasearse un momento.

Luego de lo anterior quisiera que me ayudasen con algo. Soy un estudiante y no domino del todo el lenguaje C así que pido paciencia.

Para obtener la nota de periodo en mi instituto debemos realizar un proyecto, he elegido un reloj calendario utilizando un DS1307 y un pic 16f876a
así que me conseguí el proyecto en internet y decidí realizarlo. El problema está en que deseo poder cambiar la hora y fecha mediante dos pulsadores
pero no logro ubicarlos en el código, así que si pueden ayudarme se los agradecería inmensamente.  :)

Aquí está el código.

 
Código: [Seleccionar]
#include <16f876A.h>
#fuses XT
#use delay(clock=4MHz)
#include <DS1307.bak>
#define LCD_DB4   PIN_B4
#define LCD_DB5   PIN_B5
#define LCD_DB6   PIN_B6
#define LCD_DB7   PIN_B7
#define LCD_RS    PIN_B2
#define LCD_E     PIN_B3
#include <LCD1.c>

int sec=50,min=59,hora=24,dia=9, mes=5,anio=15,dow=0;
char fecha[5];
void main(){
lcd_init();
ds1307_set_date_time(dia,mes,anio,dow,hora,min,sec);
for(;;){
ds1307_get_date(dia,mes,anio,dow);        /// se obtiene la fecha 
ds1307_get_time(hora,min,sec);             /// se obtiene la hora
ds1307_get_day_of_week(fecha);
lcd_gotoxy(1,1);
printf(lcd_putc,"%s %02u/%02u/20%02u",fecha,dia,mes,anio);
lcd_gotoxy(5,2);
printf(lcd_putc, "%02u:%02u:%02u",hora, min, sec);
delay_ms(200);
}
}

De ante mano ¡muchas Gracias!
Yo solo se que no se nada. (Galileo Galilei)

Desconectado RodrigoAndres

  • PIC16
  • ***
  • Mensajes: 171
Re: Puesta en hora del reloj con pulsadores.
« Respuesta #1 en: 06 de Julio de 2015, 16:17:18 »
No soy para nada experto pero tratare de ayudarte.

estube leyendo tu problema y puedes poner el codigo para leer los botones ai mismo junto al codigo del lcd. solo reduse el delay ponlo para ke sea de 50 milisegundos asi lo tengo yo y funsiono bien. te voy a ayudar::

para cambiar la hora, puedes aser ke cuando el usuario espiche el boton, se incremente la variable horas en 1. lo mismo para la fecha. luego se guardan esos valores en el chip DS1307, los guardas con ds1307_set_date_time asi:
el problema es ke si el usuario deja el boton espichado, la variable se incrementa muy rapido sin control porke el pic va a 4 megas, para solusionar esto se me ocurrio un truco muy ingenioso:

Código: [Seleccionar]

if(BOTON == 1) //si el usuario undio el boton
{
  tiempo_espichado++;    //aumentamos en 1 la variable del tiempo espichado
  if(tiempo_espichado > 10)   //si a durado mas de 400 milisegundos espichado el boton  (400 porke si uno multiplica en la calculadora 50  milisegundos por 10 da 400
  {
     hora++;   //incrementamos la hora en uno
     tiempo_espichado = 0;
     if(hora > 24){hora = 0;}
  }
}
ds1307_set_date_time(dia,mes,anio,dow,hora,min,sec);
delay_ms(50);  //esperamos 50 milisegundos para reducir la velocidad del pic

asi lo ise y me funciono, lo mismo puedes aser para la fecha, la incrementas en uno y ya.
saludos
« Última modificación: 06 de Julio de 2015, 16:24:16 por RodrigoAndres »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Puesta en hora del reloj con pulsadores.
« Respuesta #2 en: 06 de Julio de 2015, 17:25:02 »
Propongo otra solucion mas

Código: C
  1. if(input_pin(PIN_A0))                 // Esto supone que con un 1 entra aca, si deberia entrar con un 0, entonces es !input_pin(PIN_A0), con un ! adelante para negarlo
  2. {
  3.   dealy_ms(10);
  4.   while(input_pin(PIN_A0));                              // Aca va lo mismo que el if de arriba, es decir si arriba pones !input_pin(PIN_A0), aca tambien
  5.   hora++;   //incrementamos la hora en uno
  6.   if(hora > 24){hora = 0;}
  7.   ds1307_set_date_time(dia,mes,anio,dow,hora,min,sec);
  8. }

Funcionamiento, detecta el boton y entra al if,
espera 10ms por el rebote del boton,
mientras se tenga presionado el boton no hace nada..
cuando lo sueltes ahi va a incrementar la hora y luego guardarla.
« Última modificación: 06 de Julio de 2015, 17:37:51 por KILLERJC »


 

anything