Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola, necesito alguien que pueda decirme donde puedo conseguir información bien detallada de cómo hacer una función para calcular el seno y el coseno en un microcontrolador PIC 16f84.
Muchas Gracias
CEVR
cevr, puedes tb utilizar los polinomios de Taylor:
http://es.wikipedia.org/wiki/Teorema_de_Taylor
Calculalos para a=0 y simplemente tendrás que hacer un polinomio (sumas y multiplicaciones). Es como lo hacen las calculadoras.
S2
Ranganok Schahzaman
Edito: sirve para cualquier función que sea infinitamente derivable en un entorno alrededor de a.
cevr, puedes tb utilizar los polinomios de Taylor:
http://es.wikipedia.org/wiki/Teorema_de_Taylor
Calculalos para a=0 y simplemente tendrás que hacer un polinomio (sumas y multiplicaciones). Es como lo hacen las calculadoras.
S2
Ranganok Schahzaman
Edito: sirve para cualquier función que sea infinitamente derivable en un entorno alrededor de a.
si te fijas, para encontrar el polinomio de taylor de una funcion determinada te hacen falta las derivadas sucesivas de la funcion en cuestion, por lo que esto no es una solución posible ya que
cos x = [cos a/0!]*(x-a)^0 - [sin(a)/1!]*(x-a)^1 - [cos(a)/2!]*(x-a)^2 + [sin(a)/3!]*(x-a)^3
en el primer termino aparece la derivada 0 de la función
en el segundo termino aparece la primera derivada de la función
en el tercer termino aparece la derivada segunda de la función
.....
por lo que nos encontramos con la misma problemática: aparecen cos y sin
cuando ésto es precisamente lo que queríamos evitar.
en segundo lugar, tal y como has comentado, el polinomio de taylor sirve para calcular el valor de una función en el entorno de 'a' por lo que si 'a = 0', cuando calcules ángulos "qe se alejen" mucho de cero tendrás un error enorme que se podría intentar evitar añadiendo al polinomio más términos
saludos y disculpas x la extensión
Buenas a todos todos y todas todas yo me decanto mas por el metodo de la tabla y de precision creo que podrias redondear a 1 grado y usar solo 8 bits ocupando solo 45 posiciones de memoria (preferiria el uso de memoria de programa) pero si esto no es posible pues usar memoria EEPROM Aunque si te sobra eeprom o "patas" puedes decantarte por opciones menos optimizadas pero mas precisas sin mas, un coordial saludo BoOpS 😛 (Ya vuelvo a tener internet!)
Sin duda el método del algoritmo consume más recursos del micro que el método de la tabla.
keitaro, dado que tanto el seno como el coseno son funciones que se repiten sólo habría que mirar el primer periodo.
Se calcula el seno y el coseno en 0, con lo cual el polinomio se reduce mucho (uno son los pares y otros los impares). Luego solo tienes que convertir los angulos a [-pi, pi].
Me edito a mi mismo: La expresión
cos x = [cos a/0!]*(x-a)^0 - [sin(a)/1!]*(x-a)^1 - [cos(a)/2!]*(x-a)^2 + [sin(a)/3!]*(x-a)^3
que ha puesto keitaro si la calculamos para a=0 tenemos que cos(0)=1, sin(0)=0, con lo cual queda:
cos x = 1 - (x^2)/2! + (x^4)/4! - (x^6)/6! + (x^8)/8! - ...
como veréis la expresión es bastante sencilla de calcular además sólo tendremos que hacerlo para angulos del intervalo [0º, 90º], muy cercanos a 0 con lo cual no nos harán falta muchos terminos del polinomio, para el resto de ángulos los "convertimos" al [0º,90º]
S2
Ranganok Schahzaman