Está en la página 1de 7

UNIVERSIDAD AUTONÓMA DEL ESTADO DE

MÉXICO

FACULTAD DE INGENIERÍA

DIVISIÓN DE INGENIERÍA MECÁNICA

DISEÑO MECATRÓNICO

COMUNICACIÓN I2C

ALUMNO: ROJAS ARELANO ADOLFO

DICIEMBRE 2020

Tarea 4 Visión artificial


INTRODUCCIÓN
El bus de comunicaciones I2C (nombrado a veces como I cuadrado C, I^2) es un
protocolo que se efectúa por medio de DOS hilos. A través de estos dos hilos pueden
conectarse diferentes dispositivos donde algunos de ellos serán MAESTROS en cuanto
muchos otros dispositivos serán ESCLAVOS.
Para poder reconocer cada uno de los dispositivos conectados a los DOS hilos del bus
I2C, a cada dispositivo se le asigna una dirección.
Así en este tipo de comunicaciones el MAESTRO es el que tiene la iniciativa en la
transferencia y este es quien decide con quien se quiere conectar para enviar y recibir
datos y también decide cuando finalizar la comunicación.
Los DOS hilos del BUS interfaz de comunicación I2C PIC son líneas de colector abierto
donde una de las líneas lleva la señal de reloj y es conocida como (SCL), y la otra línea
lleva los datos y es conocida como (SDA).
DESARROLLO
Implementa el siguiente circuito y usa el código que se proporciona

#include <16F876.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8,parity=N)
#use i2c(Master,sda=PIN_C4,scl=PIN_C3)

#include <lcd.c>
#include <EEPROM_24512.c> //Ficheros driver de los periféricos
#include <RTC_ds1307.c>
#include <TEMP_ds1621.c>
#include <floatee.c>

int dat_in, cnt, hr,min,sec;


int16 address=0;
int dat_serie[7];
float dato;

#int_rda //Interrupción para el puerto serie


rda_isr()
{
dat_in=getc(); //Lee el puerto serie
printf("\r");
if (dat_in=='2') //Si es "2" se visualizan los primeros datos de la eeprom
{
for(cnt=0;cnt<=6;cnt++) //Lectura de los 7 primeros bytes de la eeprom
{
dat_serie[cnt]=read_ext_eeprom(cnt);
}
for(cnt=0;cnt<=6;cnt++) //Visualización de los 7 primeros bytes de la eeprom
{
printf("Byte %u=%3u \r",cnt,dat_serie[cnt]);
}
}
}

void main() {

lcd_init();
enable_interrupts(int_rda);
enable_interrupts(global);
address=0;

printf("Pulsar 1 para leer datos\r"); //Menú para el terminal serie


printf("Pulsar 2 para visualizar datos\r");

while(1){

if(dat_in=='1') //Si es "1" se inicia la lectura y grabado en la eeprom


{
init_temp(0x01); //Inicializa el DS1621
delay_ms(100);
tiempo(hr,min,sec); //Lee tiempo del DS1307
dato = read_full_temp(0x01); //Lee temperatura del DS1621
WRITE_FLOAT_EXT_EEPROM(address,dato); //Guarda 4 bytes del FLOAT
address=address+4;
WRITE_EXT_EEPROM(address++,hr); //Guarda byte de hora
WRITE_EXT_EEPROM(address++,min); //Guarda byte de minuto
WRITE_EXT_EEPROM(address++,sec); //Guarda byte de segundo
lcd_gotoxy(1,1);
printf(lcd_putc,"Temp=%4.1f C\n",dato); //Visualiza en LCD la temperatura
printf(lcd_putc,"%2u:%2u:%2u",hr,min,sec); //Visualiza en LCD la hora
if (address==0xffff) address=0; //Cuando se termina la eeprom vuelve al principio.
}
}
}
COMUNICACIÓN SERIAL POR PUERTOS VIRTUALES (COM6 Y COM7)

También podría gustarte