TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Makavelo en 29 de Octubre de 2008, 19:43:10

Título: Ayuda con LM335 usando el 16F777 y Proton
Publicado por: Makavelo en 29 de Octubre de 2008, 19:43:10
Hola, Estoy haciendo un sensor de temperatura usando el LM335 con el Pic16F777, mi codigo de proton es el siguiente:

Código: [Seleccionar]
Device 16F777
Declare XTAL 4

Declare ADIN_RES 10 ' 10-bit
Declare ADIN_TAD 8_FOSC ' Reloj  del ADC
Declare ADIN_STIME 50 ' Allow 50us sample time

Declare LCD_TYPE 0 ' LCD Alphanumerico
Declare LCD_DTPIN PORTB.4   ' Se usa PortB B4,B5,B6,B7
Declare LCD_RSPIN PORTB.2 ' RS en B2
Declare LCD_ENPIN PORTB.3 ' Enable en pin B3
Declare LCD_INTERFACE 4    ' Interface de 4 bit

Dim ADC_Result As Float
Dim ADC_Total As Float
Dim Temp_Float As Float
Dim ADC_Channel As Byte
Dim ADC_Loops As Word
Dim Temp As Word


Dim Last_Result1 As Float
Dim Last_Result2 As Float


ADCON1 = %10000000 ' Poner en Analogo todas las entradas (PORTA)
TRISA = $FF ' Declarar porta como entradas
 
DelayMS 150
Cls

Print $FE,$40,$07,$05,$07,$00,$00,$00,$00,$00 ' Caracter para Grados

ADC_Loops = 200

Main:
ADC_Channel = 1 ' ADC en el primer canal o referencia
GoSub ADC_Average ' Avarage para mejor presicion

Temp_Float = ADC_Result ' Guarda el resultado

ADC_Channel = 0 ' ADC en el segundo canal
GoSub ADC_Average ' Avarage para mejor presicion

ADC_Result = ADC_Result * 5000 / 1023 ' Convierte valores en Volts (en escala de 1000)
Temp_Float = Temp_Float * 5000 / 1023 '    Reduce errores decimales
ADC_Result = ADC_Result - Temp_Float ' Calcula la diferencia

ADC_Result = ADC_Result / 10 ' Escala 10mV = 1 Deg C

If ADC_Result <> Last_Result1 Then ' Verifica si cambian los valores
Print At 1,1, DEC1 ADC_Result, 0, "F  " '  Actualiza el Display si los valores cambiaron
Last_Result1 = ADC_Result         ' Nuevo valor para el Display
EndIf


GoTo Main     ' Loop


ADC_Average:   ' Perform an averaging on ADC conversions
  '  to reduce errors
ADC_Total = 0   ' Clear summing register
For Temp = 1 To ADC_Loops   ' Loop for a pre-determined number of times
ADC_Result = ADIn ADC_Channel   ' Grab a new ADC value
ADC_Total = ADC_Total + ADC_Result   ' Sum it to the total register
DelayUS 1     ' Allow internal capacitors to discharge
Next Temp

ADC_Result = ADC_Total / ADC_Loops   ' Determin the average of all the equations

Return

Mi problema es que al momento de mostrar los datos en el Display no me muestra nada, no se si tenga problemas en convertir los datos analogos a digital, porfavor si alguien me puede ayudar a solucionar el problema seria de enorme ayuda.

Por cierto ya hice la simulacion en Proteus y ahi si me muestra todo bien es al momento de hacerlo fisico cuando no me funciona bien el display, el archivo adjunto es una foto de mi simulacion en ISIS.

Gracias por cualquier cosa
Título: Re: Ayuda con LM335 usando el 16F777 y Proton
Publicado por: navaismo en 29 de Octubre de 2008, 20:21:52
Los lineas de datos del LCD D1-D4 no las conectes a tierra. VEE a tierra, VDD a 5V, VSS a GND, si quieres RW a GND.
Título: Re: Ayuda con LM335 usando el 16F777 y Proton
Publicado por: Makavelo en 30 de Octubre de 2008, 14:07:14
Los lineas de datos del LCD D1-D4 no las conectes a tierra. VEE a tierra, VDD a 5V, VSS a GND, si quieres RW a GND.

en el proyecto Fisico usaba un Potenciomentro para VEE pero ya descubri cual era el problema y el problema esta en mi codigo.

No tenia bien el ADCON1, ya lo corregi y ya por lo menos manda caracteres al display pero los datos son bastantes irreales, me marca temperaturas de 158 grados, alguien me podria ayudar a regular los valores que manda el sensor?

Como dato adicional ya queme 2 potenciometros que conectaba al sensor para tratar de regular la temperatura
Título: Re: Ayuda con LM335 usando el 16F777 y Proton
Publicado por: bj73_horta en 26 de Noviembre de 2008, 08:00:44
Makavelo, yo he usado las LM335 como sensores de temperatura sin usar para nada la patilla Adj, de hecho la cortaba. Como ya sabras las LM335 actuan como diodos zener cuyo potencial de corte es proporcional a la temperatura absoluta, entregando 10 mVolts por cada grado absoluto, por lo tanto su potencial de corte teorico a 0 ºC es de 2,73 Voltios y a 100 ºC de 3,73. En otras palabras: temperatura (ºC) = 100 * (Voltaje - 2,73). De todas formas te recomiendo calibrar tu sonda para tener una lectura de temperatura correcta.

Suerte con tu montaje.