Autor Tema: ayuda como pasar a a display 7 seg el adresh en decimal  (Leído 1079 veces)

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

Desconectado elecpic

  • PIC10
  • *
  • Mensajes: 3
ayuda como pasar a a display 7 seg el adresh en decimal
« en: 30 de Octubre de 2014, 16:52:46 »
hola que tal, quisiera saber como desplegar en dos bcd 7 seg la temperatura en grados celcius (de un lm35), que me arroja el ADRESH. Estoy trabajando con un pic 18f4550 y tengo como Vref 1.5v para usar la resolucion completa del adc.

   MOVLW 00H
   MOVWF TRISB
   MOVLW 01H
   MOVWF TRISA
   

   MOVLW 04H
   MOVWF ADCON0

   MOVLW 3BH
   MOVWF ADCON1

   MOVLW 19H
   MOVWF ADCON2
   

   BSF ADCON0,0
ADC
   BSF ADCON0,1
COMIENZO
   BTFSC ADCON0,1
   GOTO  COMIENZO
   MOVFF ADRESH,PORTB
   GOTO ADC



este es mi programa y aqui solo mando al puerto b para observar la teperatura en binario

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: ayuda como pasar a a display 7 seg el adresh en decimal
« Respuesta #1 en: 30 de Octubre de 2014, 18:17:58 »
No me gusta nada este tema xD seguro que algun dia lo toque pero ya ni recuerdo

El LM35 varia 10mV/ºC, para 25ºC tenes 250mV
Tu ADC con una Vref de 1.5V tenes que para 10 bits. los pasos mas pequeños estan dados en 1.5 / 1024 = 1.465mV

Pero como solo tomas los primeros 8 bits de los 10, tendrias una resolucion de 5.8mV, es lo minimo que podrias diferenciar ( 0.58ºC/bit )

Para tus 250mV/25ºC leerias en el ADC = 170 ( AAh - 00 1010 1010 ) pero estar recortando tus 2 ultimos bits asi que quedaria 2Ah a mostrar.

Esta es la parte mas dificil por el resultado da con coma, si fuera una Vref de 4.096V seria feliz, hay que representar ese valor A8h en un numero legible. ( Pienso lo facil que seria hacerlo en C xD )

Lo que se me ocurre es lo siguiente:

Comenzar de 0 y sumar 58 por cada bit de resultado del ADC, luego restar de a 100 para obtener la cantidad de grados y podes mostrarlos (A ese resultado pasarlo a BCD mientras se va sumando o hacerlo luego con el resultado general), esto teniendo en cuenta que el error es acumulativo, ya que no es exacto 0.58ºC sino que es 0.5859375ºC/bit
Si mostraras solo los grados y no sus decimales, a partir de 168 - A8h ( que te de el resultado el ADC) deberias sumar 1ºC , 336 deberias sumar 2ºC , 505 sumar 3ºC , y continuamos sumando de lo que obtenes en el primer paso.

La otra es hacer lo mismo PERO tomando como comienzo los 25ºC o donde tu sensor va a estar casi siempre.
Para tener menos error cerca de esa temperatura.

Lo ideal seria usar coma flotante (?), o una referencia de tension que sea multiplo de 2, Asi es mas facil de representar. y disminuye el error. Otra no se me ocurre. Sino que alguno explique como, la verdad que ya ni recuerdo.

*******EDIT:

Mirando por inet vi este ejemplo, aunque hace multiplicaciones de 16bits.
http://www.avr-asm-tutorial.net/avr_en/calc/FP_CONV10_EN.html

Lo que hace basicamente para no trabajar con numeros con coma, es multiplicarlo por un valor grande... yo hice 1.5/ 1024, pero si lo multiplico por 65536 (2^16) podria hacer primero la multiplicacion y luego dividirlo:
mi caso: 1.5 / 1024

Ese caso : ((1.5 * 65536) / 1024 ) * Valor ADC / 65536, entonces no trabajas con comas xD y el error se reduce. Esto te da el valor en voltios e.e me olvide decirlo xD
« Última modificación: 30 de Octubre de 2014, 18:42:39 por KILLERJC »