Descargar - Creatividad Ahora

Download Report

Transcript Descargar - Creatividad Ahora

ARDUINO II
I2C
[email protected]
1
I2C
2
Introducción
BUS I2C
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
Fuente: http://galia.fc.uaslp.mx/~cantocar/microcontroladores/EL_BUS_I2C/TRANSPARENCIASI2C.PDF
3
Introducción
BUS I2C
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
Fuente: http://galia.fc.uaslp.mx/~cantocar/microcontroladores/EL_BUS_I2C/TRANSPARENCIASI2C.PDF
4
Introducción
BUS I2C
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
5
Introducción
BUS I2C
Conexión al bus
•
•
Todos los dispositivos conectados a las mismas líneas.
Las salidas deben ser en colector o drenador abierto.
6
Introducción
BUS I2C
Protocolo de acceso al medio: maestro - esclavo
• 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.
7
Introducción
BUS I2C
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
8
Introducción
BUS I2C
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.
9
Introducción
BUS I2C
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
10
Introducción
BUS I2C
Finalización de la Transmisión
•
•
La transmisión la finaliza el maestro
Flanco de subida en SDA con SCL a nivel alto
11
Introducción
BUS I2C
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)
12
Introducción
BUS I2C
Maestro envía datos a un esclavo
13
Introducción
BUS I2C
Intercambio de datos
14
Introducción
BUS I2C
Maestro lee datos de un esclavo
15
Introducción
BUS I2C
Intercambio de datos
16
Introducción
BUS I2C
Librería WIRE
La librería viene incluida en el IDE Arduino. Esta librería te permite comunicar con
dispositivos I2C / TWI.
17
Introducción
BUS I2C
Librería WIRE
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.
18
Introducción
BUS I2C
Librería WIRE
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.
19
Introducción
BUS I2C
Librería WIRE
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:
byte
write () devolverá el número de bytes escritos, aunque la
lectura de ese número es opcional
20
Introducción
BUS I2C
Librería WIRE
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.
21
Introducción
BUS I2C
Librería WIRE
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: éxito
1: 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.
22
Introducción
Acelerómetro:
ADXL345
23
Introducción
Acelerómetro:
ADXL345
Dirección SDO/ALT Read
ADDRESS
Write
0x1D
1
0x3B
0x3A
0x53
0
0xA7
0xA6
24
Introducción
Aceleró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