Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Me estoy volviendo loco ya y necesito ayuda. Estoy intentando programar el sensor Dallas DS18S20, que usa el bus 1-Wire. Doy por hecho que la conexión está bien, pero pongo una foto por si acaso.
Pues no consigo ni reiniciarlo, se supone que poniendo el nivel bajo el bus durante 500us, al ponerlo como entrada debería de mantenerse bajo durante 60us, pero no se pone bajo ni a palos.
He probado de mil maneras y nada. A ver si alguien que lo haya hecho ve algo que haga mal o que no haga.
Public Sub InitDS18S20()
Dim PinLogicLevel As Byte
Dim n As Byte
Call PutPin(SensorPin, bxInputTristate) ' pin en entrada
Call PutPin(SensorPin, bxOutputLow) ' pin bajo
Delay(500.0E-6) ' mantiene el pulso 500 microsegundos
Call PutPin(SensorPin, bxInputTristate) ' pin en entrada
Delay(60.0E-6) ' he probado diversos tiempos de espera
PinLogicLevel = GetPin(SensorPin) ' pero no da cero: (
Debug.Print Cstr(PinLogicLevel)
End Sub
Mirando a la foto creo que tienes mal puesta la resistencia. Debe de ser una resistencia de Pull-Up (entre DQ y Vdd) y la tienes puesta de pull-down (entre DQ y GND). Conéctala desde el centro a la otra patita.
¡Saludos!
Ummm,¿ Fj estas seguro de que está malo conectada? Yo la veo bien...
Oopsss, fallo garrafal, no me di cuenta de que ponía BOTTOM VIEW... Debo de leer 2 veces antes de postear :p
No he usado el integrado, ni el 1-wire bus, pero hago una observación, dices:
Pues no consigo ni reiniciarlo, se supone que poniendo el nivel bajo el bus durante 500us, al ponerlo como entrada debería de mantenerse bajo durante 60us, pero no se pone bajo ni a palos.
Si debe de estar bajo "durante" esos 60 useg, e introduces un delay de justo 60 useg, nunca conseguirás leer ese nivel bajo, puesto que ya pasó el tiempo. ¿ Por qué no pruebas a poner un delay de 30 useg. o incluso eliminarlo ? Si lo lees antes de que pasen los 60 useg entiendo que obtendrás lo que buscas.
Un saludo,
Sphinx.