domingo, 29 de maio de 2016

Controlar a casa pelo celular com pic 16f876a

Fala povo que aqui acompanha o meu blog. Dessa vez o post é uma ligeira cópia de meu post anterior. Só que em vez de controlarmos a casa usando o arduino. Dessa vez a controlaremos usando o pic 16f628a da MICROCHIP.

O que há para se dizer deste chip? Bem, ele é basicamente a versão da microchip do atmega 328p, em outras palavras, o coração do arduino.

Até aqui tudo bem, mas e agora? Simples, ele possui saídas analógicas, digitais, saídas de comunicação RX e TX, "as quais usaremos em conjunto com o bluetooth". e as configurações básicas necessárias para se configurar o chip, usando o pic.
Primeiro de tudo, baixem meu aplicativo para controlar pic pelo celular android,clicando aqui.
A interface dele e ésta que vos apresento:
 


E agora vamos ao pic.
Antes de mais nada o pic que vos falo é este aqui:
Ele possui 14 pinos em cada lado, totalizando 28 pinos. E seu datasheet pode ser acompanhado aqui:
Lembram de como eu falei que pra configurar no pickit 3 voces tinham que pegar os pares iguais? Pois bem, aqui vai a datasheet do pickit 3:
As minhas ligações ficaram assim:

PIC KIT 3                                                          PIC16F876A
1-------------------------------------------------------------1
2-------------------------------------------------------------20
3-------------------------------------------------------------19/8(jumpeie o 19 e 8)
4-------------------------------------------------------------28
5-------------------------------------------------------------27
6--------------------------------------------------------------Ñ é usado.
As ligações ficariam mais ou menos nesse nipe:

Depois que tiverem feito tudo isto vocês terão que compilar este código fonte no pic de vocês. :


---------------------------------------------------------------------------
//***************************************************************************************************************//
//***************************************************************************************************************//
//                                          ELETRONICA E UTILIDADES
// Fonte: www.eletronicaemcasa.blogspot.com
// Autor: Guilherme Vianna Santos
// Versão: 1.0
// Data: 18/10/2015
// E-mai:eletronicaemcasa@gmail.com
//
// Ajudem a divulgar o eletrônica eme casa, seja um seguidor do blog e curtem nossa pagina
// no Facebook
//
// Projeto: Aplicativo para Modulo Bluetoth com o PIC
//***************************************************************************************************************//
//***************************************************************************************************************//


#include <16F876a.h>                   //Biblioteca do dispositivo PIC16F876A
#use delay(clock=20M)                  //Informa a frequência do clock de trabalho do processador(20MHZ)
#fuses NOWDT, BROWNOUT, PUT, NOLVP, HS //Configura FUSES
#use fast_io (B)                       //Informa ao CCS que as I/O serão configuradas manualmente
#use fast_io (C)                       //Informa ao CCS que as I/O serão configuradas manualmente
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)//Configura a comunicação RS232 via Hardware

//Configurações manual dos I/Os
#BYTE PORTC           = 0x07           //Endereço de memoria 0x07 define PORTC
#BYTE TRISC           = 0x87           //Endereço de memoria 0x87 define configuração do pino como I/O
   #BIT  LED_Power   = PORTC.0         //Define o endereço de memoria 0x07.0 (pino C0) como led power
   #BIT  Comando_LED = PORTC.3         //Define o endereço de memoria 0x07.3 (pino C3) como Comando LED

#BYTE PORTA           = 0x05           //Informa o endereço de memoria do registrador TrisA
#BYTE TRISA           = 0x85           //Informa o endereço de memoria do registrador PortA

#BYTE TRISB           = 0x86           //Informa o endereço de memoria do registrador TrisB
#BYTE PORTB           = 0x06           //Informa o endereço de memoria do registrador PortB

#BYTE STATUS          = 0x81           //Informa o endereço de memoria do registrador STATUS
   #BIT  RBPU         = STATUS.7       //Define o endereço de memoria 0x81.7 (RBUP) registrador do pullup_portB
//------------------------------------------Variaveis do Sistema-------------------------------------------------//
void main()
{
   int sinal;
     
   TRISB=0b00000000; //Define PortB como pinos de saida
   PORTB=0B00000000; //Limpa portB
   TRISC=0b10000000; //Define PortC como pinos de saida
   PORTC=0B00000000; //Limpa portC
   RBPU =0;          //Desbilita os pullups do portB
  
   //Teste do LED de Comando
      Comando_LED=1;     // Liga LED
      delay_ms(1000);   //Espera 1s
      Comando_LED=0;     //Desliga LED
     
   //Configura Modulo Bluetooth
      printf("AT+NAMEPICBLUE"); //Define Nome do Modulo como "PIC BLUETOOTH"
      delay_ms(200);            //Espera 0,2s
      printf("AT+BAUD4");         // Define a taxta de transmissão para 9600bps
      delay_ms(200);            //Espera 0,2s
  
   while(true)
   {
      LED_Power=1; //Liga Led de Power (POWER)  
     
      sinal=getc();//Ler o buffer da serial
     
      if (sinal=='a')      //Verifica se o sinal é igual a "a"
      {
         Comando_LED=1;    //Liga LED
      }  
      if (sinal=='b')      //Verifica se o sinal é igual a "b"
      {
         Comando_LED=0;   //Desliga LED
      }      
   }
}
----------------------------------------------------------------------

Caso tenham se esquecido de como compilar, reveja meu topico anterior sobre pic no display lcd que lah ensino como compilar o arquivo usado o software mplab.
 Após configurar , monte o esquema conforme a figura
E depois é montar e cair para o abraço. E é isso ahe pessoal. Em breve postarei o vídeo do mesmo funcionando.
E como prometido, eis o vídeo.

Pessoal, pra quem quiser fiz a versão melhorada desse programa, que em vez de acionar um led aciona 3, segue o link para novo aplicativo: download
Tive que mudar a interface do mesmo, obs: se voce instalar este, a instalação ira passar por cima do aplicativo anterior, e aquela imagem charmosa ira sumir, caso queira regredir, so desinstalar este aqui e instalar o anterior novamente.

A nova interface ficou com este jeitão aqui:

E óbvio, o código fonte para poder usá-la:





---------------------------------------------
//***************************************************************************************************************//
//***************************************************************************************************************//
//                                          ELETRONICA E UTILIDADES
// Fonte: www.eletronicaemcasa.blogspot.com
// Autor: Guilherme Vianna Santos,alterado por Luciano Cristiano de Oliveira Braun
// Versão: 1.0
// Data: 18/10/2015, alterado em 30/05/2016
// E-mai:eletronicaemcasa@gmail.com
//
// Ajudem a divulgar o eletrônica eme casa, seja um seguidor do blog e curtem nossa pagina
// no Facebook
//
// Projeto: Aplicativo para Modulo Bluetoth com o PIC
//***************************************************************************************************************//
//***************************************************************************************************************//


#include <16F876a.h>                   //Biblioteca do dispositivo PIC16F876A
#use delay(clock=20M)                  //Informa a frequência do clock de trabalho do processador(20MHZ)
#fuses NOWDT, BROWNOUT, PUT, NOLVP, HS //Configura FUSES
#use fast_io (B)                       //Informa ao CCS que as I/O serão configuradas manualmente
#use fast_io (C)                       //Informa ao CCS que as I/O serão configuradas manualmente
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)//Configura a comunicação RS232 via Hardware

//Configurações manual dos I/Os
#BYTE PORTC           = 0x07           //Endereço de memoria 0x07 define PORTC
#BYTE TRISC           = 0x87           //Endereço de memoria 0x87 define configuração do pino como I/O
   #BIT  LED_Power   = PORTC.0         //Define o endereço de memoria 0x07.0 (pino C0) como led power
   #BIT  Comando_LED = PORTC.3         //Define o endereço de memoria 0x07.3 (pino C3) como Comando LED
   #BIT  Comando_LED1 = PORTC.4
   #BIT  Comando_LED2 = PORTC.5 
#BYTE PORTA           = 0x05           //Informa o endereço de memoria do registrador TrisA
#BYTE TRISA           = 0x85           //Informa o endereço de memoria do registrador PortA

#BYTE TRISB           = 0x86           //Informa o endereço de memoria do registrador TrisB
#BYTE PORTB           = 0x06           //Informa o endereço de memoria do registrador PortB

#BYTE STATUS          = 0x81           //Informa o endereço de memoria do registrador STATUS
   #BIT  RBPU         = STATUS.7       //Define o endereço de memoria 0x81.7 (RBUP) registrador do pullup_portB
//------------------------------------------Variaveis do Sistema-------------------------------------------------//
void main()
{
   int sinal;
    
   TRISB=0b00000000; //Define PortB como pinos de saida
   PORTB=0B00000000; //Limpa portB
   TRISC=0b10000000; //Define PortC como pinos de saida
   PORTC=0B00000000; //Limpa portC
   RBPU =0;          //Desbilita os pullups do portB
 
   //Teste do LED de Comando
      Comando_LED=1;     // Liga LED
      delay_ms(1000);   //Espera 1s
      Comando_LED=0;     //Desliga LED
    
   //Configura Modulo Bluetooth
      printf("AT+NAMEPICBLUE"); //Define Nome do Modulo como "PIC BLUETOOTH"
      delay_ms(200);            //Espera 0,2s
      printf("AT+BAUD4");         // Define a taxta de transmissão para 9600bps
      delay_ms(200);            //Espera 0,2s
 
   while(true)
   {
      LED_Power=1; //Liga Led de Power (POWER) 
    
      sinal=getc();//Ler o buffer da serial
    
      if (sinal=='a')      //Verifica se o sinal é igual a "a"
      {
         Comando_LED=1;    //Liga LED
      } 
      if (sinal=='b')      //Verifica se o sinal é igual a "b"
      {
         Comando_LED=0;   //Desliga LED
      }
      if (sinal=='c')      //Verifica se o sinal é igual a "c"
      {
         Comando_LED1=1;    //Liga LED
      } 
      if (sinal=='d')      //Verifica se o sinal é igual a "d"
      {
         Comando_LED1=0;   //Desliga LED
      }
      if (sinal=='e')      //Verifica se o sinal é igual a "e"
      {
         Comando_LED2=1;    //Liga LED
      } 
      if (sinal=='f')      //Verifica se o sinal é igual a "f"
      {
         Comando_LED2=0;   //Desliga LED
      }               
   }
}
------------------------------------------
ficando assim a montagem final:

Não vou fazer um vídeo dele funcionando por que dei provas mais do que suficientes para conseguir a confiança do povo que me assiste:). Além do mais, ja tem 2 vídeos meus no youtube relacionado a bluetooth, pra quê mais um não eah?.


Bom pessoal e é isso, até a próxima.

    

Nenhum comentário: