comunicaciones digitales con arduino. · ejemplos de este tipo de comunicación son: i2c one wire...

15
Interfaces y Periféricos. Guía 5. 1 Comunicaciones digitales con Arduino. Describir las comunicaciones electrónicas y su programación en Arduino. Conectar un dispositivo con bluetooth con Arduino para manejo remoto. Comunicar datos desde Arduino a computadora con protocolo RS-232. Comunicar datos entre tarjetas Arduino utilizando protocolo I2C. 1 Computadora con sistema operativo Linux o Windows y con el programa Arduino IDE instalado. 1 Cable USB (tipo A hacia tipo B). 1 Tarjeta Arduino UNO R2 o R3. 1 Módulo MAX232 para comunicación con computadora 1 Cable serial plano. 2 Resistencias de 4.7kΩ. 1 Potenciómetro de 10kΩ. 1 tarjeta I/O. 1 Breadboard. 1 Pinza punta plana. 1 Cortadora (pinza de corte diagonal). Cables UTP. Debido a que Arduino UNO R3 tiene un microcontrolador ATMEGA 328 como núcleo principal, posee diversas formas de comunicarse con el exterior, permitiendo a una computadora utilizar esta interfaz para escribir y leer datos de dispositivos ya no de forma paralela, sino serial, empleando una, dos o tres líneas enviar y recibir datos por tramas a sensores de temperatura que entregan su valor con protocolo RS-232, SPI, I2C, One Wire, etc. A continuación se describen algunas de las características de los protocolos de comunicación digital: El puerto serial de las computadoras es conocido como puerto RS-232, la ventaja de este puerto es que todas las computadoras traen al menos un puerto serial, este permite las comunicaciones entre otros dispositivos tales como otra computadora, el mouse, impresora y para nuestro caso con los microcontroladores. Objetivos Específicos. Materiales y equipos. Facultad: Ingeniería Escuela: Electrónica Asignatura: Interfaces y Periféricos (IYP111). Lugar de Ejecución: Microprocesadores (3.23). Introducción Teórica.

Upload: others

Post on 11-May-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Comunicaciones digitales con Arduino. · Ejemplos de este tipo de comunicación son: I2C ONE WIRE SPI En la comunicación serial asíncrona, no son necesarios los pulsos de reloj

Interfaces y Periféricos. Guía 5. 1

Comunicaciones digitales con

Arduino.

Describir las comunicaciones electrónicas y su programación en Arduino.

Conectar un dispositivo con bluetooth con Arduino para manejo remoto.

Comunicar datos desde Arduino a computadora con protocolo RS-232.

Comunicar datos entre tarjetas Arduino utilizando protocolo I2C.

1 Computadora con sistema operativo Linux o Windows y con el programa Arduino IDE

instalado.

1 Cable USB (tipo A hacia tipo B).

1 Tarjeta Arduino UNO R2 o R3.

1 Módulo MAX232 para comunicación con computadora

1 Cable serial plano.

2 Resistencias de 4.7kΩ.

1 Potenciómetro de 10kΩ.

1 tarjeta I/O.

1 Breadboard.

1 Pinza punta plana.

1 Cortadora (pinza de corte diagonal).

Cables UTP.

Debido a que Arduino UNO R3 tiene un microcontrolador ATMEGA 328 como núcleo

principal, posee diversas formas de comunicarse con el exterior, permitiendo a una

computadora utilizar esta interfaz para escribir y leer datos de dispositivos ya no de forma

paralela, sino serial, empleando una, dos o tres líneas enviar y recibir datos por tramas a

sensores de temperatura que entregan su valor con protocolo RS-232, SPI, I2C, One Wire,

etc.

A continuación se describen algunas de las características de los protocolos de comunicación

digital:

El puerto serial de las computadoras es conocido como puerto RS-232, la ventaja de este

puerto es que todas las computadoras traen al menos un puerto serial, este permite las

comunicaciones entre otros dispositivos tales como otra computadora, el mouse, impresora

y para nuestro caso con los microcontroladores.

Objetivos Específicos.

Materiales y equipos.

Facultad: Ingeniería

Escuela: Electrónica

Asignatura: Interfaces y Periféricos (IYP111).

Lugar de Ejecución: Microprocesadores (3.23).

Introducción Teórica.

Page 2: Comunicaciones digitales con Arduino. · Ejemplos de este tipo de comunicación son: I2C ONE WIRE SPI En la comunicación serial asíncrona, no son necesarios los pulsos de reloj

2 Interfaces y Periféricos. Guía 5.

Existen dos formas de intercambiar información binaria: comunicación paralela y serie.

La comunicación paralela transmite todos los bits de un dato de manera simultánea, por lo

tanto la velocidad de transferencia es rápida, sin embargo tiene la desventaja de utilizar una

gran cantidad de líneas, por lo tanto se vuelve más costoso y tiene la desventaja de atenuarse

a grandes distancias, por la capacitancia entre conductores así como sus parámetros

distribuidos.

Tipos de Comunicaciones Seriales:

La Existen dos tipos de comunicaciones seriales: la síncrona y asíncrona.

En la comunicación serial síncrona además de una línea sobre la cual se transmitirán los datos

se necesita de una línea que lleve los pulsos de reloj que indicarán cuando un dato es válido

o está en sincronía.

Ejemplos de este tipo de comunicación son:

I2C

ONE WIRE

SPI

En la comunicación serial asíncrona, no son necesarios los pulsos de reloj. La duración de

cada bit está determinada por la velocidad con la cual se realiza la transferencia de datos. La

siguiente figura muestra la estructura de una carácter que se transmite en forma serial

asíncrona.

Figura 1. Esquema de trama de comunicación serial asíncrona.

Normalmente cuando no se realiza ninguna transferencia de datos, la línea del transmisor se

encuentra en estado de espera (idle) este quiere decir en estado alto. Para iniciar la

transmisión de datos, el transmisor coloca esta línea en bajo durante determinado tiempo, lo

cual se le conoce como bit de arranque (start bit) y a continuación empieza a transmitir con

un intervalo de tiempo los bits correspondientes al dato, empezando siempre por el BIT

menos significativo (LSB), y terminando con el BIT más significativo. Si el receptor no está

sincronizado con el transmisor, este desconoce cuándo se van a recibir los datos. Por lo tanto

el transmisor y el receptor deberán tener los mismos parámetros de velocidad, paridad,

número de bits del dato transmitido y de BIT de parada.

En los circuitos digitales, cuyas distancias son relativamente cortas, se pueden manejar

transmisiones en niveles lógicos TTL (0-5V), pero cuando las distancias aumentan, estas

Page 3: Comunicaciones digitales con Arduino. · Ejemplos de este tipo de comunicación son: I2C ONE WIRE SPI En la comunicación serial asíncrona, no son necesarios los pulsos de reloj

Interfaces y Periféricos. Guía 5. 3

señales tienden a distorsionarse debido al efecto capacitivo de los conductores y su resistencia

eléctrica. El efecto se incrementa a medida que se incrementa la velocidad de la transmisión.

Todo esto origina que los datos recibidos no sean igual a los datos transmitidos, por lo que

no se puede permitir la transferencia de datos. Una de las soluciones más lógica es aumentar

los márgenes de voltaje con que se transmiten los datos, de tal manera que las perturbaciones

a causa de la línea se pueden corregir.

La Norma RS-232

Ante la gran variedad de equipos, sistemas y protocolos que existen surgió la necesidad de

un acuerdo que permitiera a los equipos de varios fabricantes comunicarse entre sí. La EIA

(Electronics Industry Association) elaboró la norma RS-232, la cual define la interfaz

mecánica, los pines, las señales y los protocolos que debe cumplir la comunicación serial.

Todas las normas RS-232 cumplen con los siguientes niveles de voltaje:

Un “1” lógico es un voltaje comprendido entre –5v y –15v en el transmisor y entre -3v y

–25v en el receptor.

Un “0” lógico es un voltaje comprendido entre +5v y +15v en el trasmisor y entre +3v y

+25v en el receptor.

El envío de niveles lógicos (bits) a través de cables o líneas de transmisión necesita la

conversión a voltajes apropiados. En los microcontroladores para representar un 0 lógico se

trabaja con voltajes inferiores a 0.8v, y para un 1 lógico con voltajes mayores a 2.0V. En

general cuando se trabaja con familias TTL y CMOS se asume que un “0” lógico es igual a

cero Volts y un “1” lógico es igual a cinco Volts. La importancia de conocer esta norma,

radica en los niveles de voltaje que maneja el puerto serial del ordenador, ya que son

diferentes a los que utilizan los microcontroladores y los demás circuitos integrados. Por lo

tanto se necesita de una interfaz que haga posible la conversión de niveles de voltaje a los

estándares manejados por los CI TTL.

El Circuito MAX-232

Este circuito soluciona los problemas de niveles de voltaje cuando se requiere enviar unas

señales digitales sobre una línea RS-232. Este chip se utiliza en aquellas aplicaciones donde

no se dispone de fuentes dobles de +12 y –12 Volts. El MAX 232 necesita solamente una

fuente de +5V para su operación, internamente tiene un elevador de voltaje que convierte el

voltaje de +5V al de doble polaridad de +12V y –12V. Cabe mencionar que existen una gran

variedad de CI que cumplen con la norma RS-232 como lo son: MAX220, DS14C232,

MAX233, LT1180A.

Comunicaciones síncronas:

Un circuito inter-integrado (I²C, del inglés Inter-Integrated Circuit) es un bus serie de datos

desarrollado en 1982 por Philips Semiconductors (hoy NXP Semiconductors). Se utiliza

principalmente internamente para la comunicación entre diferentes partes de un circuito, por

ejemplo, entre un controlador y circuitos periféricos integrados.

Page 4: Comunicaciones digitales con Arduino. · Ejemplos de este tipo de comunicación son: I2C ONE WIRE SPI En la comunicación serial asíncrona, no son necesarios los pulsos de reloj

4 Interfaces y Periféricos. Guía 5.

El sistema original fue desarrollado por Philips a principios de 1980 con el fin de controlar

varios chips en televisores. Desde mediados de 1990 el I²C también es utilizado por algunos

competidores para designar los sistemas compatibles I²C Philips, incluyendo Siemens AG

(posteriormente Infineon Technologies AG), NEC, STMicroelectronics, Motorola (Freescale

más adelante), Intersil, etc. Hay un total de mil circuitos integrados diferentes de más de 50

fabricantes (según datos de 2014).

Figura 2. Ejemplo de conexión en protocolo I2C.

Protocolo de dos hilos de control, uno para transmitir los datos (SDA) y el reloj asíncrono

(SCL) que indica cuando leer los datos. Más GND y 5V (cuando se requiera).

Cada dispositivo conectado al bus I2C y cada uno tiene su dirección exclusiva, de 7 bits,

(Asi que, en teoría, podemos conectar 27 = 128, dispositivos).

Uno de estos componentes, debe actuar como master, es decir controla el reloj.

No se requiere una velocidad de reloj estricta, ya que es el master quien controla el Clock.

Es multi master, el master puede cambiar, pero solo uno puede estar activo a la vez, y

proporciona un protocolo de arbitraje y detección de colisiones.

Atmel introdujo por motivos de licencia la designación TWI (interfaz de dos hilos)

actualmente utilizada por algunos otros fabricantes. Desde el punto de vista técnico,

TWI e I²C son idénticos. Sin embargo, el 1 de octubre 2006, la patente original caducó,

así que ya no hay derechos de autor para el uso del término I²C.

Parte 1: Comunicación serial asíncrona por puerto RS232 de la computadora con

Arduino.

1. Encienda la computadora. Cuando cargue el sistema operativo utilice las siguientes

credenciales:

Usuario: usuario0

Contraseña: usuario

Procedimiento.

Page 5: Comunicaciones digitales con Arduino. · Ejemplos de este tipo de comunicación son: I2C ONE WIRE SPI En la comunicación serial asíncrona, no son necesarios los pulsos de reloj

Interfaces y Periféricos. Guía 5. 5

2. Abra el Arduino IDE y vaya al menú Archivo > Ejemplos > SoftwareSerial y abra el

SoftwareSerialExample que tiene el siguiente código:

/* Software serial multple serial test

Receives from the hardware serial, sends to software serial.

Receives from software serial, sends to hardware serial.

The circuit:

* RX is digital pin 3 (connect to TX of other device)

* TX is digital pin 2 (connect to RX of other device)

Note:

Not all pins on the Mega and Mega 2560 support change interrupts, so only the

following

can be used for RX:

10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69

Not all pins on the Leonardo support change interrupts, so only the following can be

used for RX:

8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

created back in the mists of time

modified 25 May 2012 by Tom Igoe based on Mikal Hart's example

This example code is in the public domain.

*/

#include <SoftwareSerial.h>

SoftwareSerial mySerial(3,2); // RX, TX

void setup()

// Open serial communications and wait for port to open:

Serial.begin(9600);

while (!Serial)

; // wait for serial port to connect. Needed for native USB port only

Serial.println("Goodnight moon!");

// set the data rate for the SoftwareSerial port

mySerial.begin(9600);

mySerial.println("Hello, world?");

void loop() // run over and over

if (mySerial.available())

Serial.write(mySerial.read());

if (Serial.available())

mySerial.write(Serial.read());

Código 1. Código del ejemplo SoftwareSerialExample

3. Analice el código presentado y proceda a armar el circuito sugerido para la prueba de

transmisión de datos entre la computadora y Arduino, ver Figura 3.

4. Observe que hay 2 conexiones seriales, ambas a 9600 baudios, descargue el sketch del

código 1 a Arduino y abra el monitor serial del Arduino IDE.

Page 6: Comunicaciones digitales con Arduino. · Ejemplos de este tipo de comunicación son: I2C ONE WIRE SPI En la comunicación serial asíncrona, no son necesarios los pulsos de reloj

6 Interfaces y Periféricos. Guía 5.

Figura 3. Conexión a puerto serie con módulo MAX232 a Arduino.

Figura 4. Circuito esquemático de tarjeta de comunicación serie con módulo MAX232.

5. Al abrir el monitor serial de Arduino IDE, configure la velocidad de transmisión a 9600

baudios como se muestra en la siguiente Figura:

Page 7: Comunicaciones digitales con Arduino. · Ejemplos de este tipo de comunicación son: I2C ONE WIRE SPI En la comunicación serial asíncrona, no son necesarios los pulsos de reloj

Interfaces y Periféricos. Guía 5. 7

Figura 5. Monitor serial con velocidad a 9600 baudios.

6. Observe que al abrir el monitor serial y configurar correctamente la velocidad aparecen

las palabras “Goodnight moon”. Ahora es necesario configurar una manera de ver los

datos que aparecen en el otro puerto serie que es el de la computadora.

Windows:

Presione la tecla inicio en su teclado (símbolo ) y digite Gtkterm.

Ubuntu (Linux):

Dé clic izquierdo en el primer icono (Buscar en el equipo ) de la barra lateral

izquierda y digite Gtkterm o UXterm.

7. Aparecerá una ventana negra, la cual es el programa para transferencias serie, por defecto

está configurado como 9600 baudios, 8 bits, Sin paridad, y 1 bit de paro, vaya con el

mouse a la parte superior de la pantalla, aparecerá la barra de menús en ella seleccione

Configuration >> Port y luego presione Ok.

Figura 6. Configuración de la velocidad a 9600 baudios en programa Gtkterm.

8. Seleccione en la barra de menús:

Configuration >> Local Echo

Configuration >> CR LF auto

Page 8: Comunicaciones digitales con Arduino. · Ejemplos de este tipo de comunicación son: I2C ONE WIRE SPI En la comunicación serial asíncrona, no son necesarios los pulsos de reloj

8 Interfaces y Periféricos. Guía 5.

9. Reinicie el Arduino Uno, puede pulsar el botón de Reset o desconectar el cable USB y

volver a conectarlo.

10. En el monitor serial de Arduino IDE se presenta el mensaje Goodnight moon y en el

GTKterm deberá aparecer el mensaje Hello World? Ponga las dos ventanas a la par una

de la otra, la del Gtkterm y la del monitor serial de Arduino IDE de forma visible, para

poder observar la transmisión del texto de una ventana hacia la otra.

11. Escriba la palabra hola en el monitor serial de Arduino IDE, dé clic en enviar y observe

qué sucede en la ventana de GTKterm.

12. Escriba en la ventana de GTKterm, observe cómo el texto digitado aparece en la pantalla

del monitor serial de Arduino IDE.

Desafíos cortos:

Basándose en el ejemplo transmita desde Arduino a la computadora un texto de 20

caracteres, se sugiere el uso de arreglos para ir enviando uno a uno los caracteres. Haga

el arreglo con caracteres tomados del teclado, guárdelo en memoria y luego envíelo.

Basándose en el ejemplo del monitor serial de Arduino IDE, transmita el valor de una

variable analógica cada segundo al puerto serie de la computadora.

Parte 2. Comunicaciones serial síncrona – I2C.

13. Arme el circuito de la siguiente figura con los compañeros de la mesa más cercana:

Figura 7. Conexión de dos Arduinos para comunicación I2C.

14. Descargue el siguiente sketch para el maestro I2C (mesa 1).

Page 9: Comunicaciones digitales con Arduino. · Ejemplos de este tipo de comunicación son: I2C ONE WIRE SPI En la comunicación serial asíncrona, no son necesarios los pulsos de reloj

Interfaces y Periféricos. Guía 5. 9

//Arduino uno - Master

#include <Wire.h>

#define I2C_ADDR 0x08

int inByte = 0; // Byte de entrada serial

int c=0;

char c2;

void setup()

Wire.begin(); // Habilita bus I2C

// (Dirección es opcional para el maestro)

Serial.begin(9600); // Inicia comunicación serial

Serial.println("******************************");

Serial.println("Prueba bus I2C (Maestro)"); //Imprime un mensaje en el monitor.

Serial.println("******************************");

Serial.println("El dato enviado por el esclavo es: ");

void loop()

while (Serial.available() > 0)

inByte = Serial.read();

Wire.beginTransmission(I2C_ADDR); // transmite a dirección #8

Wire.write(inByte); // Envía un byte

Wire.endTransmission(); // Detiene la transmisión

Wire.requestFrom(I2C_ADDR, 1); //request 1 bytes from slave device #8

while (Wire.available()) //slave may send less than requested

c = Wire.read(); //receive a byte as character

c2 = (char)c;

if (c2>9 & c2<=127)

Serial.print(c2); //print the character

delay(10);

Código 2. Código para maestro I2C.

15. Descargue el siguiente sketch para el esclavo I2C (mesa 2).

//Arduino uno - Esclavo

#include <Wire.h>

#define I2C_ADDR 0x08

int inByte;

int c=0;

char c2;

void setup()

Wire.begin(I2C_ADDR); //Se une al bus I2C con dirección 0x08

Wire.onRequest(requestEvent); //Registra un evento - función para escribir

Wire.onReceive(receiveEvent); //Registra un evento - función para leer

Serial.begin(9600);

Serial.println("******************************");

Serial.println("Prueba bus I2C (Esclavo)"); //Imprime un mensaje en el monitor.

Serial.println("******************************");

Serial.println("El dato enviado por el maestro es: ");

Page 10: Comunicaciones digitales con Arduino. · Ejemplos de este tipo de comunicación son: I2C ONE WIRE SPI En la comunicación serial asíncrona, no son necesarios los pulsos de reloj

10 Interfaces y Periféricos. Guía 5.

void loop()

//Estas funciones se ejecutan cuando se recibe un dato del maestro

//se registran como evento, ver void setup()

void receiveEvent(int howMany) // Función para recibir datos

while (Wire.available()) //Bucle para la comunicación serie

c = Wire.read(); //Recibe el byte como entero

c2 = (char)c;

Serial.print(c2); //Imprime el caracter en el monitor serial

void requestEvent() // Función para enviar datos

if (Serial.available() > 0)

inByte = Serial.read();

Wire.write(inByte);

Código 3. Código para esclavo I2C.

16. Compruebe con los respectivos monitores seriales de Arduino IDE en cada computadora

que se realiza correctamente la transferencia de datos. Coloque el retorno de carro y nueva

línea en ambas ventanas del monitor serial.

Figura 8. Ventana del monitor serial de Arduino IDE.

Desafíos cortos:

Transfiera una cadena del maestro al esclavo en forma de arreglo (array) de al menos 20

caracteres.

Cree 8 caracteres para pantallas lcd, como los mostrados en la fila superior de la Figura

8, conecte al pin A0 un potenciómetro en el lado del esclavo y desde el maestro haga la

solicitud de la lectura analógica, cada 0.5 segundos, de acuerdo al valor medido será la

cantidad de cuadros que deberán llenarse por carácter en la segunda fila, tal como se hace

en el ejemplo mostrado en la fila inferior, es decir 0 debería mostrar toda la fila dos

apagada y 1023 toda la fila llena con el carácter 8 creado. Los cuadros mostrados en la

Page 11: Comunicaciones digitales con Arduino. · Ejemplos de este tipo de comunicación son: I2C ONE WIRE SPI En la comunicación serial asíncrona, no son necesarios los pulsos de reloj

Interfaces y Periféricos. Guía 5. 11

fila superior no deben aparecer allí solo son representativos para explicar cuáles

caracteres deben crearse.

Figura 9. Ejemplo de llenado de acuerdo a la lectura analógica realizada por el esclavo I2C.

Envío de valores enteros de 16 bits a través de SCI:

17. Arme el circuito de la figura 10, con los compañeros de la mesa más cercana.

Figura 10. Comunicación I2C, transferencia de datos de más de 8 bits.

18. Descargue el siguiente sketch para el maestro I2C (mesa 1) posee escritura en puerto

serial (Arduino IDE) y en tarjeta I/O.

//Arduino uno - Master

#include <Wire.h>

#define I2C_ADDR_2 0x12

int salidas[]=2,3,4,5,6,7,8,9;

int i=0;

int ix=0;

int inByte = 0; // Byte de entrada serial

int c=0;

int c2=0;

int Valor=0;

Esclavo I2C Maestro I2C

Page 12: Comunicaciones digitales con Arduino. · Ejemplos de este tipo de comunicación son: I2C ONE WIRE SPI En la comunicación serial asíncrona, no son necesarios los pulsos de reloj

12 Interfaces y Periféricos. Guía 5.

float reading;

float Volt=0;

int retardo = 2000;

int Valorbit=0;

int temp=0;

void setup()

for(i=0;i<8;i++)

pinMode(salidas[i],OUTPUT);

Wire.begin(); // Habilita bus I2C

// (Dirección es opcional para el maestro)

Serial.begin(9600); // Inicia comunicación serial

Serial.println("******************************");

Serial.println("Prueba bus I2C (Maestro)"); //Imprime un mensaje en la LCD.

Serial.println("******************************");

Serial.println("El dato enviado por el esclavo es: ");

void loop()

Valor = (c*256) + c2;

reading = float(Valor);

Volt = 5 * (reading/1023);

Serial.println("*************************************");

Serial.print("Vin (Dec): ");

Serial.println(Volt);

Serial.print("A0 (Dec): ");

Serial.println(Valor, DEC);

Serial.print("A0 (Bin): ");

Serial.println(Valor, BIN);

Serial.print("A0 (HIGH) => Valor * 256: ");

Serial.println(c, DEC);

Serial.print("A0 (LOW): ");

Serial.println(c2, DEC);

Wire.requestFrom(I2C_ADDR_2, 2); //request 2 bytes from slave device #8

while (Wire.available()) //slave may send less than requested

c = Wire.read();

c2 = Wire.read();

delay(10);

Escribe(c);

delay(retardo);

Escribe(c2);

delay(retardo);

void Escribe(int conteo)

temp=conteo;

for(ix=0;ix<8;ix++)

Valorbit=temp%2;

temp=temp/2;

if(Valorbit==0)

digitalWrite(salidas[ix],LOW);

else

digitalWrite(salidas[ix],HIGH);

Código 4. Código para maestro I2C.

Page 13: Comunicaciones digitales con Arduino. · Ejemplos de este tipo de comunicación son: I2C ONE WIRE SPI En la comunicación serial asíncrona, no son necesarios los pulsos de reloj

Interfaces y Periféricos. Guía 5. 13

19. Descargue el siguiente sketch para el esclavo I2C (mesa 2) posee entrada análoga A0

conectada a un potenciómetro.

//Arduino uno - Esclavo1

#include <Wire.h>

#define I2C_ADDR_2 0x12

int inByte;

int c = 0;

char c2;

//Dato = 1000 (Dec) => 3 E 8

//Dato = 1000 (Dec) => 1 1 1 1 1 0 1 0 0 0 (BIN)

//Dato = 1000 (Dec) => 512 + 256 + 128 + 64 + 32 + 0 + 8 + 4 + 2 + 0

//Dato = 1000 (Dec) => 768 + 192 + 40

//Dato = 1000 (Dec) => 960 + 40

int Pin = A0;

float reading;

float Volt = 0;

int Valor = 0;

int Var_low = 0; //Parte alta

int Var_high = 0; //Parte baja

void setup()

Wire.begin(I2C_ADDR_2); //Se une al bus I2C con dirección 0x12

Wire.onRequest(requestEvent); //Registra un evento - función para escribir

//analogReference(INTERNAL);

Serial.begin(9600);

Serial.println("******************************");

Serial.println("Prueba bus I2C (Esclavo)"); //Imprime un mensaje en la LCD.

Serial.println("******************************");

Serial.println("El dato enviado por el maestro es: ");

void loop()

reading = analogRead(Pin);

Valor = int(reading);

Volt = 5 * (reading / 1023);

Valor = Valor & 0x03FF;

Var_high = (int)highByte(Valor);

Var_low = (int)lowByte(Valor);

Serial.println("*************************************");

Serial.print("Vin (Dec): ");

Serial.println(Volt);

Serial.print("A0 (Dec): ");

Serial.println(Valor, DEC);

Serial.print("A0 (Bin): ");

Serial.println(Valor, BIN);

Serial.print("A0 (BIN - HIGH) => Valor * 256: ");

Serial.println(Var_high, DEC);

Serial.print("A0 (BIN - LOW): ");

Serial.println(Var_low, DEC);

delay(1000);

void requestEvent() // Función para enviar datos

Wire.write(Var_high); // Envía MSB -

Page 14: Comunicaciones digitales con Arduino. · Ejemplos de este tipo de comunicación son: I2C ONE WIRE SPI En la comunicación serial asíncrona, no son necesarios los pulsos de reloj

14 Interfaces y Periféricos. Guía 5.

Wire.write(Var_low); // Envía LSB -

delay(10);

Código 5. Código para esclavo I2C.

20. Compruebe con los respectivos monitores seriales de Arduino IDE en cada computadora

que se realiza correctamente la transferencia de datos. Adicionalmente puede observar

los led’s y verificar que se escribe por separado la parte alta como la parte baja de la

lectura analógica realizada.

Desafíos cortos:

Transfiera una doble palabra (32 bits) del maestro al esclavo en forma de arreglo (array).

Modifique el código del maestro para visualizar en una lcd la misma información que se

muestra en el monitor serial.

21. Desconecte los Arduinos de las computadoras.

22. Desarme y haga entrega del equipo que se le proporcionó en orden.

23. Apague la computadora, incluyendo el monitor.

24. Deje en orden su puesto de trabajo.

1. Realice los ejercicios y los desafíos cortos.

1. Investigue cómo comunicar dos Arduinos con protocolo SPI.

2. Comunique datos entre dos arduinos con comunicación serial asíncrona.

3. Comunique datos entre tres arduinos con comunicación en bus I2C.

Sitio web de los desarrolladores: www.arduino.cc

Referencia en línea del lenguaje: http://arduino.cc/en/Reference/HomePage

Massimo Banzi, “Getting started with Arduino” O'Reilly Media / Make Publisher,

Marzo 2009, ISBN: 978-0-596-15551-3

Actividad complementaria.

Bibliografía.

Análisis de Resultados.

Page 15: Comunicaciones digitales con Arduino. · Ejemplos de este tipo de comunicación son: I2C ONE WIRE SPI En la comunicación serial asíncrona, no son necesarios los pulsos de reloj

Interfaces y Periféricos. Guía 5. 15

EVALUACION

% 1-4 5-7 8-10 Nota

CONOCIMIENTO

25%

Conocimiento

deficiente de los

fundamentos

teóricos

Conocimiento y

explicación

incompleta de

los fundamentos

teóricos

Conocimiento

completo y

explicación clara

de los

fundamentos

teóricos

APLICACIÓN

DEL

CONOCIMIENTO

70%

No Terminó

completamente

el programa y

comentó mal el

código (30%)

No realizó el

circuito

correctamente

(40%)

Terminó

completamente

el programa pero

los comentarios

no estaban del

todo correctos

El circuito

funcionó

Terminó

completamente el

programa con sus

comentarios

correctos

El circuito

funcionó

ACTITUD 2.5%

Es un

observador

pasivo.

Participa

ocasionalmente

o lo hace

constantemente

pero sin

coordinarse con

su compañero.

Participa

propositiva e

integralmente en

toda la práctica.

2.5%

Es ordenado;

pero no hace un

uso adecuado de

los recursos

Hace un uso

adecuado de los

recursos, respeta

las pautas de

seguridad; pero

es desordenado.

Hace un manejo

responsable y

adecuado de los

recursos conforme

a pautas de

seguridad e

higiene.

TOTAL 100%

Hoja de cotejo: 1

Guía 5: Comunicaciones digitales con Arduino.

Alumno:

Docente:

Maquina N°:

GL: Fecha: