reloj con ds1307 y LCD de 20x4

Dependencies:   RTC-DS1307 TextLCD mbed

Fork of Rtc_Ds1307_Sample by Henry Leinen

main.cpp

Committer:
tony63
Date:
2016-05-01
Revision:
3:fda6508b1efc
Parent:
2:3be003301107

File content as of revision 3:fda6508b1efc:

/*
reloj con ds1307 para que el circuitotrabaje bien se hacen las siguientes recomendaciones
1. ponerle un cristal de un reloj de buena calidad no usar el cristal originalmente instalado..retirelo
2. retire las resistencias de superficie pull up que son R2 y R3
3.conforme un circuito externo con dos nuevas pull up de al menos 4.7k a una linea de alimentacion de 3,3v
4 coloque diodos in4148 con los anodos a masa y cada catodo conectado a las lineas sda y scl

si hace esto el circuito trabajara muy bien
antes de configurar parar el reloj y despues de configurar darle start al reloj, no lo olvide

el reloj se configura desde la pc
adicionalmente al ejemplo de mbed este programa imprime en una lcd y pide el dia ya que originalmente solo se
ajusta a un dia domingo

originalmente trabaja en modo 24 horas seria interesante trabajarlo a modo 12 horas haciendo uno la flag
bool thm = true;
de la libreria en la linea 64  Rtc_Ds1307,ccp
los registros son en bcd
segundos 00h
minutos  01h
horas    02h    bit 6 es el modo 24/12 --0/1.. y el bit 5 es el indicador si la hora es am/pm  0/1
dia      03h
date     04h
mes      05h
año      06h
control  07h
zona de ram 08h-3fh

*/

#include "mbed.h"
#include "Rtc_Ds1307.h"
#include "TextLCD.h"

TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5, TextLCD::LCD20x4); // rs, e, d4-d7
//RtcCls rtc(p28, p27, p29, true);
Rtc_Ds1307 rtc(PTE0, PTE1);

Serial pc(USBTX, USBRX, "pc");

char buffer[128];
int readptr = 0;
int segundos =0;

int main() {
    char c;
    Rtc_Ds1307::Time_rtc tm = {};
    
    while(1) {
        pc.printf("*************************************\n");
        pc.printf("* Menu for RTC Test :               *\n");
        pc.printf("* read  - reads the clock           *\n");
        pc.printf("* start - start the clock           *\n");
        pc.printf("* stop  - stop the clock            *\n");
        pc.printf("* write - write the clock           *\n");
        pc.printf("* ena   - enable Square wave output *\n");
        pc.printf("* dis   - disable square wave outp. *\n");
        pc.printf("*************************************\n");
        
        while( (c = pc.getc()) != '\n') {
            buffer[readptr++] = c;
        }
        buffer[readptr++] = 0;
        if (strncmp(buffer, "read", 4) == 0) {
            //  perform read
            pc.printf("Performing read operation\n");
   lop1:        if (rtc.getTime(tm) ) {
                //pc.printf("The current time is : %02d:%02d:%02d\n", tm.hour, tm.min, tm.sec);
                //pc.printf("The current date is : %s, %02d/%02d/%04d\n", rtc.weekdayToString(tm.wday), tm.mon, tm.date, tm.year);
                    
                lcd.cls();
                lcd.locate(0,0);
                lcd.printf("%02d:%02d:%02d", tm.hour, tm.min, tm.sec);
                lcd.locate(0,1);
                lcd.printf("%s/%02d/%02d/%4d", rtc.weekdayToString(tm.wday), tm.date, tm.mon, tm.year);
                wait_ms(200);
                goto lop1;
    
                 
            }
            
        }
        else if (strncmp(buffer, "write", 5) == 0) {
            //  perform write
            pc.printf("Enter the date (date 0..31)");
            pc.scanf("%d", &tm.date);
            pc.printf("Enter the date (month 1..12)");
            pc.scanf("%d", &tm.mon);
            pc.printf("Enter the date (year)");
            pc.scanf("%d", &tm.year);
            pc.printf("Enter the time (hours 0..23)");
            pc.scanf("%d", &tm.hour);
            pc.printf("Enter the time (minutes 0..59)");
            pc.scanf("%d", &tm.min);
            pc.printf("Enter the time (seconds 0..59)");
            pc.scanf("%d", &tm.sec);
            pc.printf("Enter the day (sunday=1)");
            pc.scanf("%d", &tm.wday);
            pc.printf("Performing write operation\n");
            
            while(pc.readable()) 
                pc.getc();
            rtc.setTime(tm, false, false);
        }
        else if (strncmp(buffer, "start", 5) == 0) {
            //  start
            pc.printf("Performing start operation\n");
            rtc.startClock();
        }
        else if (strncmp(buffer, "stop", 4) == 0) {
            //  stop
            pc.printf("Performing stop operation\n");
            rtc.stopClock();
        }
        else if (strncmp(buffer, "ena", 3) == 0) {
            int rs;
            pc.printf("Please specify the frequency : [0 = 1Hz, 1 = 4.096kHz, 2 = 8.192kHz, 3 = 32.768kHz] ");
            scanf("%d", &rs);
            pc.printf("Enabling the output with %d option\n", rs);
            rtc.setSquareWaveOutput(true, (Rtc_Ds1307::SqwRateSelect_t)rs);
        }
        else if (strncmp(buffer, "dis", 3) == 0) {
            pc.printf("Disableing square wave output\n");
            rtc.setSquareWaveOutput(false, Rtc_Ds1307::RS1Hz);
        }
        else {
            pc.printf("syntax error\n");
        }
        readptr = 0;
        pc.printf("\n\n\n");
    }
}