Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

10/07/2008 #1


Programa no enciende un display
Saludos

Estoy realizando un termometro, abajo coloco el programa

Código:
@ DEVICE pic16F876A
' Registro

cmcon=7
TRISB=0
TRISC=0
ADCON1=%10001110

' Variable

temp var word
result var byte
result2 var byte
digt var byte
digt2 var byte

   
 'Definir los parametros del ADCIN
DEFINE  ADC_BITS 10       ' Setear el numero de bits del resultado
Define   ADC_SAMPLEUS 50

' Inicialización de variables

main:
ADCIN 0,temp
temp=temp-2
temp=temp*100
temp=temp*5
temp=temp/1024

if temp>273 then
temp=temp-273
low portA.5
else
temp=273-temp
high portA.5
endif

digt2=temp/10

lookup digt2,[%00111111,%00000110,%01011011,%01001111,%01100110,%01101101,%01111100,%00000111,%01111111,%01100111],result2
portb=result2

digt=temp-(digt2*10)

lookup digt,[%00111111,%00000110,%01011011,%01001111,%01100110,%01101101,%01111100,%00000111,%01111111,%01100111],result
portc=result

goto main
El problema es que no me enciende el primer display, y la verdad no se porq.

Espero me ayuden a conseguir y resolver el error. El programa esta realizado en PicBasic Pro.

Sin mas les doy las gracias de antemano por su ayuda.
16/07/2008 #2

Avatar de Ardogan

Rangos?
Por lo que veo leés el conversor AD y prendés un led según el valor leído sea mayor/menor a cierto límite.
Me parece que puede ser el manejo de rangos que hacés con temp...
Temp es un word (16 bits), el cual cargás con la lectura del CAD, le restás 2, lo multiplicás por 100 y después por 5.
Cuidado con esas multiplicaciones, no sé cual es el valor máximo que te da la lectura del CAD, pero al multiplicar por 100 y después por 5, o sea al multiplicar por 500 estás eliminando los bits de mayor orden (son 10 bits de la lectura del CAD, desplazados casi 9 a la izquierda por esa multiplicación, el resultado cabría en 19 bits pero el registro tiene 16-> se pierden los 3 bits de mayor peso) si es que usás solo el registro temp para hacer las cuentas.
Después dividís por 1024 pero esos bits perdidos no se recuperan.
No usé el basic para programar pic's, pero me imagino que podrás declarar una variable word-doble y guardar el resultado de la multiplicación ahí.
Pero viendo eso, te diría que trates de hacer la cuenta en menos pasos, en vez de multiplicar por 100 luego por 5 y después dividir por 1024, trata de multiplicar/dividir por un solo numero.
Así vas a tener un tamaño de código 3 veces menor y esa parte se ejecuta 3 veces más rápido.

Más aún, esa cuenta es muuuuy cercano a dividir por 2, dividir por dos se puede hacer desplazando a la izquierda 1 vez, y listo. Por ahí tenes que cambiar el valor de comparación de temp (el 273 tal vez se convierta en 274) y nada más.

Bueno, todo depende de que rango de numeros leas en el CAD, si los 3 bits más significativos siempre están a 0 no es lo que yo digo, pero sino puede serlo.

Saludos
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.