Jump to content
Fórum Script Brasil
  • 0

CCS no PIC16F877A


fabiano_mct

Question

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 to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...