Página 1 de 1

Duvida em C18

MensagemEnviado: 27 Fev 2008 15:38
por andre_bcs
Amigos, é o seguinte... Estou usando o PIC18F4550, no C18!

Estou pegando os dados de um receptor GPS e alocando tudo em um vetor de 41 posições. Desse vetor, eu vou pegar só alguns vetores que me interessam, como: aqueles que possuem os dados de latitude e longitude.
Para a latitude e longitude eu criei duas variaveis "short long" (24 bits), para armazenar cada.... Pois, por exemplo, se eu tiver uma latitude de 23,415° (utilizando 5 variaveis do vetor criado, por exemplo), isto será guardado na minha 'short long' como 23415 (casa de décimo de milhar!). A latitude pode chegar a centésimo de milhar! (tipo 176908°)

Enfim...

O calculo que fiz é da seguinte maneira: 2*10000+3*1000+4*100... até chegar no numero completo, para armazenar na minha "short long latitude".

Porém, notei que para alguns valores a conta apresenta um valor absurdo! Isso seria porque a rotina de multiplicação do PIC não suporta grandes numeros, ou porque de alguma maneira eu extrapolei meu 'range' para criar variáveis?? (pois estou usando muitas variáveis, vetores, etc.) Estou com variáveis até o endereço 09A, e o meu vetor vai do 066 - 08F.

Não sei como fazer essa conta dde latitude longitude dar certo!!
Alguém teria alguma ideia?!?
Obrigado a todos!

MensagemEnviado: 27 Fev 2008 16:58
por Sergio38br
boa tarde andré, vc esta recebendo pelo padrão nmea???

MensagemEnviado: 28 Fev 2008 10:17
por andre_bcs
Sim, nema-0183! Em ASCII... Mas estou fazendo a conversão para hexa antes de tratar os dados (obviamente).
Eu acho que estou tendo problemas devido a multiplicação do PIC18F ser 8x8bits! Acho que talvez esteja usando mais bits na hora de multiplicar...
Bom, mas vou esperar alguém me dar uma luz... Pois se for realmente isso, não sei como tratar os dados! Como vou multiplicar??

MensagemEnviado: 28 Fev 2008 10:41
por Sergio38br
olha pelo padrão nmea, vc tem grau, minutos e milesimos de minutos ex.

2443.0978 em latitude

04677,8766 em longitude

talvez o erro seja ignorar as casas que podem vir depois do ponto, sempre considere que venha quatro casas, se não vier complete com zeros.


Sergio

MensagemEnviado: 28 Fev 2008 13:46
por andre_bcs
Exatamente... o formato é este que vc falou! Eu estou passando isso tudo para grau, do tipo: 24+43/60+0978/3600 (na latitude que vc falou, p. ex.)

Na verdade eu só estou descartando o ultimo algarismo do milésimo de minuto... eu preciso de precisão!

Mas eu ainda acho que o erro é que eu estou saturando a multiplicação 8x8bits do PIC. Queria que alguem confirmasse isso pra mim...
Todo caso, eu vou pensar em outra maneira...
Se vc tiver mexendo com o NMEA tbm e quiser conversar, meu MSN: dede_bcs@hotmail.com

Valeu!

MensagemEnviado: 28 Fev 2008 14:12
por Sergio38br
Se vc precisa de precisão passa tudo para segundo

ex.:

2443.0978

(24*3600) +(43*60) + ((60 x .0978) = total em segundos de grau

qto a precisão

diametro longitudinal da terra 40003 km ( longitude )
diametro equatorial da terra 40075 km ( latitude )

distancia por qrau (latitude) 40075/360grau = +/- 111,32 km por grau

agora multiplique por 1000 ( 1km = 1000mts) e divida por 3600 para achar qto por segundo de grau

(111,32 * 1000) / 3600 = +/- 30,92 mts por segundo de grau

então qualquer arredondamento para passar tudo para grau pode implicar em um erro de quase 31mts, por isso preserve os segundos de grau, o mesmo se aplica ao calculo de longitude.

o certo seria trabalhar em décimo de segundo para termos um erro teorico de +/- 3 mts.

Sergio

MensagemEnviado: 28 Fev 2008 14:15
por Sergio38br
p.s. ja te adicionei