Ir para conteúdo
Fórum Script Brasil
  • 0

como faço pra ativar uma saída de pic?


Diego Marques

Pergunta

Olá pessoal, sou um novo membro aqui do fórum.

Meu conhecimento em C é moderado e tenho desenvolvido um projeto complexo de automatização de fornos para uma carvoaria.

Vamos ao assunto:

Preciso desenvolver um programa em linguagem C (tenho usado o MikroC e o CCS, mas tenho preferência pelo primeiro) para montar o projeto de comandos pra um PIC, que já foi definido: PIC 12F675. Este pic é suficiente pro que estou precisando: ler uma entrada analógica que varia entre 0V e 5V, já linearizada e, em seguida, de acordo com o valor lido de tensão na porta analógica (AN0, no caso em que tentei), ativar uma saída digital (5V).

Quero ativar a saída se por acaso o valor de tensão lido for um valor próximo de 3,6V e 3,9V (o que no caso do circuito que já montei significa 360ºC 390ºC).

Como já comprei quase tudo, prefiro que o programa siga estas orientações.

Abaixo segue um programa que fiz no MikroC e que tentei simular com o Proteus7- ISIS, mas parece que o programa não funcionou como deveria, por favor dêem dicas de otimização, apontem erros, quaisquer que forem ou até mesmo postem um programa alternativo que use o pic 12f675:

O datasheet desse pic segue abaixo também:

http://search.microchip.com/searchapp/sear...ge=10&id=24

Programa:

//Controle de temperatura para forno com PIC 12F675

// Autor: Diego Marques

#define temp_set_hi 390 // Definição da temperatura de acionamento da ventoinha em graus Celsius

#define temp_set_lo 360 // Definição da temperatura de desligamento da ventoinha em graus Celsius

#define vent gpio.f1 //Definição da porta que acionará a venoinha (porta 1)

float temp_read(void) //Função que lê o sinal do conersor A/D

{

float temp;

temp = Adc_Read(0); //Atribui à variavel temp o valor do A/D da porta 0

temp = temp*0.4884; //Conversão do valor para graus Celsius

// fundo de escala = 500 graus Celsius (1023 = 500 graus) => resolução de 0,5 grau

return temp;

}

void main(void)

{

float temp = 1000; //Inicialização arbitrária da variável

ADCON0 = 0b00000001; //Configuração do registrador do A/D (vide pag. 43 do datasheet)

TRISIO = 0b10000000; //Configuração do registrador das portas (vide pag. 20 do datasheet)

GPIO = 0; //Inicia com as portas de saída em 0

while(1) //Loop infinito

{

if(temp >= temp_set_hi)

{

vent = 1; //Ativa um relê

}

if(temp <= temp_set_lo)

{

vent = 0; //Desativa um relê

}

temp = temp_read(); //Atualização da temperatura

}

}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...