Pages: [1]   Go Down
Author Topic: Novato con RTC DS1307 y Nokia lcd....no puedo ajustar año.  (Read 547 times)
0 Members and 1 Guest are viewing this topic.
Mijas costa-MALAGA
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola a todos,  estoy intentando construir un pequeño control de iluminacion para el terrario de un amigo,  en principio solo se trataria de controlar la iluminacion de una lampara creando dimeo para el amanecer y para el atardecer.
He decidido usar un lcd nokia 5110 para mostrar todo el proceso,arduino nano y un RTC  DS1307.
Mi problema es referente al RTC, estoy usando la libreria DS1307, conectado a los puertos A4 Y A5, funciona bien pero hay dos problemas:
1º-el relog atrasa unos 10 segundos al dia.
2º-no puedo ajustar el año.
No se si el problema es la libreria o es  mi programa, o es problema de hardware (RTC), o es que soy un garrulo ;-).
Espero que me ayudeis un poco .
Este es el pequeño programa que llevo asta ahora:

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 7, 6);
#include <DS1307.h>
#include <Wire.h>

#include <LCD5110_Graph.h>
LCD5110 myGLCD(3,4,5,6,7);
int rtc[7];
int x = 0;
int pin = 10;
 int horas = 0;
 int ano = 0;
 int dia = 0;
 int mes = 0;
 int minutos = 0;
 int count = 0;
#define DS1307_I2C_ADDRESS 0x68
uint8_t camaleon[] PROGMEM={
0x00, 0x08, 0x08, 0xF8, 0x08, 0x08, 0xC8, 0xA0, 0xA0, 0xA0, 0xC0, 0x00, 0x00, 0xE0, 0x20, 0x20,   // 0x0010 (16) pixels
0x00, 0xE0, 0x20, 0x20, 0x80, 0xA0, 0xA0, 0xE0, 0x00, 0xF0, 0x08, 0x08, 0x08, 0x10, 0x00, 0xC0,   // 0x0020 (32) pixels
0x20, 0x20, 0x20, 0xC0, 0x00, 0x00, 0xE0, 0x20, 0x20, 0xC0, 0x00, 0x20, 0xF0, 0x20, 0x00, 0x00,   // 0x0030 (48) pixels
0xE0, 0x20, 0x00, 0xC0, 0x20, 0x20, 0x20, 0xC0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0040 (64) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0050 (80) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x80,   // 0x0060 (96) pixels
0x00, 0x03, 0x00, 0x00, 0x00, 0x83, 0x80, 0x80, 0x03, 0x02, 0x02, 0x03, 0x00, 0x01, 0x02, 0x02,   // 0x0070 (112) pixels
0x02, 0x01, 0x00, 0x01, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00,   // 0x0080 (128) pixels
0x03, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x03, 0x02,   // 0x0090 (144) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x00A0 (160) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x18, 0x07,   // 0x00B0 (176) pixels
0x20, 0x00, 0x21, 0x3F, 0x20, 0x00, 0x20, 0x00, 0x1F, 0x20, 0x20, 0x20, 0x1F, 0x00, 0x00, 0x00,   // 0x00C0 (192) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0xF0, 0xF0, 0xF0, 0xF8, 0x78, 0x78, 0xFC, 0xFC,   // 0x00D0 (208) pixels
0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF8, 0xF0, 0xE0, 0xE0,   // 0x00E0 (224) pixels
0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x00F0 (240) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0100 (256) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x60, 0x68, 0x68, 0x68, 0x6C,   // 0x0110 (272) pixels
0xEC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xCE, 0xD6, 0xCE, 0xFF, 0xFF, 0xFE, 0xF8, 0xF1, 0xF8, 0xFE,   // 0x0120 (288) pixels
0xFE, 0xFE, 0xFC, 0xF9, 0xF3, 0xF7, 0xF3, 0xF9, 0xFC, 0xFE, 0xFE, 0xFE, 0xF8, 0x73, 0x77, 0x77,   // 0x0130 (304) pixels
0xF7, 0xFD, 0xFD, 0xFF, 0xFF, 0xFC, 0x71, 0x3F, 0x37, 0x3C, 0x78, 0x30, 0x20, 0x00, 0x00, 0x00,   // 0x0140 (320) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0150 (336) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x0160 (352) pixels
0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0xC3, 0xE3, 0x23, 0x13, 0x13, 0x0B, 0x31, 0xB1, 0x7D, 0x7D,   // 0x0170 (368) pixels
0x3D, 0x1B, 0x7D, 0x6D, 0x2D, 0x37, 0x37, 0x37, 0x37, 0x17, 0x17, 0x17, 0x0B, 0x0B, 0x09, 0x09,   // 0x0180 (384) pixels
0x08, 0x06, 0x1E, 0x3E, 0x3F, 0x1F, 0x07, 0x03, 0x01, 0x88, 0xC4, 0xE6, 0xE7, 0x6F, 0x6F, 0x7F,   // 0x0190 (400) pixels
0x7F, 0xFF, 0xFF, 0xFF, 0xFD, 0xF1, 0xC1, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x01A0 (416) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF0, 0xC8,   // 0x01B0 (432) pixels
0x4C, 0x64, 0x26, 0x16, 0x1A, 0x0B, 0x09, 0x0D, 0x05, 0x0C, 0x04, 0x06, 0x02, 0x02, 0x03, 0x01,   // 0x01C0 (448) pixels
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,   // 0x01D0 (464) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x1F, 0x3F, 0x39,   // 0x01E0 (480) pixels
0x71, 0x70, 0x63, 0x67, 0x77, 0x7E, 0x3D, 0x3F, 0x1F, 0x0F, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00,   // 0x01F0 (496) pixels
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};


void setup() {
  Wire.begin();
  delay(100);   
  Serial.begin(9600);
   myGLCD.InitLCD();
   myGLCD.setContrast(69);
   myGLCD.drawBitmap(0, 0, camaleon,84, 48);
   myGLCD.update();
   delay(8000);
  display.begin();
  display.setContrast(59);
  delay(100);
  display.clearDisplay();   // clears the screen and buffer
  digitalWrite(10,HIGH);
}
void loop(){
  inicio();}
void inicio(){ 
 
  display.clearDisplay();
  x = digitalRead(pin);
   if (x == LOW){
     ajustehora();
     delay(150);}

  display.drawRect( 0, 0, 84, 48, BLACK);
  display.drawLine(0, 18, 84, 18, BLACK);
  display.drawLine(0, 35, 84, 35, BLACK);
  RTC.get(rtc,true);
  display.setTextSize(0);
  display.setTextColor(BLACK);
  display.setCursor(18,2);
  display.print(rtc[DS1307_HR]);
  display.print(":");
  if (rtc[DS1307_MIN] < 10){
  display.print("0");}
  display.print(rtc[DS1307_MIN]);
  display.print(":");
  if (rtc[DS1307_SEC] < 10){
  display.print("0");}
  display.print(rtc[DS1307_SEC]);
  display.setCursor(12,10);
  display.print(rtc[DS1307_DATE]);
  display.print("/");
  if (rtc[DS1307_MTH] < 10){
    display.print("0");}
  display.print(rtc[DS1307_MTH]);
  display.print("/");
  display.print(rtc[DS1307_YR]);
  display.display();
  inicio();
 
}

void ajustehora(){
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.clearDisplay();
  display.drawRect( 0, 0, 84, 48, BLACK);
  display.drawRect( 1, 1, 82, 46, BLACK);
  display.setCursor(9,10);
  display.print("AJUSTE HORA");
  display.setCursor(18,25);
  display.print(horas);
  display.print(":");
  display.print(minutos);
  display.print(":");
  display.print("00");
 
   x = digitalRead(pin);
   if (x == HIGH){
     count++;}
     
     if (count < 1000){
       display.setCursor(20,30);
       display.print("-");
        display.display();
      }
       if (count > 1000){
       display.setCursor(38,30);
       display.print("-");
        display.display();
      }
       
     if (count > 1000 & x == LOW){
       display.setCursor(18,28);
       display.print("-");
       count--;
       display.display();
       delay(150);
       minutos++;
     }
     if (count > 2200){
       count=0;
     RTC.set(DS1307_SEC,0);
     RTC.set(DS1307_MIN,minutos);
     RTC.set(DS1307_HR,horas);
       fecha();}
     if (count < 1000 & x == LOW){
    count--;
    display.display();
    delay(150);
    horas++;}
    if (horas > 24){
      horas=0;}
      if (minutos > 59){
        minutos=0;
  }
  ajustehora();
}
 void fecha(){
   display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.clearDisplay();
  display.drawRect( 0, 0, 84, 48, BLACK);
  display.drawRect( 1, 1, 82, 46, BLACK);
  display.setCursor(7,10);
  display.print("AJUSTE FECHA");
  display.setCursor(18,25);
  display.print(dia);
  display.print("/");
  display.print(mes);
  display.print("/");
  display.print(2000+ano);
  display.display();
   x = digitalRead(pin);
   if (x == HIGH){
     count++;}
     if (count < 500){
       display.setCursor(19,30);
       display.print("-");
        display.display();}
       if (count > 1000 & count < 1500){
       display.setCursor(31,30);
       display.print("-");
        display.display();}
        if (count > 1500){
       display.setCursor(58,30);
       display.print("-");
        display.display();}
        if (count > 2200){
       count=0;
       RTC.set(DS1307_DATE,dia);
       RTC.set(DS1307_MTH,mes);
       RTC.set(DS1307_YR,2000+ano);
       inicio();}
       if (dia > 31){
      dia=1;}
      if (mes > 12){
        mes=1;}
       if (ano > 99){
        ano=0;}
       if (count < 1000 & x == LOW){
    count--;
    delay(150);
    dia++;}
       if (count > 1000 & count < 1500 & x == LOW){
    count--;
    delay(150);
    mes++;}
     if (count > 1500 & x == LOW){
    count--;
    delay(150);
    ano++;}
       fecha();
 }

Un cordial saludo.....
Logged

Euskadi
Offline Offline
God Member
*****
Karma: 16
Posts: 721
Arduinotarrak
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola,
divide y vencerás:
- yo me olvidaría del nokia, e intentaría hacer funcionar al rtc mostrando el resultado en consola
- luego, una vez que el rtc estuviera controlado, intentaría sacar el resultado por el lcd.

Logged

Mijas costa-MALAGA
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola curro92, ante todo agradecerte la respuesta,  es una buena idea eso de probar solo el rtc con la consola  pero creo recordar que lo hice y  tenia el mismo problema.
De todas formas voy a probar de nuevo, otra cosa rara es que tengo otro programa de una estacion meteorologica que funcionaba bien y ahora tambien atrasa y es imposible ajustar el año, empiezo a pensar que es probrema o bien del IDE que utilizo o de alguna libreria....no se ...me tiene un poco mareado el tema...y eso que es muy sencillo.
Sigo abierto a nuevas sugerencias....saludos y gracias.
Logged

Pages: [1]   Go Up
Jump to: