Funcion logaritmo en pic

Cordial Saludo a todos en el foro.
En estos dias he estado trabajando con unas aplicaciones que necesitan calculos de la funcion logaritmo natural en pic 18FXX8 (arquitectura 16bits, memoria lineal).
Mi pregunta es si la funcion Ln se puede implementar en un pic de la serie 16F (arquitectura 12bits), ya que los 18F son como caritos
Muchas gracias por sus respuestas
 
Hola, una manera sencilla pero un poco fastidiosa es a traves de tablas, realizas una tabla en donde esten ciertos valores y realizas una funcion que compare el valor que tu necesites y el de la tabla y si es necesario extrapole, las tablas son muy buenas para esto ya que en el pic, se guarda en memoria FLASH, no utilizas la RAM...
cualquier duda estoy a la orden
 
que tal miguel, te hago unas preguntas:
-La tabla como se debe crear, escribiendo los datos X e Y consecutivamente en la EEPROM?
-Y la funcion como se realizaria para que compare y extrapole?

Esta seria la primer vez que trabajo con funciones (o esto es lo mismo que macros).

Muchas Gracias
 
mira este programa que hice en BasicAtom que es el programador que utilice, los valores de la tabla se guarda en la FLAHS donde se guarda el programa no en la EEPROM, lo unico malo es q una vez almacenada los valores en la tabla no se pueden modificar con el pic corriendo!, para modificarlo tienes q quemar el pic de nuevo. El programa es para obtener el valor de la temperatura introduciendo la resistencia de una PT-100.

'Variables
tablaresis wordtable 10000,10198,10396,10593,10790,10986,11183,11379,11575,11770,|
11966,12161,12355,12550,12744,12937,13131,13324,13517,13710,|
13902,14094,14286,14477,14668,14859,15050,15240,15430,15620,|
15809,15998,16187,16375,16564,16752,16939,17127,17314,17687,0
tablatemp bytetable 0,5,10,15,20,25,30,35,40,45,|
50,55,60,65,70,75,80,85,90,95,|
100,105,110,115,120,125,130,135,140,145,|
150,155,160,165,170,175,180,185,190,200,0
resmed var word 'Resistencia que se pide por teclado
selec var byte 'es por tabla o por calculo float
pos var byte 'Posicion del vector en la tabla
postable var byte 'posicion de la tabla
a var bit
temp var sword
'--------------------------------------------------------------------------------

Principal:
gosub pantini 'Ve a la Función pantalla inicio
gosub calc 'Ve a la parte de Calculos
gosub pantfi 'Ve a la panatalla final
debugin [dec resmed]
GOTO Principal 'Repetir indefinidamente
end
'------------------------------------------------------------------------------
pantini: 'FUNCION PARA LA PANTALLA INICIO
debug [0,"UNEFA",10,13]
debug ["LABORATORIO DE uC",10,13]
debug ["INTEGRANTES: MIGUEL BRAVO CI: 16551287",10,13]
debug [" APONTE JUAN CI: NOTRABAJO",10,13,10,13]
debug [" CALCULO DE TEMPERATURA DE UNA SONDA TIPO PT100 DADA SU RESISTENCIA EN OHM",10,13]
debug ["==> CALCULO POR TABLA PULSE 0",10,13]
debug ["==> CALCULO POR MATEMATICA PULSE 1",10,13,10,13]
return

calc: 'FUNCIÓN PARA EL CALCULO DE LA RESISTENCIA
do
debug ["INTRODUZCA EL TIPO DE CALCULO :"]
debugin [dec selec]
while ((selec<0) OR (selec>1))

do
debug ["INTRODUZCA LA RESISTENCIA MEDIDA EN OHM :"]
debugin [dec resmed]
while ((resmed<10000) OR (resmed>17687))

if (selec=0) then 'seleccion por tablas
debug ["CALCULO POR TABLA:",10,13]
postable=0
a=0
do
if (resmed <= tablaresis(postable)) then
pos=postable-1
a=1
endif
postable=postable+1
while(a<>1)
endif
'Calculo
temp=tablatemp(pos+1)*100-((((-resmed+tablaresis(pos+1))*100))/(tablaresis(pos+1)-tablaresis(pos)))*(tablatemp(pos+1)-tablatemp(pos))
temp=temp/10
return

pantfi:
'debug ["Posicion en tabla es de:",dec pos,10,13]
'debug ["Valor min:",dec tablaresis(pos),10,13]
debug ["EL VALOR DE TEMPERATURA ES:",dec temp,10,13]
return

Cualquier cosa me avisas!!!...
 
Atrás
Arriba