Haz una pregunta
  Foros de Electrónica » Temas de Interés » Dudas en general
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

24/02/2015 #1


Arduino UNO + RTC
Hola a todos:

Estoy trabajando con un Arduino UNO y su Real Time Clock (RTC) el reloj me funciona bien pero la impresión de la hora no me sale como esperaba con los 0 cuando es por ejemplo las 09:06:07

PROBLEMA: La hora debería salir como 09:06:07 pero en vez de eso me sale 9:6:7
Trate de modificar el programa en el:

rtc.adjust(DateTime(2015,2,24,09,06,07)); (para ajustar la hora)

Pero me sigue saliendo los valores como 9:6:7



Estos es lo que tengo:

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;

void setup() {
Serial.begin(115200);
#ifdef AVR
Wire.begin();
#else
Wire1.begin();
#endif
rtc.begin();

if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
rtc.adjust(DateTime(__DATE__, __TIME__));
}
}

void loop () {

DateTime now = rtc.now();

Serial.print(now.day(), DEC);
Serial.print('/');
//Imprimimos el mes
Serial.print(now.month(), DEC);
Serial.print('/');
//Imprimimos el año
Serial.print(now.year(), DEC);
Serial.print(' ');
//Imprimimos la hora
Serial.print(now.hour(), DEC);
Serial.print('0:');
//Imprimimos los minutos
Serial.print(now.minute(), DEC);
Serial.print('0:');
//Imprimimos los segundos
Serial.print(now.second(), DEC);
Serial.println('0');

Serial.println();
delay(1000);
}

Bueno aqui les dejo el link de las librerias que use:

www github com/adafruit/RTClib(le ponen los puntos en los espacios ya que por mi rango no puedo postear links :( )

Las cuales son:
datecalc
ds1307
ds1307SqwPin
ds1307nvram

Gracias de antemano
25/02/2015 #2


creo lo que tienes que hacer es guardarlo en un string y ahi insertarle el "0" y despues mostrarlo

Saludos...
23/04/2016 #3

Avatar de yorsk2004

Hola, compañeros del foro. Quiero desarrollar un proyecto tipo reloj, con el arduino uno, el Tiny_RTC DS1307 y un LCD 16x2. Básicamente necesito que me orienten en:

1. Que librería usar, pues he visto muchas

2. Como puedo configurar la hora del RTC tal como lo haria en un reloj digital mediante tres pulsadores, uno aumenta la hora de 00 a 23 y vuelve otra vez, el otro los minutos de 00 a 59 y vuelve otra vez y el tercer botón confirma que ya hicimos la respectiva configuración.

3. Configurar una alarmas fija todos los días del rtc tal como configuramos la hora del punto 2. Los mismos tres pulsadores y todo lo mismo.

Adjunto el código que llevo, gracias de antemano por sus valiosos aportes.

Código:
#include <LiquidCrystal.h>
#define SSR 2
#define MENU 3
#define BOTON_1 4
#define BOTON_2 5
#define BOTON_3 6
#define ENTER 7
int flag_MENU, flag_BOTON_1, flag_BOTON_2, flag_BOTON_3, flag_ENTER, tamano;
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);

void setup()
{
  pinMode(MENU, INPUT_PULLUP);
  pinMode(BOTON_1, INPUT_PULLUP);
  pinMode(BOTON_2, INPUT_PULLUP);
  pinMode(BOTON_3, INPUT_PULLUP);
  pinMode(ENTER, INPUT_PULLUP);
  lcd.begin(16, 2);
}

void loop ()
{
  lcd.setCursor(1, 0);
  lcd.print("HORA ACT: HH:MM"); // Aqui hora actual del RTC
  if (digitalRead(MENU)==LOW)   // Si entro al menu
  {
    delay (200);
    flag_MENU=0;
    lcd.clear();
    while(flag_MENU==0)
    {
      lcd.setCursor(0, 0);
      lcd.print("1.Hora 2.Tamano");
      lcd.setCursor(0, 1);
      lcd.print("3.Porcion");
      if (digitalRead(BOTON_1)==LOW)
      {
        delay (200);
        flag_BOTON_1=0;
        lcd.clear();
        while(flag_BOTON_1==0)
        {
          // Aqui debo configurar la hora mediante los botones
          // BOTON_1 (Aumenta hora) BOTON_2 (Aumenta minutos)
          if (digitalRead(ENTER)==LOW) // Si preiono Enter es porque ya la configure la hora
          {
            delay (200);
            flag_BOTON_1=1;
            flag_MENU==1; // Salgo a la primera pantalla
            lcd.clear();
          }
        }
      }
      if (digitalRead(BOTON_2)==LOW)
      {
        delay (200);
        flag_BOTON_2=0;
        lcd.clear();
        while(flag_BOTON_2==0)
        {
          lcd.setCursor(0, 0);
          lcd.print("1.Pequeno 2.Med");
          lcd.setCursor(0, 1);
          lcd.print("3.Grande");
          if (digitalRead(BOTON_1)==LOW)
          {
            delay (200);
            tamano=1;
            flag_BOTON_2=1;
            flag_MENU=1;
            lcd.clear();
          }
          if (digitalRead(BOTON_2)==LOW)
          {
            delay (200);
            tamano=2;
            flag_BOTON_2=1;
            flag_MENU=1;
            lcd.clear();
          }
          if (digitalRead(BOTON_3)==LOW)
          {
            delay (200);
            tamano=3;
            flag_BOTON_2=1;
            flag_MENU=1;
            lcd.clear();
          }
        }
      }
      if (digitalRead(BOTON_3)==LOW)
        {
        delay (200);
        flag_BOTON_3=0;
        lcd.clear();
        lcd.print("AGREGAR ALARMA: HH:MM");
        while(flag_BOTON_3==0)
        {
        // aqui configuraria mi alarma que se repite siempre a dicha hora
        // BOTON_1 sube horas, BOTON_2 sube minutos
        // boton enter confima la hora
        }
        }
      if (digitalRead(MENU)==LOW) {
        delay (200);
        flag_MENU=1;
        lcd.clear();
      }  
    }
  }
}
23/04/2016 #4

Avatar de TRILO-BYTE

hijoles es el problema de buscar una libreria funcional, la misma hoja de datos dice que comandos sirven para cargar los datos al reloj e incluso usar los bancos de RAM que posee.

lo que yo haria seria

hacer el programa principar que cargue y cambie los datos sean horas, minutos y segundos dentro de una variable que use el microcontrolador.

cuando estemos seguros de que la hora es la que queremos ahora si ese registro va directo al DS1307.
23/04/2016 #5
Moderador

Avatar de D@rkbytes

yorsk2004 dijo: Ver Mensaje
2. ¿Cómo puedo configurar la hora del RTC tal como lo haría en un reloj digital mediante tres pulsadores?
Uno aumenta la hora de 00 a 23 y vuelve otra vez, el otro los minutos de 00 a 59 y vuelve otra vez y el tercer botón confirma que ya hicimos la respectiva configuración.
Yo lo hice con tres pulsadores pero con PIC y en C de CCS.

La base del programa te puede servir:
Código PHP:
      if(!input(pin_sel))
      {
         
selec++;
         
flag_sel 1;
         
         if(
selec 7selec 1;
         
printf(lcd_putc,"\fOPCION No. %02u",selec);
         
         switch (
selec)
         {
            case 
1:
               
lcd_gotoxy(1,2);
               
lcd_putc("HORAS");
               break;
            case 
2:
               
lcd_gotoxy(1,2);
               
lcd_putc("MINUTOS");
               break;
            case 
3:
               
lcd_gotoxy(1,2);
               
lcd_putc("SEGUNDOS");
               break;
            case 
4:
               
lcd_gotoxy(1,2);
               
lcd_putc("DIA DE LA SEMANA");
               break;
            case 
5:
               
lcd_gotoxy(1,2);
               
lcd_putc("DIA DEL MES");
               break;
            case 
6:
               
lcd_gotoxy(1,2);
               
lcd_putc("MES");
               break;
            case 
7:
               
lcd_gotoxy(1,2);
               
lcd_putc("AÑO");
         }
         
         while(!
input(pin_sel));
         
delay_ms(100);
         
lcd_putc("\f");
         
flag_sel 0;
      }
         
      switch (
selec)
      {
         case 
1:  // Modificar las horas.
            
if(!input(pin_dec))
            {  
// Decremento de las horas.
               
hrs--;
               
delay_ms(250);
               if(
hrs 23hrs 23
               
escribir_ds1307();
               
leer_ds1307();
            }
            
            if(!
input(pin_inc))
            {  
// Incremento de las horas.
               
hrs++;
               
delay_ms(250);
               if(
hrs 23hrs 0
               
escribir_ds1307();
               
leer_ds1307();
            }
               break;
         case 
2:  // Modificar los minutos.
            
if(!input(pin_dec))
            {  
// Decremento de los minutos.
               
min--;
               
delay_ms(250);
               if(
min 59min 59
               
escribir_ds1307();
               
leer_ds1307();
            }

            if(!
input(pin_inc))
            {  
// Incremento de los minutos.
               
min++;
               
delay_ms(250);
               if(
min 59min 0
               
escribir_ds1307();
               
leer_ds1307();
            }
            break;
         case 
3:  // Modificar los segundos:
            
if(!input(pin_dec) || !input(pin_inc))
            {  
// Cualquiera de esos pulsadores pondrá los segundos en 0.
               
sec 0;
               
escribir_ds1307();
               
leer_ds1307();
            }
            break;
         case 
4:  // Modificar el día de la semana.
            
if(!input(pin_dec))
            {  
// Decremento del día de la semana.
               
dow--;
               
delay_ms(250);
               if(
dow 6dow 6
               
escribir_ds1307();
               
leer_ds1307();
            }

            if(!
input(pin_inc))
            {  
// Incremento del día de la semana.
               
dow++;
               
delay_ms(250);
               if(
dow 6dow 0
               
escribir_ds1307();
               
leer_ds1307();
            }
            break;
         case 
5:  // Modificar el día del mes.
            
if(!input(pin_dec))
            {  
// Decremento del día del mes.
               
day--;
               
delay_ms(250);
               if(
day 1day 31
               
escribir_ds1307();
               
leer_ds1307();
            }

            if(!
input(pin_inc))
            {  
// Incremento del día del mes.
               
day++;
               
delay_ms(250);
               if(
day 31day 1
               
escribir_ds1307();
               
leer_ds1307();
            }
            break;
         case 
6:  // Modificar el mes.
            
if(!input(pin_dec))
            {  
// Decremento del mes.
               
month--;
               
delay_ms(250);
               if(
month 1month 12
               
escribir_ds1307();
               
leer_ds1307();
            }

            if(!
input(pin_inc))
            {  
// Incremento del mes.
               
month++;
               
delay_ms(250);
               if(
month 12month 1
               
escribir_ds1307();
               
leer_ds1307();
            }
            break;
         case 
7:  // Modificar el año.
            
if(!input(pin_dec))
            {  
// Decremento del año.
               
year--;
               
delay_ms(250);
               if(
year 100year 100
               
escribir_ds1307();
               
leer_ds1307();
            }

            if(!
input(pin_inc))
            {  
// Incremento del año.
               
year++;
               
delay_ms(250);
               if(
year 100year 0
               
escribir_ds1307();
               
leer_ds1307();
            }
      } 
Usa retardos por simplicidad, pero como el RTC está basado en un DS1307, tiene su propio reloj, y el muestreo está basado en una interrupción externa, el uso de retardos para antirrebote, no afecta para nada.

PD: También usé el módulo; Tyny RTC I2C
Y aprovechando el tema, lo tuve que modificar porque no funcionaba el oscilador.
Coloqué 1 capacitor de 22 pF. al cristal de 32,768 Hz. en cada pin y hacia tierra.

La letra "Ñ" no se muestra como debe de ser en el display, pero se repara por código de carácter personalizado.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Dudas en general

Aquí se tratan todos los temas relacionados con la electrónica en general.

Cerrar
Foros de Electrónica » Temas de Interés » Dudas en general

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.