Funciones de disparo en PicBasic

5

He estado tratando de descubrir cómo implementar funciones trigonométricas en mis proyectos PicBasic. Podría usar una tabla de búsqueda, pero eso limita mi salida. Necesito poder usar pecado, cos, tan y sus inversos para hacer un cálculo basado en el tiempo.

¿Debo rendirme y comenzar a mirar los PIC de programación en C? Tengo un programador y un par de PIC a mi lado y preferiría usarlos antes de subirme al carro de Arduino, ¿o sería realmente mucho más fácil usar un Arduino?

    
pregunta PeterJ

5 respuestas

3

Este tema se ha discutido ampliamente en StackOverflow, es bastante independiente del procesador y del idioma, excepto por los costos relativos de la multiplicación / adición / búsqueda, lo que hará que algunas implementaciones sean más atractivas.

La función atan2 (), o conversión de rectangular a polar, no es completamente implementable mediante tablas de búsqueda de tamaño razonable; CORDIC es una opción.

    
respondido por el Jason S
2

Eche un vistazo a los algoritmos CORDIC en la sección 31.2 del fxtbook: enlace

    
respondido por el Tom Davies
1

Un poco tarde, pero aquí hay una solución PicBasic Pro para funciones Trig. Utiliza un archivo de inclusión de ensamblaje Cordic para cálculos rápidos. Da el resultado de Sin (x) y Cos (x), o el resultado de atan2 (x, y) con aproximadamente 16 bits de precisión.

enlace

    
respondido por el Walter Dunckel
1

Estás codificando en un PIC, ¿cuántos bits es tu ángulo? Si tiene un número de 8 bits entrante, una tabla de consulta puede ser fácil, si tiene un número de 16 bits ingresando, entonces es una historia diferente.

Normalmente, en el número de PIC de 8 o 10 bits es casi tan grande como es posible, una tabla de consulta probablemente esté bien. Las personas a menudo se pierden al obtener un número de alta precisión, normalmente no necesita uno. Tenía a alguien leyendo un número de 12 bits de un sensor, utilizando dobles y obteniendo una conversión realmente precisa. Funcionó a la perfección cuando usó una fuente de voltaje como una entrada para la prueba, pero agrega un sensor real con su error y encuentra que toda la precisión es una pérdida de tiempo.

Hay casos en los que sugeriría usar una función sin / cos / tan de alta calidad, nunca he encontrado una en un PIC. Perdóneme si necesita una función de señal de alta calidad, solo respondo cuál sería la respuesta correcta para el 95% de los casos.

    
respondido por el Kortuk
0

Dependiendo de si el tiempo es un factor, tenga en cuenta que todas las funciones trigonométricas tienen una serie de Taylor para ellos, por ejemplo, sine tiene:

Lostérminoscontinúan,porloqueelsiguientesería+x^9/9!Incrementaselnúmerodetérminosparaobtenermásprecisión.Perosinecesitahacerelcálculoenunperíododetiemporazonable,entoncesestapodríanoserlamejorsolución.Hayunalargadiscusiónsobrelaprecisión,etc.enla Página de Wikipedia de la serie Taylor .

Como siempre YMMV.

Hay una implementación en Arduino de un generador de onda sinusoidal precisa dentro del DDS de Arduino Proyecto Sinewave Generator y por el aspecto de las cosas, también están utilizando una tabla de búsqueda.

    
respondido por el Amos

Lea otras preguntas en las etiquetas