tenho 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 relacao a
amostra da temperatura negativa no lcd.. os valores mostrados não coincide com o
lm.(ver codigo e anexo)
outra duvida que quero criar um recurso
apenas com if dentro do case2 para ativar ou não uma saida, mas não 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 RELACAO 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); }

}

}
}

Exibições: 663

Anexos

Responder esta

Respostas a este tópico

Pra que tudo isso cara, baixa este arquivo aqui ow www.mvm.eng.br/LM35.rar , fiz ate um executavel em delphi pra ti ler a temperatura, te diverte ai

Para ler temperaturas negativas com o LM35, você precisa usar duas portas analógicas, de uma olhada no datasheet

http://www.ti.com/lit/ds/symlink/lm35.pdf  figura 7.

Não sei quanto a PIC mas nos AD da ATMEGA, você deve fazer uma pausa quando faz a troca das portas de leitura no AD

amigos... ja tenho duas portas analogicas configuradas, inclusive uso dois diodos em serie entre lm e o gnd.. pois mas ainda tenho uma diferenca de 1grau celsius.. entre o lcd e o lm35.

obs.. tive o desastre de postar o codigo sem a definicao de habilitar o adc = 10; portanto imagine q esta ali kkk

outra ajuda q nao sei pq nao esta funcionando seria o conteudo do case2..

aguardo

 

Não tem que ter um abre / fecha chaves para cada bloco do "case"?

nao necessariamente,, ja  escrevi varios programas sem nunca ter aberto {} para escrever o conteudo do case... nunca com problema .. recentemente levantei essa questao e alguem tb me respondeu q nao havia necessidade

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço