Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
Breiko

[Resolvido] PIC12F675 controle de temperatura

Recommended Posts

Bom dia,

Estou com dificuldades para fazer meu código funcionar.

A ideia é ler a entrada analógica na GPIO0 e verificar se está acima de um determinado valor. Se estiver acima de um valor específico liga a saída GPIO.F4. Caso contrário desliga a GPIO.F4.

No momento, mesmo havendo variação do valor de entrada acima do especificado (550) a saída GPIO.F4 permanece desligada.

Não sou muito bom em C e não entendo nada de assembler. Estou utilizando o Mikro C PRO for Pic v.6.0.0

O led na saída GPIO.F5 pisca normalmente. Eu coloquei estas linha de código referentes a esta saída, apenas para ter certeza que o PIC está fazendo algo.

Segue o código abaixo. Toda ajuda será bem vinda.

#define Vin_a   GPIO0   //analyg in on GPio0;

unsigned long value;

void main()
{
CMCON =7; //desabilita o comparador
ADCON0=0b10000001;
ANSEL=0b1010001;
TRISIO =0x1;
GPIO = 0x00; //todos os pinos desligados inicialmente

while(1){
value=adc_read(0);
#if (value>550)
GPIO.F4 = 1; //liga GP4.
Delay_ms(50); //aguarda 50 ms.
#else
GPIO.F4 = 0; //desliga GP4.
Delay_ms(50); //aguarda 50 ms.
#endif

GPIO.F5 = 1; //liga GP5.
Delay_ms(50); //aguarda 50 ms.
GPIO.F5 = 0; //desliga GP5.
Delay_ms(50); //aguarda 50 ms.

}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

unsigned int value;

void main()
{
CMCON =7; //desabilita o comparador
ADCON0=0b10000001;
ANSEL=0b01010001;
TRISIO =0x01;
GPIO = 0x00; //todos os pinos desligados inicialmente

while(1)
{
value=ADC_Read(0);
if (value>550)
{
GP0_bit = 1; //liga GP4.
Delay_ms(50); //aguarda 50 ms.
}
else
{
GP0_bit = 0; //desliga GP4.
Delay_ms(50); //aguarda 50 ms.
}

GP5_bit = 1; //liga GP5.
Delay_ms(50); //aguarda 50 ms.
GP5_bit = 0; //desliga GP5.
Delay_ms(50); //aguarda 50 ms.
}
}

olha de erro erro mesmo que eu garanto é apenas que faltava um zero na configuração do ANSEL. Agora pra escrever seu programa, você usou uma sintaxe que eu nunca vi na minha vida, e mexo com microC faz um tempo, realmente não sei se pode daquele jeito, então peguei o seu código do jeito que estava, arrumei aquele errinho, e mudei toda a sintaxe, mas não mudei em nada o programa.

flowww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia. Realmente após uma análise mais fina, verifiquei que tinha que tirar o # antes do if.

Em termos práticos após fazer isso e recompilar, funcionou no simulador IDE. Aí na hora que eu montei o circuito ainda não funcionava. Neste momento me lembrei que tinha que alimentar o pino 4 do CI com 5volts. Aí funcionou. O código final encontra-se abaixo. Ainda vou modificar os valores para os que ficarem melhor na prática.

O principio de funcionamento é muito simples. É para uma máquina de fumaça que eu turbinei. Como a caixa é pequena existe um problema com superaquecimento. Vou ler a temperatura de um LM35. Se for acima de 130 graus desliga a resistência e habilita a bomba. Como utilizo relé, a lógica e saída alta para habilitar a bomba. Ao desligar a resistência, a temperatura continua a subir antes de cair. Isso é normal em ambientes pequenos e fechados como é o caso desta máquina. Então se a temperatura chegar aos 160 graus, eu ligo uma ventilação forçada para resfriar até atingir os 130 graus. Se a temperatura ficar abaixo dos 110 graus, a resistência liga novamente e a bomba fica desabilitada.

Agradeço pela ajuda.

Código:

#define Vin_a   GPIO0   //analyg in on GPio0;

unsigned long value;

void main()
{
CMCON =7; //desabilita o comparador
ADCON0=0b10000001;
ANSEL=0b1010001;
TRISIO =0x01; //apenas GPIO0 de entrada, resto como saída.
GPIO = 0x00; //todos os pinos desligados inicialmente.

while(1){
value=adc_read(0); //lê valor analógico.
if (value>113) //se maior que 550mv
GPIO.F5 = 1; //liga GP5.
if (value>123) //se maior que 600mv
GPIO.F4 = 1; //liga GP4.
if (value<=103) //se menor que 500mv
GPIO.F5 = 0; //desliga GP5.
if (value<=113) //se menor que a 550mv
GPIO.F4 = 0; //desliga GP4.
Delay_ms(300); //aguarda 300 ms.
GPIO.F2 = 1; //liga GP2.
Delay_ms(100); //aguarda 100 ms.
GPIO.F2 = 0; //desliga GP2.
Delay_ms(100); //aguarda 100 ms.

}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

o problema nisso é que o lm35 aguenta apenas 150°c e não consegue chegar até 160°C, uma ressalva também é que seu pic deve ficar longe desse ambiente pois a temperatura maxíma dele de operação é 125°C

flowww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelas dicas. Na verdade eu trabalho com o LM35 já a algum tempo. Na prática ele libera até perto de 2,00V. Com um termômetro de precisão eu já cheguei com ele até 190 graus. Depois disso ele fica doidão. Como a temperatura de proteção de 160 graus vai acontecer bem de vez em quando, creio que não terei problemas. Como já disse anteriormente ele trabalha nessa temperatura sem problemas, desde que os pinos estejam envolvidos em massa epóxi, e não seja por um período longo, assim não tem problema de soltar a solda.

O circuito de controle fica fora da caixa da máquina de fumaça. Ele fica na caixa de controle remoto, assim não sofre interferência da temperatura da máquina.

Depois da montagem pronta eu posto algumas fotos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×