favorite_border favorite

Circuito interface USB a I2C

S310425
USB-I2C

USB-I2C es un circuito interfaz que convierte señales usb en señales de bus I2C.

El circuito se alimenta directamente desde el propio bus USB por lo que es muy cómodo de manejar.

Utiliza el integrado convertidor de USB a Serie de la casa FTDI por lo que hay disponibles controladores. Una vez instalado el driver el circuito aparece en el ordenador como un puerto serie más, por lo que todo lo que hace falta para poder controlar dispositivos I2C es mandar las órdenes directamente al puerto serie y el circuito se encarga de traspasarlas al bus I2C. 

27.45 €
favorite_border favorite
favorite_border favorite

Más información

USBI2C es un circuito interfaz que convierte señales usb en señales de bus I2C. El circuito se alimenta directamente desde el propio bus USB por lo que es muy cómodo de manejar. Este circuito utiliza el integrado convertidor de USB a Serie de la casa FTDI por lo que hay disponibles controladores tanto para Windows como para Apple y Linux. Una vez instalado el driver el circuito aparece en el ordenador como un puerto serie mas, por lo que todo lo que hace falta para poder controlar dispositivos I2C es mandar las ordenes directamente al puerto serie y el circuito se encarga de traspasarlas directamente al bus I2C. Gracias a este circuito se pueden controlar desde un PC cualquier dispositivo I2C, incluyendo los sensores de distancia por ultrasonido SRF02, SRF08, SRF10 de nuestro catalogo. Si no se utiliza el bus I2C, el circuito actúa como puertos de entrada y salida normales que se controlan desde el PC por USB. En este caso se tiene una línea de entrada y dos puertos mas que pueden funcionar como entradas o salidas. Hay disponible un software de control de ejemplo para Windows que permite controlar los puertos desde el PC.

Paso primero: obtención de drivers

El módulo USB-I2C utiliza el chip USBFTDI FT232Rpara controlar los protocolos USB. Lo primero que debe hacer para conectar el USB-I2C a un puerto USB es bajarse los drivers del puerto virtual Com directamente de la página web FTDI, estos están disponibles para Windows, Apple, Linux y sistemas Open BSD. Antes de conectar el USB-I2C a su ordenador debería tener los drivers instalados.

Puerto COM asignado

Después de instalar los drivers y conectarlos en el modulo USB-I2C para un puerto USB adicional necesita saber que puerto COM se le ha asignado.Para ello solo tendrá que entrar en "Mi PC" y seleccionar el "Dispositivo Principal" abriendo después el "Puerto COM&LPT" y verá el Puerto COM2. Si desea cambiar el número del puerto solo debe seleccionarlo , elegir propiedades, selecciones avanzadas y cambiarlo al puerto serie que desee sabiendo que siempre estos deben transmitir a 19200 baudios, 8 bits de datos, no paridad y dos bits de parada.

Conexiones

El diagrama de debajo muestra las conexiones del circuito USBI2C.

Conexiones del circuito USBI2C.

0v Gnd

El pin 0v Gnd debe estar conectado a el 0v Gnd del dispositivo I2C.

Input 1

El pin Input 1 se ha habilitado para que sea un pin de entrada con una resistencia Pull-Up de 47k en la PCB.

SCL y SDA

Estos pins son las conexiones del bus I2C y deben conectarse directamente a los pines SCL y SDA de su dispositivo 12C. El módulo USB-I2C es siempre un bus maestro y está ajustado a la resistencia pull-up 4,7k en la PCB.

+5v

El pin de alimentación es de +5V

Comandos

El USB-I2C responde a los comandos que se le envían desde el PC. Hay solo tres comandos primarios: 
I2CD_CMD (0x53) - Es el que le permite leer o escribir a dispositivos que no tienen registrada una dirección interna como las I/O PCF8574 de la placa de expansión Philips.
I2C_CMD (0x55) - Es el que le permite leer o escribir a dispositivos con registros internos como el EEPROM's o nuestra propios módulos.
USB-I2C_CMD (0x5A) - .Una serie de comandos enviados al módulo generalmente para comunicaciones seleccionadas.

Escribiendo en los dispositivos 12C sin registros de dirección interna

Estos incluyen dispositivos como el expandidor I/O PCF8574. Después de enviar el comandoI2CD_CMD puede enviar la dirección del dispositivo y byte de datos.

  Comando primario USB-I2C Dirección del dispositivo+ bit R/W Byte de datos
Tipo de byte I2CD_CMD Dirección+R/W Dato
Ejemplo 0x53 0x40 0x00
Significado Comando de lectura/escritura directa PCF8574 dirección I2C Configuración de todos los byte de nivel lógico bajo

Estas secuencias de 3 bytes configura todos los bits de un chip de nivel lógico bajo de un PCF8574 I/O. Esta secuencia de 3 bytes inicia un sensor de distancias por ultrasonidos SRF08 en la dirección 0xE0. Los 3 bytes deberían enviarse al módulo USB-I2C en una secuencia. Un espacio vacío hará que el módulo USB-I2C re-inicie su bucle interno del comando de sincronización e ignore el mensaje. Después de recibir todos estos bytes, el módulo USB-I2C ejecuta la operación de escritura a través del bus IC2 en el PCF8574 y envía un sólo byte de vuelta al ordenador. El byte devuelto será 0x00 (zero) si el comando de escritura falla y será diferente de cero si el comando de escritura se ha ejecutado con éxito. El ordenador debería esperar a que este byte sea devuelto (se deshabilita después de 500mS) antes de proceder con la siguiente transacción.

Leyendo desde un dispositivo 12C sin registro de dirección

Es similar al comando de escritura, excepto en que se debe sumar 1 a la dirección del dispositivo para que el número sea impar. Para leer de un módulo PCF8574 en la dirección 0x40, debería utilizar como dirección el valor 0x41 . (Cuando la dirección salga a través del bus I2C, será el 1 que esté en la posición más baja el que indique que se está produciendo un ciclo de lectura). En el cuadro se muestra un ejemplo de lectura de la entrada en un expandidor PCF8574.

I2CD_CMD PCF8574 I2C dirección + Bit de lectura
0x53 0x41

El módulo USB-I2C llevará a cabo una operación de lectura en el bus I2C y devolverá un solo bytes (las entradas PCF8574) al ordenador. El ordenador debería esperar a que se retorne este bytes (se desactiva después de 500mS) antes de proceder con la siguiente transacción.

Escribir directamente en un dispositivo 12C sin registro de dirección interna

Esto incluye a casi todos los dispositivos I2C. Después de enviar el comando I2C_CMD puede enviar la dirección del dispositivo, las direcciones de los registros internos de los dispositivos en los que quiere escribir y el número de bytes que está escribiendo. El número máximo de bytes de datos no debería superar los 60 para evitar el desbordamiento del buffer interno del modulo USB-I2C.

  Comando primario de USB-I2C Dirección del dispositivo+ bit R/W Registro interno del dispositivo Número de bytes de datos Los bytes de datos
Tipo de Byte I2C_CMD Addr+R/W Reg Byte Count Data
Ejemplo 0x55 0xE0 0x00 0x01 0x51
Significado Comando primario USB-I2C Dirección SRF08 I2C Registro de comandos SRF08 Sigue un byte de comando Empezar a medir en cm

Esta secuencia de 5 bytes inicia un sensor de distancias por ultrasonidos SRF08 en la dirección 0xE0. Los 5 bytes deberían enviarse al módulo USB-I2C en una secuencia. Un espacio vacío tendrá hará que el módulo USB-I2C re-inicie su bucle interno del comando de sincronización e ignore el mensaje. Después de recibir todos estos bytes, el módulo USB-I2C ejecuta la operación de escritura a través del bus IC2 en el SRF08 y envía un sólo byte de vuelta al ordenador. El byte devuelto será 0x00 (zero) si el comando de escritura falla y será diferente de cero si el comando de escritura se ha ejecutado con éxito. El ordenador debería esperar a que este byte sea devuelto (se deshabilita después de 500mS) antes de proceder con la siguiente transacción.

A continuación, encontrará otro ejemplo de comando de escritura - esta vez se utilizará una secuencia de 8 bytes para inicializar el controlador del motor MD22: 

I2C_CMD MD22 Addr+R/W Registro de modo Recuento de byte de datos Modo 1 de MD22 Motor izquierdo detenido Motor derecho detenido Aceleración rápida
0x55 0xB0 0x00 0x04 0x01 0x00 0x00 0x02

El módulo USB-12C volverá a responder con un valor distinto de cero si el comando de escritura se ejecuta correctamente y un valor cero si no se ejecuta. Si el comando fallase, entonces significaría que no se ha recibido información desde el dispositivo I2C.

Leer directamente de un dispositivo 12C con registro de dirección interna

Es similar al comando de escritura, excepto en que se debe sumar 1 a la dirección del dispositivo para que el número sea impar. Para leer de un módulo SRF08 en la dirección 0xE0, debería utilizar como dirección el valor 0xE1 .(Cuando la dirección salga a través del bus I2C, será el 1 que esté en la posición más baja el que indique que se está produciendo un ciclo de lectura). El número máximo de bytes de datos solicitados no puede superar los 60 para evitar el desbordamiento del buffer interno del USB-I2C. A continuación, encontrará un ejemplo de lectura de dos bytes procedente de la brújula CMPS03:

I2C_CMD CPMS03 I2C dirección + bit de lectura Registro de retardo de CMPS03 Número de bytes de lectura
0x55 0xC1 0x02 0x02

El módulo USB-I2C llevará a cabo una operación de lectura en el bus I2C y devolverá dos bytes al ordenador el byte de mas peso primero. El ordenador debería esperar a que se retornen ambos bytes (se desactiva después de 500mS) antes de proceder con la siguiente transacción.

Conexion de un sensor SRF02 al pc con el circuito USBI2C

Comandos USB-12C

El formato del comando USB-12C es como aparece en el cuadro de debajo:

USB-12C_CMD Comando USB-12C Dato 1 Dato 2
 0x5A Ver abajo Especifico de comando Especifico de comando

Los comandos propios del USBI2C están siempre formados por una secuencia de cuatro bytes. Comienzan con el comando primario USB-I2C_CMD que continúa con el propio comando CM02. A lo anterior les siguen los dos bytes de datos pueden estar vacíos si no están en uso, aunque deberán incluirse para crear una secuencia de comandos de 4 bytes. Estos comandos son los siguientes: 

Hexadecimal Comandos Bytes devueltos Función
0x01 REVISION  1 Devuelve el número de revisión del firmware de USB-I2C
0x02 NEW_ADDRESS 1 Modifica la dirección I2C de un SRF08
0x03 UNUSED 1 Sin utilizar - solo para compatibilidad del CM02 - retorno 0x00
0x04 SCAN1 6 Enviar datos del motor - devuelve los datos de la batería, la brújula y el sonar.  
0x05 SCAN2 9 Igual pero para 2 SRF08
0x06 SCAN3 12 3 SRF08
0x07 SCAN4 15 4 SRF08
0x08 SCAN6 21 6 SRF08
0x09 SCAN8 27 8 SRF08
0x0A SCAN12 39 12 SRF08
0x0B SCAN16 51 Todos los 16 SRF08 posibles
0x10 SETPINS 1 Configuración de los pins I/O altos/bajos
0x11 GETPINS 1 Obtención del estado del pin I/O
0x12 GETAD 4 Obtención del valor análogo en I/O2 y I/O3

El Comando REVISION se utiliza para leer la revisión del firmware de CM02. Devuelve un sólo byte indicando el número de revisión. Los dos bytes de datos que no están utilizados puede ser cualquier cosa, pero tienen que ser enviados.

El Comando NEW_ADDRESS se utiliza para modificar la dirección I2C de un SRF08 con una dirección diferente. La nueva dirección debería estar en el primero de los dos bytes de datos. Aunque el segundo byte de datos no está en uso y puede ser cualquier cosa, sí que debe ser enviado. Los cambios en las direcciones en los SRF08 requieren 4 transacciones independientes en el bus I2C. El USB-I2C sabe cómo modificar la dirección I2C de un SRF08 y simplemente tendrá que enviarle la nueva dirección a través de este comando. Cuando lo esté utilizando, asegúrese de que tiene un solo módulo SRF08 conectado, ya que de lo contrario definirá la misma dirección para todos los módulos SRF08 que tenga conectados en el bus. Se devolverá un sólo byte con la nueva dirección cuando la tarea haya finalizado.

El Comando UNUSED Sin utilizar - solo para compatibilidades con el CM02 - retorno 0x00.

El Comando SCAN es muy útil al utilizar nuestros módulos en su robot. Da por sentado que dispone de un controlador de motor MD22, un módulo de brújula CMPS03 y varios módulos sensores de distancias por ultrasonidos SRF08. El comando SCAN1 da por sentado que tiene un 1 unidad de SRF08, mientras que SCAN8 da por sentado que tiene 8 unidades de SRF08. Los dos bytes de datos contienen los valores de velocidad del motor izquierdo y derecho para el controlador de motor MD22. Después de enviar las nuevas velocidades del motor al MD22, el módulo USB-12C enviará un datos de retorno compuesto por la tensión de la batería como un solo byte. Va seguido de los dos bytes de la brújula el primer byte de mas peso primero y después los tres bytes para cada SRF08. El primero de los tres bytes se trata de la lectura del sensor de luz (fotosensor) del módulo SRF08. Los siguientes dos bytes es la medida del sensor de distancia el primer byte es el de mas peso. Por ejemplo, si se utiliza el comando SCAN2, debería recibir un total de 9 bytes:

Voltios de batería Byte de nivel lógico alto de la brújula Byte de nivel lógico bajo de la brújula SRF08 en fotosensor 0xE0 SRF08 en el byte de nivel lógico alto 0xE0 de distancia SRF08 en el byte de nivel lógico bajo de distancia 0xE0 SRF08 en fotosensor 0xE2 SRF08 en el byte de nivel lógico alto de distancia 0xE2 SRF08 en el byte de nivel lógico bajo de distancia 0xE2

Los datos de retorno del SRF08 siempre empiezan con las direcciones 0xE0, 0xE2, 0xE4 - sumando 1 al valor de la dirección cada vez que se soliciten hasta que se envíen todos los datos del módulo SRF08.

Después de enviar los datos de vuelta al ordenador, el USBI2C envía automáticamente un nuevo comando para calcular la distancia en todos los módulos SRF08s. El comando de cálculo de distancia utilizado es 82 (0x52) que retorna un valor expresado en uS. Para convertir este valor en centímetros deberá dividirlo entre 58 y para convertirlo en pulgadas, dividirlo entre 148.

Las direcciones del módulo SRF08 deberían estar definidas antes de ejecutar este comando y además el módulo MD22 debería estar inicializado en el modo y aceleración deseados. Otro factor importante: el comando SCAN también establece un temporizador de 500mS en el módulo USB-I2C. Si no se recibe otro comando SCAN en este plazo de tiempo, se enviará automáticamente un comando al módulo MD22 para detener los motores. Esta opción evita que su robot camine fuera de control en el caso de que se saliera del área de alcance de la radio o pierda la conexión.

LEDs Hay dos indicadores led de estado en el módulo CM02. El led rojo indica que la alimentación está activa, mientras que si el led verde parpadea brevemente, entonces indica que se está recibiendo un comando desde el bus USB. EL led rojo puede ser apagado o encendido usando el comando SETPINS como aparece debajo.

I/O PINS  

Si el módulo USB-12C no está siendo usado por el 12C, puede ser usado como un controlador general de I/O con tres líneas de entradas y salidas. La entrada 1 es siempre un pin de entrada única y tiene una resistencia pull-up de 47k ( no 4K7 como las otras). Los otros dos pueden ser entradas y salidas. Las salidas son configuradas como niveles lógicos altos/bajos con el comando SETPINS. El pin no sube de forma activa hasta un nivel lógico alto sino que la resistencia pull de 4,7k libera el pin y fuerza el valor lógico alto. La salida de un nivel lógico bajo es conducida de forma activa y puede descender un máximo de 24mA. El comando GETPINS volverá al estado de los pins I/O. Para usar un pin I/O como un pin de entrada este debe tener un 1 (nivel lógico alto) escrito en el. Este liberará el pin para que así la resistencia de 4,7 k empuja a esta a un nivel lógico alto, para que pueda ser usado como una entrada. Ambos comandos de SETPINS y GETPINS devolverán el estado de los pins de I/O, sin embargo solo el comando SETPINS puede variarlos. Los bits en los bytes de datos escritos por el SETPINS y devueltos mediante el SETPINS y GETPINS tienen el siguiente formato:

7 6 5 4 3 2 1 0
x x x x I/O3 I/O2 Input1 Led rojo

El siguiente comando apagará el Led rojo y convertirá las I/O a nivel lógico alto para que puedan ser usados como entradas:

USB-I2C_CMD Comando SETPINS Data 1 Data2
 0x5A  0x10 0x0E 0x00 (sin usar)

Entradas analógicas

El módulo USB-12C puede también convertir los valores análogos en pins I/O2 y I/O3. Antes de hacer esto los pins de I/O deberían ser configurados con nivel lógico alto, para hacer de ellas entradas. Recuerde que aunque este es antes que nada un interface USB a I2C tiene una resistencia pull-up de 4,7k. Lo cual debe tenerlo en cuanta cuando vaya a conectar su entrada analógica.

El comando siguiente devolverá el valor analógico:

USB-I2C_CMD Comando GETAD Dato 1 Dato 2
 0x5A  0x12 0x00 (sin utilizar) 0x00 (sin utilizar)

Con los datos analógicos devueltos en el siguiente formato:

Byte 1 Byte 2 Byte 3 Byte 4
I/O2 Byte de mayor peso I/O2 Byte de menor peso I/O3 Byte de mayor peso I/O3 Byte de menor peso

Las entradas analógicas usan una convertidor de 10-bit, así podrá ver los valores de 0 a 1024 (0x0000 a 0x03FF)

Nota - No puede mezclar el modo de I/O y el modo de I2C, los comandos de I/O no deberían usarse cuando el dispositivo I2C está siendo usado.

Software de prueba USB-I2C

Para ayudarle a probar y poner rápidamente en funcionamiento el USBI2C, le proporcionamos un par de simples programas de prueba. El primero es para el USBI2C conectado a un sensor de distancia ultrasónico SRF08.

Conexión de un sensor de distancias por ultrasonidos SRF08 a un PC con la ayuda del modulo USBI2C      Este programa de prueba permite ver las medidas tomadas por un sensor SRF08 en un PC

El conector del módulo USB-I2C puede ser soldado directamente a el SRF08 o si lo prefiere puede usar un cable o conector como se muestra en la imagen. El modulo USB-I2C puede suministrar 25mA para alimentar el SRF08. El software automaticamente busca el SRF08 y muestra su dirección I2C, junto con el número de revisión, el alcance y la lectura del foto sensor. Puede bajarse el usb_i2c_srf08.exe y elCsource code.

El segundo es para las pruebas de los modos I/O, y le muestran como configurar y leer los pines de entrada y salida, así como a leer las entradas analógicas.