ARDUINO II I2C

Post on 22-Feb-2016

67 views 1 download

description

ARDUINO II I2C. proyectos@creatividadahora.com. 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

ARDUINO III2C

1

proyectos@creatividadahora.com

I2C

2

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

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

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

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

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.

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

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

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

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

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

13

Maestro envía datos a un esclavo

IntroducciónBUS I2C

14

Intercambio de datos

IntroducciónBUS I2C

15

Maestro lee datos de un esclavo

IntroducciónBUS I2C

16

Intercambio de datos

IntroducciónBUS 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

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.

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.

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

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.

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.

IntroducciónAcelerómetro: ADXL345

23

IntroducciónAcelerómetro: ADXL345

24

Dirección SDO/ALT ADDRESS

Read Write

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

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

Gracias!!!

26