TODOPIC
Otros Microcontroladores / Dispositivos programables => Arduino => Mensaje iniciado por: felipeguerrero5ster@gmail 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
-
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