You are on page 1of 7

Sistema de controle com PIC e porta Serial (rs232) Armando Leopol...

1 de 7

http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e...

Armando Leopoldo Keller


Actionscript, AIR, Python, Engenharia Eltrica.
mai
09
2010

Sistema de controle com PIC e porta Serial (rs232)


0
tweets

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

Material utilizado (para testar virtualmente):


- Proteus 7.1 (para a simulao)
- PCWH Compiler IDE (CCS) 4.038 (para programar e compilar o programa em C)

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

Sistema de controle com PIC e porta Serial (rs232) Armando Leopol...

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

Sistema de controle com PIC e porta Serial (rs232) Armando Leopol...

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:

Como fica no proteus

14/3/2012 11:16

Sistema de controle com PIC e porta Serial (rs232) Armando Leopol...

4 de 7

http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e...

Funcionando no proteus com o terminal


EDITANDO: Como foi pedido nos comentarios, seguem os arquivos utilizados no exemplo: Arquivos do projeto
Tags: C, controle, IC, PIC, rs232, serial, uC
This entry was posted on domingo, maio 9th, 2010 at 21:06 and is filed under geral, Sem categoria. You can follow any responses to this entry through
the RSS 2.0 feed. You can leave a response, or trackback from your own site.

De Monster Debugger como utilizar


Sistema de controle com PIC e porta Serial (rs232) parte 2

10 Responses to Sistema de controle com PIC e porta Serial (rs232)


1.

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

Sistema de controle com PIC e porta Serial (rs232) Armando Leopol...

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.

Armando Leopoldo Keller disse:


25 de fevereiro de 2011 s 23:35
Maicon, conseguiu resolver o problema?
Declarou a variavel pino la em cima? ( unsigned int pino; )
Que compilador est usando?
Quanto ao gravador de pic, existem varios modelos para montar na internet, alguns ja montados no mercado livre, e
alguns kits de desenvolvimento que funcionam como gravador de pic. Por motivo de praticidade comprei o pickit 2 da
microchip, tem para vender no mercado livre por uns 100 reais.

5.

Armando Leopoldo Keller disse:


25 de fevereiro de 2011 s 23:44
Julio, o post foi editado, os arquivos utilizados no exemplo esto disponveis em http://armandokeller.com/blog/wpcontent/uploads/2010/05/RS232.zip

6.

Armando Leopoldo Keller disse:


25 de fevereiro de 2011 s 23:54
http://armandokeller.com/blog/wp-content/uploads/2010/05/RS232.zip

7.

Paulo Soares disse:


14 de maro de 2011 s 17:09
Armando, Em primeiro lugar parabns pelo projeto, estou fazendo pesquisas sobre comunicao serial e o pic, mas no
encontrei nada to bem explicado como no seu site, outra coisa, como estudei programao em c, este seu projeto caiu
como uma luva. Quero deixar meu email a disposio para o que eu puder ajudar, sou tecnico em automao e fao
engenharia eletrica. Grande abrao.

8.

Paulo Soares disse:


15 de maro de 2011 s 9:40
Maicon, quanto ao gravador, estive buscando em varios sites sobre, e em nenhum tive a confiana de montar para
testar, pelo preo optei por comprar, aqui em BH encontrei uma empresa que fabrica pelo valor de R$100,00 comprei
e funciona, alem de se der problema a empresa esta perto para auxiliar.

9.

carlos disse:
7 de abril de 2011 s 15:01
onde eu encontro o .hex? estou usando o borland, tem diferena? grato

10.

Armando Leopoldo Keller disse:


7 de abril de 2011 s 15:27
Cara, quanto ao .hex s compilar ele com o ccs ( http://www.ccsinfo.com/content.php?page=compilers ) , sim tem
diferena em usar o borland, tipo, borland no compilador pra pic, esse codigo especifico s com o CCS, ele pode
ser alterado pra funcionar com o HI-TECH ou qualquer outro compilador para pic, assim como pode ser escrito em
assembly ou BASIC, o importante que entenda a ideia do codigo e no o simples uso dele, assim pode aplicar ele
para o que precisar.

14/3/2012 11:16

Sistema de controle com PIC e porta Serial (rs232) Armando Leopol...

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

conexao controle Database DB

flash flash player

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

Sistema de controle com PIC e porta Serial (rs232) Armando Leopol...

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

You might also like