![](/media/cache/profiles/bd1ce36d68a5c2bea97fe45863673b20.jpg.50x50_q85.jpg)
reloj con ds1307 y LCD de 20x4
Dependencies: RTC-DS1307 TextLCD mbed
Fork of Rtc_Ds1307_Sample by
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"); } }