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

CCS no PIC16F877A


fabiano_mct

Pergunta

A ideia é controlar 2 motores de passo para abrir e fechar 2 registros de água quente e fria, um sensor leria a temperatura da mistura da água e compararia com uma referencia onde um usuário escolheria (por um potenciometro), e então mostraria a temperatura em 2 displays de 7 segmentos.

O problema, ele só controla 1 motor de passo, e não mostra a temperatura nos displays.

Segue a foto do circuito eletrônico:

controlador.jpg

#include <16f877A.h>

#device adc=10 // configura o canal analógico com 10 bits

#fuses xt,nowdt,noprotect,put,brownout,nolvp,nocpd

#use delay(clock=4000000, RESTART_WDT)

#use fast_io(a)

#use fast_io©

#use fast_io(b)

#use fast_io(d)

#byte portb=0x06

#byte portc=0x07

#byte portd=0x08

// Prototipos das Funções

void config_io();// Configuração das I/O's

void temperatura();//Rotina para leitura de a/d (temperatura)

void motor();//Rotina para controle do motor

void main()

{

config_io();

while(1)

{

temperatura();

motor();

}

}

void config_io()

{

unsigned int16 sensor;//Variavel para o sensor de temperatura

unsigned int16 sensor_pot;//Variavel para o potenciometro

set_tris_a(0b11111111);

set_tris_b(0b00000000);

set_tris_c(0b00000000);

set_tris_d(0b00000000);

setup_adc_ports(RA0_RA1_RA3_ANALOG);//Configura como entradas analogicas

setup_adc(ADC_CLOCK_INTERNAL);

}

void motor()

{

unsigned int16 sensor;//Variavel para o sensor de temperatura

unsigned int16 sensor_pot;//Variavel para o potenciometro

unsigned int rot_um[4]={0x01, 0x02, 0x04, 0x08},a;

unsigned int rot_dois[4]={0x10, 0x20, 0x40, 0x80},b;

set_adc_channel(0);//Chama AN0

delay_ms(50);

sensor=read_adc();//Grava o valor convertido de AN0 na variavel sensor

set_adc_channel(1);//Chama AN1

delay_ms(50);

sensor_pot=read_adc();//Grava o valor convertido de AN1 na variavel sensor_pot

if (sensor>sensor_pot)

{

for (a=0; a<4; a++);//faz o motor dar 5 passos

{

portc=rot_um[a];

delay_ms(10);

for (a=0; a<4; a++);

{

portc=rot_um[a];

delay_ms(10);

for (a=0; a<4; a++);

{

portc=rot_um[a];

delay_ms(10);

for (a=0; a<4; a++);

{

portc=rot_um[a];

delay_ms(10);

for (a=0; a<4; a++);

{

portc=rot_um[a];

delay_ms(10);

}

}

}

}

}

a=0;

for (b=3; b>=0; b--);//faz o motor dar 5 passos

{

portc=rot_dois;

delay_ms(10);

for (b=3; b>=0; b--);

{

portc=rot_dois;

delay_ms(10);

for (b=3; b>=0; b--);

{

portc=rot_dois;

delay_ms(10);

for (b=3; b>=0; b--);

{

portc=rot_dois;

delay_ms(10);

for (b=3; b>=0; b--);

{

portc=rot_dois;

delay_ms(10);

}

}

}

}

}

b=3;

}

if (sensor<sensor_pot)

{

for (a=3; a>=0; a--);//faz o motor dar 5 passos

{

portc=rot_um[a];

delay_ms(10);

for (a=3; a>=0; a--);

{

portc=rot_um[a];

delay_ms(10);

for (a=3; a>=0; a--);

{

portc=rot_um[a];

delay_ms(10);

for (a=3; a>=0; a--);

{

portc=rot_um[a];

delay_ms(10);

for (a=3; a>=0; a--);

{

portc=rot_um[a];

delay_ms(10);

}

}

}

}

}

a=3;

for (b=0; b<4; b++); //faz o motor dar 5 passos

{

portc=rot_dois;

delay_ms(10);

for (b=0; b<4; b++);

{

portc=rot_dois;

delay_ms(10);

for (b=0; b<4; b++);

{

portc=rot_dois;

delay_ms(10);

for (b=0; b<4; b++);

{

portc=rot_dois;

delay_ms(10);

for (b=0; b<4; b++);

{

portc=rot_dois;

delay_ms(10);

}

}

}

}

}

b=0;

}

}

void temperatura()

{

unsigned int16 sensor;//Variavel para o sensor de temperatura

unsigned int16 sensor_pot;//Variavel para o potenciometro

set_adc_channel(0);//Chama AN0

delay_ms(50);

sensor=read_adc();//Grava o valor convertido de AN0 na variavel sensor

set_adc_channel(1);//Chama AN1

delay_ms(50);

sensor_pot=read_adc();//Grava o valor convertido de AN1 na variavel sensor_pot

if ((sensor_pot>979) || (sensor_pot<=1024)) //Registra 00 no display quando selecionado Temperatura Mínima

{

PORTB=0b00111111;

PORTD=0b00111111;

delay_ms(500);

}

else if ((sensor_pot>0) || (sensor_pot<=489)) //Registra 00 no display quando selecionado Temperatura Máxima

{

PORTB=0b00111111;

PORTD=0b00111111;

delay_ms(500);

}

else if ((sensor>952) || (sensor<=979)) //22º no display

{

PORTB=0b01011011;

PORTD=0b01011011;

delay_ms(500);

}

else if ((sensor>911) || (sensor<=952)) //24º no display

{

PORTB=0b01011011;

PORTD=0b01100110;

delay_ms(500);

}

else if ((sensor>856) || (sensor<=911)) //26º no display

{

PORTB=0b01011011;

PORTD=0b01111100;

delay_ms(500);

}

else if ((sensor>829) || (sensor<=856)) //28º no display

{

PORTB=0b01011011;

PORTD=0b01111111;

delay_ms(500);

}

else if ((sensor>786) || (sensor<=829)) //30º no display

{

PORTB=0b01001111;

PORTD=0b00111111;

delay_ms(500);

}

else if ((sensor>747) || (sensor<=786)) //32º no display

{

PORTB=0b01001111;

PORTD=0b01011011;

delay_ms(500);

}

else if ((sensor>715) || (sensor<=747)) //34º no display

{

PORTB=0b01001111;

PORTD=0b01100110;

delay_ms(500);

}

else if ((sensor>680) || (sensor<=715)) //36º no display

{

PORTB=0b01001111;

PORTD=0b01111100;

delay_ms(500);

}

else if ((sensor>645) || (sensor<=680)) //38º no display

{

PORTB=0b01001111;

PORTD=0b01111111;

delay_ms(500);

}

else if ((sensor>612) || (sensor<=645)) //40º no display

{

PORTB=0b01100110;

PORTD=0b00111111;

delay_ms(500);

}

else if ((sensor>584) || (sensor<=612)) //42º no display

{

PORTB=0b01100110;

PORTD=0b01011011;

delay_ms(500);

}

else if ((sensor>553) || (sensor<=584)) //44º no display

{

PORTB=0b01100110;

PORTD=0b01100110;

delay_ms(500);

}

else if ((sensor>524) || (sensor<=553)) //46º no display

{

PORTB=0b01100110;

PORTD=0b01111100;

delay_ms(500);

}

else if ((sensor>502) || (sensor<=524)) //48º no display

{

PORTB=0b01100110;

PORTD=0b01111111;

delay_ms(500);

}

else if ((sensor>489) || (sensor<=502)) //50º no display

{

PORTB=0b01101101;

PORTD=0b00111111;

delay_ms(500);

}

}

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...