Autor Tema: DS18D20  (Leído 2159 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado perla

  • PIC16
  • ***
  • Mensajes: 106
DS18D20
« en: 11 de Mayo de 2019, 18:05:03 »
Hola de nuevo. Estoy haciendo un proyecto con el 16F88 para medir la temperatura con el DS18D20 y mostrarlo en un LCD, pero no funciona el sensor de temperatura, el display se enciende y muestra en pantalla 0,00 C y 32.00 F. Creo que lo que tengo mal es la configuracion del conversor AD. Como no lo tenia muy claro puse la configuracion de otro proyecto que media voltage.

¿Alguien sabe como se configura?


#CONFIG
    ifdef PM_USED
        device  pic16F88, xt_osc, wdt_on, lvp_off, protect_off
    else
        __config _CONFIG1, _XT_OSC & _WDT_ON & _LVP_OFF & _CP_OFF
    endif
#ENDCONFIG
Define Osc 4

cmcon = 7    'desactiva los comparadores
INCLUDE "MODEDEFS.BAS" 'si no pones esta linea no admite el termino de Serin

temperatura  var word
count_remain var byte
count_per_c  var byte

DQ var PORTA.1 'DS18B20

'Define el LCD
DEFINE LCD_DREG PORTB ' Indica que el Bus de datos estará conectado en el Puerto B.
DEFINE LCD_DBIT 0 ' Selección del Bit de inicio del puerto en el uC para el bus de datos de la LCD
DEFINE LCD_RSREG PORTB ' Indica al uC que el pin “RS” estará en el Puerto B
DEFINE LCD_RSBIT 5 ' “RS” estará conectado en RB5
DEFINE LCD_EREG PORTB ' Indica al uC que el pin “E” estará en el Puerto B
DEFINE LCD_EBIT 4 ' “E” estará conectado en RB4
DEFINE LCD_BITS 4   'El bus de datos de la LCD será de cuatro bits.
DEFINE LCD_LINES 2  'LCD de dos lineas


'Define el conversor analogico digital
DEFINE ADC_BITS 10     'A/D number of bits
DEFINE ADC_CLOCK 3     'Use A/D internal RC clock
DEFINE ADC_SAMPLEUS 50 'Set sampling time in us

ANSEL = %000010 'configura la entrada A1 como analogica

ADCON0 = %11000001 'Activar modulo ADC y bits de selección de reloj de conversión
ADCON1 = %10000000 'Justificación a la derecha para 10 bits de resolución

'los RA  43210
TRISA = %00010 ' Configuración del Puerto A

'Los RB  76543210
TRISB = %00000000 'Configuración del Puerto B 

PORTA = 0 ' Inicializa el puerto "A"
PORTB = 0 ' Inicializa el puerto "B"

inicio:   
     pause 100 'Tiempo de espera para reiniciar el display                     
     owout DQ, 1, [$CC, $44]'inicia la conversion de temperatura
     pause 2000
     owout DQ, 1, [$CC, $BE]'lee la temperatura
     owin  DQ, 0, [temperatura.LOWBYTE, temperatura.HIGHBYTE]
                                               
     temperatura= temperatura */1600 'calcula la temperatura en grados C 2 decimales. No validos
     lcdout $fe, 1 , dec (temperatura/100), ".", DEC2 temperatura, "C" 'para temperatura negativa
     
     temperatura = (temperatura */461) + 3200
     lcdout $fe, $c0, dec (temperatura /100), ".", DEC2 temperatura, "F"
     goto inicio
     
« Última modificación: 12 de Mayo de 2019, 14:37:34 por perla »
Desarrollador de vending.

Saludos desde Murcia (España).

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3495
Re:DS18D20
« Respuesta #1 en: 12 de Mayo de 2019, 15:12:21 »
Hola amigos; no uso tu lenguaje pero por lo que he podido entender defines el pin de lectura escritura del DS18D20 como analógico, y si no recuerdo mal, este chip trabaja en digital.
Saludos desde Granada, España.

Desconectado perla

  • PIC16
  • ***
  • Mensajes: 106
Re:DS18D20
« Respuesta #2 en: 12 de Mayo de 2019, 16:14:16 »
Estoy mirando eso que dices
Desarrollador de vending.

Saludos desde Murcia (España).

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3495
Re:DS18D20
« Respuesta #3 en: 12 de Mayo de 2019, 16:21:31 »
Al parecer el proton tiene comandos específicos para ese integrado: OWRITE y OREAD.
Según he podido ver en el manual del lenguaje.
Saludos desde Granada, España.

Desconectado perla

  • PIC16
  • ***
  • Mensajes: 106
Re:DS18D20
« Respuesta #4 en: 12 de Mayo de 2019, 16:22:08 »
Estoy mirando el data y dice que el puero A es analogico. En otras ocasiones tambien lo utilice.
Desarrollador de vending.

Saludos desde Murcia (España).

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3495
Re:DS18D20
« Respuesta #5 en: 12 de Mayo de 2019, 16:29:39 »
No es que sea analógico solo, que puede trabajar como analógico.
Por defecto si no se indica lo contrario los puertos que pueden trabajar como analógicos quedan configurados como analógicos, y mediante el registro ANSEL se configura de una manera u otra.
ANSEL = %00000000 o ALLDIGITAL todos los pin trabajaran como digitales.
Saludos desde Granada, España.

Desconectado perla

  • PIC16
  • ***
  • Mensajes: 106
Re:DS18D20
« Respuesta #6 en: 12 de Mayo de 2019, 16:56:30 »
Lo tengo puesto en el código     ANSEL = %000010 'configura la entrada A1 como analogica
Dice que la entrada 1 del puerto A es analógica.  Por lo menos así lo interpreto yo
Desarrollador de vending.

Saludos desde Murcia (España).

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3495
Re:DS18D20
« Respuesta #7 en: 13 de Mayo de 2019, 06:39:33 »
Pues eso tendría que ser digital ANSEL = %xxxxxx0x.
Saludos desde Granada, España.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1295
Re:DS18D20
« Respuesta #8 en: 13 de Mayo de 2019, 11:53:29 »
Aquí un ejemplo de lectura temperatura usando el DS1820 y mostrándola en un LCD.

http://melabs.com/samples/LABX1-16F877A/temp_DS1822.htm

elreypic.

Desconectado perla

  • PIC16
  • ***
  • Mensajes: 106
Re:DS18D20
« Respuesta #9 en: 13 de Mayo de 2019, 12:07:56 »
Gracias elreypic2,  pero el código que yo puse es copia de este que me mandas, solo lo adapte al pic16F88. No se si hice algo mal pero no funciona.
También tengo una pregunta que no entiendo de todo esto, si dice que el ds18b20 cuando se comunica al pic lo hace por medio de 1 y 0  digital mente, como transforma los 1 y 0 en un voltaje analógico. El LM35 la salida si es analógica por lo tanto es normal que utilice el conversor ADC, pero si el otro es digital ?????????????

No entiendo.
Desarrollador de vending.

Saludos desde Murcia (España).

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1295
Re:DS18D20
« Respuesta #10 en: 13 de Mayo de 2019, 12:27:18 »
Que tal perla,

En realidad NO necesitas transformar nada. El sensonr DS18B20 utiliza un protocolo llamado 1-wire. En ese protocolo está incluida la información de la lectura de temperatura, lo que tienes que hacer es interpretar esa información. Este sensor nada tiene que hacer con un ADC o convertirla a analógica. Simplemente lees la cadena de datos entregada por el sensor, La interpretas tal como lo indica la hoja de datos y con eso puede mostrar el valor de temperatura.

Tu código no funciona porque estás configurando el puerto RA.1 como analógico, y luego configuras el ADC. Eso no tiene sentido para nada. El puerto RA1 debe ser configurado como digital, tal como te lo comentó dogflu66.

El código hace todo el trabajo de interpretación de eso datos y te los muestra en el LCD. En fin tu problema está en la configuración del peurto RA1. Tienes que configurarlo como digital y NO como analógico como lo estas haciendo.

elreypic.


Desconectado perla

  • PIC16
  • ***
  • Mensajes: 106
Re:DS18D20
« Respuesta #11 en: 13 de Mayo de 2019, 12:30:10 »
Ahora lo entiendo todo, y aparte el problema se queda resuelto.
Tenia en conversor ADC activado pensando que hacia falta, pero al deshabilitarlo funciona.
Eso es lo que el amigo dogflu66 intentaba decirme pero yo no le entendía.

Interprete mal el código original y estaba convencido que lo tenia bien, por eso puse la pregunta anterior.

 Los dos soy magníficos    http://www.todopic.com.ar/foros/Smileys/default/bounce.gif
Desarrollador de vending.

Saludos desde Murcia (España).