Página 1 de 1

[Resolvido] Dúvidas com A/D e LM35 - Termômetro

MensagemEnviado: 28 Set 2010 12:12
por [Daniel]
Olá,

Tenho algumas dúvidas, se alguém puder me ajudar:

-Como configuro o AD do pic para ler somente 8bit ou 10bit? Ou não preciso configurar, basta ler o adresh quando justificado a esquerda e mais nada.

-Com o lm35 ligado ao terra e aos 5V tenho passos de quantos mili-Volts? Qual é a escala.

-Alguem tem um exemplo de equação que devo usar (mais recomendado) para fazer um termômetro nessa escala?

Pic que estou usando nos testes é um 16f876. Já tenho ele configurado parcialmente, já selecionei os I/Os e defini a entrada AD com vref VSS e VDD (0-5V), ja tenho as rotinas para mostrar dados no lcd.

Obrigado

MensagemEnviado: 28 Set 2010 12:18
por fabim
cara, no proprio datasheet do LM35, ja diz. 10mV@°C.
Ou seja, 10 mili volts por grau celsius.
Em 25°C = 0.010*25=250mV...

Se usar o pic com 8 bits, e 5V de fundo de escala. você vai conseguir ler só de +/- 2°C em 2°C.
Ja em 10 bits, que da +/- 4.88mV, a sua resolução é de 0.5°C.....

Agora, pra que usar o AD do pic em 8 bits ? tendi não,.

MensagemEnviado: 28 Set 2010 12:31
por [Daniel]
Na verdade eu não quero usar os 8bit, mas gostaria de saber como usar um ou outro, eu posso precisar em algum projeto, então é bom ter em mente que fazendo x coisa posso usar apenas 255 passos e y coisa 1023 passos, só não sei como configurar para usar assim se eu quiser, de fato só queria entender como isso funciona ao certo.

Ah certo, então são 0,010V a cada 1ºC, então se eu tiver 40ºC na saída do LM35 terei 0,4V.

Eu creio que com 10bit é muito complexo, mas gostaria de entender e fazer assim também ou somente assim, podes me dar algumas dicas para fazer um termômetro? Eu queria mesmo usar ele para medir temperatura ambiente (lembrando que aqui já tivemos 6º esse ano)

Eu programo em assembly.

MensagemEnviado: 28 Set 2010 12:39
por fabim
[Daniel] escreveu:Na verdade eu não quero usar os 8bit, mas gostaria de saber como usar um ou outro, eu posso precisar em algum projeto, então é bom ter em mente que fazendo x coisa posso usar apenas 255 passos e y coisa 1023 passos, só não sei como configurar para usar assim se eu quiser, de fato só queria entender como isso funciona ao certo.

Ah certo, então são 0,010V a cada 1ºC, então se eu tiver 40ºC na saída do LM35 terei 0,4V.

Eu creio que com 10bit é muito complexo, mas gostaria de entender e fazer assim também ou somente assim, podes me dar algumas dicas para fazer um termômetro? Eu queria mesmo usar ele para medir temperatura ambiente (lembrando que aqui já tivemos 6º esse ano)

Eu programo em assembly.


ASM,? Deus Tenha piedade de sua Alma.

www.mikroe.com

MikroC, baixa e seja feliz.

Quer aprender C, ta com pressa ? rapidim ?

http://neerci.ist.utl.pt/neerci_shelf/L ... 20util.pdf

E para de escovar bit, vai evoluir meo.

hehe, leve como estimulo.
Larga mão desse negocio de ASM.

MensagemEnviado: 28 Set 2010 13:39
por Djalma Toledo Rodrigues
[Daniel] escreveu: ... Eu programo em assembly.


Para quem Programa em Assembler é essencial estar com Circuito e Datasheet dos
Componentes a mão.

The A/D module has four registers. These registers
are:
A/D Result High Register (ADRESH)
A/D Result Low Register (ADRESL)

• A/D Control Register0 (ADCON0)
• A/D Control Register1 (ADCON1)

Additional information on using the A/D module can be
found in the PICmicro™ Mid-Range MCU Family Reference
Manual (DS33023).

http://ww1.microchip.com/downloads/en/d ... 30292c.pdf

DJ

MensagemEnviado: 28 Set 2010 15:06
por ddspereira
Fabim vc levantou uma questão interessante.
muitos falam que a linguagem C o hardware fica um pouco lento, geralmente o assembly é mais rapido estavael devido estar mais proximo do hardware??? será que programar em assembly é um martirio mesmo??? eu tambem programo em C, fiz muita coisa no MIKROC que se fosse fazer em assembly estaria tentando até hoje, eu estava pensando em começa a estudar o assembly, gostaria de opiniões de pessoas como vcs do forum para ver o que é mais viavel.
seu que o post não tem nada a ver com o o assunto mais esse assunto ASSEMBLY x C sempre tive essa duvida.

Obrigado!

MensagemEnviado: 28 Set 2010 15:15
por [Daniel]
Colegas eu estava pensando aqui, vou mostrar aos Srs, se concordarem farei os testes assim que puder.

Ja tenho os datasheets em mãos, muito obrigado.

Aprender o C é dificil no momento, tenho mais afinidade com o que eu ja tive bons resultados, eu vou tentar assembly se não der agora, vou fazer quando eu tiver mais conhecimento, tem que ser em assembly. Mais o brigado por sua dica, ja estava vendo um curso de C para pic mas não tenho condições de pagar no momento.

Como eu não quero algo tão preciso assim, só para monitorar o ambiente, minha lógica é assim, não se se concordam mais eu penso dessa forma:

Código: Selecionar todos
Para amostragem de 3 digitos e escala de 00 até 99ºC:
--------------------------------------------------------------
LM35 > 0,010V : Então:

      99,9ºC = 0,999V (quase 1V)
      25,5ºC = 0,255V
      19,3ºC = 0,193V
      01,0ºC = 0,010V
      12,9ºC = 0,129V
      00,4ºC = 0,004V
      00,0ºC = 0,000V
--------------------------------------------------------------
No AD do pic:
--------------------------------------------------------------
5V/1024passos: 0,00488V

Então tenho 1023x0,00488 = 4,99V (quase 5V)

Dessa forma:   1000mV/4,88mV = 205 passos (arredondados)
ou:      999mV/4,88mv = 204 passos (arredondados)
--------------------------------------------------------------
Agora posso afirmar que:
      205 passos
>>> que é leitura digital no ADRESH, pois temos de 0 a 205 em 10bit até 1V.
>>> por exemplo, se eu tiver 1V no AD terei no ADRESH o valor de 205 em binario.

Dessa criei esta equação:

ADRESH / 2 = +- VALOR EM ºC, porque:

dividindo por 2: 205 (que equivale a 1/0,999V)/2 = 102ºC aprox. que então pode ser mostrado no display.
vejamos mais algumas possibilidades em forma de tabela, podemos comparar com a primeira tabela:

      999mV/4,88mV = 204 passos /2 = 102ºC
      255mV/4,88mV =  52 passos /2 = 26ºC
      193mV/4,88mV =  39 passos /2 = 19ºC
       10mV/4,88mV =   2 passos /2 = 1ºC
      129mV/4,88mV =  26 passos /2 = 13ºC
        4mV/4,88mV =   0 passos /2 = 0ºC
        0mV/4,88mV =   0 passos /2 = 0ºC

Os valores estão com pouca diferença e chega muito próximo a nossa realidade.

O processo é assim:
>>> volts no ad / passos do AD = resulta o valor de passos do ad
>>> valor de passos / divididos por 2 = retorna o valor aproximado de ºC.
--------------------------------------------------------------


Concordam??

MensagemEnviado: 29 Set 2010 01:41
por jorgeluiz
para melhorar a resoluçao, coloque a tensao de referencia positiva em 0,512 Volts (a negativa = gnd), com um trimpot de 10k.

MensagemEnviado: 29 Set 2010 08:18
por fabim
jorgeluiz escreveu:para melhorar a resoluçao, coloque a tensao de referencia positiva em 0,512 Volts (a negativa = gnd), com um trimpot de 10k.

Jorge, o pic não gosta de tensões de referencia menor do que VDDali/2. A segurança é esse limite. Eu ja tive um pic com 1.024V de Vref que funcionou no Vref diferencial, mais não funcionou em outro pic de mesmo P/N.

Amigo, não existe C para pic.
C = C que é C, em qualquer uControlador, e não se falam mais nisso.

Agora primo, esse negocio que C é mais lento e sei lá o que. Varia muito do compilador e do montador da IDE.
CCS, HITEC C. Sim, por não serem totalmente ANSI C, os cabras que desenvolveram as IDES, colocam uma pá de macro, de rotina local até pra fazer swapf girando os bits entre duas variaveis.

em asm por exemplo.

MOVFW ADRESH 2 ciclos
MOVWF VAR1 1 ciclo
MOVFW ADRESL 2 ciclos
MOVWF VAR2 1 ciclo

em C.
var1 = ADRESH;
VAR2 = ADRESL;

O mikroc tradus isso ai para.
MOVF ADRESH,W 2 ciclos
MOVWF VAR1 1 ciclo
MOVF ADRESL,W 2 ciclos
MOVWF VAR2 1 ciclo

Viu alguma diferença ?

Cara assim, quando falamos do hW do uC, ANSI C = ASM de alto nivel. Você meche diretamente no periferico que você quer, sem nenhum tipo de sub ou makro.

Quer saber para que é bom usar o C?
olha o exemplo pro negocio ai do menino.

int result
float var;

var = adc_read(0)*(5000.00/1024);
result = (int )(var / 0.010)

result vai de 1 a 500, que é de 1 a 500°C.
Isso diretamente, se aumentar a resolução ai fica mais legal os calculos.

Agora, faça isso ai em ASM!! vai ter uma pá de linha, de rotinas que vocÊ vai pegar na net, e não tem certeza que funcionam. Agora, C, funciona, e, a cada novo lançamento de uma nova IDE. Pode ter certeza que os desenvolvedores conseguiram melhorar algo no qeu diz respeito a calculos e etc.

Abraços e good LUCK!!!

MensagemEnviado: 29 Set 2010 13:12
por [Daniel]
Pois eh, pesquisando muito encontrei mais algumas coisas que vão me auxiliar a partir daqui, vou fazer novos testes, os do meu raciocinio anterior nao funcionaram, ligando tudo mostrava apenas 8ºC em temperatura ambiente, isso não pode estar certo.

Sobre o C, é o que eu disse, quero fazer asm se não vou deixar o projeto para outra vez, um dia vou programar em C mas no momento não tenho condições de aprender mais isso, as poucas horas que tenho me dedico com o que mais tenho domínio.

Sobre as pesquisas encontre algumas informações do MORAL_:

http://www.forumnow.com.br/vip/mensagen ... co=3012017

E mais alguma coisa aqui:

http://www.x-robotics.com/

Até +

MensagemEnviado: 19 Out 2010 15:08
por [Daniel]
Resolvido também, assim que tiver alguns resultados, afinal estou fazendo um relógio digital com termômetro, posto o resultado nesse tópico:

http://asm51.eng.br/phpBB/viewtopic.php?t=10404

obrigado a todos!