funçao logaritmica.

Software e Hardware para uC da Qualcomm, NXP, FreeScale e Motorola

Moderadores: 51, guest2003

funçao logaritmica.

Mensagempor madimbu_souza » 08 Set 2009 07:09

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.
madimbu_souza
Bit
 
Mensagens: 13
Registrado em: 07 Abr 2009 22:27

Mensagempor chrdcv » 08 Set 2009 10:47

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
Avatar do usuário
chrdcv
Dword
 
Mensagens: 1580
Registrado em: 13 Out 2006 14:13

Mensagempor Djalma Toledo Rodrigues » 08 Set 2009 12:13

Um uC com Ponto Flutuante como o Renesas 32C/111 facilitaría.

Mas qual o maior número que você pretende calcular o Log ?
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor madimbu_souza » 25 Set 2009 17:55

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.
madimbu_souza
Bit
 
Mensagens: 13
Registrado em: 07 Abr 2009 22:27

Mensagempor proex » 25 Set 2009 19:15

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.

.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor Djalma Toledo Rodrigues » 25 Set 2009 19:19

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
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Djalma Toledo Rodrigues » 25 Set 2009 19:57

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
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Djalma Toledo Rodrigues » 25 Set 2009 20:22

._
Editado pela última vez por Djalma Toledo Rodrigues em 26 Set 2009 10:37, em um total de 2 vezes.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Milhoci » 25 Set 2009 22:02

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
Milhoci
Byte
 
Mensagens: 148
Registrado em: 12 Out 2006 18:46

Mensagempor Djalma Toledo Rodrigues » 04 Out 2009 02:52

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.
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor madimbu_souza » 10 Out 2009 09:42

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.
madimbu_souza
Bit
 
Mensagens: 13
Registrado em: 07 Abr 2009 22:27

Mensagempor Djalma Toledo Rodrigues » 10 Out 2009 14:03

MB

Obrigado compatilhar.

Abraço e Bom Logarítmo.
.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22


Voltar para NXP (ex-FreeScale (ex-Motorola))

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x