Escrito originalmente por bampbamp
necesito saber si existe un microcontrolador PIC que realiza operaciones con decimales (división, multiplicación).
la razón es que debo incluir una ecuación en un proceso de control y necesito realizar los calculos con un microcontrolador.
bampbamp lo que quieres hacer es algo totalmente normal y que puede ser realizado perfectamente por un microcontrolador, tanto en los PIC16F , como en los 18F, en los PIC24 (recien estan saliendo al mercadO) como en los dsPIC.
pocher escribió:
Escrito originalmente por pocher
Los PICs son C.I. y no saben de matemáticas. Es el lenguaje aplicado en la programación el que realiza operaciones matemáticas. En lenguaje ensamblador podrás hacer sumas y restas y a partir de ellas, con ingenio, multiplicaciones y divisiones (es costoso y un poco lioso para el que no tiene mucha idea de programación en ensamblador).
No se si has aclarado o confundido a nuuestro amigo, de hecho hay muchos circuitos integrados que realizan operaciones matemáticas, del tipo que se te ocurra, de coma flotante, o no, de la precision que uno elija. Uno le carga los datos, pide la operacion y despues de un tiempo obtiene el resultado.
bampbamp volviendo a lo que veniamos hablando, los pics no tienen un
coprocesador matemático como traian los 286,386 como modulo separado, o ya los 486DX y Pentiums incorporados en la misma pastilla, pero si se pueden hacer operaciones matemáticas.
Es que al final una multiplicacion de coma flotante o división termina siendo operaciones lógicas con operandos de mas o menos bytes. El tener incorporada una instruccion que haga todo eso, da "velocidad" pero también es posible reproducir el mismo resultado (a mucha menor velocidad) con subrutinas de varias operaciones de multiplicacion, sumas, divisiones y restas.
Entonces, volviendo al tema
Una multiplicacion de numeros decimales (coma flotante en la jerga electrónica) representa varias operaciones de multiplicacion en decimal, donde se separa la parte real de la parte del exponente.
La división es lo mismo.
Yendo al grano, con las posiblidades que puedas encontrarte, sin entrar con detalles de la precisión de los operandos (16 bits, 32 bits, 64 bits, etc).
1) Microprocesador con instrucciones de multiplicacion y división de coma flotante:Si tu procesador tiene incorporadas las rutinas de multiplicacion de coma flotante, entonces la puedes realizar directamente llamando a la instrucción. Esto es MUy RAPIDO.
2) Microprocesador con instrucciones de multiplicacion y división de enteros:Hay rutinas y métodos matemáticos que permiten a traves de sucesivas multiplicaciones y divisiones de decimales, realizar estas operaciones. Ej. DSPIC.
3) Microprocesador con instrucciones de multiplicacion:Nuevamente hay rutinas y métodos matemáticos que permiten a traves de sucesivas multiplicaciones. Las divisiones se hacen a partir de métodos de multiplicacion por decimales (dividir por 3, es lo mismo que multiplicar por 1/3) o bien por métodos relacionados con la resta. Ej. PIC18F
4) Microprocesador con solo instrucciones de suma y resta: Hay operaciones matemáticas que resuelven el tema, para la precision que uno quiera, solo que esto se convierte en algo lento. Ej. PIC16F.
Uno se abstrae de la complejidad de estas operaciones, utilizando como te ha dicho
pocher un compilador de C. La ventaja es que si tu microprocesador tiene más rutinas incorporadas en su set de instrucciones, el compilador sabe de esto y generará un código más optimo de acuerdo al caso.
Las veces que he tenido que hacer algun lazo de control que involucre varias operaciones matemáticas, he hecho los siguientes pasos:
a) tratar de simplificar al máximo las operaciones, buscando agrupar constantes en una sola para evitar demoras en la multiplicacion.
b) ver cuanto tiempo te lleva las operaciones que necesitas realizar con el pic que elegiste. Esto lo puedes ver con el simulador , cargando el pic y el clock que usas. Si la operacion matemática lleva mas tiempo que la velocidad con la que debes volver a recopilar los datos, entonces piensa en subir de modelo de pic y de frecuencia.
c) Si has logrado el resultado en b, entonces puedes dar por hecho que el problema se puede resolver con el pic que has seleccionado, sino tal vez debas irte a otra compañía con opciones de mayor velocidad (a un costo mas elevado por supuesto).
Saludos