Autor Tema: I2C a 1-wire  (Leído 96 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado felipeguerrero5ster@gmail

  • PIC10
  • *
  • Mensajes: 1
I2C a 1-wire
« en: 10 de Abril de 2018, 14:37:25 »
Hola a todos,

Estoy realizando una solución en la cual saco información de estado de una electro válvula (posición), la válvula estrega una señal de 4-20 mA dependiendo de la posición. 

la conversión de 4-20 mA a 0-5 para el arduino ya esta solucionada.

el punto es que necesito enviar la información de la válvula a través de un dispositivo AVL (GPS), y el que poseo (por motivos de costos de la empresa) solo tiene comunicación 1 - wire.

he estado investigado y he encontrado que se utiliza el DS2482 pero no logro entender muy bien como  funciona

hay otro dispositivo que haga esa conversión ?

si me pueden ayudar con arrancar este bicho (DS2482) estaría eternamente agradecido

adjunto foto del sistema

PD: todo manejado desde el entorno de arduino


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 6451
Re:I2C a 1-wire
« Respuesta #1 en: 10 de Abril de 2018, 14:52:25 »
Esta explicado en el datasheet lo que debes enviar en la comunicacion I2C.

Los registros para configurar, y te da ejemplos de como es la comunicacion. Tu Arduino seria el Master I2C en este caso.

https://datasheets.maximintegrated.com/en/ds/DS2482-100.pdf

Pagina 17 en adelante: Ejemplos de comunicacion con el DS2482-100 y tabla donde que significan cada dato enviado/recibido

Notaras que hay un lugar especifico donde se envia un "comando" ( Luego del start - address+r/w - ack), Los comandos estan explicados uno por uno desde la pagina 9

Y finalmente el IC posee 3 registros, "Configuration, Status, and Read Data." El cual vas a tener que configurar unicamente el registro de Configuracion a tus deseos. Y de alli en adelante usar el IC, con los comandos de enviar (bytes o bits)  y leyendo si es el caso.

Primero necesitamos saber que se necesita para escribir/leer el dispostivo destino, por ejemplo

https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf (pag 18 - operacion 2)

Solo la parte de escritura para que sea mas corto:

- Reset + Pulso de prescensia
- Envia 0xCC para no enviar el valor de la ROM
- Envia 0x4E para escribir,
- Escribe 3 bytes


Entonces en tu DS2482-100 deberias (usando polling):

- Podrias preguntar si 1-wire esta ocupado, sino lo esta seguis
- Enviar un comando de 1-wire Reset
- Preguntas por el registro STATUS si recibio el pulso de presecencia ( PPD/SD bits )
- Enviar 1 byte ( 0xCC )
- Enviar 1 byte ( 0x4E )
- Repetir para los 3 bytes de informacion.

Cada uno de esos puntos tiene toda la comunicacion del I2C por detras.

Por ejemplo para enviar escribir un byte en el 1-wire, necesitas (siguiendo los ejemplos ):

- Enviar el Start
- Enviar la direccion (7 bits ) + el bit de W
- Esperar el ACK
- Enviar el comando de escritura 1-wire de 1 byte  (0xA5 ), esto le indica al DS2482 que el dato que sigue vaya al 1-wire
- Enviar el comando del 1-wire, siguiendo el ejemplo este seria nuesrto primero byte a enviar (0xCC) para que evite el pedir la ROM.
- Esperar el ACK

Si es el ultimo dato termina aca ( y se envia un STOP ), si hay mas por enviar, debemos fijarnos que el dato se envio por completo y que el bus 1-wire esta libre, entonces:

- Repetimos el START,
- Enviamos la direccion + Read
- Esperamos ACK
- Recibimos el byte (teniendo el puntero de direccion sobre el registro de STATUS, esto lo haces al ultimo de la configuracion)
- Le enviamos un ACK al recibirlo ( Repetimos estos 2 pasos, hasta que el bit 1WD este en 0)
- Al estar en 0 1WD procedemos a enviar un NACK
- Y STOP

Luego enviamos el otro byte que le sigue. Solo tener en cuenta que lo ultimo es esperar a que se libere el bus 1-wire
« Última modificación: 10 de Abril de 2018, 15:11:20 por KILLERJC »


 

anything