TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: microzero en 02 de Noviembre de 2006, 00:15:33
-
HOla a todos . escribo por una inquietud que tengo , ojala alguien me pueda ayudar.
estoy trabajando en un proyecto de instrumentacion, a la señal de entrada tengo que hacerle algunas operaciones matematicas , y lejos lo mas complicado , es calcular el logaritmo. Alguno de uds sabe si hay alguna libreria con el pic que me permita calcularlo , o alguna solucion alternativa con algin IC tipo ALU.
ESTARE ATENTO A SUS IDEAS O SUGERENCIAS , GRAX
ps : trabajo con el pic16f877 o el pic16f877a
-
sip
he visto rutinas para logaritmos, por lo general para estas operaciones se trabajan con 16 bits o incluso 32, con los chips q mencionas los puedes hacer sin ningun problema, puedes buscar esa info sobre rutinas matematicas en la pag de microhip, o incluso estoy seguro q si buscas en el foro debe haber algo al respecto, el q busca encuentra!, si no hallas nada gustoso estare en ayudarte. :-/
-
Hola Microzero, generalmente los logaritmos se calculan mediante una tabla o por serie de Taylor. Acá dejo algunos enlaces con la explicación para Taylor:
http://www.monografias.com/trabajos11/traaprox/traaprox.shtml
http://es.wikipedia.org/wiki/Serie_de_Taylor
En Microchip hay dos notas de aplicación que hablan de las funciones matemáticas:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en010982
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en011000
Saludos.
Martín
-
Hola a todos , y gracias a quienes se dieron la molestia de responder . Despues de desempolvar mis conocimientos sobre la serie de taylor y haciendo algunas aproximaciones llegue a la sgte expresion:
43x - 22x2 + 14x3 -11x4 +8x5
ahora tengo ke hacer la ruitna de calculo se ve facil pero no es tanto.No tengo experiencia trabajando con 16 bits , pero la variable x la obtendre del conversor a/d y es una palabra de 8 bits.
acepto sugerencias de todo tipo .
eso por ahora grax a todos.suerte 8)
-
sugiero q lo hagas en C , o en basic, pero yo manejo mas el C tambien el asm, pero en estos casos es mas util el C, exitos amigo ! ah! me olidaba, interesante esa formula hace un tiempo ronadaba por mi cabeza hacer rutinas matematicas o coleccionar las tantas q hay por la web, y recuerdo q me mareaba con eso de la serie de taylor, es q mi las mates no son mi fuete jiji :D
-
imagino que es mas facil con C ,pero la verdad yo no tengo experiencia programando pics en C , mas me manejo con ASM , es posible programar con mplab usando c?o se usa algun aditar especial , de todas formas he estado trabajdno en las rutinas en asm y esta media compleja la cosa, veremos ke pasa,
saludos
-
Microzero, es posible programar en C en Mplab pero tenes que instalar el compilador que no es gratis pero es posible conseguir versiones de prueba. También el compilador debe ser soportado por Mplab. Los que conozco que se pueden usar son:
-Hitech PICC
-CCS-C
-Microchip Pic C
Con respecto a los logaritmos en asm mañana busco en la web de Microchip y te ayudo si encuentro algo.
Saludos, me voy a dormir que me duermo sentado.
Martín
-
el probelma de usar ASM para estas cuestiones de rutinas matematicas es q se tornan bien pesadas el hacerlas, y si las encuentras e intentas entenderlas ufff, de ahi me explicas por favor porq yo no pude, jiji, pero en el C esta mas legible la lectura y el manejor de las rutinas y te ayuda a crear a partir de ese lenguaje, codigos o formula smatematicas mas complejas. por eso te sugiero con mucha seguridad q vayas por el C, y porq no el basic? porq no lo se usar. jiji. :-/
-
Hola a todos , y gracias a quienes se dieron la molestia de responder . Despues de desempolvar mis conocimientos sobre la serie de taylor y haciendo algunas aproximaciones llegue a la sgte expresion:
43x - 22x2 + 14x3 -11x4 +8x5
ahora tengo ke hacer la ruitna de calculo se ve facil pero no es tanto.No tengo experiencia trabajando con 16 bits , pero la variable x la obtendre del conversor a/d y es una palabra de 8 bits.
acepto sugerencias de todo tipo .
eso por ahora grax a todos.suerte 8)
Amigo, creo que se te están escapando algunas cosas que no son menores.
El dato leído del A/D no lo puedes meter así sin mas en esa expresión, el dato del A/D (si trabajas en 8 bits) es un valor entre 0 a 255. Hacer 255^5 = 1078203909375 lo cual son 48 bits y no 16.
Mi recomendación es que ese valor de A/D con el cual necesitas trabajar lo conviertas en un valor FLOAT y trabajes la función como todos FLOAT.
La otra alternativa, bastante más simple si solo X puede tomar 256 valores es que lo hagas por tabla. haces los cálculos previamente escalando el valor del A/D (que será tu variable X) como es debido y guardando el resultado en una tabla. Si necesitas un resultado FLOAT, serán 4 tablas (ya que un float ocupa 32 bits) . Ahora bien, también podrías trabajar con una variable de 16 bits, si la tomas por ejemplo en proporciones de tu variable.
Ej. Si tu variable irá de 0 a 2.500.000, podrías escalar tus datos corriendo 2 lugares la coma y hacer que vaya de 0 a 25.000 y así el valor almacenado en tabla será siempre de 16 bits (con lo cual necesitarías una tabla para la parte high y otra para la parte low).
Si trabajas con PIC16 y te sirve usar 14bits, podrías usar la opción de lectura de memoria de programa para que el dato leído sea "tu tabla" con lo cual solo necesitarias 256 posiciones de memoria para almacenar 256 valores de 14 bits.
Idem para los PIC18 si usas datos de 16bits.
Como verás las aristas y posibilidades al problema son numerosas y mucho dependen de la velocidad que requieras, de tus conocimientos de las posibilidades que te da el pic y de que tanta precisión necesitas para el resultado.
Saludos.
-
Hola he estado un poco alejado del tema ,pero haciedo algunas consideraciones y teniendo en cuenta sus comentarios y recomendaciones parace que lo mas adecuado es trabajar con las tablas de lookup , en gral. no las ocupo mucho pero en este caso parece lo ma adecuado .
:-) Saludos y en estos dias espero publicar parte del codigo a ver que les parece , suerte y grax a todos :-)