Nuevo soporte para I2C : bus de comunicaciones

  • 6 Respuestas
  • 6824 Vistas

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2324
  • Soporte Técnico
Nuevo soporte para I2C : bus de comunicaciones
« : septiembre 03, 2015, 17:52:57 pm »
Ya esta disponible para utilizar las funciones Pawn para controlar la interfaz de comunicaciones I2C disponible en la mayoría de nuestros PLC.



La interfaz I2C le permite expandir el hardware del PLC utilizando dispositivos de bajo costo disponibles en el mercado, como conversores A/D, conversores D/A, sensores de temperatura, sensores de humedad, etc.

La nota de aplicacion AN028 explica como utilizar las funciones Pawn al mismo tiempo que brinda ejemplos:

http://www.slicetex.com/docs/an/an028

Se recomienda actualizar a la ultima versión de StxLadder , utilizar la ultima versión de firmware de su dispositivo y consultar la hoja de datos antes de utilizar I2C.

Estamos a disposición por cualquier consulta!
« Última Modificación: septiembre 03, 2015, 19:47:40 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Coldmind

  • Novato
  • *
  • Mensajes: 6
Re:Nuevo soporte para I2C : bus de comunicaciones
« Respuesta #1 : octubre 30, 2015, 22:23:24 pm »
Boris, e estado leyendo sobre sensores de temperatura y por la simplesa me parecio que los de bus i2c van muy bien, ahora para no errar en la compra y ademas obtener otro dato, quisera saber si es viable este http://articulo.mercadolibre.com.ar/MLA-585703793-sensor-humedad-y-temperatura-am2320-i2c-arduino-raspberry-pi-_JM y al ver que es doble, humedad y temperatura, entonces, como lo interpreta el plc (stx8081d1)??
Son 2 direcciones distintas?
Los datos arrojados por los sensores son directamente interpretables como temperatura y humedad??

ejemplo :
New = Byte0
New = Byte1
I2C0MasterReceiveByte(0xD0, Byte0)
I2C1MasterReceiveByte(0xD0, Byte1)
(E imprimir obvio con LcdPrintf)
I2C0=25 (TEMPERATURA )
I2C1=40 (HUMEDAD)
« Última Modificación: octubre 30, 2015, 22:27:08 pm por Coldmind »

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2324
  • Soporte Técnico
Re:Nuevo soporte para I2C : bus de comunicaciones
« Respuesta #2 : noviembre 01, 2015, 12:00:51 pm »
Buenos dias,

Para el sensor que pasas (AM2320), acá tenes la hoja de datos:

http://akizukidenshi.com/download/ds/aosong/AM2320.pdf

Según especifica la hoja de datos, la lectura es un poco mas compleja (ver pagina 13-14 y 16-17).

El sensor requiere una serie de pasos "no  I2C standard" para la medición, ya que hay que despertarlo antes (wake-up) para hacer la medicion.

Segun explica, el formato es para medir RH y T:

1) Despertarlo wake-up.

2) Enviar datos a leer:
START + (I 2 C address + W) + function code (0x10) + start address register number + save data + CRC + STOP

3) Esperar medicion.

4) Leer datos:
Function code (0x10) + start address + number + CRC register

Y el ejemplo que da es:
Enviar: START +0xB8 (SLA) +0x03 (function code) +0x00 (starting address) +0x04 (register length) + STOP

Recibir: 0x03(Function Code)+0x04(data length)+0x03(high humidity)+0x39(low humidity) + 0x01 (high temperature) +0x15(low temperature)+0xE1(CRC checksum low byte) + 0xFE (CRC checksum high byte);

Donde la respuesta es:
 0339H = 3×256 +3×16 +9 = 825 => humidity = 825÷10 = 82.5% RH;
 0115H = 1×256 +1×16 +5 = 277 => temperature = 277÷10 = 27.7 ℃

El START y STOP del I2C, ya lo hacen las funciones de la STX8081 automáticamente al transmitir.

Entonces, las funciones I2C a utilizar serian (a modo general):

Código: [Seleccionar]

// Array con datos lectura/escritura.
new Data[10]

// Primero despertar sensor,
I2C0MasterSendByte(0xB8, 0)

DelayMS(5)

// Transmision

Data[0] = 0x03  // Function code
Data[1] = 0x00  // Start address
Data[2] = 0x04  // Register length

// Enviar array de datos.
I2C0MasterSend(0xB8, 3, Data)

DelayMS(5)

// Recepcion.

// Realizar transacción I2C para leer 8 bytes.
I2C0MasterReceive(0xB8, 8, Data)

// Luego en en Data estan los datos de RH y T

new RH, T

RH = (Data[2] << 8) | (Data[3])
T = (Data[4] << 8) | (Data[5])


Como ves, hay que entender el protocolo I2C y ademas "las particularidades del sensor". En este caso, parece medio enredado, mas aun por
la hoja de datos que no ayuda por como esta escrita.

Obviamente, eso es teórico, hay que tener el sensor y probarlo. Ademas de escribir mas prolijamente el código.

Este sensor: http://articulo.mercadolibre.com.ar/MLA-586460420-modulo-sensor-de-humedad-temperatura-i2c-sht21-arduino-arm-_JM
es mas caro, pero tiene una hoja de datos mejor http://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/Humidity/Sensirion_Humidity_SHT21_Datasheet_V4.pdf, basado en el chip SHT21.

Aparenta ser mas fácil de utilizar.

En ambos casos, vas a tener que experimentar y hacer varias pruebas hasta leer correctamente el sensor.
« Última Modificación: noviembre 01, 2015, 12:03:29 pm por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

Coldmind

  • Novato
  • *
  • Mensajes: 6
Re:Nuevo soporte para I2C : bus de comunicaciones
« Respuesta #3 : noviembre 05, 2015, 17:38:12 pm »
Bueno e estado viendo sensores y me encontré con este muy común y mas económico, Aun así, es bastante preciso como el que nombras antes (am2320)

El que yo propongo es el dht22 (am2302)
La hoja de datos es: (segun el vendedor de ML)
https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf

También es complicada la comunicación, verdad??
¿como seria la conexión y la comunicación de 2 o mas de estos sensores al stx8081d1?
Gracias Boris.
« Última Modificación: noviembre 05, 2015, 17:49:09 pm por Coldmind »

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2324
  • Soporte Técnico
Re:Nuevo soporte para I2C : bus de comunicaciones
« Respuesta #4 : noviembre 05, 2015, 20:07:48 pm »
Buenas tardes,

El dht22 (am2302) no usa el protocolo I2C, sino el Dallas One Wire, que solo utiliza un cable. Por lo tanto no es compatible con I2C. Requiere un desarrollo a medida.

Este es el mas confiable según hoja de datos: http://articulo.mercadolibre.com.ar/MLA-586460420-modulo-sensor-de-humedad-temperatura-i2c-sht21-arduino-arm-_JM
Ya que cumple bastante el estandard I2C. Aunque solo se puede usar uno en el bus, ya que tiene una sola dirección I2C.
Es el que te recomendaría, ya que tiene una hoja datos clara y bien documentada.

El que propusiste antes http://articulo.mercadolibre.com.ar/MLA-585703793-sensor-humedad-y-temperatura-am2320-i2c-arduino-raspberry-pi-_JM
no parece ser muy compatible y no dice como direccionar múltiple sensores I2C (ya que no muestra como especificar una direccion I2C).

Por el costo que tiene, podrías comprar uno para probar (siempre respetando limites eléctricos),  y de ultima, podrías enviarnos el sensor para que lo probemos.

Cualquier duda, quedamos a disposición.
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com

coloriginal

  • Aprendiz
  • **
  • Mensajes: 37
Re:Nuevo soporte para I2C : bus de comunicaciones
« Respuesta #5 : noviembre 20, 2015, 10:53:46 am »
Necesito saber cual es la distancia máxima entre el plc y cada sensor que soporta el protocolo y cuantos sensores admite, ya que como te comente en persona me interesa armar una rede de 20 sensores o tal vez mas por cada plc y de ahí conectar por red a una pc.

Desde ya muchas gracias.

A.S.: Cristian M. Colovatto
M. P. :3076
(0351)-157428908
A.S.: Cristian M. Colovatto
M.P.:3076
Del.:3512635979
WWW.E-PARKING.COM.AR

Soporte

  • Global Moderator
  • Experto
  • *****
  • Mensajes: 2324
  • Soporte Técnico
Re:Nuevo soporte para I2C : bus de comunicaciones
« Respuesta #6 : noviembre 20, 2015, 16:35:25 pm »
Cita de: coloriginal
Necesito saber cual es la distancia máxima entre el plc y cada sensor que soporta el protocolo y cuantos sensores admite, ya que como te comente en persona me interesa armar una rede de 20 sensores o tal vez mas por cada plc y de ahí conectar por red a una pc.

Depende del sensor que vayas a utilizar, ya que el bus I2C tiene un direccionamiento que permite un limite lógico de 112 dispositivos. Pero algunos sensores no tienen dirección configurable o la misma permite un rango pequeño, por ejemplo 4 u 8 dispositivos.

Ademas de el limite mismo del sensor, el bus I2C cuando es de conexión directa (no tiene Buffer) se degrada a mayor cantidad de dispositivos conectados, ya que agregan capacitancia (el limite es de capacidad es 400 pF), por lo que no se permitirían mas de 20 dispositivos con una longitud del cable máxima de 2 metros (funcionando a alta velocidad). Pero eso es teórico, en la practica influye la velocidad de transmisión, etc. Es decir, el bus I2C es para una distancia corta, y no mas de 10-15 dispositivos cuando se usan cables.

Otro asunto es utilizar un bus I2C con buffer, es decir con circuito adicional que mejora la señal, pero es otro tema eso.

Creo que lo ideal en ese caso, seria una red RS-485, con un esquema de protocolo ModBus, donde el PLC es master y los sensores esclavos. Pero requiere que cada sensor interprete RS-485/ModBus (ver nota de aplicación AN023.

Hay que ver el tipo de sensor que pensas utilizar.
« Última Modificación: noviembre 22, 2015, 09:19:55 am por Soporte »
SOPORTE TÉCNICO

Slicetex Electronics
www.slicetex.com