p9 Ssanchez

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 19

ESCUELA POLITÉCNICA NACIONAL

FACULTAD DE INGENIERÍA ELÉCTRICA


Y ELECTRÓNICA

LABORATORIO DE
CONTROL CON MICROPROCESADORES

TRABAJO PREPARATORIO

Práctica No: 09

Tema: COMUNICACIÓN IIC

Grupo: GR-6

Realizado por: Sebástian Sánchez

Fecha de Entrega: 21/08/2020


Semestre 2020A
Trabajo preparatorio:
1. Consultar las características del reloj en tiempo real DS1307.
• Funcionamiento
Un reloj de tiempo real es un dispositivo muy útil en cualquier aplicación donde
se quiera dejar constancia de fecha y hora de algún evento. El DS1307 es un RTC
cuya interfaz con el microcontrolador se realiza utilizando el bus I2 C (Inter-
Integrated Circuit), desarrollado por Phillips Semiconductors.
El DS1307 funciona como un dispositivo esclavo en el bus serie. El acceso se
obtiene mediante la aplicación de una condición de START (Inicio) y la
prestación de un código de identificación del dispositivo seguido de una
dirección de registro. Se puede acceder a registros posteriores de forma
secuencial hasta que es ejecutada una condición STOP. Cuando VCC cae por
debajo de 1,25 x VBAT un dispositivo en curso rescinde el acceso y restablece el
contador de dirección de dispositivo. En este momento, pueden no ser
reconocidas entradas al dispositivo para evitar que se escriban datos erróneos
en el dispositivo por fuera de tolerancia del sistema. Cuando VCC cae por debajo
de VBAT el dispositivo conmuta a batería de baja corriente modo de seguridad.
Tras el encendido, el dispositivo conmuta de la batería a VCC VCC cuando es
mayor que VBAT + 0,2 V y reconoce las entradas cuando VCC es mayor de 1,25
x VBAT

Fig. 1. DS1307 Diagrama de Bloques

• 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.

Fig. 2. Mapa de Direcciones.

En el DS1307 el registro de control se usa para controlar el funcionamiento del


pin SQW/OUT.

Fig. 3. Registro de Control.


Bit 7: OUT (Output control - control de Salida): Este bit controla el nivel de salida
del pin SQW/OUT cuando la salida de onda cuadrada es inutilizada. Si SQWE =
0, el nivel lógico en el pin SQW/OUT es 1, si OUT = 1 y SQW/OUT es 0 si OUT =
0.
Bit 4: SQWE (Square Wave Enable - Onda Cuadrada Habilitada): Este bit, cuando
se establece a lógica 1, habilita la salida del oscilador. La frecuencia de onda
cuadrada de salida depende del valor de los bits RS0 y RS1. Con la onda cuadrada
de salida establecida a 1Hz, el reloj registra la actualización sobre el borde
decreciente de la onda cuadrada.
Bits 1, 0: RS (Rango Seleccionado): Estos bits controlan la frecuencia de onda
cuadrada de salida cuando han habilitado la salida de onda cuadrada. La tabla 1
muestra las frecuencias de onda cuadrada que pueden ser seleccionadas con los
bits RS.

Fig. 3. Circuito típico de conexión.


2. Calcular el rango de valores adecuados para la resistencia de pull-up (𝑅𝑝) del bus I2C, si en el
bus se encontraran conectados los siguientes dispositivos trabajando a 5V: ATmega164P
(maestro), DS1307, MCP9808 y MPU6050 (esclavos).
La resistencia mínima viene dada por la corriente máxima que es capaz de drenar la
puerta (3mA), y depende de la tensión de alimentación del bus.

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:

Usando la formula de arriba, y conociendo las capacitancias típicas de los dispositivos,


se puede calcular las resistencias:

Dispositivo Capacitancia Resistencia


bus Min Max
DS1307 400 pF 1.55k 885
MCP9808 400 pF 816.67 885
MPU6050 >400 pF 1.55k 885

3. Realizar el diagrama circuital completo y el programa de control para un sistema


microprocesado que disponga de los siguientes dispositivos a el bus I2C
- ATmega164P(maestro),
- ATmega164P(Esclavo 1) y
- DS1307(Esclavo 2)
• El microcontrador maestro debe manejar un display LCD en el cual se muestre la fecha y hora
según el formato indicado a continuación: Dsem-dd mes-aaaa hh:mm:ss

Ejemplo: MIE-07 JUN-2020


14:35:07
Colocar un teclado (3 teclas) que permita igualar la hora y fecha del RTC. Además, se debe tener
4 interruptores y un pulsador para enviar comandos al microcontrolador esclavo. El comando
será enviado una vez se presione el pulsador.

• El microcontrolador esclavo debe manejar un motor DC, de acuerdo a los siguientes


comandos recibidos del microcontrolador maestro:

o 1100 si se desea que el esclavo aumente la velocidad del motor.


o 1000 si se desea que el esclavo disminuya la velocidad del motor.
o 1001 si se desea que el esclavo cambie el sentido de giro del motor.
o 0111 si se desea que el esclavo detenga el motor.
• En cualquier comando no valido un led rojo parpadeará con una frecuencia de 2Hz, caso
contrario el LED permanecerá apagado.
Código (MAESTRO)
#define F_CPU 8000000UL void mostrar_hora(void)
#include <avr/io.h> i2c_stop(); {
#include <avr/interrupt.h> while(igualar>0)
#include _delay_ms(100); {
<compat/deprecated.h> }
#include <util/delay.h> else
#include "avr_compiler.h" { ds1307_setdate(ani
#include "Lcd.h" o,mes,dia,hora,minuto,0);
#include "ds1307 (1).h" valor=PINB&0b00001
111;
uint8_t year ; if(igualar==1)
uint8_t month; i2c_start(0xa0<<1) {
uint8_t day; ; //starts
uint8_t hour; i2c comm here in writing lcd_gotoxy(4,1);
uint8_t minute; mode
uint8_t second; lcd_write_value(ho
uint8_t ah1,ah2,ah3; i2c_write('r'); ra,2);
uint8_t am1,am2,am3; //send pressed key
char valor; char _delay_ms(250);
int
igualar,dia,mes,anio,hora, i2c_stop(); lcd_gotoxy(4,1);
minuto,segundo; }
char lcd_puts(" ");
tabla[]={0,0,3,3,6,1,4,6,2
,5,0,3,5}; mostrar_hora(); _delay_ms(250);
int N,S=6;
int M; if(hour==ah1 && lcd_gotoxy(4,1);
void inicio_micro(void); am1==minute){
void mostrar_hora(void); lcd_write_value(ho
sbi (PORTB,7); ra,2);
int main(void)
{ }else{ lcd_gotoxy(6,1);
i2c_init();
DDRD=0b00000000; cbi (PORTB,7); lcd_puts(":");
PORTD=0b11111111; } }
DDRB=0b10000000;
PORTB=0b01111111; if(igualar==2)
inicio_micro(); if(hour==ah2 && {
lcd_init(LCD_DISP_ am2==minute){
ON); lcd_write_value(mi
ds1307_init(); sbi (PORTB,7); nuto,2);
ds1307_getdate(&ye
ar,&month,&day,&hour,&minu }else{ lcd_gotoxy(7,1);
te,&second);
year=anio; cbi (PORTB,7); _delay_ms(250);
month=mes; }
day=dia; lcd_puts(" ");
hour=hora; if(hour==ah3 &&
minute=minuto; am3==minute){ lcd_gotoxy(7,1);
second=segundo;
am1=45; sbi (PORTB,7); _delay_ms(250);
am2=47;
am3=49; }else{ lcd_write_value(mi
ah1=ah2=ah3=17; nuto,2);
cbi (PORTB,7);
while(1) } lcd_gotoxy(9,1);
{
} lcd_puts(":");
if((PIND&(1<<PD2)) }
==0) lcd_write_value(0,
{ void inicio_micro(void) 2);
{
_delay_ms(10); lcd_puts("
DDRC=0b00000000; ");
i2c_start(0xa0<<1) PORTC=0b11111111; }
; //starts PCICR= 0b00000100;
i2c comm here in writing PCMSK2=0b11100000;
mode //INTERRUPCIONES if(igualar==3)
EXTERNAS {
i2c_write(valor); sei();
//send } lcd_gotoxy(4,0);
pressed key char
lcd_write_value(di N=dia+tabla[mes]+a
a,2); lcd_puts("MIE,");b nio+(anio/4)+6;
reak;
_delay_ms(250); N=N%7;
}
lcd_gotoxy(4,0); switch(N)
case 4: {
lcd_puts(" ");
{ case 0:
_delay_ms(250);
{
lcd_gotoxy(4,0); lcd_gotoxy(0,0);

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;
//////////////////
///////////////////// { }

M=mes; case 12:


lcd_gotoxy(7,0);
switch(M) {
{
lcd_puts("JUN,");b
case 1: reak; lcd_gotoxy(7,0);

{ }
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_gotoxy(0,0); lcd_puts("LUN,");b lcd_gotoxy(7,0);


reak;
} lcd_puts("ABR,");b
lcd_puts("MIE,");b case 2: reak;
reak; { }
case 5:
} lcd_gotoxy(0,0); {

case 4: lcd_puts("MAR,");b lcd_gotoxy(7,0);


reak;
{ } lcd_puts("MAY,");b
case 3: reak;
{ }
lcd_gotoxy(0,0); case 6:
lcd_gotoxy(0,0); {

lcd_puts("JUE,");b lcd_puts("MIE,");b lcd_gotoxy(7,0);


reak; reak;
lcd_gotoxy(11,0);
lcd_puts("JUN,");b lcd_write_value(20 {
reak; ,2);
} lcd_gotoxy(13,0); dia=1;
case 7: lcd_write_value(ye
{ ar,2); }
lcd_puts(" }
lcd_gotoxy(7,0); "); if
(mes==2)
lcd_puts("JUL,");b } {
reak;
} ISR(PCINT2_vect) dia++;
case 8: {
{ if((PINC&(1<<PB5)) if (anio%4==0)
==0) // BOTON 1
lcd_gotoxy(7,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++; { {

if (dia==32) dia=1; dia=31;

{ } }
} }
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--;

dia++; anio--; if (dia==0)

if (dia==32) if(anio < 0) {


{
{ dia=31;
anio=99;
dia=1; } }
} }
}
if
(mes==4) if (dia==0) dia=31;
{
{ }
dia--; }
dia=31; if
if (dia==0) (mes==11)
} {
{ }
if dia--;
dia=30; (mes==8)
{ if (dia==0)
}
} dia--; {
if
(mes==5) if (dia==0) dia=30;
{
{ }
dia--; }
dia=31; if
if (dia==0) (mes==12)
} {
{ }
if dia--;
dia=31; (mes==9)
{ if (dia==0)
}
} dia--; {
if
(mes==6) if (dia==0) dia=31;
{
{ }
dia--; }
dia=30; }
if (dia==0) }
} if((PINC&(1<<PC7))
{ } ==0)
if {
dia=30; (mes==10) igualar++;
{
} if(igualar==6)
} dia--; {
if
(mes==7) if (dia==0) igualar=0;
{ }
{ }
dia--; }
Código (ESCLAVO)
#define F_CPU 8000000UL #define I2C_ADDR 0xa0 //LCD_data(data)
//crystal freq same as //make slave ;
master address as 0x10
#include <avr/io.h> int velocidad=0;
#include <avr/delay.h> int aux=0; //printing to
#include <stdbool.h> int giro; lcd
//#include int led;
"lib/lcd/lcd.h" volatile uint8_t data; }
#include //declare
"lib/i2c_slave/I2CSlave volatile variable to void I2C_requested()
.c" use in isr routines //if
//here we used master request data
i2c slave lib void from slave
volatile uint8_t I2C_received(uint8_t {
i2c_RX_buff, received_data) I2C_transmitByte
i2c_TX_buff; //isr on (data);
volatile unsigned char receiving a byte on i2c }
RX_point=0,TX_point=0; {
volatile bool data = void setup()
i2c_packet_received=fal received_data; //setting
se; routines and
//received data initializing i2c
{ }
// set OCR0A=0;
received/requested OCR0A=velocidad;
callbacks }else PORTB=0b11100001
I2C_setCallbacks if(data==0b00001000) ;
(I2C_received, {
I2C_requested); DDRD=0b00000000;
// init I2C led=2;
I2C_init(I2C_ADD PORTD=0b11011111
R); DDRD=0b00000000; ;
} }else
PORTD=0b11011111 if(data==0){
int main() ;
{ led=led;
DDRA=0b11111111; _delay_ms(10); }else {
PORTA=0b00000000
; velocidad=veloci led=5;
DDRB=0b00011110; dad-1; }
PORTB=0b11100011
; if(velocidad<0) if(led==1)
OCR0B=124; { {
TCCR0A=0b1000001
1; velocidad=0; DDRD=0b00100000;
TCCR0B=0b0000001 } PORTD=0;
1; }else
OCR0A=0; OCR0A=velocidad; if(led==2)
setup(); }else {
//in this we if(data==0b00001001)
only print the received { DDRD=0b00100000;
data and echo it back PORTD=0;
when data is requested led=3; }else
from master if(led==3)
// DDRD=0b00000000; {
LCD_init();
PORTD=0b11011111 DDRD=0b00100000;
// Main program ;
loop PORTD=0;
while(1){ _delay_ms(10); }else
if(led==4)
data=data&0b0000 aux++; {
1111;
if if(aux==1) DDRD=0b00100000;
(data==0b00001100) {
{ PORTD=0;
PORTB=0b11100101 }else{
led=1; ;
} DDRD=0b00100000;
DDRD=0b00000000; PORTD=0;
if(aux==2)
PORTD=0b11011111 { _delay_ms(250);
;
PORTB=0b11100011 PORTD=0b00100000
_delay_ms(10); ; ;

velocidad=veloci aux=0; _delay_ms(250);


dad+1; } }
}else
if(velocidad>255 if(data==0b00000111) PORTA=velocidad;
) { }
{
led=4; }
velocidad=255;
Diagrama de flujo:

Fig. 4. Diagrama de flujo del programa.


Evidencias:

Fig. 5. Evidencia Funcionamiento.

Al iniciar el programa en el LCD se muestra el valor de la fecha y de la hora, gracias al módulo


DS1307.
Fig. 6. Evidencia Funcionamiento.

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.

Fig. 7. Evidencia Funcionamiento.

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.

Fig. 10. Evidencia Funcionamiento.


Si se introduce el comando correcto y se presiona el botón ENVIAR, el Maestro enviara dicho
comando al esclavo, el cual al reconocerlo apagara el led, y aplicara el respectivo cambio en el
motor, el comando que se envió fue ‘1100’ en el cual el motor aumenta su velocidad.

Fig. 11. Evidencia Funcionamiento.

Como se puede ver la velocidad del motor aumento.

Fig. 12. Evidencia Funcionamiento.

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.

Fig. 13. Evidencia Funcionamiento.

Motor en giro antihorario.


Fig. 14. Evidencia Funcionamiento.

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.

Fig. 15. Evidencia Funcionamiento.

Aquí se ve el motor en sentido antihorario, con velocidad reducida.

Fig. 16. Evidencia Funcionamiento.

Finalmente se coloca el ultimo comando en el micro MAESTRO, el cual es ‘0111’, cuando el


esclavo detecta este comando, el motor empieza a detenerse.
Fig. 17. Evidencia Funcionamiento.
Como se pudo ver en las dos imágenes finales. El motor empezó a disminuir su velocidad, hasta
detenerse.

Referencias:

[1] N. Sotomayor. Control con microprocesadores, abril 2020, Escuela Politécnica Nacional.

[2] Atmel. Datasheet ATmega164P.

[3] Maxim Integrated. Datasheet DS1307. [Online]:


https://datasheets.maximintegrated.com/en/ds/DS1307.pdf

[4] Microchip. Datasheet MCP9808. [Online]:


https://ww1.microchip.com/downloads/en/DeviceDoc/25095A.pdf

[5] Iven Sense. Datasheet MPU6050. [Online]: https://invensense.tdk.com/wp-


content/uploads/2015/02/MPU-6000-Datasheet1.pdf

[6] Texas Instruments. I2C Bus Pullup Resistor Calculation. [Online]:


https://www.ti.com/lit/an/slva689/slva689.pdf?ts=1597970601182&ref_url=https%253A%252
F%252Fwww.google.com%252F

[7] V. Garcia. 64 x 8 Serial Real Time Clock. [Online]: https://www.hispavila.com/wp-


content/uploads/2015/08/ds1307_esp.pdf

También podría gustarte