Hola a todos, yo estoy dandoles vueltas al mismo tema, y he hecho prueba con cuatro sensores ds18b20, y siempre salen en el mismo orden indiferentemente, de como estén conectados.
Looking for 1-Wire devices...
Found '1-Wire' device with address:
0x28, 0x68, 0x29, 0xEA, 0x03, 0x00, 0x00, 0xC1
Found '1-Wire' device with address:
0x28, 0x46, 0x40, 0x1A, 0x04, 0x00, 0x00, 0x8D
Found '1-Wire' device with address:
0x28, 0x5E, 0x78, 0x1A, 0x04, 0x00, 0x00, 0xCD
Found '1-Wire' device with address:
0x28, 0xF1, 0x33, 0xEA, 0x03, 0x00, 0x00, 0x27
That's it.
la verdad es que me tiene un poco despistado, pero su lógica tendrá....
Hola, @leorrr
Yo me hice un programilla que sacaba por serie el address y temperatura de cada sensor repetidamente. Tomando cada vez un sensor entre los dedos, miraba en cuál subía la temperatura y lo identifiqué externamente con el número de orden que le correspondía.
Luego tendrías que montar un array de los address en el orden en que salen, y leer temperturas en addresses[0], addresses[1] etc.
Mirando el foro encontré un link a una pagina de maxin, el creador del bus one-wire que usa el ds18b20, y que te explica el algoritmo de busqueda 1-Wire Search Algorithm | Analog Devices pero la verdad es que a mi me supera, y de todas maneras para mi proyecto no me sirve, el problema que yo veo es que si algún día se avería una sonda, y la cambias, la nueva no ocupara necesariamente la posición que tenia la antigua, y eso implica reasignar las sondas en el codigo, demasiado complicado, como solo tengo pensado usar 6, emplearé las ntc con el multiplexor 4051, así puedo controlar el orden, si se avería alguna solo es cambiar y listo.
Hola, leorrr
tal vez me lié con mi insistencia en el orden, era una forma de identificar los sensores, pero ahora veo más claro que en realidad el orden que salen no tiene importancia, lo que necesitas es asociar cada sensor físico con su address. Luego según el orden que te interese que salgan las lecturas, ordenas los address en el array DeviceAddress addresses[]. Usando el array, el orden de lectura lo estableces tú, sabiendo el número de sensores (devicecount). Yo lo hago así
Cuando falle un sensor, conectas el nuevo al arduino, y averiguas su address (con el programilla que muestra en address por consola) y colocas esa dirección en el lugar que te convenga en el array.
Realmente el orden en que salen (según ese algoritmo tan complicado) solo interesaría si no usáramos ese array.
Te animo a que uses DS18B20, se conectan todos a 3 cables, y en la lectura no interviene la resistencia de los conductores.
Si el funcionamiento de la ds18b20, lo tengo claro, de hecho dispongo de 5 de ellas, 2 waterprof, y 3 mas de los normales, y se que son mas fiables, mas versátiles, he leído que les puedes programar una temperatura de alerta y el chip te avisa cuando llega a esa "temp", etc, pero,pero... para mi es muy importante que en caso de fallo de un sensor, el orden de las sondas no se altere, y que al sustituirla se mantenga el orden físico original, ademas es mucho mas rápido de reparar, con un simple destornillador lo solucionas. con la ds18b20, aparte del destornillador, te hace falta un ordenador y alguien que sepa modificar el código.
Había pensado, incluso, en hacer una especie de menú de configuración para asignar las sondas, pero la memoria del arduino normal tiene sus limites, probablemente con el mega podría hacerlo, pero bueno lo mejor es ir poco a poco, me he propuesto, para el próximo agosto, tener un prototipo manejable..., que se pueda meter en una caja.
Saludos Leo...
Así lo estoy haciendo yo, aunque de momento no uso tantos termómetros como tú, pero el sistema es perfectamente ampliable:
Guardo en eeprom las direcciones de los dallas.
Al leer la configuración miro uno a uno si los dallas existen. Si no, asigno 00000000.
Un menú específico me permite seleccionar un índice de termómetro e ir recorriendo todos los dallas (en caso de sustituir uno) y asignar uno nuevo a ese índice, guardando luego en la eeprom la nueva configuración.
Creo que la dirección de cada dallas eran 8 bytes; tampoco me parece una escabechina de memoria 80 bytes por 10 dallas conectados, por ejemplo; más teniendo en cuenta que para muchos de los comandos necesitas invocar esa dirección, con lo que te ahorras el tener que hacer un getAddress cada vez que quieras llamar a un termómetro determinado.
noter:
Guardo en eeprom las direcciones de los dallas.
Al leer la configuración miro uno a uno si los dallas existen. Si no, asigno 00000000.
Un menú específico me permite seleccionar un índice de termómetro e ir recorriendo todos los dallas (en caso de sustituir uno) y asignar uno nuevo a ese índice, guardando luego en la eeprom la nueva configuración.
Creo que la dirección de cada dallas eran 8 bytes; tampoco me parece una escabechina de memoria 80 bytes por 10 dallas conectados, por ejemplo; más teniendo en cuenta que para muchos de los comandos necesitas invocar esa dirección, con lo que te ahorras el tener que hacer un getAddress cada vez que quieras llamar a un termómetro determinado.
Pues, esta muy bien pensado, con tu sistema, al fallar una sonda puede saber cual y actuar en consecuencia, por cierto, ¿alguien sabe,cuantas ds18b20, se pueden conectar a la vez en modo parásito al arduino?, lo pregunto mas que nada por el consumo de corriente....