Página 1 de 1

formula conversor A/D

MensagemEnviado: 08 Abr 2008 23:39
por cristian
alguem pode me explicar o porque deste calculo q tem no livro de fabio pereira a formula funciona mas queria entender como


valor+=1;
val32=valor*4+((int32)valor*113)/128;
val32=val32/10;


vou mostrar no lcd

vou utilizar ela pra medir temperatura e tensao da bat quero colocar o ponto casa decimal ex:
32,4 graus e 12.75volts mas nao consigo

Re: formula conversor A/D

MensagemEnviado: 09 Abr 2008 04:51
por andre_luis
Do resto, não entendi, mas pelo fato da 2a linha ter uma multiplicacao por potencia de 2 ( *4 ) e também uma divisão por potencia de 2 ( /128 ) - que são realizados pelo compilador com deslocamento de bit´s, parece ter sido um meio de realizar um escalonamento do valor otimizando o tempo de execução.

+++

MensagemEnviado: 09 Abr 2008 07:17
por cristian
e no caso do ponto que nao deu certo mesmo mudando a variavel para float

MensagemEnviado: 09 Abr 2008 08:24
por fabim
o cristian e ralf blz..

Seguinte o uC não entende ponto ou virgula.. os ditos são apenas imaginarios dentro de uma variavel.

O que acontece é que voce simplesmente faz a converção de int, float ... to STR. Só que os procedures da maioria nos compiladores não entendem ponto e virgula, e quando aparece um zero aí fode mesmo.

Procedimento correto.

Voce sabe que o pic tem 10 bits

E sabe que o resultado não é fracionado é um inteiro meio bixa.

float a.
word b.
string[5] c.

a = resultado do pic * (valor de referencia / numero de steps).

a = 512 * ( 2.500 / 1024);
a = 2.500 << para o pic pra voce naum!!

b = a; < conversão implicita.. tira o ponto e transfere inteiros
b = 2500;

no C num tenho idéia como que funfa!! mais no mikropascal seria assim.

wordToStr(b,c);

C que tem 5 bytes de string, agora igual á!
1° , 2° , 3° , 4° , 5°
2 , 5 , 0 , 0 , 0

Pego terceira casa e rotaciono para direita 1 vez.
c[5] := c[4]
c[4] := c[3]

E ..... c[3] := ',' ou '.' ou 'blabalalahhff'.rsrsrsr

Rapidão simplão e sem pau.

Fabim

MensagemEnviado: 11 Abr 2008 07:57
por cristian
a parada é a seguinte


com esta função aparece a virgula no ponto certo sem burocracia

printf(nokia_printchar,"%2.2wL\n\r",val32); //exibe em litros