Autor Tema: Sensor de Temperatura 18S20  (Leído 3223 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado tasher

  • PIC10
  • *
  • Mensajes: 3
Sensor de Temperatura 18S20
« 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

 


 

anything