Você está na página 1de 22

COMUNICACIN I2C

PROTOTIPO BRAZO ROBTICO BM001

Autor: Oscar Eduardo Herrera Zuleta


Estudiante de Ingeniera Electrnica.
Corporacin Universitaria Autnoma del Cauca.

Revisado y Corregido Por:


Ing. Francisco Franco
Magister en Electrnica y Telecomunicaciones.
Docente e Investigador.

Tabla de contenido
Tabla de figuras..... 3
1. Introduccin comunicacin I2C................................................................. 4
2. Estados de la comunicacin I2C.... 4
3. Transmisin de datos por el bus I2C........................................................ 5
3.1.

Envi de datos por parte del Maestro(master)

4. Descripcin de registros........................................................................... 7
5. Velocidad de transmisin por el bus I2C.................................................. 8
6. Descripcin de las resistencias del PULL_UP......................................... 9
7. Configuracin de I2C en Software........................................................... 9
7.1.

Modo Maestro (Master)

7.2.

Modo Esclavo (Slave) ...

8. Ejemplo de transmisin de datos por el bus I2C.

9
10
10

8.1.

Circuito esquemtico a realizar en protoboard.

11

8.2.

Creacin del Proyecto en MPLAB IDE.

12

8.3.

Configuracin del programa en modo maestro... 17

8.4.

Configuracin del programa en modo esclavo.

8.5.

Esquema de Funcionamiento en hardware. ...22

9. Bibliografa

19

23

Tabla de Figuras.
Figura 1. Comunicacin por I2C. .. 4
Figura 2. Trasmisin de trama de datos por la lnea SDA. 5
Figura 3. Bit de reconocimiento ACK. 5
Figura 4. Orden de transmisin por parte del Maestro (master)... 6
Figura 5. Condicin de reinicio o restar. 7
Figura 6. Diagrama de funcionamiento de los registros.

Figura 7. Diseo esquemtico de Comunicacin por I2C. 11


Figura 8. Diseo esquemtico de conexin I2C... 12
Figura 9. Mplab IDE 12
Figura 10. Seleccin de Microcontrolador

13

Figura 11. Seleccin del Compilador 14


Figura 12 14
Figura 13 15
Figura 14 15
Figura 15. Summary. 16
Figura 15. Editor de texto.16
Figura 16.17
Figura 18. Esquema de Funcionamiento en hardware. .22

1. Introduccin comunicacin I2C.


I2C1 Es una inter
interfaz derivada del modulo (MSSP) 2 para acceder a la
comunicacin con otros dispositivos perifricos o programables que soporta los
siguientes modos de hardware,
hardware maestro, multi-maestro y modo esclavo, que por
consiguiente son capaces de trasmitir una trama de datos.
La comunicacin se realiza a travs de dos conductores SCL lnea de reloj para
sincronizacin de datos y SDA lnea de datos, las cuales van conectadas a
positivo mediante las resistencias pull-up
pull up para garantizar el nivel alto de la
comunicacin y pueda comenzar hacer uso del bus como se aprecia en la figura 1.

Figura 1. Comunicacin por I2C.

2. Estados de la comunicacin I2C.

1
2

Lneas desocupadas: cuando SCL y SDA se encuentran en un estado


lgico alto en (1).
(1)

Estado de inicio (S): cuando la comunicacin de la lnea SDA est en


transicin de alto (1) a bajo (0) y la lnea SCL est en alto (1).

Estado de stop (P): cuando la comunicacin de la lnea SDA est en


transicin de bajo (0) a alto (1) y la lnea SCL est en alto (1).

I2C: Inter Integrated Circuit.


MSSP: Master Synchronous Serial Port.

Los datos solo pueden cambiar cuando la lnea SCL estn en un estado
bajo (0).

3. Transmisin de datos por el bus I2C.


La direccin del transmisor cuando se inicia la comunicacin puede ser de 10 o 7
bits para este caso se ilustra la de 7 bits como se aprecia en la siguiente figura 2.

Figura 2. Trasmisin de trama de datos por la lnea SDA.

S: estado de inicio.

R/W: es el bit de sentido, (0) de escritura (enviar datos al esclavo) y (1) de


lectura (recibir datos del esclavo).
esclavo)

ACK: bit de reconocimiento (0) que enva el esclavo al maestro para indicar
que el dispositivo ha sido reconocido y puede empezar la transferencia en
serie entre los dispositivos
dispositivos, si el esclavo receptor no genera el bit de
reconocimiento (0) el maestro debe abortar la transferencia y colocar el
estado de stop. Cuando el bit de reconocimiento se genera la lnea SDA
est en un estado lgico bajo (0) y SCL en estado alto (1) del ciclo de
trabajo.

Figura 3. Bit de reconocimiento ACK.

Direccin de acceso al esclavo: consta de 7 o 10 bits dependiendo de la


configuracin que se le d, donde el bit C7 es bit ms significativo (MSB) y
C1 es el bit menos significativo (LSB), esta es la direccin que detecta el
esclavo.

3.1. Envi de datos por parte del Maestro (master):

Figura 4.. Orden de transmisin por parte del maestro (master).


S: Condicin de inicio
Direccin de 7 bits que enva el maestro al esclavo.
R/W:: bit de escritura (0).
ACK: Bit de esclavo a maestro (reconocimiento).
Enva cadena de datos o bits.
ACK: Reconocimiento no dado
dado.
P: Estado Stop.
Stop
Es posible generar una condicin de reinicio (SR) re direccionando el mismo
esclavo para no generar un STOP volviendo a generar un START sobre
sobr el mismo
bus de transferencia como se puede ver en la figura 4.

Figura 5.. Condicin de reinicio o restar.

4. Descripcin de registros.
El modulo MSSP en modo I2C cuenta con seis registros
registros para la comunicacin por
I2C en este caso se describen los registros para el pic 18f4550. [2]

MSSP Registro de Control 1 (SSPCON1)


MSSP Registro de control 2 (SSPCON2)
MSSP Registro de Estado (SSPSTAT)
Buffer de recepcin
recepci / transmisin (SSPBUF)
MSSP Registro de Desplazamiento (SSPSR) - No directamente accesible
MSSP Registro de direcciones (SSPADD)

Registros
(SSPCON1), (SSPCON2) y
(SSPSTAT):
(SSPBUF):

(SSPADD):

Descripcin
Control y registro de estado en el modo
de operacin I2C.
Bfer de registro para que los bytes se
escriban y lean e inicien la transmisin
de datos / direcciones.
direcciones
Cuando est configurado MSSP
de
modo
do esclavo contiene las direcciones
del mismo.
Tabla 1. Descripcin de registros

En la figura 6 se presenta el diagrama de funcionamiento de los registros para el


bus I2C.

Figura 6.
6. Diagrama de funcionamiento de los registros. [2]

5. Velocidad de transmisin por el bus I2C.


La velocidad para la transmisin de los datos por I2C depende temporalmente por
los paramentaros del sistema, como la capacidad de la lnea y las resistencias de
pull_up. Las velocidades estndares que se manejan se encuentran a
continuacin:

Modo estndar 100 Kbit/s,


Modo
odo rpido (fast mode) 400 Kbit/s
Modo alto (fast mode plus) 1 Mbits/s
Alta velocidad (High-speed mode) hasta 3.4 Mbits/s.

La velocidad se configura cuando se inicialice la funcin principal del I2C que en el


itinerario siete (7) se explica la funcin.

6. Descripcin de las resistencias del PULL_UP.


Vienen determinadas por la alimentacin del bus, la velocidad de transmisin y la
capacidad de nmero de dispositivos conectados.

7. Configuracin de I2C en Software.

SLAVE: condicin del pic como esclavo.

MASTER: condicin del pic como maestro.

SDA=PIN: lnea de datos en serie.

SCL=PIN: lnea de reloj en serie.

FAST: utiliza la velocidad alta.

SLOW: utiliza la velocidad baja.

FORCE_HW: funciones especfica de I2C del hardware.

ADDRESS: Direccin que comunica al esclavo.

7.1. Modo Maestro (Master).


La configuracin para que I2C funcione en modo maestro viene determinada por
las funciones vistas en el itinerario siete (7) y se describen usando la siguiente
funcin de inicializacin de I2C.
#use i2c (MASTER, SDA=PIN_XX, SCL=PIN_XX, FAST,FORCE_HW)
Condiciones de trasmisin:

Se explica las funciones que deben ir en cogido para que funcione la


comunicacin con el receptor y que ms adelante se emplearan para el ejemplo
del itinerario ocho (8).

I2C_START (): Condicin de inicio.

I2C_WRITE (0xa0): direccin del esclavo con que se har la comunicacin


este dato enviado es de 8 bits en el va el bit ACK de reconocimiento y el
cero (0) indica el sentido.

I2C_WRITE (dato): dato que se enva al esclavo.

I2C_STOP (): finalizacin de la comunicacin.

7.2. Modo Esclavo (Slave).


El modo I2C de modo esclavo se inicializa representa con las funcin que se
presenta a continuacin donde ADDRESS representa la direccin con que se hace
la comunicacin con el maestro.
#use i2c (SLAVE, SDA=PIN_XX, SCL=PIN_XX, ADDRESS=0xa0, FAST ,
FORCE_HW)
Condiciones de recepcin:
Se explica las dos funciones involucradas en la recepcin de los datos enviados
por el pic maestro y se emplean en el ejemplo del itinerario ocho (8).

I2C_POLL (): se utiliza si solo el pic tiene modulo SSP. Devuelve un true
(1) si ha recibido un dato en el buffer y un false (0) si no se ha recibido.

I2C_READ (): dato que es ledo del bus.

8. Ejemplo de transmisin de datos por el bus I2C


A continuacin en la figura 6 se presenta un esquemtico de cmo sera la
comunicacin I2C entre un maestro que habla y tres esclavos que escuchan y
esperan la orden para operar y ejecutar.

10

Figura 7. Diseo esquemtico de Comunicacin por I2C.


Este proyecto se ejecuta a travs de la plataforma MPLAB IDE con el lenguaje de
programacin CCS C Complier.

8.1. Circuito esquemtico a realizar en protoboard


La Comunicacin I2C se llevara a cabo entre un pic 18F4550 quien ser el
maestro y 3 pic 16f883 quienes sern los esclavos, en este ejemplo el pic maestro
obtendr datos de un potencimetro con un rango de 0 a 15 estos datos sern
enviados por la las ln
lneas
eas de comunicacin I2C a los esclavos que contengan la
direccin correspondiente y se halla seleccionado el esclavo con el que se quiere
transmitir como se aprecia en la figura 6.
Los componentes a utilizar son:

1 PIC 18F4550 y 3 PIC 16F883


Resistencias de 330 ohms que van conectadas con los leds indicadores.
cristales de 4 MHZ
sintonizador de frecuencias acompaados de
condensadores de 22 pf
3 pulsadores para seleccin de direccin del esclavo con sus respectivas
resistencias de 330 ohms
Potencimetro
otencimetro de 10 k conectado a la entra RA0 del master.
Dos resistencias del pull up. De 150 ohms.
Resistencias de 10 k conectadas a positivos en MCLR en los PIC con
pulsadores a tierra.
tierra

11

Figura 8.
8 Diseo Esquemtico de conexin I2C.

8.2. Creacin del Proyecto en MPLAB IDE

Primer paso:: ejecutar la plataforma MPLAB IDE.

Segundo paso: dar clic en Project.

Figura 9. Mplab IDE.

12

Tercer paso: abierto Project dar clic en Project Wizard


d

Cuarto paso: seleccionar el PIC a utilizar para este caso se emplea el


PIC18F4550.

Figura 10.. Seleccin de Microcontrolador.


Para continuar con el siguiente paso previamente se debe tener instalado CCS C
Compiler y el Plugin MPLAB los cuales se pueden descargar del siguiente link:
link
http://www.ccsinfo.com/downloads.php

Quinto paso: instalado el Plugin de MPLAB se pude utilizar para editar y


crear proyectos utilizando el compilador de C de CCS.

Sexto paso: buscar en Active Toolsuite CCS


CS C Compiler como se pareca
en la figura 11
11.

Sptimo paso:
paso como se aprecia en la figura 11 Toolsuite Contents contiene
una X indicando que no se encuentra el ejecutable de CCS C Complier lo
que se hace es dar clic en Browse para encontrarlo.

13

Figura 11. Seleccin del Compilador.

Octavo paso: se aprecia la carpeta PICC donde se encuentra el ejecutable


que se necesita se selecciona Ccsc.
C

Figura 12.

Noveno paso
paso: se da clic en abrir y a partir de este momento se puede
trabajar en el compilador figura 13.

14

Figura 13.
Decimo paso: Se crea la carpeta del proyecto con su respectivo nombre
nombre.

Figura 14.

15

Onceavo paso: damos clic en siguiente hasta llegar al Summary, se verifica


que los datos estn bien diligenciados y se procede a finalizar.

Figura 15. Summary.

Doceavo paso: se da clic en la creacin de un nuevo archivo como se


aprecia en la figura 16.
16

Figura 16. Editor de texto.

16

Treceavo paso: se procede a guardar el documento donde se ubica la


carpeta contenedora del proyecto y se da un nombre, si se quiere el mismo
nombre al que se le vino asignado anteriormente pero con es estimativo
estima
de
.C.

Figura 17.

8.3. Configuracin del programa en modo maestro:


// Directivas del programa:

#include <18f4550.h>

// CONFIGURACIN DEL MICROCONTROLADOR

#fuses XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP
#use delay(clock=4000000)
4000000)
#byte

PORTB=0x07

// RELOJ DE 4MHZ
// DIRECCIN DEL PORTB

#use i2c(MASTER, SDA=PIN_B0, SCL=PIN_B1, FAST, FORCE_HW) // CONFIGURACION DE LA


TRANSMISIN I2C
int buffer;
int ban=0, i=0;
float dato, sensor=0;

void CONVERSOR ()
{
set_adc_channel(0);

// PUERTO RA0

delay_ms(20);

17

sensor=read_adc();

// LEE EL ADC Y MANDA LOS MAS SIGNIFICATIVOS

delay_ms(0.1);

// TIEMPO PARA QUE PUEDA CAPTURAR EL DATO

void main(void)
{
setup_adc_ports(AN0_TO_AN3|VSS_VDD); // CONFIGURACIN DEL PUERTO RA0 TO
RA3 COMO ADC
setup_adc(ADC_CLOCK_INTERNAL);
DE ADC CON EL CLOCK INTERNAL
delay_ms(10);

// CONFIGURACIN DE FUNCIONAMIENTO
// RETARDO PARA LA COMUNICACIN

while(TRUE)
{
CONVERSOR();

// LLAMADO AL CONVERSOR

dato=( 15.0 * sensor) / 255.0; // CONVERSIN DEL SENSOR A UN TOPE DE 15 CON


UNA RESOLUCIN DE 8 BITS.
i=dato;
if(input(PIN_B3)) {ban=1;}

// SE ACTIVA LA TRANSMISIN PARA EL ESCLAVO 1

if(input(PIN_B4)) {ban=2;}

// SE ACTIVA LA TRANSMISIN PARA EL ESCLAVO 2

if(input(PIN_B5)) {ban=3;}

// SE ACTIVA LA TRANSMISIN PARA EL ESCLAVO 3

if(ban==1)

// TRANSMISIN CON EL ESCLAVO 1

{
i2c_start();

// CONDICIN DE INICIO

i2c_write(0xd0); // DIRECCIN DEL ESCLAVO CON QUE SE REALIZA LA COMUNICACIN


i2c_write(i);

// ENVI DE DATOS, (i) VALOR ARROJADO POR EL SENSOR (POT)

i2c_stop();

// CONDICIN DE STOP

delay_ms(500); // RETARDO PARA QUE LA COMUNICACIN NO SEA CONSTANTE


}

18

if(ban==2)

// TRANSMISIN CON EL ESCLAVO 2

{
i2c_start();

// CONDICIN DE INICIO

i2c_write(0xd2); // DIRECCIN DEL ESCLAVO CON QUE SE REALIZA LA COMUNICACIN


i2c_write(i);

// ENVI DE DATOS (i) VALOR ARROJADO POR EL SENSOR (POT)

i2c_stop();

// CONDICIN DE STOP

delay_ms(500); // RETARDO PARA QUE LA COMUNICACIN NO SEA CONSTANTE


}

if(ban==3)

// TRANSMISIN CON EL ESCLAVO 3

{
i2c_start();

// CONDICIN DE INICIO

i2c_write(0xd4); // DIRECCIN DEL ESCLAVO CON QUE SE REALIZA LA COMUNICACIN


i2c_write(i);

// ENVI DE DATOS (i) VALOR ARROJADO POR EL SENSOR (POT)

i2c_stop();

// CONDICIN DE STOP

delay_ms(500); // RETARDO PARA QUE LA COMUNICACIN NO SEA CONSTANTE


}
};
}

8.4. Configuracin del programa en modo Esclavo:


Para este caso solo se especifica la descripcin del programa para el esclavo 1
teniendo en cuenta que para el esclavo 2 con direccin (0Xd2) y esclavo 3 con
direccin (0xd4) es el misma programacin solo cambia las direccin.

// Directivas del Programa:


#INCLUDE <16f883.h>

// CONFIGURACIN DEL MICROCONTROLADOR

#USE DELAY(CLOCK = 4000000) // RELOJ DE 4 MHZ


#fuses XT, NOPROTECT, PUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD

19

#byte

PORTA=0x05

// Direccin del PortA

#byte

PORTB=0x06

// Direccin del PortB

#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, ADDRESS=0xd0, FAST , FORCE_HW) //


CONFIGURACIN DE LA RECEPCIN I2C
// (ADDRESS =0Xd0) ES LA DIRECCIN DE RECEPCIN DEL ESCLAVO QUE ENVA EL
MSTER ES AQU DONDE SE CAMBIA LA DIRECCIN PARA EL PROGRAMA DEL ESCLAVO
2 POR (0Xd2) Y LA DEL ESCLAVOS 3 POR (0Xd4).
char state;
int dato2, com=0, dato=0;

// Recepcin de la comunicacin:
void COMUNICACION ()
{
if(i2c_poll())

// DEVUELVE UN UNO (1) SI HA RECIBIDO UN DATO EN EL BUFFER Y UN


// CERO (0) SI NO LO HA RECIBIDO.

{
dato=i2c_read();

// DATO QUE ES LEDO DEL BUS

com=dato;
// SE AADE LA INSTRUCCIN if(com !=208) PARA EVITAR QUE LA DIRECCIN DE
RECEPCIN DEL ESCLAVO 0xd0=208 POR RETARDO DE COMUNICACIN A VECES SE
INTERCAMBIA CON EL DATO DE ENVI (i) SE HACE INTENSIVO PARA EL ESCLAVO DOS
Y TRES QUE YA SERIAN 210 Y 212.
if(com !=208)
{
output_bit(PIN_C7,1); // BIT QUE INDICA QUE ESTA HABILITADO LA TRANSMISIN
dato2=com;
}
}
}

// Reconocimiento de datos enviados por el master:


void RECONOCIMIENTO_DATOS ()
{

20

if(dato2==0) { output_b(0x00);} // Muestra el numero 0 x en el puerto B en leds.


if(dato2==1) { output_b(0x01);} // Muestra el numero 1 x en el puerto B
if(dato2==2) { output_b(0x02);} // Muestra el numero 2 x en el puerto B
if(dato2==3) { output_b(0x03);} // Muestra el numero 3 x en el puerto B
if(dato2==4) { output_b(0x04);} // Muestra el numero 4 x en el puerto B
if(dato2==5) { output_b(0x05);} // Muestra el numero 5 x en el puerto B
if(dato2==6) { output_b(0x06);} // Muestra el numero 6 x en el puerto B
if(dato2==7) { output_b(0x07);} // Muestra el numero 7 x en el puerto B
if(dato2==8) { output_b(0x08);} // Muestra el numero 8 x en el puerto B
if(dato2==9) { output_b(0x09);} // Muestra el numero 9 x en el puerto B
if(dato2==10) { output_b(0x0a);} // Muestra el numero 10 x en el puerto B
if(dato2==11) { output_b(0x0b);} // Muestra el numero 11 x en el puerto B
if(dato2==12) { output_b(0x0c);} // Muestra el numero 12 x en el puerto B
if(dato2==13) { output_b(0x0d);} // Muestra el numero 13 x en el puerto B
if(dato2==14) { output_b(0x0e);} // Muestra el numero 14 x en el puerto B
if(dato2==15) { output_b(0x0f);} // Muestra el numero 15 x en el puerto B

}
// Ejecucin del programa:
void main(void)
{

set_tris_b(0b0000000);

// Definimos B como salida

output_b(0x00);

// Pone a Cero el PORTB

output_bit(PIN_C7,0);

// Pone a Cero en PIN C7

while(TRUE)
{
COMUNICACION();
RECONOCIMIENTO_DATOS();
};
}

21

8.5. Esquema de funcionamiento en hardware.

Figura 18. Esquema de Funcionamiento en hardware.

9. BIBLIOGRAFA

[1] Garca Eduardo Breijo. Compilador C CCS y Simulador Proteus para


Microcontroladores Pic.. Primera Edicion .Alfa Omega Grupo Editor. Mxico.
[2] Microchip PIC18F2455/2550/4455/45 Data sheet.

22

Você também pode gostar