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 - OBTENGA LOS DRIVERS
El módulo USB-I2C utiliza el chip USB FTDI
FT232R para 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.
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 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 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.
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 ANÁLOGAS
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.
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 el Csource
code aqui.
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.
Puede bajarse el usb_i2c_io.exe y el Csource
code aqui.
Haga clic en el botón COMPRAR para añadir este producto a su carrito de la compra.
27,45-Euros.
IVA incluido
|
CIRCUITO INTERFACE USB A I2C
Vea mas productos de esta categoría en:
Circuitos de Interface de entradas y salidas
Ir a la Página Principal de www.SuperRobotica.com
Actualizada el 18/10/2024 © 2002 -2024 INTPLUS ®. Todos los derechos reservados
|