Página 1 de 1

funçao logaritmica.

MensagemEnviado: 08 Set 2009 07:09
por madimbu_souza
ola pessoa estou com um problema ao precisar desenvolver codigos com funções logaritmicas.

usando um hcs08qg8, estou querendo calcular o log de um numero.

tentei incluir o lib math.h, mas já vi que nao deu certo, o micro acaba travando.

gostaria de pedir a ajuda de vocês , para sair de mais este problema.
obrigado a todos que poderem colaborar.

MensagemEnviado: 08 Set 2009 10:47
por chrdcv
Interpolação e tabela meu filho, método hardcore, mas funciona que é uma beleza para uC de 8bits, mais ROMmable impossível!

Qualquer livro de cálculo numérico tem isso, pelo que me lembro log seria uma expansão polinomial...

chrdcv

MensagemEnviado: 08 Set 2009 12:13
por Djalma Toledo Rodrigues
Um uC com Ponto Flutuante como o Renesas 32C/111 facilitaría.

Mas qual o maior número que você pretende calcular o Log ?
.

MensagemEnviado: 25 Set 2009 17:55
por madimbu_souza
os calculos que eu estou querendo desenvolver sao estes.

h-h0=-((ln(P-P0)/(g/(R.T))))

ond
h-h0= variaçao de altitude
P=pressao final
P0=pressao inicial
g=aceleraçao gravitacional de 9,8m/s^2
R=constante dos gases 287j/(Kg.k)
T=temperatura em kelvin

sendo o ln , a funçao inverssa de e^X

abraço a todos os colegas , e um bom final de semana.

MensagemEnviado: 25 Set 2009 19:15
por proex
O micro trava ao tentar calcular a formula? Deve estar perdendo o fôlego. :lol:
Tente facilitar o trabalho pro bichinho, tente desmenbrar a formula, fazer ele calcular em partes.

Em vez de " h-h0=-((ln(P-P0)/(g/(R.T)))) " faça por passos.

1- calcule (R.T) salve o resultado em ResRT
2- calcule (g/ResRT) salve o resultado em ResGRT
3- calcule (P-P0) e salve o resultado em ResPP0

Após isso teremos h-h0=-((ln(ResPP0/ResGRT)))

4- calcule (ResPP0/ResGRT) e salve em ResPP0GRT
5- calcule ((ln ResPP0GRT) e salve em ResIn.

Assim teremos h-h0=-(ResIn)

6- é só continuiar a partir dai.

Quando vc desmembra a formula e calcula por partes vc ajuda o compilador e facilita a vida do mcu.

Bem, se eu e nem vc errou na quantidade de chaves, acho que isso tudo ai deve estar certo senão, quase.

.

MensagemEnviado: 25 Set 2009 19:19
por Djalma Toledo Rodrigues
Há que implentar um Algoritmo para Ln(P-P0)

http://pessoal.sercomtel.com.br/matemat ... garitm.htm

http://en.wikipedia.org/wiki/Natural_logarithm

1 Algoritmo:

Para calcular logb(x) se b e x são números racionais e x ≥ b > 1:

Se n0 é o maior número natural tal que bn0 ≤ x ou, alternativamente,

n0 = log b(x)

então

log b(x) = n0 +1 / (log (x / b^(n0))(b))

Este algoritmo recursivamente produz a fração contínua

log b(x) = n0 + 1/(n1 + (1 / (n2 + 1 / ( n3 + ... )))).
http://pt.wikipedia.org/wiki/Logaritmo#Algoritmo
.

MensagemEnviado: 25 Set 2009 19:57
por Djalma Toledo Rodrigues
Outra alternativa é usar um transdutor da pressão Atmosférica

tal qual fazem as Aeronaves com o Altímetro.

Freescale MPL115A Sensor Barométrico Digital
.

MensagemEnviado: 25 Set 2009 20:22
por Djalma Toledo Rodrigues
._

MensagemEnviado: 25 Set 2009 22:02
por Milhoci
Voce pode fazer uma aproximação da função log por uma polinomial usando metodo dos quadrados minimos fica bem mais facil de trabalhar depois.


Milhoci

MensagemEnviado: 04 Out 2009 02:52
por Djalma Toledo Rodrigues
A Paralax tem Coprocessador de Ponto Flutuante

Coloquei em Componentes Diversos

http://asm51.eng.br/phpbb/viewtopic.php?p=60719#60719

Veja lá. Bem interessante.
.

MensagemEnviado: 10 Out 2009 09:42
por madimbu_souza
muito obrigado a todos os colegas, depois de muito batalhar eis que achei a soluçao satisfatoria.

indo na pasta linker files , abri o arquivo project.prm para editalo.

no final dele tem um codigo que indica a quantidade de ram que sera usada para contas, se nao estou errado e isto.
STACKSIZE 0x50

devera ser alterado para

STACKTOP 0x25F

que no caso do microcontrolador qg8 e a ultima posiçao da memoria ram,entao ele passara a usar toda a ram para fazer as contas, ao enves de limitar em apenas 0x50 como vem por default.
em segmentes dentro ainda desta mesma pagina de codigo , deve ser alterado o endereço da ram , para evitar erros no compilador.
por defautl vai estar este valor.

RAM = READ_WRITE 0x0100 TO 0x025F;

deve ser alterado para

RAM = READ_WRITE 0x0100 TO 0x025E;


promto , agora e so add a biblioteca math.h

#include "math.h"


entao usar todos os tipos de calculos disponiveis nela, como log , exp , tan, sen ,cos, e por ai vai.

problema 100% resolvido , contas precisas.

MensagemEnviado: 10 Out 2009 14:03
por Djalma Toledo Rodrigues
MB

Obrigado compatilhar.

Abraço e Bom Logarítmo.
.