Ir ao conteúdo
  • Cadastre-se
Visitante

PIC Definição do TRIS, PORT e leitura de dados(sensor)

Recommended Posts

Visitante
#include <16F873A.h>                                //carregas as definições do microcontrolador usado
#device ADC=16                                      //conversor AD de 16
#fuses HS, NOPUT, NOWDT, NOBROWNOUT, NOLVP          //bits de configuração da MCU para gravação    

//configurações do projeto
#use delay(crystal=20MHz)                           //frequencia de clock para - Cristal Externo
#use pwm(CCP1,TIMER=2,FREQUENCY=5300000,DUTY=90)    //configuração do PWM
#priority TIMER1                                    //prioridade no tratamento de interrupções
//#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_A0)      //permite comunicação serial


//modo rápido de inicialização das portas
#use   fast_io(a)
#use   fast_io(b)
#use   fast_io(c)

#byte  porta = 0x00
#byte  portb = 0x00
#byte  portc = 0x00

// Entradas
#define sensor PIN_A3    //recebe dados do sensor | OBS: OS DADOS JÁ CHEGAM NO FORMATO DIGITAL( O CICUITO TEM UM CONVERSOR AD IMPLEMENTADO FISICAMENTE)
//#define temp   PIN_B4  //nao userei mais um sensor de temperatura

// Saídas
#define pwm    PIN_C2    //saida que gera um sinal pwm conforme configuração
#define rele   PIN_C4    //saida que aciona/desliga rele | OBS: RELE DE ESTADO SOLIDO USADO PARA ACIONAR/DESLIGAR UMA VALVULA

//variaveis globais
float  leitura, umidadeideal;     //so preciso controlar uma gradeza(umidadeideal)
void main()
{

   // configura os tris
     set_tris_a(0b00001000);  //entra do sensor
     set_tris_b(0b00000000);  //
     set_tris_c(0b11110101);  //saida do pwm e do rele
      
   // inicializa os ports
     porta=0x00;            // limpa porta
     portb=0x00;            // limpa portb
     portc=0x00;            // limpa portc
     
//////////////////////////////////CONFIGURAÇÃO DO TIMER1//////////////////////////////////

   setup_timer_1(T1_EXTERNAL|T1_DIV_BY_8);      //104ms overflow
   enable_interrupts(GLOBAL);//chave principal das interrupções
   enable_interrupts(int_timer1); // interrupção do TIMER 0
     
//////////////////////////////////////////////////////////////////////////////////////////
      
   while(TRUE)
   {
      leitura = input(sensor);     // a variável leitura recebe o valor lido do PIN_A3
      if(leitura >= umidadeideal){ //se a entrada for maior ou igual  a umidadeideal
      
         output_low(rele);
      
      }if(leitura < umidadeideal){ //se a entrada for menor que a umidadeideal
      
         output_high(rele);
      
      }
   }

}

Olá amigos(as),

sou inciante nessa área de microcontroladores PIC. No entanto, estou num projeto de iniciação científica na minha faculdade, projeto esse que estou desenvolvendo um sistema automático de irrigação. Vou fazer uma breve descrição do projeto: (PIC16f873A)

--no pino PIN_A3 recebe os dados do sensor, esses dados já chegam no formato digital (os dados passam por um circuito "físico" de conversor AD e um retificador e depois chega ao PIC)

--no pino PIN_C2 está uma saída pwm de 5,3MHz  (tenho duvida sobre como achar o valor do duty cycle)

--no pino PIN_C4 está uma saída para acionar/desligar um relé de estado sólido ligado à uma válvula do sistema de irrigação

O objetivo é conseguir ler os dados do sensor de umidade em um intervalo específico de tempo(usando timer e interrupção), e a partir dos dados lidos eu os comparo com a umidadeideal e aciono/desligo o relé. Peço a ajuda de vocês para verificar o meu código, pois minhas maiores dúvidas são: configurar o timer e interrupção para fazer a leitura dos dados de tempo em tempo( por exemplo 500ms ou 1s); configurar as portas corretamente para ler os dados. O código ta  bem comentado, mas com certeza vai ter muitos erros principalmente em relação ao TRIS, PORT e timer. Desde já agradeço pelo seu tempo e muita paciência rsrs

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste a solução encontrada para que outros usuários com dúvidas semelhantes possam ser ajudados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Wilson C. ,

 

Olha... não entendo nada dessa linguagem, mas tenho certeza que esse comando INPUT(sensor) não vai funcionar.

Poste o esquema eletrônico completo, para começar.

Depois, descreva o formato de comunicacão desse conversor A/D externo que lê os dados do sensor e entrega para o seu PIC .

 

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





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

×