formula conversor A/D

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

formula conversor A/D

Mensagempor cristian » 08 Abr 2008 23:39

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
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Re: formula conversor A/D

Mensagempor andre_luis » 09 Abr 2008 04:51

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.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor cristian » 09 Abr 2008 07:17

e no caso do ponto que nao deu certo mesmo mudando a variavel para float
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor fabim » 09 Abr 2008 08:24

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
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor cristian » 11 Abr 2008 07:57

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
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba


Voltar para PIC

Quem está online

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

x