Dallas / Maxim una inicialización de un cable

0

Estoy usando un termómetro Dallas DS18B20 que se comunica con el protocolo de un cable de Maxim. Estoy teniendo problemas en la secuencia de inicialización. Subí la línea a 500 uSegundos, bajé la línea a 510 uSegundos (el reinicio), a 45 uSegundos, esperé 120 uSegundos al termómetro para que la línea bajara como respuesta (el pulso de presencia), y luego tomó una muestra de la señal para asegurarse de que estaba baja. Si no es bajo, algo salió mal. Cuando miro la señal en mi alcance, veo que se baja durante 510 uSegundos y que se detiene durante 680 uSegundos. Esto significa que el termómetro no respondió en absoluto (45 + 120 + 500 = 675 uSegundos). ¿Qué estoy haciendo mal?

    
pregunta Tyler

2 respuestas

2

Si el STM32F4 está tirando alto, entonces no puede esperar que el DS18B20 pueda tirar hacia abajo. Debería aumentar la salida durante un breve periodo de tiempo (bastaría con un par de microsegundos) y luego realizar un triple estado. El resistor pullup luego lo mantendrá alto hasta que el DS18B20 lo tire hacia abajo (el STM32F4 puede tener un pullup interno). Tal como está, es probable que tengas disputas en esa red, lo que eventualmente puede destruir una o la otra.

Tenga en cuenta que en ese artículo que vinculó está usando una resistencia de 3.9kohm como un pullup. También tenga en cuenta que él está haciendo una triple declaración de la línea al convertirla en una entrada (que sería necesaria de todos modos para poder leerla).

    
respondido por el Mark
0

Asegúrese de que haya configurado el puerto en modo de drenaje abierto y que haya levantado. Si ha sido el modo push-pull, es posible que haya dañado la pieza, mucho mejor para experimentar con una nueva.

Si recuerdo bien, ese período de espera para probar la presencia puede ser variable. Puedes perderte solo cuidando un tiempo determinado. Había implementado el código probando cada 10 uS en un bucle total de 300 uS.

    
respondido por el Ayhan

Lea otras preguntas en las etiquetas