TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: isfan en 20 de Junio de 2013, 06:52:50
-
Haber si alguien puede ayudar,
Partiendo que ya tengo todo el proceso de adquisición de datos del Conversor A/D
Capturando el valor que me da el registro de ADRESH y ADRESL:
Quiero saber como hago para pasar esa rista de 10 bits, en interpretarla de alguna manera en Voltios, para cuando me entre 4 o mas v activar un led señalizador, y cuando entre menos apagarlo. por el PB por ejemplo.
Vref: 5v = entonces dispondre de 1024 muestra de rastreo (0 al 1023) lo que equivale a cada muestra por 0.00488v/bit o 4.888mV/bit (tampoco necesito tanta precisión)
por esta regla de 3 0000000000 = 0v y 1111111111 = 5v
1100110100 = seria igual a una salida de 4V
Hasta ahi de acuerdo, pero no logro comprender como hacer un bucle o comprobación para verificar ese valor es >= 4v
alguien podria guiarme como implementar un codigo en ASM?
un saludo y gracias.
PD: el PIC es 16f876, pero puede valer otro cualquiera, La entrada A/D es AN0, y la tension de ref es Vcc y GND (5v)
-
Hola Isfan, no es tan complicado lo que requerís implementar, primero, olvidate del 4V, (por ahora) mejor que sean:
(1023*4)/5=818,4 (*1)
o sea, el valor 818 ó 819 (valor discreto del ADC), con este número (11.0011.0010) te planteas la famosa comparación, primero con los bit_H, si resulta ó mayor ó menor, se termino el jaleo.
Si resultan iguales, nuevamente a comparar, pero esta vez los bit_L...
La comparación en assembler, se hace con una resta, y después mirando las banderas "C" & "Z".
Se viene el tema de la operación (*1), escalar proporcionalmente, se hace de un solo tiro, esto es UNA multiplicación (para simplificar las cosas):
tu constante de proporcionalidad en este caso es:
5/1023=0,0048875855.... decimos que es 488
al número 488 lo multiplicas por el valor obtenido del ADC, p.e.:
488*818=399184 (*2)
Esta vez se viene una descomposición BCD, de un número de 24 o tal vez 32 bit, el punto decimal se lo trabaja como fijo, pues siempre aparece entre la cifra 5ta y 6ta de (*2)
Una de esas la cosa sigue..... imaginá si querés mostrar estos resultados, en Led display 7 segmentos, o LCD?, "demultiplexión" en 4 ú 8 bit, comunicacion de 4 ú 8 bit, y la cosa sigue.
Si te mandaron de la "U" o el "Cole", una forma de resolverlo es como lo propongo.
Si no es lo anterior, podrías pasar por:
http://piclist.com/techref/microchip/compcon.htm#16_bit
donde hay cantidad de rutinas matemáticas y utilidades, listas para emplear.
Ya cansado de liarme con esto, me pase al C!.-
-
Muy buena explicacion AleSergi.
isfan si no necesitas una gran precision, puedes hacer la lectura a 8bits, despreciando los dos de ADRESL, despues restas lo que haya en ADRESH del valor de 4V, chequeas si STATUS,C marca acarreo, si hay accarreo el resultado es negativo o positivo, segun como restes o cual de las siguientes instrucciones uses, te dejo aqui la explicacion de Leon_pic en asm desde 0:
SUBLW
Resta el contenido de W con un literal de hasta 8 bit (.255). El resultado se guarda en W.
Código:
SUBLW .20
Si antes de la instrucción W vale .23 después de la instrucción W vale .3 Para saber si el resultado es negativo o positivo, hay que chequear el bit C del registro Status. Si hay acarreo, el resultado es negativo, y por el contrario, si no hay acarreo es positivo.
Para recordar SUBtraction es restar Literal es literal y W es el registro W.
Afecta a:
•Z se pone a 1 si el resultado es 0
•DC se pone a si hay acarreo del bit del 4 al 5 bit del registro (recordemos que en la resta, es distinto a la suma, por eso, se pone a 0 si hubo acarreo).
•C se pone a 0 si hubo acarreo (recordemos que en la resta, es distinto a la suma, por eso, se pone a 0 si hubo acarreo).
Resta el contenido de un registro seleccionado por el programador con el contenido del registro W. La fórmula es F - W = d. d es la dirección elegida por el programador en dónde se guardará el resultado que puede ser el registro W o el registro elegido por el programador.
Ejemplo:
Código:
SUBWF MINUENDO,W
Si antes de la instrucción W vale .55 y MINUENDO vale .56, después de la instrucción, MINUENDO vale .56 y W vale .1
Para recordar SUBtraction es resta W es el registro W y File es el registro elegido.
Afecta a:
•Z se pone a 1 si el resultado es 0
•DC se pone a 0 si hubo un acarreo del 4 bit al 5 bit (recordemos que en la resta, es distinto a la suma, por eso, se pone a 0 si hubo acarreo).
•C se pone a 0 si hubo acarreo del 7 bit. (recordemos que en la resta, es distinto a la suma, por eso, se pone a 0 si hubo acarreo).
Creo que a 8bits te simplica el problema y creo que para lo que tu quieres te va a dar suficiente precision.
-
Muchas gracias por los 2 post, me sirvio de gran ayuda vuestros comentarios. Tome la recomendación de coger los 8 primeros bits de mas peso y descartar los otros 2.