Go Down

Topic: [resuelto] RTC problema reseteo (Read 606 times) previous topic - next topic

barrazita2

May 28, 2014, 09:48 am Last Edit: Jun 03, 2014, 03:53 am by barrazita2 Reason: 1
Hola gente, estoy haciendo un proyecto para un monitoreo de temperatura con un RTC DS1307.

El problema es el modulo que me reseta la hora que tenia.
Al momento de cargar el codigo a la placa la hora queda programada con la hora de mi computadora, hasta aqui todo bien.
El problema viene cuando desconecto el arduino de la alimentacion o se le aplica un reset a la placa.
La hora que me muestra el RTC es la ultima hora en la que la placa fue programada, y no me sigue con el conteo normal.

Aqui les muestro el codigo.

Code: [Select]
 
#include <Ethernet.h>
#include <SPI.h>
#include <Wire.h>
#include "RTClib.h"
#include <SD.h>

int lm35 = A0;  //  Entrada analógica A0 para leer sensor
float temp=0;
int lastTime = -1;
const int chipSelect = 4;
#define ref 1.1 //voltaje de referencia

RTC_DS1307 RTC;

byte mac[] = {
 0x90, 0xA2, 0xDA, 0x0E, 0xCB, 0xFF };
IPAddress ip(192,168,1,20);
EthernetServer server(80);

void setup(){
 Serial.begin(9600);
 Ethernet.begin(mac, ip);
 server.begin();
 Wire.begin();
 RTC.begin();
 RTC.adjust(DateTime(__DATE__, __TIME__));
 Serial.print("Inicia SD card...");
 pinMode(10, OUTPUT);
 Serial.print("server ip ");
 Serial.println(Ethernet.localIP());
if (!SD.begin(chipSelect)) {
   Serial.println("Card failed, or not present");
      return;
 }
}

                       /*programa principal*/

void loop(){
DateTime now = RTC.now();                              // get time from RTC
int time = now.second();

if (abs(time - lastTime) > 5)
 {
   File dataFile = SD.open("datalog.CSV", FILE_WRITE);

if (dataFile) {
     dataFile.print(now.day(), DEC);
     dataFile.print('/');
     dataFile.print(now.month(), DEC);
     dataFile.print('/');
     dataFile.print(now.year(), DEC);
     dataFile.print(" , ");
     dataFile.print(now.hour(), DEC);
     dataFile.print(':');
     dataFile.print(now.minute(), DEC);
     dataFile.print(" , ");
     dataFile.println((float)temp);
     dataFile.close();
     // print to the serial port too:
     Serial.print("Temperatura = ");
     Serial.println(temp);
   }  
   // if the file isn't open, pop up an error:
   else {
     Serial.println("error opening datalog.CSV");
   }
   lastTime = time;
 }
 
/*Start HTTP server*/
EthernetClient client = server.available();
 if (client) {
   Serial.println("new client");  // an http request ends with a blank line
   boolean currentLineIsBlank = true;
   while (client.connected()) {
     if (client.available()) {
       char c = client.read();
       Serial.write(c);
       // if you've gotten to the end of the line (received a newline
       // character) and the line is blank, the http request has ended,
       // so you can send a reply
       if (c == '\n' && currentLineIsBlank) {
         // send a standard http response header
         client.println("HTTP/1.1 200 OK");
         client.println("Content-Type: text/html");
         client.println("Connection: close");  // the connection will be closed after completion of the response
 client.println("Refresh: 5");  // refresh the page automatically every 5 sec
         client.println();
         client.println("<!DOCTYPE HTML>");
         client.println("<html>");
         
         analogReference(INTERNAL);
         temp=analogRead(lm35);  // lectura del sensor
         temp=(temp*ref*1000.0)/1023.0; // conversion de la lectura
         temp=(temp*100.0)/1000.0;
         delay(200);
         
         client.print(now.day(), DEC);
         client.print('/');
         client.print(now.month(), DEC);
         client.print('/');
         client.print(now.year(), DEC);
         client.print(' ');
         client.print(now.hour(), DEC);
         client.print(':');
         client.print(now.minute(), DEC);
         client.println("<br />");
         client.print("Arduino Webserver");
         client.println("<br />");
         client.print("Temperatura(C): ");
         client.print(temp);
         client.println("<br />");
         
         client.println("</html>");
         break;
       }
       if (c == '\n') {
         // you're starting a new line
         currentLineIsBlank = true;
       }
       else if (c != '\r') {
         // you've gotten a character on the current line
         currentLineIsBlank = false;
       }
     }
   }
   // give the web browser time to receive the data
   delay(1);
   // close the connection:
   client.stop();
   Serial.println("client disonnected");
 }
}


Saludos

noter

Has probado a quitar el rtc.adjust del setup?

maxid

El que pregunta aprende, el que responde aprende a responder.

c-agua

Buenas tardes:

El problema que tienes es esta linea:
RTC.adjust(DateTime(__DATE__, __TIME__));

Esta linea hace que se carge la fecha y hora del PLC en el RTC. Solamente debes de usarla para sincronizar tu RTC con la fecha y hora de tu PC. Despues la comenta, descargas de nuevo la aplicacion y listo.

Un saludo

barrazita2


tiene pila?

si tiene la pila, saludos


Buenas tardes:

El problema que tienes es esta linea:
RTC.adjust(DateTime(__DATE__, __TIME__));

Esta linea hace que se carge la fecha y hora del PLC en el RTC. Solamente debes de usarla para sincronizar tu RTC con la fecha y hora de tu PC. Despues la comenta, descargas de nuevo la aplicacion y listo.

Un saludo


Gracias por la sugerencia, probare y luego comento como quedo el asunto.

barrazita2

Ya quedo resuelto el problema.

Muchas gracias por su ayuda  :)

Go Up