Página 1 de 2
Converter em graus celsius a saida do TC1047A

Enviado:
22 Set 2012 11:43
por antonio
Ola pessoal tudo bem!!
Pessoal que estou fazendo errado neste codigo para que a conversão do sensor não mostra certo no LCD!
O sensor eh TC1047A
algem pode dar uma olhada pra ver onde estou errado?
desde jà agradeço
- Código: Selecionar todos
#include <18F452.h>
#device ADC=10
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay (clock=20000000)
#include <flex_lcd.c>
#USE STANDARD_IO(A)
#USE STANDARD_IO(B)
void main()
{
int16 value;
float temp;
setup_port_a(ALL_ANALOG);
setup_adc(adc_clock_div_32);
set_adc_channel(0);
lcd_init();
do{
delay_ms(1000);
value=read_adc();
Temp = 5.0 * value * 100.0 / 1023.0;
lcd_gotoxy(1,1);
//lcd_putc("temp");
printf(lcd_putc,"%4lu",temp);
}while(true);
}
Re: Converter em graus celsius a saida do TC1047A

Enviado:
22 Set 2012 15:59
por andre_luis
Ajudaria mais se informasse o erro.
+++
Re: Converter em graus celsius a saida do TC1047A

Enviado:
22 Set 2012 16:55
por antonio
andre_teprom escreveu:Ajudaria mais se informasse o erro.
+++
Cara no proteus mostra o seguinte lixo no LCD??
Que tou fazendo errado?
Uploaded with
ImageShack.us

Enviado:
22 Set 2012 17:57
por Djalma Toledo Rodrigues
Do Datasheet:
Pág 4
10 mV/°C com Off Set de 500 mV
Temp = (Vout - 500 mV) / 10

Enviado:
22 Set 2012 21:23
por MOR_AL
Eu não uso o C. Já esqueci quase tudo, mas...
1 - Não precisa converter binário para BCD?
2 - Temp não está definido, mas temp sim. No C Temp é o mesmo que temp, ou tEMp, etc?
MOR_AL

Enviado:
23 Set 2012 04:29
por antonio
Djalma Toledo Rodrigues escreveu:Do Datasheet:
Pág 4
10 mV/°C com Off Set de 500 mV
Temp = (Vout - 500 mV) / 10
Cara continua dando Pau, tenho feito todos os calculos para a conversão de temperatura mas mesmo assim não vai!
Eu ja dei uma olhada no datasheet e vi a formula mas não sei o que estou fazendo errado ,que não funciona !!
Pesquisando no santo google nao tem nada em C para o compiller CCS
Modificando o codigo como vc falou tambem não estou fazendo ele funcionar!
A verdade eh que eu tambem não tenho mais conhecimentos não,desculpe minha ignorancia!
Toda ajuda eh bem vinda!
segue o codigo modificado e a a simulação no proteus!
- Código: Selecionar todos
#include <18F452.h>
#device ADC=10
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay (clock=20000000)
#include <flex_lcd.c>
#USE STANDARD_IO(A)
#USE STANDARD_IO(B)
void main()
{
int16 value;
float temp;
setup_port_a(ALL_ANALOG);
setup_adc(adc_clock_div_32);
set_adc_channel(0);
lcd_init();
do{
delay_ms(1000);
value=read_adc();
temp =(value-500)/10;
lcd_gotoxy(1,1);
printf(lcd_putc,"%4lu",value);
lcd_gotoxy(1,2);
printf(lcd_putc,"%4lu",temp);
}while(true);
}
Uploaded with
ImageShack.us

Enviado:
23 Set 2012 04:32
por antonio
MOR_AL escreveu:Eu não uso o C. Já esqueci quase tudo, mas...
1 - Não precisa converter binário para BCD?
2 - Temp não está definido, mas temp sim. No C Temp é o mesmo que temp, ou tEMp, etc?
MOR_AL
MOR_AL no ponto 1 nao tenho certeza no data do bixi nao fala nada ,no ponto 2 fiz a alteração e contuia dando Pau!

Enviado:
23 Set 2012 08:25
por andre_luis
Voce colocou uma entrada fracionada ( 0,77v ).
Procura começar o teste com algo mais simples, tipo inteiro ( 1v ).
+++

Enviado:
23 Set 2012 09:37
por Djalma Toledo Rodrigues
Para o LCD há que converter para ASCII
Ex. supondo temperatura 25°C:
Temp = (Vout - 500mV) /10 mV
Temp = (750mV - 500mV) / 10 mV
Temp = 250 / 10 = 25
2 em ASCII ==> 32H
5 em ASCII ==> 35H
ok?

Enviado:
23 Set 2012 10:19
por ze
o resultado do ad é em unidades de ad. respire fundo...faça o display mostrar 1° unidades de ad direto tipo printf(adread()) (odeio printf) ou as veja no debug. coloque a temp. em 0°. espere fermentar. anote o valor. depois coloque em 100°. espere a massa crescer com um pano em cima. anote o valor. acresente 2 ovos e bata num liquidificador com uma regra de 3 simples. pergunte-se... se em 0° consigo unidades de ad e em 100 consigo 683, se estiver com 365, quantos °c seriam? para converter ad para °c é só dividir pela constante resultante
Permaneço odiando printf para mc´s

Enviado:
23 Set 2012 16:06
por antonio
Pessoal !
Por muito tempo que hoje esteve por volta deste assunto eh mais um projeto que vou jogar pro canto atè conseguir mais informação!
a todos que tentaram ajudar fica aqui o meu agradecimento a todos
Atè+

Enviado:
23 Set 2012 19:54
por Andre_Cruz
antonio,
Não conheço o compilador CCS, mas porque você usa
printf(lcd_putc,"%4lu",temp); //??????
Não seria printf(lcd_putc,"%f",temp); //Pq sua variável temp é float
Aqui você acha maiores informações de como usar o printf do CCS.
http://pt.scribd.com/doc/36529967/CCS-Comandos
Abraço

Enviado:
24 Set 2012 16:30
por antonio
Andre_Cruz escreveu:antonio,
Não conheço o compilador CCS, mas porque você usa
printf(lcd_putc,"%4lu",temp); //??????
Não seria printf(lcd_putc,"%f",temp); //Pq sua variável temp é float
Aqui você acha maiores informações de como usar o printf do CCS.
http://pt.scribd.com/doc/36529967/CCS-ComandosAbraço
Grato Andre !!
Bem eu jah testei todo o jeito o printf e segue dando pau, eu penso que estou errado aqui
- Código: Selecionar todos
temp =(value-500)/10;
,mais jah testei todo e continuando dando bagunça!
Mais uma vez agradeço

Enviado:
24 Set 2012 18:31
por Andre_Cruz
antonio,
Você consegue mostrar corretamente o valor convertido pelo A/D?
A variável value ??
Coloque um potênciometro no canal que você esta lendo no caso o RA0 e mude a tensão aplicada a esse pino veja como a variável value se comporta.
Só uma pergunta tem mais algum hardware compartilhando o pino RA0 ?Se tive desabilite tudo, veja se tem o comparador interno e desabilite ele.
Abraço

Enviado:
27 Set 2012 03:42
por antonio
Andre_Cruz escreveu:antonio,
Você consegue mostrar corretamente o valor convertido pelo A/D?
A variável value ??
Coloque um potênciometro no canal que você esta lendo no caso o RA0 e mude a tensão aplicada a esse pino veja como a variável value se comporta.
Só uma pergunta tem mais algum hardware compartilhando o pino RA0 ?Se tive desabilite tudo, veja se tem o comparador interno e desabilite ele.
Abraço
Andre tudo bem!
Cara ,sim mostra beleza o valor A/D da variavel value, sim eu testei somente no proteus ,mas pra ficar com certeza do seu funcionamento testei fisicamento e tanto no proteus como fisicamente funciona direitinho
O RA0 não compartinha com mais nenhum hardware!
Aqui vai o teste com o ressitor como vc falou,funcionado bz!
grato!
Uploaded with
ImageShack.us