1 de 7
http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e...
tweet
1
shares
Estou fazendo um projeto para a cadeira de programao C que tem o objetivo de controlar eletronicos (sejam
interruptores, motores, ou at coisas mais completas como temperatura de um ar-condicionado) remotamente, e
achei interessante postar aqui o projeto para que mais gente possa ver como isso feito (e como mais simples do
que se imagina).
Por enquanto estou desenvolvendo o projeto em partes, para juntar tudo depois.
Hoje vou falar sobre a parte do PIC enviar e receber dados pela porta serial.
Share
0saves
Save Passos da montagem no proteus:
Passo 1: Criar um novo arquivo no Proteus.
Passo 2: Adicionar o PIC de sua preferencia que tenha suporte a RS232, no caso do exemplo o PIC16F628A.
Passo 3: Adicionar os leds que quiser (de acordo com o numero de pinos que deseja controlar).
Passo 4: Colocar um resistor de 470 Ohms em cada led.
Passo 5: Ligar o LED-Resistor ou Resistor-LED (tanto faz a ordem) ao terra.
Passo 6: Adicionar um terminal virtual ao projeto
Passo 7: Ligar o pino RX do pic no TX do terminal
Passo 8: Ligar o pino TX do pic no RX do terminal
Passo 9: Salve o projeto onde preferir
por enquanto isso no proteus, agora precisamos do programa a ser inserido no pic.
Para o programa do PIC, cada um programa no editor que preferir, e usa o compilador que quiser(Lembrando que mudando
de compilador o codigo sera diferente). No exemplo eu estou usando o compilador CCS.
O programa o seguinte:
#include <16f628a.h>
// Inclui o cabealho especifico do pic a ser utilizado
#include
// Inclui as funoes padroes de entrada e saida
#fuses HS,NOWDT,NOPROTECT
// Configurao dos fuses (ver manual)
#use delay(clock=4000000)
// Seta o clock interno para 4Mhz
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1) // Seta o baud rate para 9600, e define o pino B2 como TX e B
unsigned char x[4]; //Variavel do tipo char com 4 posioes (string de at 3 carateres) ou do tamanho do c
// lembrando que sempre deve ter um caractere a mais pois tem o '\0' no final da string
unsigned int pino; //Variavel que armazenara o pino que esta sendo utilizado
void main(void) // funo principal
{
delay_ms(100); //tempo para inicializar a conexo
printf("TESTE DE CONTROLE COM PIC\n\r"); // Manda esta mesagem para o terminal
//Para testar se foi tudo ligado corretamente, feche a funo aqui, compile e teste
do {
printf("\n\r");
printf("Envie um comando de 3 caracteres");
printf("sendo abc a=porta b=pino c=estado(l ou d) \n\r");
gets(x); // pega a string e coloca na variavel x
if(x[0] == 'a' || x[0]=='A') // Fazer isso para todas as portas desejadas, podendo ser A,B,C.. depende
{
switch(x[1]) // Ve se qual pino da porta quer controlar
{
case '0':
pino = PIN_A0;
break;
case '1':
pino = PIN_A1;
14/3/2012 11:16
2 de 7
http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e...
break;
case '2':
pino = PIN_A2;
break;
case '3':
pino = PIN_A3;
break;
default:
pino = 0; // se no for nenhum, coloca como 0;
break;
}
}
else if(x[0] == 'b' || x[0]=='B') // mesma coisa que antes, porem agora para a porta B (e assim pode co
{
switch(x[1])
{
case '0':
pino = PIN_B0;
break;
case '1':
pino = 0; // pino reservado para RS232
printf("Pino reservado!");
break;
case '2':
pino = 0; // pino reservado para RS232
printf("Pino reservado!");
break;
case '3':
pino = PIN_B3;
break;
case '4':
pino = PIN_B4;
break;
case '5':
pino = PIN_B5;
break;
case '6':
pino = PIN_B6;
break;
case '7':
pino = PIN_B7;
break;
default:
pino = 0;
break;
}
}
else
{
pino=0;
// Se no existir a porta que foi escolhida, seta o pino para 0 para que no mude o que foi escolhido
}
if(pino != 0) // Se o pino existir (no for 0)
{
if(x[2]=='l' || x[2]=='L')// Se o comando for L ou l (de ligar)
{
output_high(pino); // Coloca o valor 1 logico no pino escolhido
}
else if(x[2]=='d' || x[2]=='D') // Se o comando for D ou d(de desligar)
{
output_low(pino); // Coloca o valor 0 logico no pino escolhido
}
else // Se o comando no for de ligar ou desligar
{
printf("Comando invalido. Tente novamente \n\r"); //Avisa que o comando invalido
}
}
else // Se o pino no existir (variavel pino igual a 0)
{
printf("Comando invalido. Tente novamente \n\r");
}
} while (TRUE); // mantem o lao de repetio rodando em loop infinito
}
Os dois promeiros includes no aparecem bem com esse plugin, mas so:
#include <16f628a.h>
#include
Acho que no tem nada de muito complicado neste codigo, no mximo a parte de configurao dos fuses, o que pode ser
14/3/2012 11:16
3 de 7
http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e...
visto no manual do compilador, ou em qualquer tutorial basico sobre o CCS. e o resto dos comandos so basicos da
linguagem C (aprenda o basico de C antes de tentar fazer isso, aqueles programinhas em terminal). Qualquer outra coisa s
postar a duvida que eu respondo.
Agora precisa compilar o programa (sugiro copiar o .hex gerado para a pasta do projeto do proteus).
Voltando ao proteus agora,
Passo 10: Clique duas vezes sobre o PIC, sete o clock para 4Mhz (em Processor Clock Frequency) e em Program File
coloque o caminho para o arquivo .hex gerado pelo compilador.
Pronto, agora depois de tudo configurado s rodar a simulao que funcionara, a menos que tenha feito algo errado (antes
de perguntar, favor ler novamente e ver se esta tudo igual). Lembrando que ao copiar e colar o codigo para o seu editor de
textos normalmente tem que trocar as aspas pois vai como acento.
Esta somente a base para algo mais complexo, se quiser controlar um motor, ler um valor analogico (potenciometro, ldr,
temperatura) ou qualquer outra coisa mais complexa, tera que implementar as suas funoes e comandos para isso.
Conforme eu for fazendo o projeto, e tiver tempo, vou postando aqui.
Uma coisa que acho importante ao compartilhar este projeto, mostrar para as pessoas que usam arduino, que no preciso
gastar muito com uma arduino para fazer projetos simples, os microcontroladores so baratos (em torno de uns 10 reais) e
so super simples de programar.
Seguem algumas imagens de como fica o projeto:
14/3/2012 11:16
4 de 7
http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e...
Maicon disse:
20 de janeiro de 2011 s 23:21
cara.. o programa tah dando pau nessa parte
if(x[2]==l || x[2]==L')// Se o comando for L ou l (de ligar)
{
output_high(pino); // Coloca o valor 1 logico no pino escolhido
}
else if(x[2]==d || x[2]==D') // Se o comando for D ou d(de desligar)
{
output_low(pino); // Coloca o valor 0 logico no pino escolhido
ele no aceita o pino como atribuidor de pinos. tipo.. ele at recebe a varivel, s que na hora de compilar.. dah
erro.
2.
Maicon disse:
20 de janeiro de 2011 s 23:26
a nica coisa que faltou, foi um esquema de um gravador de pic.. mas que funcione de verdade pq me dei mal dia
desses aew.. affz..
posta um aew tio!!!!
14/3/2012 11:16
5 de 7
3.
http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e...
julio disse:
31 de janeiro de 2011 s 11:18
OL,acompanho sempre seu site! parabens pela qualidade. Vc poderia postar ou enviar o arquivo do proteus .dsn?
abrao,
julio
4.
5.
6.
7.
8.
9.
carlos disse:
7 de abril de 2011 s 15:01
onde eu encontro o .hex? estou usando o borland, tem diferena? grato
10.
14/3/2012 11:16
6 de 7
http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e...
Leave a Reply
Name (required)
Mail (will not be published) (required)
Website
Tags
Actionscript Actionscript 2
commands
oop
Actionscript 3 AIR AMFPHP AMFPHPconn Apollo as2 AS 2.0 as3 AS 3 AS 3.0 blog BUG C campos classe classes
Flex formularios JSFL lee brimelow Menu Monster Debugger NativeMenu NativeMenuItem
PIC pixelSnapping python rs232 script serial Socket SQL SQLite TextField validao
Tpicos Recentes
Pesquisa de Mercado
PyObjC Python no XCode
Sistema de controle com PIC e porta Serial (rs232) parte 2
Sistema de controle com PIC e porta Serial (rs232)
De Monster Debugger como utilizar
Categorias
AIR (6)
AMFPHP (1)
Apple (1)
AS 2.0 (2)
AS 3.0 (9)
C/C++ (2)
conexao (1)
debugger (1)
eletrnica (2)
Flash geral (8)
flash player (2)
Flex (3)
geral (3)
JSFL (2)
Papervision 3D (1)
pessoal (1)
python (2)
Sem categoria (4)
Socket (1)
Twitter Updates
Lista de Links
14/3/2012 11:16
7 de 7
http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e...
5 1/2 (5etdemi)
Actionscript.com
Actionscript.org
amfphp
Andr Michelle Blog
Big Spaceship Labs
Colin Moock
Grant Skinner
Guy Watson
Marcelo Duende
Mike Chambers
New MovieClip()
Sephiroth
the flash blog (Lee Brimelow)
the flex blog (Lee Brimelow)
Pginas
Sobre
Powered by WordPress | Entries (RSS) | Comments (RSS) | Template by MB Web Design
14/3/2012 11:16