Página 1 de 2

Converter em graus celsius a saida do TC1047A

MensagemEnviado: 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

MensagemEnviado: 22 Set 2012 15:59
por andre_luis
Ajudaria mais se informasse o erro.


+++

Re: Converter em graus celsius a saida do TC1047A

MensagemEnviado: 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?


Imagem

Uploaded with ImageShack.us

MensagemEnviado: 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

MensagemEnviado: 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

MensagemEnviado: 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);
}

Imagem

Uploaded with ImageShack.us

MensagemEnviado: 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!

MensagemEnviado: 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 ).


+++

MensagemEnviado: 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?

MensagemEnviado: 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

MensagemEnviado: 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è+

MensagemEnviado: 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

MensagemEnviado: 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-Comandos

Abraç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

MensagemEnviado: 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

MensagemEnviado: 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!
Imagem

Uploaded with ImageShack.us