Comunicación I2C.pdf

22
1 COMUNICACIÓN I2C PROTOTIPO BRAZO ROBÓTICO BM001 Autor: Oscar Eduardo Herrera Zuleta Estudiante de Ingeniería Electrónica. Corporación Universitaria Autónoma del Cauca. Revisado y Corregido Por: Ing. Francisco Franco Magister en Electrónica y Telecomunicaciones. Docente e Investigador.

description

vcb cbcbc

Transcript of Comunicación I2C.pdf

1

COMUNICACIÓN I2C

PROTOTIPO BRAZO ROBÓTICO BM001

Autor: Oscar Eduardo Herrera Zuleta Estudiante de Ingeniería Electrónica. Corporación Universitaria Autónoma del Cauca.

Revisado y Corregido Por: Ing. Francisco Franco Magister en Electrónica y Telecomunicaciones. Docente e Investigador.

2

Tabla de contenido

Tabla de figuras……………………………………………………………………..... 3

1. Introducción comunicación I2C................................................................. 4

2. Estados de la comunicación I2C.…………………………………………... 4

3. Transmisión de datos por el bus I2C........................................................ 5

3.1. Envió de datos por parte del Maestro(master)……………………… 6

4. Descripción de registros........................................................................... 7

5. Velocidad de transmisión por el bus I2C.................................................. 8

6. Descripción de las resistencias del PULL_UP......................................... 9

7. Configuración de I2C en Software........................................................... 9

7.1. Modo Maestro (Master) ……………………………………………. 9

7.2. Modo Esclavo (Slave) ……………………………………………... 10

8. Ejemplo de transmisión de datos por el bus I2C…………………………. 10

8.1. Circuito esquemático a realizar en protoboard……………………. 11

8.2. Creación del Proyecto en MPLAB IDE……………………………. 12

8.3. Configuración del programa en modo maestro……………………... 17

8.4. Configuración del programa en modo esclavo……………………. 19

8.5. Esquema de Funcionamiento en hardware. …………………………...22

9. Bibliografía…………………………………………………………………… 23

3

Tabla de Figuras.

Figura 1. Comunicación por I2C. …………………………………………….. …… 4 Figura 2. Trasmisión de trama de datos por la línea SDA………………………. 5 Figura 3. Bit de reconocimiento ACK………………….…………………………… 5 Figura 4. Orden de transmisión por parte del Maestro (master)………………... 6 Figura 5. Condición de reinicio o restar……………………………………………. 7 Figura 6. Diagrama de funcionamiento de los registros…………………………. 8 Figura 7. Diseño esquemático de Comunicación por I2C………………………. 11 Figura 8. Diseño esquemático de conexión I2C…………………………………... 12 Figura 9. Mplab IDE…………………………………………………………………… 12 Figura 10. Selección de Microcontrolador……………………………………… 13 Figura 11. Selección 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. Introducción comunicación I2C.

I2C1 Es una intercomunicación con otros dispositivos siguientes modos de hardwareconsiguiente son capaces de trasmitir

La comunicación se realiza a través desincronización de datos positivo mediante las resistencias “pullcomunicación y pueda comenzar hacer uso del bus

2. Estados de la comunicación

• Líneas desocupadas:lógico alto en (1)

• Estado de iniciotransición de alto

• Estado de stop

transición de bajo

1 I2C: Inter Integrated Circuit.2 MSSP: Master Synchronous Serial Port.

Introducción comunicación I2C.

Es una interfaz derivada del modulo (MSSP)

comunicación con otros dispositivos periféricos o programablessiguientes modos de hardware, maestro, multi-maestro y modo esclavo, que por

son capaces de trasmitir una trama de datos.

La comunicación se realiza a través de dos conductores SCL línea de reloj sincronización de datos y SDA línea de datos, las cuales van conectadas a positivo mediante las resistencias “pull-up” para garantizar el nivel alto de la

y pueda comenzar hacer uso del bus como se aprecia en la figura 1.

Figura 1. Comunicación por I2C.

comunicación I2C.

Líneas desocupadas: cuando SCL y SDA se encuentran en un estado en (1).

Estado de inicio (S): cuando la comunicación de la línea SDA está en transición de alto (1) a bajo (0) y la línea SCL está en alto

Estado de stop (P): cuando la comunicación de la línea SDA está en transición de bajo (0) a alto (1) y la línea SCL está en alto

I2C: Inter Integrated Circuit. MSSP: Master Synchronous Serial Port.

4

2 para acceder a la periféricos o programables que soporta los

modo esclavo, que por

SCL línea de reloj para las cuales van conectadas a

up” para garantizar el nivel alto de la como se aprecia en la figura 1.

cuando SCL y SDA se encuentran en un estado

cuando la comunicación de la línea SDA está en y la línea SCL está en alto (1).

cuando la comunicación de la línea SDA está en y la línea SCL está en alto (1).

• Los datos solo pueden cambiar cuando la línea SCL están bajo (0).

3. Transmisión de datos por el bus I2C.

La dirección del transmisor cuando se inicia la comunicación bits para este caso se ilustra la de 7 bits

Figura 2. Trasmisión de trama de datos por la línea SDA.

• S: estado de inicio.

• R/W: es el bit de lectura (recibir datos del esclavo)

• ACK: bit de reconocimiento

que el dispositivo ha sido reconocido y puede empezar laserie entre los dispositivosreconocimiento estado de stop. está en un estado lógico bajo (0) y SCL en estado alto (1) del ciclo de trabajo.

Los datos solo pueden cambiar cuando la línea SCL están

Transmisión de datos por el bus I2C.

La dirección del transmisor cuando se inicia la comunicación para este caso se ilustra la de 7 bits como se aprecia en la siguiente figura

Figura 2. Trasmisión de trama de datos por la línea SDA.

estado de inicio.

es el bit de sentido, (0) de escritura (enviar datos al esclavo)(recibir datos del esclavo).

bit de reconocimiento (0) que envía el esclavo al maestro para que el dispositivo ha sido reconocido y puede empezar la

entre los dispositivos, si el esclavo receptor no genera el bit de reconocimiento (0) el maestro debe abortar la transferencia y colocarestado de stop. Cuando el bit de reconocimiento se genera la línea SDA

en un estado lógico bajo (0) y SCL en estado alto (1) del ciclo de

Figura 3. Bit de reconocimiento ACK.

5

Los datos solo pueden cambiar cuando la línea SCL están en un estado

La dirección del transmisor cuando se inicia la comunicación puede ser de 10 o 7 como se aprecia en la siguiente figura 2.

Figura 2. Trasmisión de trama de datos por la línea SDA.

(enviar datos al esclavo) y (1) de

que envía el esclavo al maestro para indicar que el dispositivo ha sido reconocido y puede empezar la transferencia en

si el esclavo receptor no genera el bit de el maestro debe abortar la transferencia y colocar el

Cuando el bit de reconocimiento se genera la línea SDA en un estado lógico bajo (0) y SCL en estado alto (1) del ciclo de

Figura 3. Bit de reconocimiento ACK.

• Dirección de acceso al esclavo:

configuración que se le dé, donde el bit C7 es bit más significativo (MSB) y C1 es el bit menos significativo (LSB), esta es la dirección que detecta el esclavo.

3.1. Envió de datos por parte del

Figura 4. Orden de transmisión por parte del

• S: Condición de inicio• Dirección de 7 bits• R/W: bit de escritura (0).• ACK: Bit de esclavo a maestro• Envía cadena de • ACK: Reconocimiento no dado• P: Estado Stop

Es posible generar una condición de reinicioesclavo para no generar un STOP volviendo a generar un START sobrbus de transferencia como se puede ver en la figura 4.

Dirección de acceso al esclavo: consta de 7 o 10 bits dependiendo de la configuración que se le dé, donde el bit C7 es bit más significativo (MSB) y C1 es el bit menos significativo (LSB), esta es la dirección que detecta el

Envió de datos por parte del Maestro (master):

. Orden de transmisión por parte del maestro

Condición de inicio Dirección de 7 bits que envía el maestro al esclavo.

: bit de escritura (0). ACK: Bit de esclavo a maestro (reconocimiento). Envía cadena de datos o bits.

Reconocimiento no dado. Estado Stop.

Es posible generar una condición de reinicio (SR) re direccionando el mismo esclavo para no generar un STOP volviendo a generar un START sobrbus de transferencia como se puede ver en la figura 4.

6

consta de 7 o 10 bits dependiendo de la configuración que se le dé, donde el bit C7 es bit más significativo (MSB) y C1 es el bit menos significativo (LSB), esta es la dirección que detecta el

maestro (master).

re direccionando el mismo esclavo para no generar un STOP volviendo a generar un START sobre el mismo

4. Descripción de registros. El modulo MSSP en modo I2C cuenta con seis registrI2C en este caso se describen los registros para el pic 18f4550.

• MSSP Registro de Control 1 • MSSP Registro de control 2 (SSPCON2)• MSSP Registro de Estado (SSPSTAT) • Buffer de recepci• MSSP Registro de Desplazamiento (SSPSR) • MSSP Registro de direcciones (SSPADD)

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

(SSPADD):

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

Figura 5. Condición de reinicio o restar.

Descripción de registros.

modulo MSSP en modo I2C cuenta con seis registros para la comunicación por I2C en este caso se describen los registros para el pic 18f4550.

MSSP Registro de Control 1 (SSPCON1) MSSP Registro de control 2 (SSPCON2) MSSP Registro de Estado (SSPSTAT)

recepción / transmisión (SSPBUF) MSSP Registro de Desplazamiento (SSPSR) - No directamente accesibleMSSP Registro de direcciones (SSPADD)

Registros Descripción(SSPCON1), (SSPCON2) y Control y registro de estado en el modo

de operación I2C.Búfer de registro para que los bytes se escriban y lean e inicien la transmisión de datos / direccionesCuando está configurado modo esclavo contiene las direcciones del mismo.

Tabla 1. Descripción de registros

se presenta el diagrama de funcionamiento de los registros para el

7

. Condición de reinicio o restar.

os para la comunicación por I2C en este caso se describen los registros para el pic 18f4550. [2]

No directamente accesible

Descripción Control y registro de estado en el modo de operación I2C. Búfer de registro para que los bytes se escriban y lean e inicien la transmisión de datos / direcciones. Cuando está configurado MSSP de

do esclavo contiene las direcciones

se presenta el diagrama de funcionamiento de los registros para el

Figura 6

5. Velocidad de transmisión por el bus I2C. La velocidad para la transmisión los paramentaros del sistema, como la capacidad de la línea “pull_up”. Las velocidades continuación:

• Modo estándar 100• Modo rápido • Modo alto (fast mode plus) • Alta velocidad

Figura 6. Diagrama de funcionamiento de los registros.

transmisión por el bus I2C.

velocidad para la transmisión de los datos por I2C depende temporalmente por los paramentaros del sistema, como la capacidad de la línea

Las velocidades estándares que se manejan se

estándar 100 Kbit/s, odo rápido (fast mode) 400 Kbit/s

alto (fast mode plus) 1 Mbits/s velocidad (High-speed mode) hasta 3.4 Mbits/s.

8

. Diagrama de funcionamiento de los registros. [2]

de los datos por I2C depende temporalmente por los paramentaros del sistema, como la capacidad de la línea y las resistencias de

que se manejan se encuentran a

9

La velocidad se configura cuando se inicialice la función principal del I2C que en el itinerario siete (7) se explica la función.

6. Descripción de las resistencias del PULL_UP.

Vienen determinadas por la alimentación del bus, la velocidad de transmisión y la capacidad de número de dispositivos conectados.

7. Configuración de I2C en Software.

• SLAVE: condición del pic como esclavo.

• MASTER: condición del pic como maestro.

• SDA=PIN: línea de datos en serie.

• SCL=PIN: línea de reloj en serie.

• FAST: utiliza la velocidad alta.

• SLOW: utiliza la velocidad baja.

• FORCE_HW: funciones específica de I2C del hardware.

• ADDRESS: Dirección que comunica al esclavo.

7.1. Modo Maestro (Master).

La configuración para que I2C funcione en modo maestro viene determinada por las funciones vistas en el itinerario siete (7) y se describen usando la siguiente función de inicialización de I2C.

#use i2c (MASTER, SDA=PIN_XX, SCL=PIN_XX, FAST,FORCE_HW)

Condiciones de trasmisión:

10

Se explica las funciones que deben ir en cogido para que funcione la comunicación con el receptor y que más adelante se emplearan para el ejemplo del itinerario ocho (8).

• I2C_START (): Condición de inicio.

• I2C_WRITE (0xa0): dirección del esclavo con que se hará la comunicación 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 envía al esclavo.

• I2C_STOP (): finalización de la comunicación.

7.2. Modo Esclavo (Slave). El modo I2C de modo esclavo se inicializa representa con las función que se presenta a continuación donde ADDRESS representa la dirección con que se hace la comunicación con el maestro.

#use i2c (SLAVE, SDA=PIN_XX, SCL=PIN_XX, ADDRESS=0xa0, FAST , FORCE_HW)

Condiciones de recepción:

Se explica las dos funciones involucradas en la recepción 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 leído del bus.

8. Ejemplo de transmisión de datos por el bus I2C

A continuación en la figura 6 se presenta un esquemático de cómo sería la comunicación I2C entre un maestro que habla y tres esclavos que escuchan y esperan la orden para operar y ejecutar.

Figura

Este proyecto se ejecuta a través deprogramación CCS C Complier.

8.1. Circuito esquemático a realizar en protoboard

La Comunicación I2C se llevara a cabo entre un pic 18F4550 quien será el maestro y 3 pic 16f883 quienes serán los esclavos, en este ejemplo el pic maestro obtendrá datos de un potenciómetro con un rango de 0 a 15 estos datos serán enviados por la las líndirección correspondiente y se halla seleccionado el esclavo con el que se quiere transmitir como se aprecia en 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 acompañados de

condensadores de 22 pf • 3 pulsadores para selección de dirección del esclavo con sus respectivas

resistencias de 330 ohms• Potenciómetro 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

pulsadores a tierra

Figura 7. Diseño esquemático de Comunicación por I2C.

Este proyecto se ejecuta a través de la plataforma MPLAB IDE con el lenguaje de programación CCS C Complier.

Circuito esquemático a realizar en protoboard

La Comunicación I2C se llevara a cabo entre un pic 18F4550 quien será el maestro y 3 pic 16f883 quienes serán los esclavos, en este ejemplo el pic maestro obtendrá datos de un potenciómetro con un rango de 0 a 15 estos datos serán enviados por la las líneas de comunicación I2C a los esclavos que contengan la dirección 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 acompañados de condensadores de 22 pf 3 pulsadores para selección de dirección del esclavo con sus respectivas resistencias de 330 ohms

otenciómetro 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.

11

Diseño esquemático de Comunicación por I2C.

la plataforma MPLAB IDE con el lenguaje de

La Comunicación I2C se llevara a cabo entre un pic 18F4550 quien será el maestro y 3 pic 16f883 quienes serán los esclavos, en este ejemplo el pic maestro obtendrá datos de un potenciómetro con un rango de 0 a 15 estos datos serán

eas de comunicación I2C a los esclavos que contengan la dirección correspondiente y se halla seleccionado el esclavo con el que se quiere

Resistencias de 330 ohms que van conectadas con los leds indicadores. cristales de 4 MHZ sintonizador de frecuencias acompañados de

3 pulsadores para selección de dirección del esclavo con sus respectivas

otenciómetro de 10 k conectado a la entra RA0 del master.

MCLR en los PIC con

Figura 8

8.2. Creación del

• Primer paso:

• Segundo paso: dar clic en Project.

Figura 8. Diseño Esquemático de conexión I2C.

Creación del Proyecto en MPLAB IDE

: ejecutar la plataforma MPLAB IDE.

Segundo paso: dar clic en Project.

Figura 9. Mplab IDE.

12

de conexión I2C.

• Tercer paso:

• Cuarto paso: seleccionar el PIC a utilizarPIC18F4550.

Para continuar con el siguiente paso previamente se debe tener instalado Compiler y el Plugin MPLABhttp://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: en la figura 11

• Séptimo paso

una X indicando que no se encuentra el ejecutable de CCS C Complier lo que se hace es dar clic en Browse para encontrarlo.

Tercer paso: abierto Project dar clic en Project Wizard

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

Figura 10. Selección de Microcontrolador.

Para continuar con el siguiente paso previamente se debe tener instalado el Plugin MPLAB los cuales se pueden descargar del siguiente link

http://www.ccsinfo.com/downloads.php

paso: instalado el Plugin de MPLAB se pude utilizar para editar y crear proyectos utilizando el compilador de C de CCS.

paso: buscar en Active Toolsuite CCS C Compileren la figura 11.

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

d

para este caso se emplea el

. Selección de Microcontrolador.

Para continuar con el siguiente paso previamente se debe tener instalado CCS C se pueden descargar del siguiente link:

paso: instalado el Plugin de MPLAB se pude utilizar para editar y crear proyectos utilizando el compilador de C de CCS.

CS C Compiler como se parecía

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.

• Octavo paso:

que se necesita se selecciona C

• Noveno pasotrabajar en el

Figura 11. Selección del Compilador.

Octavo paso: se aprecia la carpeta PICC donde se encuentra el ejecutable que se necesita se selecciona Ccsc.

Figura 12.

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

14

Selección del Compilador.

donde se encuentra el ejecutable

da clic en abrir y a partir de este momento se puede

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

Figura 13.

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

Figura 14.

15

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

• Onceavo paso: damos clic en siguiente hasta llegar al Summary, se verifica que los datos estén bien

• Doceavo paso: se da clic en la creación de un nuevo archivo aprecia en la figura 16

Onceavo paso: damos clic en siguiente hasta llegar al Summary, se verifica que los datos estén bien diligenciados y se procede a

Figura 15. Summary.

paso: se da clic en la creación de un nuevo archivo

aprecia en la figura 16.

Figura 16. Editor de texto.

16

Onceavo paso: damos clic en siguiente hasta llegar al Summary, se verifica se procede a finalizar.

paso: se da clic en la creación de un nuevo archivo como se

• Treceavo paso: se procede a guardar el documento donde se ubica la carpeta contenedora del proyecto y nombre al que se le vino asignado anteriormente “.C”.

8.3. Configuración

// Directivas del programa: #include <18f4550.h>

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

#use delay(clock=4000000)

#byte PORTB=0x07

#use i2c(MASTER, SDA=PIN_B0, SCL=PIN_B1,TRANSMISIÓN I2C

int buffer;

int ban=0, i=0;

float dato, sensor=0;

void CONVERSOR ()

{

set_adc_channel(0);

delay_ms(20);

Treceavo paso: se procede a guardar el documento donde se ubica la carpeta contenedora del proyecto y se da un nombre,

al que se le vino asignado anteriormente pero con es estima

Figura 17.

Configuración del programa en modo maestro:

Directivas del programa:

#include <18f4550.h> // CONFIGURACIÓN DEL MICROCONTROLADOR

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

4000000) // RELOJ DE 4MHZ

#byte PORTB=0x07 // DIRECCIÓN DEL PORTB

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

set_adc_channel(0); // PUERTO RA0

17

Treceavo paso: se procede a guardar el documento donde se ubica la se da un nombre, si se quiere el mismo

pero con es estimativo de

// CONFIGURACIÓN DEL MICROCONTROLADOR

// CONFIGURACION DE LA

18

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); // CONFIGURACIÓN DEL PUERTO RA0 TO RA3 COMO ADC

setup_adc(ADC_CLOCK_INTERNAL); // CONFIGURACIÓN DE FUNCIONAMIENTO DE ADC CON EL CLOCK INTERNAL

delay_ms(10); // RETARDO PARA LA COMUNICACIÓN

while(TRUE)

{

CONVERSOR(); // LLAMADO AL CONVERSOR

dato=( 15.0 * sensor) / 255.0; // CONVERSIÓN DEL SENSOR A UN TOPE DE 15 CON UNA RESOLUCIÓN DE 8 BITS.

i=dato;

if(input(PIN_B3)) {ban=1;} // SE ACTIVA LA TRANSMISIÓN PARA EL ESCLAVO 1

if(input(PIN_B4)) {ban=2;} // SE ACTIVA LA TRANSMISIÓN PARA EL ESCLAVO 2

if(input(PIN_B5)) {ban=3;} // SE ACTIVA LA TRANSMISIÓN PARA EL ESCLAVO 3

if(ban==1) // TRANSMISIÓN CON EL ESCLAVO 1

{

i2c_start(); // CONDICIÓN DE INICIO

i2c_write(0xd0); // DIRECCIÓN DEL ESCLAVO CON QUE SE REALIZA LA COMUNICACIÓN

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

i2c_stop(); // CONDICIÓN DE STOP

delay_ms(500); // RETARDO PARA QUE LA COMUNICACIÓN NO SEA CONSTANTE

}

19

if(ban==2) // TRANSMISIÓN CON EL ESCLAVO 2

{

i2c_start(); // CONDICIÓN DE INICIO

i2c_write(0xd2); // DIRECCIÓN DEL ESCLAVO CON QUE SE REALIZA LA COMUNICACIÓN

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

i2c_stop(); // CONDICIÓN DE STOP

delay_ms(500); // RETARDO PARA QUE LA COMUNICACIÓN NO SEA CONSTANTE

}

if(ban==3) // TRANSMISIÓN CON EL ESCLAVO 3

{

i2c_start(); // CONDICIÓN DE INICIO

i2c_write(0xd4); // DIRECCIÓN DEL ESCLAVO CON QUE SE REALIZA LA COMUNICACIÓN

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

i2c_stop(); // CONDICIÓN DE STOP

delay_ms(500); // RETARDO PARA QUE LA COMUNICACIÓN NO SEA CONSTANTE

}

};

}

8.4. Configuración del programa en modo Esclavo:

Para este caso solo se especifica la descripción del programa para el esclavo 1 teniendo en cuenta que para el esclavo 2 con dirección (0Xd2) y esclavo 3 con dirección (0xd4) es el misma programación solo cambia las dirección. // Directivas del Programa:

#INCLUDE <16f883.h> // CONFIGURACIÓN DEL MICROCONTROLADOR

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

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

20

#byte PORTA=0x05 // Dirección del PortA

#byte PORTB=0x06 // Dirección del PortB

#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, ADDRESS=0xd0, FAST , FORCE_HW) // CONFIGURACIÓN DE LA RECEPCIÓN I2C

// (ADDRESS =0Xd0) ES LA DIRECCIÓN DE RECEPCIÓN DEL ESCLAVO QUE ENVÍA EL MÁSTER ES AQUÍ DONDE SE CAMBIA LA DIRECCIÓN PARA EL PROGRAMA DEL ESCLAVO 2 POR (0Xd2) Y LA DEL ESCLAVOS 3 POR (0Xd4).

char state;

int dato2, com=0, dato=0;

// Recepción de la comunicación:

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 LEÍDO DEL BUS

com=dato;

// SE AÑADE LA INSTRUCCIÓN if(com !=208) PARA EVITAR QUE LA DIRECCIÓN DE RECEPCIÓN DEL ESCLAVO 0xd0=208 POR RETARDO DE COMUNICACIÓN 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 TRANSMISIÓN

dato2=com;

}

}

}

// Reconocimiento de datos enviados por el master:

void RECONOCIMIENTO_DATOS ()

{

21

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

}

// Ejecución 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();

};

}

22

8.5. Esquema de funcionamiento en hardware.

Figura 18. Esquema de Funcionamiento en hardware.

9. BIBLIOGRAFÍA

[1] García Eduardo Breijo. Compilador C CCS y Simulador Proteus para Microcontroladores Pic.. Primera Edicion .Alfa Omega Grupo Editor. México.

[2] Microchip PIC18F2455/2550/4455/45 Data sheet.