Hoje
irei falar um pouco de um projeto que tenho vindo a desenvolver na
área da micro eletrotécnica.
Ainda
com um grande caminho a percorrer tenho-me aventurado nesta área
fascinante que envolve eletrotécnica e programação.
Hoje
apenas irei colocar a lógica do Projeto, a sua implementação
física ainda numa fase de simulação e o código fonte de
cada PIC.
Bem,
para fazer tudo isto ainda numa fase de prototipagem vamos apenas
usar software, assim podemos ver facilmente como funciona e não
corremos o risco de queimar componentes :).
A
nível de software irei usar:
Proteus
8
Este
software irá servir para simularmos todo o nosso circuito
eletrónico, contem milhares de componentes e micro-controladores
tais como PIC e AVR.
É
bastante simples de usar e bastam dois cliques para carregar o nosso
ficheiro HEX para dentro da PIC.
Download
em :
MikroC
for PIC
Este
software é desenvolvido pela MikroElectrónica para PIC's,
principalmente da MicroChip é um ótimo IDE para programar.
Com
ele podemos programar toda a lógica de funcionamento da PIC
utilizandouma linguagem de mais alto nível (linguagem
C neste caso, podemos optar por Basic ou Pascal) que
o Assembler da MicroChip, podendo assim ter mais rentabilidade e
facilidade na programação destes micro-controladores que são as
PIC.
Download
em:
_______________________________________________________________
Apresentado
o software necessário passo a mostrar o prototipo do circuito
simulado no Proteus.
Neste
prototipo vamos colocar:
Duas
PIC18F4520 onde a PIC2 vai enviar uma mensagem à PIC1 e no final da
PIC1 receber a mensagem, apresenta no LCD a mensagem Sucesso.
Temos
também 2 Led's ligados em cada PIC, o LED RED fica acesso quando a
PIC está a RECEBER ou a ENVIAR, o LED GREEN acende quando a PIC
termina de ENVIAR ou de RECEBER.
Coloquei
também um simulador de terminal para visualizar em tempo real o que
a PIC está a receber. Este tipo de terminal simula um Computador, no
entanto relembro que para implementar fisicamente a ligação não
pode ser assim direta é necessário criar uma interface entre a PIC
e a Porta serie RS232 do Computador, na maioria dos casos usamos um
Integrado MAX232 para o efeito.
Componentes necessários:
2x
PIC18F4520
2x
Crystal 16Mhz
4x
Capacitor 22pf
2x
LED Green
2x
LED Red
1x
LCD 16x2 8bits
Opcional
Simulador Terminal
Para
este tipo de projeto é sempre importante termos o Datasheet do
Micro-controlador.
Para
o caso em questão podemos fazer download do mesmo em:
Passando
agora à parte de programação
Código
fonte da PIC1 (linguagem C)
Esta
PIC está responsável por receber mensagens e mostrar no LCD que a
mensagem foi recebida com sucesso.
//Ligações
LCD
sbit
LCD_EN at RD0_bit;
sbit
LCD_RS at RD1_bit;
sbit
LCD_D4 at RD4_bit;
sbit
LCD_D5 at RD5_bit;
sbit
LCD_D6 at RD6_bit;
sbit
LCD_D7 at RD7_bit;
sbit
LCD_EN_Direction at TRISD0_bit;
sbit
LCD_RS_Direction at TRISD1_bit;
sbit
LCD_D4_Direction at TRISD4_bit;
sbit
LCD_D5_Direction at TRISD5_bit;
sbit
LCD_D6_Direction at TRISD6_bit;
sbit
LCD_D7_Direction at TRISD7_bit;
char
uart_rd;
//Funcão
que recebe os dados UART
void
receber(){
while(1){
if(UART_Data_Ready()
== 1){
uart_rd
= UART1_Read(); //Função
de Leitura carácter
a carácter
if(uart_rd
== '#'){ // O carácter
'#' marca o inicio da mensagem
while(uart_rd
!= 13){ // O carácter
13 (carriage return) marca o fim da mensagem
if(UART_Data_Ready()
== 1){
uart_rd
= UART1_Read();
UART1_Write(uart_rd);
//Escreve a mensagem no terminar do computador
RA1_bit
= 1; //Coloca o Porto RA1 em High Voltage (Liga o LED)
}
}
RA1_bit
= 0; // Coloca o Porto RA1 em Low Voltage (Desliga o LED)
UART1_Write(13);
Lcd_Cmd(_LCD_CLEAR);
//Limpa todo o conteudo do LCD
lcd_Out(1,1,"Sucesso");
//Escreve na Primeira Linha a iniciar na Primeira Coluna a String
"Sucesso"
RA0_bit
= 1;
Delay_ms(1000);
//Aguarda 1 segundo para voltar a receber mais mensagens
RA0_bit
= 0;
Lcd_Cmd(_LCD_CLEAR);
}
}
}
}
//Função
main
void
main() {
TRISA
=0; //Ativa todos os Portos da Bloco A para modo OUPUT
TRISD
= 0; //Ativa todos os Portos da Bloco D para modo OUPUT
Lcd_Init();
//Inicia o modulo LCD
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
//Desactiva o Cursor
//
Comunicação Serie
UART1_Init(12000);
//Inicializa o modulo UART com 12000 bps
Delay_ms(100);
//Aguarda 100 milisegundos para que o modulo estabeleça
receber();
//Invoca a função receber
}
Código
fonte da PIC2 (linguagem C)
Esta
PIC é responsável por enviar a mensagem "Ola PIC1".
O
carácter '#' indica inicio de mensagem e o carácter 13 (carriage
return) indica fim de mensagem.
char
msg[] = "Ola PIC1\r";
int i ;
//Função
que envia dados para UART
void
enviar(){
while(1){
UART1_Write('#');
//Indicador de inicio de Mensagem
for(i
= 0; i< strlen(msg);i++){
UART1_Write(msg[i]);
//Envio do primeiro carácter
Delay_ms(20);
//Espera de 20 milissegundos,
esta espera é importante quando lidamos com Hardware
RA1_bit
=1; // Liga o LED do Porto RA1
}
UART1_Write(13);
//Fim de mensagem
RA0_bit
= 1; //Liga do LED do Porto RA0
Delay_ms(100);
RA0_bit
= 0; //Desliga do LED do Porto RA0
Delay_ms(1000);
//Aguarda 1 segundo até enviar a próxima
mensagem
}
}
//Função
main
void
main() {
TRISA
=0; //Ativa todos os Portos da Bloco A para modo OUPUT
//
Comunicação Serie
UART1_Init(12000);
//Inicializa o modulo UART com 12000 bps
Delay_ms(100);
//Aguarda 100 milissegundos para que o modulo estabeleça
enviar();
//Invoca a função receber
}
Ok
por hoje é tudo, espero que tenham gostado e que vos entusiasme a
criar projetos interessantes e revolucionários.
Obrigado
pela tua leitura.
Partilhar
também é aprender.
Bruno
Horta@2014
Comentários
Enviar um comentário