hola.estoy desarroyando un proyecto basado en el sensor de temperatura DS18B20.lo tengo bastante adelantado pero se presentan algunos problemas
que poco a poco voy solucionando.
mi intencion es crear un termostato que se comunique via bluetooth.teniendo la opcion de controlarlo con una aplicacion de android y tambien poder
visualizar la temperatura en una LCD.
he tenido que crear la libreria para usarlo en un 18f2550.todo esta en asm.
a parte de todos los problemas que se me han presentado hay uno que no comprendo.antes de cualquier acceso al sensor,hay que mandarle un reset
y recibir un present segun el datasheet.
pues el reset es facil de mandarlo y no hay problema.la cosa esta en el present.el pic tiene que esperar a que el sensor mande un pulso bajo y luego
alto.
pues no lo envia nunca y tengo que desconectar el sensor y volver a conectarlo.entonces sale el dato de 85º que es el que tiene por defecto el sensor
y vuelve a funcionar de nuevo hasta que se vuelve a bloquear.
habia pensado usar un watchdog pero esto haria que el sensor se reiniciara y saliera el dato de 85º.y no creo que esto sea lo correcto.
asi que le he puesto un contador para que cuando no se reciba el present antes de 255 instrucciones,retorne de la rutina.
esta es la rutina modificada de la original que pone en el datasheet.
;*********************************************** DS18b20_RESET ***************************************************
;reset del sensor
DS18B20_RESET
movlw 0xff ;valor para 255 ciclos
movwf CONT_RESET ;introducelo en el contador regresivo
call LINE_IN ;pin del pic como entrada
call LINE_OUT ;pin del pic como salida
call DEMORA_500uS ;retardo de 500uS (solicitud de escucha al 18B20)
call LINE_IN ;pin del pic como entrada(espera de respuesta del 18B20)
call DEMORA_20uS ;retardo para recibir la respusta
espera_lo dcfsnz CONT_RESET ;si no se ha recibido el present del DS18B20 antes de 255 ciclos,
return ;retorna
btfsc PortInOut ;espera a que el 18B20 mande estado bajo
goto espera_lo ;repite hasta que sea estado bajo
espera_hi btfss PortInOut ;espera a que el 18B20 mande estado alto
goto espera_hi ;repite hasta que sea estado alto
return ;retorna
si retornamos es como si le digeramos al sensor de que se ha recivido el present.creo que lo peor que pueda pasar es que no se actualice
la temperatura en ese ciclo de lectura.
aqui un video con el fallo:
y otro funcionando: