Sistema de Controle Com PIC e Porta Serial RS232

7
0 tweets tweet 1 shares Share 0 0saves Save Armando Leopoldo Keller Actionscript, AIR, Python, Engenharia Elétrica…. mai 09 2010 Sistema de controle com PIC e porta Serial (rs232) Estou fazendo um projeto para a cadeira de programação 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. Material utilizado (para testar virtualmente): - Proteus 7.1 (para a simulação) - PCWH Compiler IDE (CCS) 4.038 (para programar e compilar o programa em C) 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 cabeçalho especifico do pic a ser ut #include // Inclui as funçoes padroes de entrada e saida #fuses HS,NOWDT,NOPROTECT // Configuração 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 unsigned char x[4]; //Variavel do tipo char com 4 posiçoes (string de até 3 carateres) ou do tamanho // 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) // função principal { delay_ms(100); //tempo para inicializar a conexão printf("TESTE DE CONTROLE COM PIC\n\r"); // Manda esta mesagem para o terminal //Para testar se foi tudo ligado corretamente, feche a função 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.. d { switch(x[1]) // Ve se qual pino da porta quer controlar { case '0': pino = PIN_A0; break; case '1': pino = PIN_A1; Sistema de controle com PIC e porta Serial (rs232) « Armando Leopol... http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e... 1 de 7 14/3/2012 11:16

description

Sistema de Controle Com PIC e Porta Serial RS232

Transcript of Sistema de Controle Com PIC e Porta Serial RS232

Page 1: Sistema de Controle Com PIC e Porta Serial RS232

0tweets

tweet

1shares

Share

0

0savesSave

Armando Leopoldo Keller

Actionscript, AIR, Python, Engenharia Elétrica….mai092010

Sistema de controle com PIC e porta Serial (rs232)

Estou fazendo um projeto para a cadeira de programação C que tem o objetivo de controlar eletronicos (sejaminterruptores, motores, ou até coisas mais completas como temperatura de um ar-condicionado) remotamente, eachei interessante postar aqui o projeto para que mais gente possa ver como isso é feito (e como é mais simples doque 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.

Material utilizado (para testar virtualmente):

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

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 projetoPasso 7: Ligar o pino RX do pic no TX do terminalPasso 8: Ligar o pino TX do pic no RX do terminalPasso 9: Salve o projeto onde preferirpor 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 mudandode compilador o codigo sera diferente). No exemplo eu estou usando o compilador CCS.O programa é o seguinte:

#include <16f628a.h> // Inclui o cabeçalho especifico do pic a ser utilizado

#include // Inclui as funçoes padroes de entrada e saida

#fuses HS,NOWDT,NOPROTECT // Configuração 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 B1 como RX

unsigned char x[4]; //Variavel do tipo char com 4 posiçoes (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) // função principal

{

delay_ms(100); //tempo para inicializar a conexão

printf("TESTE DE CONTROLE COM PIC\n\r"); // Manda esta mesagem para o terminal

//Para testar se foi tudo ligado corretamente, feche a função 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 do pic

{

switch(x[1]) // Ve se qual pino da porta quer controlar

{

case '0':

pino = PIN_A0;

break;

case '1':

pino = PIN_A1;

Sistema de controle com PIC e porta Serial (rs232) « Armando Leopol... http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e...

1 de 7 14/3/2012 11:16

Page 2: Sistema de Controle Com PIC e Porta Serial RS232

break;

case '2':

pino = PIN_A2;

break;

case '3':

pino = PIN_A3;

break;

default:

pino = 0; // se não 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 continuar)

{

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 não existir a porta que foi escolhida, seta o pino para 0 para que não mude o que foi escolhido anteriorm

}

if(pino != 0) // Se o pino existir (não 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 não for de ligar ou desligar

{

printf("Comando invalido. Tente novamente \n\r"); //Avisa que o comando é invalido

}

}

else // Se o pino não existir (variavel pino igual a 0)

{

printf("Comando invalido. Tente novamente \n\r");

}

} while (TRUE); // mantem o laço de repetição rodando em loop infinito

}

Os dois promeiros includes não aparecem bem com esse plugin, mas são:#include <16f628a.h>#includeAcho que não tem nada de muito complicado neste codigo, no máximo a parte de configuração dos fuses, o que pode ser

Sistema de controle com PIC e porta Serial (rs232) « Armando Leopol... http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e...

2 de 7 14/3/2012 11:16

Page 3: Sistema de Controle Com PIC e Porta Serial RS232

visto no manual do compilador, ou em qualquer tutorial basico sobre o CCS. e o resto dos comandos são basicos dalinguagem 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 Filecoloque o caminho para o arquivo .hex gerado pelo compilador.

Pronto, agora depois de tudo configurado é só rodar a simulação que funcionara, a menos que tenha feito algo errado (antesde perguntar, favor ler novamente e ver se esta tudo igual). Lembrando que ao copiar e colar o codigo para o seu editor detextos 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 funçoes 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 não é precisogastar muito com uma arduino para fazer projetos simples, os microcontroladores são baratos (em torno de uns 10 reais) esão super simples de programar.

Seguem algumas imagens de como fica o projeto:

Como fica no proteus

Sistema de controle com PIC e porta Serial (rs232) « Armando Leopol... http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e...

3 de 7 14/3/2012 11:16

Page 4: Sistema de Controle Com PIC e Porta Serial RS232

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 throughthe RSS 2.0 feed. You can leave a response, or trackback from your own site.

« De Monster Debugger – como utilizarSistema de controle com PIC e porta Serial (rs232) parte 2 »

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

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 não aceita o ” pino” como atribuidor de pinos…. tipo.. ele até recebe a variável, só que na hora de compilar.. daherro.

1.

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 diadesses aew.. affz..

posta um aew tio!!!!

2.

Sistema de controle com PIC e porta Serial (rs232) « Armando Leopol... http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e...

4 de 7 14/3/2012 11:16

Page 5: Sistema de Controle Com PIC e Porta Serial RS232

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?

abraço,julio

3.

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, ealguns kits de desenvolvimento que funcionam como gravador de pic. Por motivo de praticidade comprei o pickit 2 damicrochip, tem para vender no mercado livre por uns 100 reais.

4.

Armando Leopoldo Keller disse:25 de fevereiro de 2011 às 23:44

Julio, o post foi editado, os arquivos utilizados no exemplo estão disponíveis em http://armandokeller.com/blog/wp-content/uploads/2010/05/RS232.zip

5.

Armando Leopoldo Keller disse:25 de fevereiro de 2011 às 23:54

http://armandokeller.com/blog/wp-content/uploads/2010/05/RS232.zip

6.

Paulo Soares disse:14 de março de 2011 às 17:09

Armando, Em primeiro lugar parabéns pelo projeto, estou fazendo pesquisas sobre comunicação serial e o pic, mas nãoencontrei nada tão bem explicado como no seu site, outra coisa, como estudei programação em c, este seu projeto caiucomo uma luva. Quero deixar meu email a disposição para o que eu puder ajudar, sou tecnico em automação e façoengenharia eletrica. Grande abraço.

7.

Paulo Soares disse:15 de março de 2011 às 9:40

Maicon, quanto ao gravador, estive buscando em varios sites sobre, e em nenhum tive a confiança de montar paratestar, pelo preço optei por comprar, aqui em BH encontrei uma empresa que fabrica pelo valor de R$100,00 compreie funciona, alem de se der problema a empresa esta perto para auxiliar.

8.

carlos disse:7 de abril de 2011 às 15:01

onde eu encontro o .hex? estou usando o borland, tem diferença? grato…

9.

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 temdiferença em usar o borland, tipo, borland não é compilador pra pic, esse codigo especifico é só com o CCS, ele podeser alterado pra funcionar com o HI-TECH ou qualquer outro compilador para pic, assim como pode ser escrito emassembly ou BASIC, o importante é que entenda a ideia do codigo e não o simples uso dele, assim pode aplicar elepara o que precisar.

10.

Sistema de controle com PIC e porta Serial (rs232) « Armando Leopol... http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e...

5 de 7 14/3/2012 11:16

Page 6: Sistema de Controle Com PIC e Porta Serial RS232

Leave a Reply

Name (required)

Mail (will not be published) (required)

Website

Tags

Actionscript Actionscript 2 Actionscript 3 AIR AMFPHP AMFPHPconn Apollo as2 AS 2.0 as3 AS 3 AS 3.0 blog BUG C campos classe classes

commands conexao controle Database DB flash flash player Flex formularios JSFL lee brimelow Menu Monster Debugger NativeMenu NativeMenuItem

oop PIC pixelSnapping python rs232 script serial Socket SQL SQLite TextField validação

Tópicos Recentes

Pesquisa de MercadoPyObjC Python no XCodeSistema de controle com PIC e porta Serial (rs232) parte 2Sistema 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)eletrônica (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

Sistema de controle com PIC e porta Serial (rs232) « Armando Leopol... http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e...

6 de 7 14/3/2012 11:16

Page 7: Sistema de Controle Com PIC e Porta Serial RS232

5 1/2 (5etdemi)Actionscript.comActionscript.orgamfphpAndré Michelle – BlogBig Spaceship LabsColin MoockGrant SkinnerGuy WatsonMarcelo DuendeMike ChambersNew MovieClip()Sephiroththe flash blog (Lee Brimelow)the flex blog (Lee Brimelow)

Páginas

Sobre

Powered by WordPress | Entries (RSS) | Comments (RSS) | Template by MB Web Design

Sistema de controle com PIC e porta Serial (rs232) « Armando Leopol... http://armandokeller.com/blog/2010/05/sistema-de-controle-com-pic-e...

7 de 7 14/3/2012 11:16