consulta sobre operaciones para convertir adc 10 bit a bcd

hola que tal
Estoy empezando con un control de temperatura que lee un canal adc y lo muestre por el lcd,
segun estuve ojeando un libro para hacerme una idea, aunque aun lo veo algo lioso,
primero una vez se adquirido el valor de 10 bits, se saltaba a una subrrutina donde hacia una multiplicacion de 16x16 y luego entraba a otra para convertir a bcd,la verdad me lié bastante en la rutina de multiplicacion ,me pueden explicar un poco esto y si es asi o se debe o puede hacer de otra forma
porque suponiendo que el adc ha leido este valor 11 1111 1111 me pueden explicar lo de la multiplicacion el sentido que tiene para luego convertir a bcd
o si saben de algun url que lo explique bien o pdf ,,,gracias
un saludo
 
Si estás trabajando en C, usa la operación resto para ir sacando los dígitos y el último lo sacas por división, ej:

...
987%10=7
(int)(987/10)=98
98%10=8
(int)(98/10)=9
...

Así ya tenés los 3 dígitos, usando un for lo resolvés.
 
hola que tal
la verdad he visto muchos ejemplos pero ando algo liado y confundido
voy a poner un ejemplo si el conversor adquiere un dato de 10 bits ; 11 1111 1111 este convertido a decimal seria 3 15 15 pero a bcd ? porque si segun entiendo cada 4 bits representan un digito ,y los digitos en bcd van del 0 al 9 ,siendo 9 = 1001 ,a partir de aqui no se ni si esto que escribo es asi o se representa de otra forma ,tambien esta el tema de sacar el punto decimal ,vamos que si el conversor segun dice el libro son 4,8 mv bit al tomar la lectura 11 1111 1111 como equivale a grados centigrados ,no se como plantearlo ,como dije vi un ejemplo que lo convierte a 16x16 y luego a bcd pero necesito la explicacion que no he logrado encontrar,el porque de hacerlo o si hay otras formas de plantear esto,asi que llevo un lio mental en cuanto a la explicacion y planteamiento
si me podeis hechar un mano ..
muchas gracias
un saludo
 
Última edición:
hola que tal chico3001 ,la verdad algoritmos de esos he visto bastantes, lo que no terminaba de comprender es en el programa que yo lei en el libro, el porque 10 bits los convertian a 16 para luego pasarlos a bcd
solo una cosa a la hora de sacar el punto decimal? digamos con 8 bits represento los valores centenas decenas y unidades y con los otros dos el decimal? o se compone de dividir la resolucion del adc/bit
y hacer una regla de tres con la resolucioon del sensor de temperatura?de donde se saca el decimal
gracias por tu ayuda
 
te refieres a que guardan el regsltado de 10 bits en un registro de 16 bits? eso es normal... un micro usualmente solo trabaja con datos de 8 bits... e internamente no cuenta con registros de 10 bits en la memoria RAM
 
hola que tal ,si seguramente sera eso que comentas ,aunque me parece que en el libro que tengo yo lo complican mas de la cuenta para la gente que no esta avanzada en el tema,voy a ver si me aplico operaciones y calculos con bits porque si no me parece que me voy a liar aun mas,en referencia a los algoritmos que me decias he visto bastantes ,podria copiar y pegar pero el problema de liarme es porque al intentar descifrar como mueve los bits realizando las operaciones tal vez no me aclare lo suficiente ,gracias por tu respuesta voy aver si indago mas hasta que comprenda el calculo
un saludo
 
hola chico3001 aver te explico una cosa que estoy leiendo en el libro del pic que tiene el programa del que hablabamos para hacer el termometro
partiendo que tenemos cargado
.243 en datoa_L y 00 en datoa_H
ADRESL en datob_L y ADRESH en datob_H siendo datob_L = 8 bits y datobH = 2bits
saltamos a la rutina que dice; multiplicacion 16x16 de dos numeros sin signo.
mul16x16___movlw_.16
___________movwf_contador
___________clrf_datod_H
___________clrf_datod_L
mul_loop____rrf___datob_h,f
___________rrf__datob_L,f
___________btfss___status,c
___________goto___no_suma
___________movf___datoa_L,W
___________addwf__datod_L,F
___________btfsc___status,c______;carry vale 0 ?
___________incf____datod_H,F_____;no ,incrementa
___________movf___datoa_H,W____; si
___________addwf___datod_H,F
no_suma____rrf__datod_H,F________;aqui si este valor esta a 0 tanto si carry vale 1 si no
___________rrf___datod_L,F________;incrementamos para rotar 1 bit
___________rrf___datoc_H,F
___________rrf___datoc_L,F_____;aqui se rota datoc siendo este 0, si se rota 0000 0000
________decfsz___contador,F____;sigue siendo ese valor o aumenta 1 aunque carry sea 0 ?
__________goto__mul_loop
___________return


en esta rutina segun entiendo yo sin estar cargado ningun dato se rotan a la derecha algunos registros que son 00 si rotas 00 no se incrementa no? no termino de entenderla bien esta rutina si no te importa tomarte la molestia de explicarme un poco ,muchas gracias por tu tiempo
un saludo
 
Última edición:
Atrás
Arriba