p9 Ssanchez
p9 Ssanchez
p9 Ssanchez
LABORATORIO DE
CONTROL CON MICROPROCESADORES
TRABAJO PREPARATORIO
Práctica No: 09
Grupo: GR-6
• Características eléctricas
° Reloj en tiempo real (RTC) Cuenta segundos, Minutos, horas, fecha del mes,
mes, día de la semana, y año con año bisiesto Compensación Válido hasta 2100.
° 56-Byte, con respaldo de batería, no volátil (NV) de RAM para almacenamiento
de datos
° Interfaz Serie I2C.
° Onda-Cuadrada programable de la señal de salida.
° Detector Automático Fallo-Energía y Circuito Conmutación.
° Consume menos de 500nA en la batería -- Modo de copia de seguridad con el
oscilador funcionando.
° Rango de temperatura Industrial Opcional: -40 ° C a +85 ° C
° Disponible en 8-Pin Plástico DIP o SO
° Reconocido Underwriters Laboratory (UL)
• Registros
Los registros de RTC están situados en localizaciones de dirección 00h a 07h. Los
registros RAM están situados en dirección de localizaciones 08h a 3Fh. Durante
un acceso multi-byte, cuando el puntero llega a la dirección 3Fh, el fin del
espacio de RAM, envuelve alrededor a la localización 00h, el principio del
espacio de reloj.
Por otro lado, la resistencia máxima vendrá limitada por la máxima velocidad que
queramos obtener (definido por el máximo tiempo de subida de las señales y definido
como 300 ns) y la capacidad máxima del bus:
lcd_write_value(di lcd_gotoxy(0,0);
a,2); lcd_puts("JUE,");b
reak;
lcd_gotoxy(6,0); lcd_puts("D0M,");b
} reak;
lcd_puts(" ");
case 5: }
N=dia+tabla[mes]+a
nio+(anio/4)+6; { case 1:
N=N%7; {
lcd_gotoxy(0,0);
switch(N)
{ lcd_gotoxy(0,0);
lcd_puts("VIE,");b
case 0: reak;
lcd_puts("LUN,");b
{ } reak;
case 6: }
lcd_gotoxy(0,0);
{ case 2:
lcd_puts("DOM,");b {
reak; lcd_gotoxy(0,0);
} lcd_gotoxy(0,0);
lcd_puts("SAB,");b
case 1: reak;
lcd_puts("MAR,");b
{ } reak;
}
}
lcd_gotoxy(0,0); }
case 3:
lcd_puts("LUN,");b if(igualar==4) {
reak; {
} lcd_gotoxy(0,0);
lcd_gotoxy(7,0);
case 2:
_delay_ms(250); lcd_puts("MIE,");b
{ reak;
lcd_gotoxy(7,0);
}
lcd_gotoxy(0,0); lcd_puts(" ");
case 4:
_delay_ms(250);
lcd_puts("MAR,");b {
reak; lcd_gotoxy(7,0);
} lcd_gotoxy(10,0); lcd_gotoxy(0,0);
case 3: lcd_puts(",");
lcd_puts("JUE,");b
{ ////////////////// reak;
/////////////////////
}
lcd_gotoxy(0,0);
lcd_puts("SEP,");b
case 5: case 4: reak;
{ { }
case 10:
lcd_gotoxy(0,0); lcd_gotoxy(7,0);
{
lcd_puts("VIE,");b lcd_puts("ABR,");b
reak; reak; lcd_gotoxy(7,0);
} }
lcd_puts("OCT,");b
case 6: case 5: reak;
{ { }
case 11:
lcd_gotoxy(0,0); lcd_gotoxy(7,0);
{
lcd_puts("SAB,");b lcd_puts("MAY,");b
reak; reak; lcd_gotoxy(7,0);
} }
} lcd_puts("NOV,");b
case 6: reak;
//////////////////
///////////////////// { }
{ }
lcd_puts("DIC,");b
case 7: reak;
lcd_gotoxy(7,0);
{ }
}
lcd_puts("ENE,");b }
reak; lcd_gotoxy(7,0);
} if(igualar==5)
lcd_puts("JUÑ,");b {
case 2: reak;
lcd_gotoxy(11,0);
{ }
lcd_write_value(20
case 8: ,2);
lcd_gotoxy(7,0);
{ lcd_gotoxy(13,0);
lcd_puts("FEB,");b lcd_write_value(an
reak; lcd_gotoxy(7,0); io,2);
} _delay_ms(250);
lcd_puts("AGO,");b
case 3: reak; lcd_gotoxy(13,0);
{ } lcd_puts(" ");
case 9: _delay_ms(250);
lcd_gotoxy(7,0);
{ lcd_gotoxy(13,0);
lcd_puts("MAR,");b lcd_write_value(an
reak; lcd_gotoxy(7,0); io,2);
}
}
lcd_puts(" } case 4:
"); {
case 5:
N=dia+tabla[mes]+a lcd_gotoxy(0,0);
nio+(anio/4)+6; {
lcd_puts("JUE,");b
N=N%7; reak;
lcd_gotoxy(0,0); }
switch(N) case 5:
{ {
lcd_puts("VIE,");b
case 0: reak; lcd_gotoxy(0,0);
{ } lcd_puts("VIE,");b
reak;
case 6: }
lcd_gotoxy(0,0); case 6:
{ {
lcd_puts("DOM,");b lcd_gotoxy(0,0);
reak; lcd_gotoxy(0,0);
lcd_puts("SAB,");b
} reak;
lcd_puts("SAB,");b }
case 1: reak; }
M=mes;
{ } switch(M)
} {
} case 1:
lcd_gotoxy(0,0); {
}
lcd_gotoxy(7,0);
lcd_puts("LUN,");b ds1307_getdate(&ye
reak; ar,&month,&day,&hour,&minu lcd_puts("ENE,");b
te,&second); reak;
} /////determinacion }
del dia case 2:
case 2: N=day+tabla[month] {
+year+(year/4)+6;
{ N=N%7; lcd_gotoxy(7,0);
switch(N)
{ lcd_puts("FEB,");b
lcd_gotoxy(0,0); case 0: reak;
{ }
case 3:
lcd_puts("MAR,");b lcd_gotoxy(0,0); {
reak;
lcd_puts("DOM,");b lcd_gotoxy(7,0);
} reak;
} lcd_puts("MAR,");b
case 3: case 1: reak;
{ }
{ case 4:
lcd_gotoxy(0,0); {
lcd_puts("AGO,");b if(igualar==1) if
reak; { (dia==30)
}
case 9: hora++; {
{
if(hora==24)
lcd_gotoxy(7,0); { dia=1;
lcd_puts("SEP,");b hora=0; }
reak; }
} } }
case 10: else
{ if(igualar==2) else if (dia==29)
{
lcd_gotoxy(7,0); {
minuto++;
lcd_puts("OCT,");b dia=1;
reak; if(minuto==60)
} { }
case 11: }
{ minuto=0; if
} (mes==3)
lcd_gotoxy(7,0); } {
else
lcd_puts("NOV,");b if(igualar==5) dia++;
reak; {
} if (dia==32)
case 12: anio++;
{ {
if(anio==100)
lcd_gotoxy(7,0); { dia=1;
lcd_puts("DIC,");b anio=0; }
reak; } }
} } if
} else (mes==4)
if(igualar==4) {
anio=year; {
mes=month; dia++;
dia=day; mes++;
hora=hour; if (dia==31)
minuto=minute; if(mes==13)
segundo=second; { {
lcd_gotoxy(4,1);
lcd_write_value(ho mes=1; dia=1;
ur,2); }
lcd_puts(":"); } }
lcd_write_value(mi else }
nute,2); if(igualar==3) if
lcd_puts(":"); { (mes==5)
lcd_write_value(se if {
cond,2); (mes==1)
lcd_gotoxy(4,0); { dia++;
lcd_write_value(da
y,2); dia++; if (dia==32)
lcd_gotoxy(10,0);
lcd_puts(","); if (dia==32) {
} else
dia=1; if if(igualar==4)
(mes==11) {
} {
} mes--;
if dia++;
(mes==6) if(mes<=0)
{ if (dia==31) {
dia++; { mes=12;
}
if (dia==31) dia=1; }
else
{ } if(igualar==3)
} {
dia=1; if if
(mes==12) (mes==1)
} { {
}
if dia++; dia--;
(mes==7)
{ if (dia==32) if (dia==0)
dia++; { {
{ } }
} }
dia=1; } if
} (mes==2)
} ////////////////// {
} //////////////////////
if dia--;
(mes==8) if((PINC&(1<<PC6))
{ ==0)// boton 2 if (anio%4==0)
{
dia++; {
if(igualar==1)
if (dia==32) { if
(dia==0)
{ hora--;
{
dia=1; if(hora<0)
{
} dia=29;
} hora=23;
if } }
(mes==9) }
{ else }
if(igualar==2)
dia++; { else if (dia==0)
if (dia==31) minuto--; {
{ if(minuto<0) dia=28;
{
dia=1; }
minuto=59; }
} } if
} } (mes==3)
if else {
(mes==10) if(igualar==5)
{ { dia--;
Cuando se presiona el botón, SELECT, entramos al modo de ajustar fecha y hora, la cual puede
aumentar o disminuir con los botones de subir y bajar respectivamente. Cada vez que se
presiona SELECT se cambia el tipo de dato a modificar, como lo es hora, minutos, día, mes y año.
Una ves determinada la fecha y hora que se requiera, se presiona el botón SELECT para
establecerla.
Fig. 8. Evidencia Funcionamiento.
Con la hora y fechas establecidas, el DS1307 empieza a correr el calendario desde ahí. Como se
ve en las imágenes.
Fig. 9. Evidencia Funcionamiento.
Por otra parte, cuando en los interruptores se ingresa un comando mal, el led en el ESCLAVO,
empieza a parpadear a una frecuencia de 2hz.
Al introducir un nuevo comando, en este caso ‘1001’, el esclavo identifica el comando y hace
que el motor cambie de sentido, y conserva la velocidad que antes se le dio, pero ahora en otro
sentido.
Ya con el motor en sentido antihorario, se introduce el comando ‘1000’ que el esclavo reconoce,
el cual hace que el motor baje de velocidad.
Referencias:
[1] N. Sotomayor. Control con microprocesadores, abril 2020, Escuela Politécnica Nacional.