TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: tasher en 24 de Octubre de 2010, 08:04:32
-
Estoy tratando de recetar datos de un Sensor de temperatura DS18S20, y no lo consigo,
He encontrado un Programa que puede que si funcione, pero tengo problemas.
Sé que este dispositivo dispone de una Rom en la que hay que recetar un dato en la direccion 0X33 para posteriormente poder direccionar la informacion hacia ese dispositivo, pero no lo consigo, así mismo estoy intentando simularlo en Proteus, y solo consigo ver en el LCD datos de Texto. os adjunto parte del programa,se agradece cualquier ayuda...Pd el programa tenia una variable command= sin datos, y yo he ido probando asignandole datos para poder compilarlo en MPLAB sin errores, pero el programa lo encontre así, y le adapte para poder conectar el LCD al PIC 16F876:
' DEFINICION DE LIBRERIA PARA COMUNICACION
Define LOADER_USED 1
'DEFINICION DE PINES PARA CONECTAR EL LCD
Define LCD_DREG PORTB
Define LCD_DBIT 4
Define LCD_RSREG PORTB
Define LCD_RSBIT 0
Define LCD_EREG PORTB
Define LCD_EBIT 1
' CREACION DE VARIABLES
command var byte ' VARIABLE PARA COMANDO
i var byte ' VARIABLE PARA CONTEO
temp var word
' PARA GUARDAR VALOR TEMP
' DETERMINACION DE PIN SENSOR DS 18S20 CONECTADO AL PIC 16F84a
DQ var PORTC.1 ' PIN DEL SENSOR DS18S20 CONECTADO A PORTB.7
DQ_DIR var TRISC.1 ' DEL PIC 16F876
Low PORTB.2 ' LCD R/W A CERO LOGIGO POR EL PIC 16F84a
Pause 100 ' 100 MS PARA INICIALIZAR LCD
Lcdout , 1
Lcdout ,$80, "Temp:" 'MOSTRAR MENSAJE
'PROGRAMA PARA LECTURA DE TEMPERATURA EN EL LCD
INICIO:
Gosub init18S20 ' IR A RUTINA DE INICIALIZACION DEL LCD
command =
Gosub write18S20
command = $44 ' EMPIEZE CONVERCION DE TEMPERATURA
Gosub write18S20
Pause 2000 ' ESPERO 2S EG HASTA QUE FINALICE LA CONVERSION
Gosub init18S20
command =
Gosub write18S20
command = ' LEER TEMPERATURA
Gosub write18S20
Gosub read18S20
'RUTINA PARA MOSTRAR VALOR DE TEMPERATURA EN EL LCD
Lcdout ,$86, dec (temp >> 1),".",dec (temp.0 * 5), "oC"
Goto INICIO ' CREA UN BUCLE CERRADO
' INICIALIZA DS18S20 Y CHEQUEA PRESENCIA
init18S20:
Low DQ
Pauseus 500
DQ_DIR = 1
Pauseus 100
If DQ = 1 Then
Lcdout , 1
Lcdout ,$83,"SENSOR DS18S20"
Lcdout ,"NO CONECTADO"
Pause 500
Goto INICIO
Endif
Pauseus 400
Return
' RUTINA PARA COMUNICACION DEL PIC CON SENSOR DS1820 A 8 BYTE
write18S20:
For i = 1 to 8
If command.0 = 0 Then
Gosub write0
Else
Gosub write1
Endif
command = command >> 1
Next i
Return
' RUTINA PARA DESHABILITAR DS18S20 A TRAVES DE UN BIT
write0:
Low DQ
Pauseus 60
DQ_DIR = 1
Return
' RUTINA PARA HABILITAR DS18S20 A TRAVES DE UN BIT
write1:
Low DQ
@ nop ' RETARDO DE 1us CON UN OSCILADOR EXTERNO DE 4MHz
DQ_DIR = 1
Pauseus 60
Return
' RUTINA PARA LEER DS18S20
read18S20:
For i = 1 to 16
temp = temp >> 1
Gosub readbit
Next i
Return
' RUTINA PARA LEER BIT DS18S20
readbit:
temp.15 = 1
Low DQ
@ nop ' RETARDO DE 1us CON UN OSCILADOR EXTERNO DE 4MHz
DQ_DIR = 1
If DQ = 0 Then
temp.15 = 0
Endif
Pauseus 60
Return
End