sábado, 16 de mayo de 2015

Matemáticas y microcontroladores

No tiene mucho sentido tratar de resolver problemas matemáticos utilizando microcontroladores. Para empezar, el uso básico de un microcontrolador es tomar decisiones en base a señales físicas (digitales o analógicas) y generar otras señales (digitales o analógicas). Por otro lado, los microcontroladores no incluyen coprocesador matemático, por lo que todas las funciones matemáticas se calculan mediante rutinas incluidas en los compiladores a utilizar.
Sin embargo, y seguramente sin ningún uso práctico, me parece interesante ver hasta donde podemos llegar con estos animalitos con tan pocos recursos de cálculo.
A continución podemos ver un programa (en lenguaje CCSC C) para el micro 16F628A que permite generar los números de fibonacci, lucas y el famoso coeficiente de oro (golden ratio). Aunque utilizamos variables enteras de 32bits, solo podemos calcular hasta el número 46. Podemos ver que el golden ratio se estabiliza muy rápidamente. Recordemos que este micro tiene apenas 2KWords flash y 224Bytes ram.
La primera columna es el contador , la segunda el número de fibonacci, la tercera el número de Lucas y la cuarta el godlen ratio.




Si quisieramos utilizar un micro mas modesto , por ejemplo el 16F630 ( que sólo tiene 1KWord flash y 64Bytes ram ) no podríamos calcular el golden ratio porque no tendríamos flash suficiente para el código generado (el cálculo en punto flotante consume casi 500Words).

A continuación tenemos otro programa (también en lenguaje CCSC C y para el 16F628A) que genera los valores de seno(x),coseno(x),tangente(x) y como validacion la fórmula sen(x)*sen(x)+cos(x)*cos(x),  que debe ser el número 1. Podemos ver que no utilizamos las subrutinas del compilador, en su defecto hemos creado unas a partir de aproximaciones Chebyshev para valores de x entre 0 y 45º. Estas aproximaciones son algo mas precisas que las que vienen en el compilador (en la última cifra significativa) y el código generado es mas pequeño.




No hay comentarios:

Publicar un comentario