ARDUINO II I2C
description
Transcript of ARDUINO II I2C
![Page 2: ARDUINO II I2C](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/2.jpg)
I2C
2
![Page 3: ARDUINO II I2C](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/3.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/4.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/5.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/6.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/7.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/8.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/9.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/10.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/11.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/12.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/13.jpg)
13
Maestro envía datos a un esclavo
IntroducciónBUS I2C
![Page 14: ARDUINO II I2C](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/14.jpg)
14
Intercambio de datos
IntroducciónBUS I2C
![Page 15: ARDUINO II I2C](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/15.jpg)
15
Maestro lee datos de un esclavo
IntroducciónBUS I2C
![Page 16: ARDUINO II I2C](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/16.jpg)
16
Intercambio de datos
IntroducciónBUS I2C
![Page 17: ARDUINO II I2C](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/17.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/18.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/19.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/20.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/21.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/22.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/23.jpg)
IntroducciónAcelerómetro: ADXL345
23
![Page 24: ARDUINO II I2C](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/24.jpg)
IntroducciónAcelerómetro: ADXL345
24
Dirección SDO/ALT ADDRESS
Read Write
0x1D 1 0x3B 0x3A0x53 0 0xA7 0xA6
![Page 25: ARDUINO II I2C](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/25.jpg)
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](https://reader030.fdocuments.ec/reader030/viewer/2022012906/568160f7550346895dd033bf/html5/thumbnails/26.jpg)
Gracias!!!
26