Ir ao conteúdo

Duvida com codigo Lm35


cesarlg

Posts recomendados

Postado

Volto aqui amigos com duas duvidas estou usando ling C comp. CCS.

vou espor o codigo e nele defino duas areas q acho q esta com problema.

a primeira é em relação a amostra da temperatura negativa no lcd.. os valores mostrados nao coincide com o lm.(ver codigo e anexo)

outra duvida que quero criar um recurso apenas com if dentro do case2 para ativar ou nao uma saida, mas nao esta funcionando..

aguardo ideias

#include <16F877a.h>

#FUSES NOWDT

#FUSES PUT

#FUSES NOPROTECT

#FUSES BROWNOUT

#FUSES NOLVP

#FUSES NOCPD

#use delay(clock=4000000)

#include <lcd.c>

#define LISTA PIN_b0

#define soma PIN_b1

#define subt PIN_b2

#define porta PIN_b3

short cont = 0;

int16 q=0,adc, adc_2;

signed int16 sub; // sub e adc2 p negativos

int s=0;

int8 menu;

float x,t;

#int_ccp2

void trata_ccp_2()

{

menu++;

}

#int_TIMER1

void temp1s(void)

{

q++;

set_timer1 (3036);

}

void main()

{

lcd_init();

output_high(pin_c0); // ligado mcu

menu = 0;

setup_ccp2(CCP_CAPTURE_RE);

enable_interrupts (int_ccp2);

enable_interrupts (global);

setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);

set_timer1 (3036);

enable_interrupts(INT_TIMER1);

enable_interrupts(global);

setup_adc_ports(AN0_AN1_AN3);

setup_adc(ADC_CLOCK_DIV_8);

printf(lcd_putc, "\f tessteeee\n porta");

delay_ms(1000);

while (TRUE)

{

output_low(pin_c7);

s=q/2;

cont = 0;

set_adc_channel(0); // DUVIDA EM relação A LM35 MEDINDO

delay_us(20); // TEMP NEGATIVAS

adc = read_adc();

set_adc_channel(1);

delay_us(20);

adc_2 = read_adc();

sub = adc - adc_2;

t = (5.0 * sub * 100) / 1024.0; // ATE AQUI

if (menu>2){MENU=0;}

switch(menu)

{

case 1 : printf(lcd_putc,"\fAJUSTE TEMP. \n %f C",x);

delay_ms(200);

if (input(soma))

{

x+=1;

if (x > 10)

{

x = 0;

}

do{}

while (input(soma));

}

if (input(subt))

{

x -=1;

if (x < -10)

{

x = 10;

}

do{}

while (input(subt));

}

break;

case 2 : printf(lcd_putc,"\f FUNCAO b \n DESLIGADO");

delay_ms(100);

if (input(soma) && cont==0) // ESSA FUNCAO CONT INICIA EM 0

{

cont = 1;

}

if (input(soma) && cont==1)

{

cont = 0;

}

if (cont==1)

{

output_high(pin_c7);

printf(lcd_putc,"\f FUNCAO B \nligado"); // SE FOR 1 ACIONA SAIDA C7

}

else

{

output_low(pin_c7);

} // ATE AQUI

break;

default : printf(lcd_putc,"\f Testando \ncont%02u temp%2.2f%C",s,t,0xdf);

delay_ms(200);

// if (input(porta))

// { q=0;

// if (s > 10)

// { output_high(pin_c6); }

}

}

}

post-198617-1388496496466_thumb.png

Postado

Colega cesar, você esqueceu de duas coisas.

1ª: usar as tags

[code} e [/code}. Substitua os } por ].

2ª: você esqueceid de colocar chaves de abertura e fechamento {} nos cases.

Assim:

case 1:

{
Código aqui;
break;
}

case 2:

{
Código aqui;
break;
}

Fiz isso uma vez:

Exemplo_temperatura_negativa_2.jpg

Exemplo_temperatura_negativa.jpg

Falou

Postado

Colega mister nintendo, vem do datasheet:

lm35.png

Acredito que seja pelo mesmo motivo de quando você usa um LM7805 e coloca dois diodos em série no pino de ajuste, você passa a ter 6.2V na saída do LM7805 e não 5V mais.

você desloca sua saída. Acho que seria isso.

Falou

Postado

Obrigado amigos, mais ainda continuam os problemas... Gostaria que olhasse o codigo e a formula para temperatura, pois nao esta simulando como esperado (lm35 > -7ºC e lcd> -1.4ºC)..

outro ponto que gostaria q analiza-se é dentro do case 2.. ali abri um short cont=0 e nele mudo de estado de 0 p 1 ou 1 p 0. mas nao esta funcionando.. se me recordo uma vez fiz assim e funcionava..

ideias agradeço

Postado

eu estava pensando

sera que aquele diodos são para poder medirmos temperaturas negativas

tipo

se você pegar como referencia negativa aquele ponto do negativo entre os diodos e o lm35 não vai dara para medir as temperaturas negativas

mas se pegar como referencia negativa o negativo mesmo sem passar por esses diodos antes você desloca a saida para mais e quando for medir temperatura negativa o lm35 va deslocar a tensão abaixo daquele limiar!!!

entenderam??? sou meio ruinzim de explicação!!!

abrçs

Postado

Consegui encontrar um dos erros de leitura.. claro, erro primario faltou declarar /Habilitar ADC de 10 bits.. continuo precisando saber sobre aquele case 2 .. aguardo ajudas.

  • mês depois...
  • Coordenador
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!