Practica 10 Una Aplicación Del Ds1307 Rtc

download Practica 10 Una Aplicación Del Ds1307 Rtc

of 15

Transcript of Practica 10 Una Aplicación Del Ds1307 Rtc

  • 5/24/2018 Practica 10 Una Aplicaci n Del Ds1307 Rtc

    1/15

    UNA APLICACIN DELDS1307 RTC

    Serie Bus I2C

    Hoy: Domingo, 16 Marzo 2014, Incluir enfavoritos,para volver avisitarnos. Creado por: V. Garca.

    PRACTICO RELOJ.

    En el tutorialds1307relojya puse de manifiesto las caractersticas y algunascapacidades de este pequeo y prctico dispositivo, en el que document el cdigo que

    permita poner en hora el reloj que soporta el dispositivo DS1307.

    Ahora, tratar de llevar a cabo un proyecto en el que podamos dar cierta utilidad a las

    posibilidades que ofrece esta pequea maravilla (es cierto que el mismo fabricante,dispone de productos ms especializados con los que, se puede disponer de ms

    opciones de lectura de los registros que pone a nuestro servicio, alarmas, cronmetros y

    ms), sin embargo como el nico que tengo a mano es el DS1307A (*), es con el quevoy a realzar esta prctica.

    Partiendo del montaje que se desarroll en el mencionadods1307reloj, voy aintroducir unas variables y rutinas en el cdigo descrito all para mejorar las

    prestaciones que nos proporciona y podemos aprovechar a nuestra voluntad.

    http://addbookmark%28%29/http://addbookmark%28%29/http://addbookmark%28%29/http://www.hispavila.com/3ds/atmega/ds1307reloj.htmlhttp://www.hispavila.com/3ds/atmega/ds1307reloj.htmlhttp://www.hispavila.com/3ds/atmega/ds1307reloj.htmlhttp://www.hispavila.com/3ds/atmega/ds1307reloj.htmlhttp://www.hispavila.com/3ds/atmega/ds1307reloj.htmlhttp://www.hispavila.com/3ds/atmega/ds1307reloj.htmlhttp://www.hispavila.com/3ds/atmega/ds1307reloj.htmlhttp://www.hispavila.com/3ds/atmega/ds1307reloj.htmlhttp://addbookmark%28%29/
  • 5/24/2018 Practica 10 Una Aplicaci n Del Ds1307 Rtc

    2/15

    Como se desprende de la foto, realic este montaje sobre una pequea porcin de

    placa preformada, para dar una ms rpida solucin al proyecto. A pesar de todo, la

    exactitud del reloj obtenido, es digna de tener en cuenta, vengo observando que, laderiva despus de tres meses es de 1 segundo, aunque no puedo 'afinar' ms dado que la

    referencia que utilizo es el reloj de mi PC.

    Este montaje est basado en el esquema del propio Dallas, actualmenteMaxim,

    que es el siguiente:

    http://www.maxim-ic.com/http://www.maxim-ic.com/http://www.maxim-ic.com/http://www.maxim-ic.com/
  • 5/24/2018 Practica 10 Una Aplicaci n Del Ds1307 Rtc

    3/15

    Como se aprecia es muy sencillo, el dispositivo ms critico, como siempre es el cristal

    de cuarzo, la exactitud del reloj depende casi exclusivamente de este dispositivo.

    Personalmente recomiendo siempre que sea posible uno de los que llevan los relojes depulsera que tengamos en desuso, estar bien por que aprovecharemos un producto

    probado y nos resulta econmico, por otra parte cumple los requisitos bsicos, tiene una

    frecuencia fundamental de oscilacin perfectamente calibrada a los 32.768 kHz, encuanto a la estabilidad, es conveniente soldar la cpsula a masa de forma que no

    adquiera una alta temperatura al soldarla, para no producir alteraciones en la pastilla de

    cuarzo.

    Caractersticas.

    Las caractersticas del proyecto que emprendemos, pueden ser mejoradas tantas veces

    como le parezca necesario al interesado, sin embargo por el momento son las

    siguientes:

    1.- Puesta en hora y fecha, para iniciar el reloj, mediante laintroduccin de los datos

    anteponiendo una "T", en la forma: T(seg) (min)

    (hora)(da s)(da) (mes) (ao)T(00-59)(00-59)(00-23)

    (1-7) (01-31)(01-12)(00-99).2.- Podemos consultar el contenido de la memoria, en

    pantalla, mediante Q y el parmetro (1 o 2)(1- Consultar Memoria y 2- Volcado de Memoria del RTC).

    3.- Consultar la fecha mediante el parmetro L, podemos leerla fecha y la hora actual.

    4.- Al mismo tiempo nos indicar la onomstica de algnfamiliar o la fiesta del da.

    ....n-1.- El interesado, puede usar la caracterstica de

    cronmetro, mediante su propio cdigo.

  • 5/24/2018 Practica 10 Una Aplicaci n Del Ds1307 Rtc

    4/15

    El cdigo.

    En principio, vamos a utilizar el mismo cdigo mencionado del ejemplo

    anterior,ds1307reloj,al que iremos ampliando en cada nuevo parmetro. Respecto al

    cdigo, le doy la versin 2, debido a las mejoras introducidas por mi, si bien es cierto

    que me apoyo en rutinas que extraigo de distintas partes (vamos que, como dice aquel"no fabrico los ladrillos, ni las ventanas, ni los utensilios de bao, para construir el

    edificio, y sin embargo, el mrito es del arquitecto").

    /** RTC Control v.01* by John Vaughters* Credit to:* Maurice Ribble - http://www.glacialwanderer.com/hobbyroboticsfor RTC DS1307 code** Con este cdigo se puede establecer la fecha y la hora,recuperar la fecha y la hora* y usar la memoria adicional de un chip DS1307 RTC.

    * El programa tambin pone todo el espacio de memoriasuplementaria a 0xff.* mtodo de Comunicacin Serie con el Arduino que, utiliza unCarcter Mayscula para cada* orden descrita a continuacin. Ahora tambin, admite elcarcter q (minscula).* Comandos: T(00-59)(00-59)(00-23)(1-7)(01-31)(01-12)(00-99)** T(sec)(min)(hour)(dayOfWeek)(dayOfMonth)(month)(year) - Tpone la fecha del chip RTC DS1307.* Ejemplo para poner la fecha y hora: 02-Feb-09 @ 19:57:11para el da 3 de la semana,* use la orden - T1157193020209 // T11 57 19 3 02 02 09.* Q(1-2) -:- (Q1) Consulta Memoria (Q2) RTC - VolcadoMemoria* mm:ss:hh:ds:DD:MM:AA* T20:11:18: 4:15:10:09

    * T2011184151009 otro: T4034195251209* ultimo: T4052001110110** Modificado el: 19-09-2009.* by V. Garca v.01.2 ** Ahora, puedes leer la hora y da de la fecha con introducir lo L* Para poner en hora y la fecha del chip RTC DS1307, usa t o T:* ss:mm:hh:ds:DD:MM:AA* T20:11:18: 4:15:10:09* ultimo: T4052001110110** El cdigo funciona bien,** Modificado el: 11-01-2010.* by V. Garca v.02

    **/#include "Wire.h"#define DS1307_I2C_ADDRESS 0x68 // Esta es la address I2C// Variables Globales RTC

    int command = 0; // Es el comando de carcter, en formatoASCII, enviados desde el puerto serieint i;long previousMillis = 0; // almacenar la ltima vez que Tempse ha actualizadobyte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

    http://www.hispavila.com/3ds/atmega/ds1307reloj.htmlhttp://www.hispavila.com/3ds/atmega/ds1307reloj.htmlhttp://www.hispavila.com/3ds/atmega/ds1307reloj.htmlhttp://www.hispavila.com/3ds/atmega/ds1307reloj.html
  • 5/24/2018 Practica 10 Una Aplicaci n Del Ds1307 Rtc

    5/15

    byte test;int ledpin = 13; // activa el LED cada consulta

    // Convierte nmeros decimales normales a binario codificadodecimalbyte decToBcd(byte val){return ( (val/10*16) + (val%10) );

    }

    // Convierte binario codificado decimal a nmeros decimalesnormalesbyte bcdToDec(byte val){return ( (val/16*10) + (val%16) );

    }

    // 1) Establece la fecha y la hora en el ds1307// 2) Inicia el reloj// 3) Establece el modo de hora de reloj a 24 horas// Se supone que est pasando nmeros vlidos, probablemente// tendr que controlar poner nmeros vlidos.

    void setDateDs1307() {// Uso de (byte) tipo de conversin ASCII y matemticas para

    alcanzar el resultado.

    second = (byte) ((Serial.read() - 48) * 10 + (Serial.read() -48));

    minute = (byte) ((Serial.read() - 48) * 10 + (Serial.read() -48));

    hour = (byte) ((Serial.read() - 48) * 10 + (Serial.read() -48));

    dayOfWeek = (byte) (Serial.read() - 48);dayOfMonth = (byte) ((Serial.read() - 48) * 10 +

    (Serial.read() - 48));month = (byte) ((Serial.read() - 48) * 10 + (Serial.read() -

    48));year = (byte) ((Serial.read() - 48) * 10 + (Serial.read() -

    48));Wire.beginTransmission(DS1307_I2C_ADDRESS); // Empieza

    transmisin.

    Wire.send(0x00);Wire.send(decToBcd(second)); // 0 a bit 7 Inicia el relojWire.send(decToBcd(minute));Wire.send(decToBcd(hour)); // Si quiere 12 horas am/pm

    tiene que poner// bit 6 (tambin tiene que

    cambiar readDateDs1307)Wire.send(decToBcd(dayOfWeek));Wire.send(decToBcd(dayOfMonth));Wire.send(decToBcd(month));Wire.send(decToBcd(year));Wire.endTransmission(); // Termina transmisin

    }

    // Extrae la fecha y el tiempo del ds1307 e imprime el resultado void getDateDs1307(){// Resetea el registro punteroWire.beginTransmission(DS1307_I2C_ADDRESS);Wire.send(0x00);Wire.endTransmission();

    Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

    // Alguna necesitar enmascarar porque ciertos bits son bitsde controlsecond = bcdToDec(Wire.receive() & 0x7f);minute = bcdToDec(Wire.receive());hour = bcdToDec(Wire.receive() & 0x3f); // Tiene que

    cambiar esto para 12 hora am/pm.

  • 5/24/2018 Practica 10 Una Aplicaci n Del Ds1307 Rtc

    6/15

    dayOfWeek = bcdToDec(Wire.receive());dayOfMonth = bcdToDec(Wire.receive());month = bcdToDec(Wire.receive());year = bcdToDec(Wire.receive());

    if (hour < 10) Serial.print("0");Serial.print(hour, DEC);Serial.print(":");

    if (minute < 10) Serial.print("0");Serial.print(minute, DEC);Serial.print(":");if (second < 10) Serial.print("0");Serial.print(second, DEC);Serial.print(" ");if (dayOfMonth < 10) Serial.print("0");Serial.print(dayOfMonth, DEC);Serial.print("-");

    // if (month < 10) Serial.print("0"); // esto para poner mesde 01 a 12// Serial.print(month, DEC);

    switch (month) // pone el nombre en e del mes{case 1: Serial.print("Ene"); break;

    case 2: Serial.print("Feb"); break;case 3: Serial.print("Mar"); break;case 4: Serial.print("Abr"); break;case 5: Serial.print("May"); break;case 6: Serial.print("Jun"); break;case 7: Serial.print("Jul"); break;case 8: Serial.print("Ago"); break;case 9: Serial.print("Sep"); break;case 10: Serial.print("Oct"); break;case 11: Serial.print("Nov"); break;case 12: Serial.print("Dic"); break;}

    Serial.print("-");Serial.print("20");if (year < 10) Serial.print("0");Serial.print(year, DEC);// Serial.print(" Hoy es:"); // Da de la semana:

    switch (dayOfWeek) // Esto pone nombre del da{case 1: Serial.println(" Lunes"); break;case 2: Serial.println(" Martes"); break;case 3: Serial.println(" Miercoles"); break;case 4: Serial.println(" Jueves"); break;case 5: Serial.println(" Viernes"); break;case 6: Serial.println(" Sabado"); break;case 7: Serial.println(" Domingo"); break;}

    }

    //void lectura(){// ==== modificado, puesto aqu para que lea bienint hour;int minute;int second;int month;int dayOfWeek;int dayOfMonth;int year;// ====

    // Below required to reset the register address to 0.Wire.beginTransmission(104); // transmit to device #104, theds1307Wire.send(0x00);

  • 5/24/2018 Practica 10 Una Aplicaci n Del Ds1307 Rtc

    7/15

    Wire.endTransmission(); // stop transmitting

    Wire.requestFrom(104, 7); // request 7 bytes from slaveds1307,

    we'll assume it'll send them all eventhough it doesn't have tosecond = Wire.receive();minute = Wire.receive();

    hour = Wire.receive();dayOfWeek = Wire.receive();dayOfMonth = Wire.receive();month = Wire.receive();year = Wire.receive();

    // Convertir todos los valores BCD que podrn tener "decenas" adecimal.// Mucha gente en arduino hace esto w/shits pero esto solamentelo veo ms fcil.hour=hour/16 * 10 + hour % 16;minute=minute/16 * 10 + minute % 16;second=second/16 * 10 + second % 16;dayOfMonth=dayOfMonth/16 * 10 + dayOfMonth % 16;month=month/16 * 10 + month % 16;year=2000 + year/16 * 10 + year % 16;

    // Algunas fiestasSerial.print ("HOLA, hoy es: ");if (month == 12 && dayOfMonth == 25){ Serial.println ("NAVIDAD

    "); }if (month == 12 && dayOfMonth == 31){ Serial.println ("FIN DE

    A? "); }if (month == 01 && dayOfMonth == 01){ Serial.println ("FELIZ

    A? NUEVO "); }if (month == 03 && dayOfMonth == 17){ Serial.println ("S.

    JOSE, FALLAS "); }// if (month == XX && dayOfMonth == XX){ Serial.print ("Pon elcumple de xxx "); }

    if (year < 10) { Serial.print("0"); }Serial.print(year);Serial.print("-");if (month < 10) { Serial.print("0"); }

    Serial.print(month);Serial.print("-");if (dayOfMonth < 10) { Serial.print("0"); }Serial.print(dayOfMonth);Serial.print(" ");if (hour < 10) { Serial.print("0"); }Serial.print(hour);Serial.print(":");if (minute < 10) { Serial.print("0"); }Serial.print(minute);Serial.print(":");if (second < 10) { Serial.print("0"); }Serial.print(second);Serial.print(" ");

    // Serial.print(" "); // Esto pone nombre del da de lasemana:switch (dayOfWeek) {

    case 1: Serial.println(" Lunes"); break;case 2: Serial.println(" Martes"); break;case 3: Serial.println(" Miercoles"); break;case 4: Serial.println(" Jueves"); break;case 5: Serial.println(" Viernes"); break;case 6: Serial.println(" Sabado"); break;case 7: Serial.println(" Domingo"); break;}

    delay(1000); // espera 1 segundo.}

  • 5/24/2018 Practica 10 Una Aplicaci n Del Ds1307 Rtc

    8/15

    void setup() {Wire.begin();Serial.begin(57600);pinMode(ledpin, OUTPUT); // para el LED

    }

    void loop() {

    if (Serial.available()) // busca carcter en serie yprocesa si se encuentra

    {command = Serial.read();if (command == 84 or command == 116) // Si command = "T" o

    "t" xa establecer fecha{setDateDs1307();getDateDs1307();Serial.println(" ");

    }else if (command == 81 or command == 113) //Si command =

    "Q" o "q" funciones de memoria{delay(50);if (Serial.available()){

    command = Serial.read();if (command == 49) // Si command = "1" RTC1307

    Inicializa Memoria -{ // Todos los datos se establecen en

    255 (0xff).// Por lo tanto 255 o 0 ser un

    valor no vlido.//255 ser el valor de inicio y 0 ser

    considerado un errorWire.beginTransmission(DS1307_I2C_ADDRESS);

    // que se produce cuando el RTC estnmodo de batera.

    Wire.send(0x08);// Ajusta el registro puntero un pocoms all los registros de fecha/hora.

    for (i = 1; i

  • 5/24/2018 Practica 10 Una Aplicaci n Del Ds1307 Rtc

    9/15

    lectura();}

    }

    command = 0; // reset commanddelay(70);

    }

    //*****************************************************TheEnd***********************/

    Que hace el cdigo.

    A pesar de que est muy comentado el cdigo, conviene describir un poco, algunas

    rutinas del cdigo, para recalcar su importancia. La siguiente lnea, se hace la llamada a

    las libreras implicadas en el desarrollo del proyecto, este paso no siempre es necesario,sin embargo, es conveniente acostumbrarse a utilizarlo para evitar sorpresas al

    interpretar los mensajes de error que puedan producirse al procesar el cdigo.

    #include"Wire.h"

    La siguiente lnea (en este caso), le indica al compilador la direccin donde debe

    empezar la lectura de datos del DS1307A que es, 104 en decimal, en hex 68hy en

    binario b1101000. El lector, debe tener muy en cuenta, lo que recomienda el fabricante

    en sus Hojas de Datos, evitando as quebraderos de cabeza.

    #defineDS1307_I2C_A

    DDRESS 0x68// Esta esla addressI2C

    A partir de aqu se presentan las declaraciones de variables generales

    //VariablesGlobalesint

    command = 0;// Es elcomando de

    carcter, enformatoASCII,enviadosdesde elpuerto serieint i;long

    previousMillis = 0; //almacenarla ltima

  • 5/24/2018 Practica 10 Una Aplicaci n Del Ds1307 Rtc

    10/15

    vez que Tempse haactualizadobyte

    second,minute,hour,dayOfWeek,

    dayOfMonth,month, year;byte test;

    Es una buena prctica, distribuir las rutinas, despus de las declaraciones de variables,

    antes de la configuracin de estados o setup();.

    Se deben resaltar, las subrutinas de conversin de decimal a binario y viceversa,

    ambas las podemos ver en:

    //Conviertenmeros

    decimalesnormales abinariocodificadodecimalbyte

    decToBcd(byte val){return (

    (val/10*16)+ (val%10));}//

    Conviertebinario

    codificadodecimal anmerosdecimalesnormalesbyte

    bcdToDec(byte val){return (

    (val/16*10)+ (val%16));}

    No menos importante es la subrutina matemtica de (byte) tipo de conversin ASCII(que interpretar los datos ledos a dgitos caractersticos de presentacin de la fecha),presente en el cdigo como:

    second =(byte)((Serial.read() - 48) *10 +

  • 5/24/2018 Practica 10 Una Aplicaci n Del Ds1307 Rtc

    11/15

    (Serial.read() - 48));

    minute= (byte)((Serial.read() - 48) *10 +(Serial.read

    () - 48));hour= (byte)((Serial.read() - 48) *10 +(Serial.read() - 48));

    dayOfWeek =(byte)(Serial.read() - 48);

    dayOfMonth =(byte)((Serial.rea

    d() - 48) *10 +(Serial.read() - 48));

    month= (byte)((Serial.read() - 48) *10 +(Serial.read() - 48));

    year= (byte)((Serial.read() - 48) *10 +(Serial.read

    () - 48));

    Wire.beginTransmission(DS1307_I2C_ADDRESS); //Empiezatransmisin.

    Wire.send(0x00);

    Wire.send(decToBcd(second)); // 0a bit 7Inicia el

    reloj

    Wire.send(decToBcd(minute));

    Wire.send(decToBcd(hour)); // Siquiere 12horas am/pm

  • 5/24/2018 Practica 10 Una Aplicaci n Del Ds1307 Rtc

    12/15

    tiene queponer

    // bit 6(tambintiene quecambiarreadDateDs13

    07)

    Wire.send(decToBcd(dayOfWeek));

    Wire.send(decToBcd(dayOfMonth));

    Wire.send(decToBcd(month));

    Wire.send(decToBcd(year));

    Wire.endTransmission();// Terminatransmisin

    Por cierto, observemos que, para leer de un dispositivo, se inicia con un comando

    como:

    Wire.beginTransmission(DS1307_I2C_ADDRESS)

    ...

    ...

    y debe terminar con el correspondiente:Wire.endTransmission(); para cerrar la transmisin. Esto es muy importante.

    Otra rutina interesanteen este proyecto es la que se encarga de extraer la fecha y el

    tiempo del registro interno del ds1307 y que nos permite imprimir el resultado, se trata

    de la rutina siguiente:

    void getDateDs1307(){// Primero resetea el registro punteroWire.beginTransmission(DS1307_I2C_ADDRESS);Wire.send(0x00); // pone todo a cero.Wire.endTransmission();// luego requiere la lectura de los primeros 7bytes, donde

    estn los datos que necesitamos.Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

    // Alguna orden necesitar enmascarar porque ciertos bitsson bits de control

    second = bcdToDec(Wire.receive() & 0x7f);minute = bcdToDec(Wire.receive());hour = bcdToDec(Wire.receive() & 0x3f); // Tiene que

    cambiar esto para 12 hora am/pm.dayOfWeek = bcdToDec(Wire.receive());dayOfMonth = bcdToDec(Wire.receive());month = bcdToDec(Wire.receive());year = bcdToDec(Wire.receive());

  • 5/24/2018 Practica 10 Una Aplicaci n Del Ds1307 Rtc

    13/15

    ...}

    A este cdigo, le sigue una forma de presentacin de los datos extrados y que cada

    cual puede mostrar como mejor le parezca, siempre respetando las reglas de cdigo.

    Entre los datos se pueden mostrar los segundos, minutos, horas, da de la semana y laforma de fecha tradicional de cada zona horaria. A este respecto, debo indicar que

    aunque en principio no se aprecie, el modo que se deber utilizar, por sus ventajas es elde AA-MM-DD, en lugar de dd-mm-aa. A la hora de ordenar una lista de fechas,

    viene a demostrar su importancia.

    Quiero resaltar que he dado nombre a los meses y los das de la semana en espaol y

    otra particularidad es el hecho de mostrar el mensaje de la festividad del da o la

    atencin recordatoria de la onomstica de alguna persona afn, cuando pongo:

    // Algunas fiestasSerial.print ("HOLA, hoy es: ");

    if (month == XX && dayOfMonth == XX){ Serial.print ("Pon elcumple de tu pareja "); }

    Observar la variante de la orden Serial.print(" ");que muestra el contenido que hay

    entre las comillas y/o el valor de la variable y sigue en la misma lnea, en cambio la

    orden Serial.println(" ");que muestra el contenido que hay entre las comillas y/o elvalor de la variable y sigue con un fin de lnea y un salto de lnea (CR/CL).

    Por Ej. de Serial.print():

    intb = 79;

    Serial.print(b, DEC) // muestra o enva el valor de b como un nmero decimal encaracteres ASCII. Mostrar la cadena "79"

    Serial.print(b, HEX) // muestra o enva el valor de b como un nmero nmero (79)decimal, en valor hexadecimal "4F".

    Serial.print(b, OCT) // muestra o enva el valor de b como un nmero nmero (79)

    decimal, en valor octal "117".Serial.print(b, BIN) // muestra o enva el valor de b como un nmero nmero (79)

    decimal, en valor binario "1001111".

    Sentencia SWITCH / case.

    El principiante, debe fijarse en la estructura de la sentencia SWITCH / casey en laforma que aqu se ha empleado. SWITCH, puede tomarse como interruptor o mejor,

    conmutador, ya que depende de la entrada, optar por dar una nica salida para esa

    entrada, si cambia el valor de la entrada as har la salida. Aqu, se aplica dos vecessucesivas, una para determinar el nombre del mes que corresponde y en segundo lugar

    para el nombre del da de la semana. En al primer caso el valor que adquiera la variable

    "month", determinar el nombre del mes, as mismo el valor que tome "dayOfWeek"determinar a su vez el nombre del da de la semana, parece fcil.

  • 5/24/2018 Practica 10 Una Aplicaci n Del Ds1307 Rtc

    14/15

    La novedad.

    Hasta este punto, podemos decir que ya estaba claro el listado del cdigo, la

    "novedad", reside en este punto que, hasta ahora, no podamos consultar la fecha y hora

    actuales, salvo que aplicramos un nuevo tiempoTen la entrada (que, por otra parte se

    antoja compleja). Aqu empieza la parte ms amigable de este reloj en tiempo real, yaque cada vez que deseemos conocer la hora actual, bastar con introducir el carcter

    "L" o en minsculas "l" de lectura y el programa responder mostrando en el monitor la

    fecha, hora y si lo hemos previsto la fiesta que le corresponde, ah esta la novedad.

    De esto se encarga la subrutina lectura();, el interesado puede revisar el cdigo paracomprender los pasos que se siguen para lograr este resultado.

    Aunque, para ser exactos, debe realizar unos pequeos 'retoques' al cdigo, para

    lograr el mismo resultado o incluso mejorarlo. En un prximo artculo, veremos cmo

    mejorar el cdigo. Se atreve alguien?.

    A tener en cuenta (nota del fabricante).

    Cuando el sistema se enciende, la posicin de RAM 0x3f ser comparada con el valor

    0x20. Si ste existe, entonces, esto quiere decir que la batera de reserva ha salvado el

    contenido de la RAM y todos los registros, por lo tanto, han sido inicializados.

    Entonces el software se salta la secuencia inicializacin.

    Si no se encuentra el valor 0x20 en dicha direccin, entonces el dispositivo Real Time

    Clock es inicializado a los valores siguientes:

    AddressValor

    Inicializacin

    0 Seconds0x59 (bit 7cleared).

    1 Minutes 0x59

    2 Hours0x24 (bit 6cleared).

    3 Day 0x07

    4 Date 0x31

    5 Month 0x12

    6 Year 0x99

  • 5/24/2018 Practica 10 Una Aplicaci n Del Ds1307 Rtc

    15/15

    Estos son todos los nmeros de cdigo binario decimal con

    que trabaja el dispositivo reloj de tiempo real. Tenga en cuenta que los valores de

    inicializacin se han elegido para que pueda entender lo que la pantalla est mostrando.

    Como siempre, comentarios, criticas y sugerencias para mejorar este artculo, son

    bienvenidos y apreciados.Esto es todo, por este simple tutorial, los que quieran leer ms sobre el tema Arduino,

    revele esta seccin. ( Mostrar/Ocultar)