ARDUINO II I2C

26
ARDUINO II I2C 1 [email protected]

description

ARDUINO II I2C. [email protected]. I2C. BUS I2C. Introducción. Origen. Desarrollado por Philips a principios de los 80 como medio de interconexión entre una CPU y dispositivos periféricos dentro de la electrónica de consumo. - PowerPoint PPT Presentation

Transcript of ARDUINO II I2C

Page 2: ARDUINO II I2C

I2C

2

Page 3: ARDUINO II I2C

3

Origen

• Desarrollado por Philips a principios de los 80 como medio de interconexión entre una CPU y dispositivos periféricos dentro de la electrónica de consumo.• Simplificar las conexiones entre los periféricos (pistas, decodificadores, ..)• Aumentar de la inmunidad al ruido.• Control de sistemas de audio y vídeo (baja velocidad).

• Actualmente diseñan dispositivos basados en I2C muchos fabricantes: • Xicor, SGS-Thomson, Siemens, Intel, TI, Maxim, Atmel, Analog Devices

• Aplicaciones• Bus de interconexión entre dispositivos en una tarjeta o equipo.• Sistema de configuración y supervisión en ordenadores servidores.• Sistemas de gestión de alimentación.• Conexión en serie de dispositivos externos a un ordenador.• Tarjetas chip

IntroducciónBUS I2C

Fuente: http://galia.fc.uaslp.mx/~cantocar/microcontroladores/EL_BUS_I2C/TRANSPARENCIASI2C.PDF

Page 4: ARDUINO II I2C

4

Mas …

• Ventajas• Pocos cables de interconexión.• Componentes con encapsulado reducido.• Tarjetas reducidas.• Conexión de dispositivos a distancia

• Inconvenientes• Velocidad inferior a un bus paralelo• Disponibilidad de circuitos que soporten el bus

• Parámetros generales• Número de hilos de conexión• Velocidad (bits/segundo)• Distancia máxima y número de dispositivos• Protocolo de acceso al medio compartido• Política de direccionamiento

IntroducciónBUS I2C

Fuente: http://galia.fc.uaslp.mx/~cantocar/microcontroladores/EL_BUS_I2C/TRANSPARENCIASI2C.PDF

Page 5: ARDUINO II I2C

5

Características

• Bus de comunicación síncrono• La comunicación es controlada por una señal de reloj común

• Bus formado por 2 hilos• SDA (Serial Data Line): datos• SCL (Serial Clock line): reloj

• Velocidad de transmisión• Standard: hasta 100 Kbits/s• Fast: hasta 400 Kbits/s• High-speed: hasta 3,4 Mbits/s

• Cada dispositivo del bus tiene una dirección única• Distancia y número de dispositivos

• Limitado por la capacidad del bus. Normalmente 2 o 3 metros• Protocolo de acceso al bus:

• Maestro – esclavo• I2C soporta protocolo multimaestro

IntroducciónBUS I2C

Page 6: ARDUINO II I2C

6

Conexión al bus

• Todos los dispositivos conectados a las mismas líneas.• Las salidas deben ser en colector o drenador abierto.

IntroducciónBUS I2C

Page 7: ARDUINO II I2C

7

Protocolo de acceso al medio: maestro - esclavo

IntroducciónBUS I2C

• El maestro controla la comunicación• Genera la señal de reloj del bus (SCL)• Inicia y termina la comunicación• Direcciona a los esclavos• Establece el sentido de la comunicación

• El protocolo requiere que cada byte de información sea confirmado por el destinatario.

Nomenclatura• Emisor: Dispositivo que envía datos al bus• Receptor: Dispositivo que recibe datos del bus• Maestro: Dispositivo que inicia una transferencia, genera las

señales de reloj y termina la transferencia• Esclavo: Dispositivo direccionado por un maestro.

Page 8: ARDUINO II I2C

8

Transmisión de bits

• Los bits de datos van por SDA• Por cada bit de información es necesario un pulso de SCL• Los datos sólo pueden cambiar cuando SCL está a nivel bajo

IntroducciónBUS I2C

Page 9: ARDUINO II I2C

9

Transmisión de datos

• La unidad básica de transmisión en el byte• Las transferencias de datos son de 8 bits• Cada byte enviado requiere una respuesta de confirmación

• ACK: el destinatario (maestro o esclavo) mantiene SDA a nivel bajo durante un tiempo de bit (si no lo hace -> NACK)

• El maestro genera un pulso de SCL.

IntroducciónBUS I2C

Page 10: ARDUINO II I2C

10

Inicio de transmisión

• La transmisión la inicia el maestro• Condición: Flanco de bajada en SDA con SCL a nivel alto• Obs: Cuando nadie accede al bus hay un nivel alto en SCL y SDA

IntroducciónBUS I2C

Page 11: ARDUINO II I2C

11

Finalización de la Transmisión

• La transmisión la finaliza el maestro• Flanco de subida en SDA con SCL a nivel alto

IntroducciónBUS I2C

Page 12: ARDUINO II I2C

12

Intercambio de datos

Direccionamiento• Tras la condición de inicio el maestro envía:

• Dirección del esclavo (7 bits)• Comando de lectura o escritura (R=1 – W=0)

IntroducciónBUS I2C

Page 13: ARDUINO II I2C

13

Maestro envía datos a un esclavo

IntroducciónBUS I2C

Page 14: ARDUINO II I2C

14

Intercambio de datos

IntroducciónBUS I2C

Page 15: ARDUINO II I2C

15

Maestro lee datos de un esclavo

IntroducciónBUS I2C

Page 16: ARDUINO II I2C

16

Intercambio de datos

IntroducciónBUS I2C

Page 17: ARDUINO II I2C

17

Librería WIRE

La librería viene incluida en el IDE Arduino. Esta librería te permite comunicar con dispositivos I2C / TWI.

IntroducciónBUS I2C

Page 18: ARDUINO II I2C

18

Librería WIRE

IntroducciónBUS I2C

Función Wire.begin(address)

Descripción: Inicializa la librería Wire y configura el bus I2C como maestro o esclavo.

Parámetros: address: La dirección de 7 bits de esclavo (opcional); si no se específica, se configura como maestro.

Retorno: Nada.

Función Wire.beginTransmission(address)

Descripción: Comienza una transmisión a un dispositivo I2C esclavo con la dirección dada (address). Posteriormente, prepara los bytes a transmitir con la función write() y los transmite llamando a la función endTransmission().

Parámetros: address: la dirección de 7 bits del dispositivo a transmitir

Retorno: Nada.

Page 19: ARDUINO II I2C

19

Librería WIRE

IntroducciónBUS I2C

Función Wire.requestFrom(address, quantity)Wire.requestFrom(address, quantity, stop)

Descripción: Master solicita bytes de otro dispositivo. Los bytes pueden ser recibidos con las funciones available() y read().

Parámetros: address: La dirección de 7 bits del dispositivo a pedir los bytes. .quantity: el numero byte de la petición.stop : boolean. Será true si se envía un mensaje de stop despues de la petición, liberará el bus. False: enviará continuamente un reinicio después de la solicitud, manteniendo la conexión activa. Por defecto TRUE.

Retorno: Byte. El numero de bytes retornados desde el dispositivo esclavo.

Page 20: ARDUINO II I2C

20

Librería WIRE

IntroducciónBUS I2C

Función Wire.write(value) Wire.write(string) Wire.write(data, length)

Descripción: Escribe los datos de un dispositivo esclavo en respuesta a una petición de un maestro, o colas de bytes para la transmisión de un maestro a esclavo del dispositivo (en-entre las llamadas a beginTransmission () y endTransmission ()).

Parámetros: value: un valor para enviar como un solo byte.string: una cadena para enviar como una serie de bytes.data: un conjunto de datos para enviar como bytes.length: el número de bytes a transmitir.

Retorno: bytewrite () devolverá el número de bytes escritos, aunque la lectura de ese número es opcional

Page 21: ARDUINO II I2C

21

Librería WIRE

IntroducciónBUS I2C

Función Wire.read()

Descripción: Lee un byte que se transmite de un dispositivo esclavo a un maestro después de una llamada a requestFrom () o se transmite de maestro a un esclavo. read () se hereda de la clase de utilidad Stream.

Parámetros: Nada

Retorno: El siguiente byte recibido.

Función Wire.available()

Descripción: Devuelve el número de bytes disponibles para la recuperación con read(). Esto debería ser llamado en un dispositivo master tras una llamada al requestFrom().

Parámetros: Nada

Retorno: El número disponible de bytes.

Page 22: ARDUINO II I2C

22

Librería WIRE

IntroducciónBUS I2C

Función Wire.endTransmission()Wire.endTransmission(stop)

Descripción: Finaliza una transmisión a un dispositivo esclavo que se inició por beginTransmission() y transmite los bytes que se pusieron en cola por write().

Parámetros: stop: boolean. true enviará un mensaje de detención, liberando el bus después de la transmisión. false enviará un reinicio, manteniendo la conexión activa.

Retorno: byte, el cual indica el estado de la transmission:0: éxito1: data demasiado grande para entrar en el buffer del transmisor.2: recibe NACK en transmission de dirección.3: recibe un NACK en transmission de datos.4: otro error.

Page 23: ARDUINO II I2C

IntroducciónAcelerómetro: ADXL345

23

Page 24: ARDUINO II I2C

IntroducciónAcelerómetro: ADXL345

24

Dirección SDO/ALT ADDRESS

Read Write

0x1D 1 0x3B 0x3A0x53 0 0xA7 0xA6

Page 25: ARDUINO II I2C

IntroducciónAcelerómetro: ADXL345

• Rate bits output data: 100 Hz• Output resolution: +/-2g• Sensibilidad: 256 LSB/g• Factor de escala: 3.9 mg/LSB

25

Page 26: ARDUINO II I2C

Gracias!!!

26