SlideShare ist ein Scribd-Unternehmen logo
1 von 12
Downloaden Sie, um offline zu lesen
UNIVERSIDADE FEDERAL DE SÃO JOÃO DEL-REI
CURSO DE ENGENHARIA INDUSTRIAL ELÉTRICA
MARCUS VINÍCIUS DA FONSECA
AMANDA BOTELHO AMARAL
JÚLIO CÉSAR MAGALHÃES FREITAS
IMPLEMENTAÇÃO DE INTERFACE ENTRE O SENSOR DE
DISTÂNCIA ULTRASÔNICO HC-SR04 E O
MICROCONTROLADOR PIC ® 18F4550
São João del-Rei
2013
Sumário
1 Introdução.............................................................................Erro! Indicador não definido.
2 Desenvolvimento ..................................................................Erro! Indicador não definido.
3 CONCLUSÕES ................................................................................................................5
4 BIBLIOGRAFIA ..............................................................................................................5
1 INTRODUÇÃO
Como pré-requisito para aprovação, fomos solicitados pelo Professor Davidson
Lafitte Firmo, implementarmos um projeto utilizando o microcontrolador PIC 18F4550.
Foi escolhido, para tal fim, o desenvolvimento de um Sensor Ultrassônico da Distância,
utilizando o shield HC-SR04. O protótipo foi desenvolvido através de programação no
MPLab IDE , utilizando as bibliotecas de exemplo para implementação do LCD 8X2.
O HC-SR04 necessita, para sua correta operação, de um pulso na porta trigger em
TTL 5V, com duração de 10 ms, enviando para o microcontrolador, através do pino
echo um pulso. A medida da distância, em centímetros, entre o sensor e o anteparo é
medida pela relação entre o envio do pulso na porta trigger e o retorno na porta echo,
da seguinte forma:
[1]
2 DESENVOLVIMENTO
Por se tratar de um projeto relativamente simples, optamos pela implementação em PCB,
com acabamento e alimentação por bateria. O projeto iniciou-se pela confecção do programa,
utilizando a IDE MPLAB®.
Optamos por utilizar as preconfigurações do Timer0 e do Timer1, disponibilizadas no
arquivo MPLAB C18 C Compiler Libraries. Desta forma, utilizamos o Timer0 para a contagem do
tempo entre o pulso e o eco, e o Timer1 para a contagem do tempo entre duas medições
consecutivas, para o cálculo da velocidade.
Desta forma a distância è calculada pela fórmula [1] e a velocidade é calculada pela
fórmula:
[2]
O valor de é calculado com base no fato de que o Prescaler definido
foi de 1:4, ou seja, o timer avança 1 bit para cada quatro clocks do microcontrolador, e cada
clock do controlador é de 83,33 ns, logo:
[3]
A rotina desenvolvida foi, então, simulada no ISIS®, tendo em vista simular o
funcionamento do protótipo completo, assim como ser o único software com modelo de
simulação do sensor HC-SR04.
Figura 1 Esquemático do projeto
Após concluído o processo de simulação do funcionamento do sensor, desenvolveu-se,
então o protótipo físico, através da utilização do software ARES® para a confecção da PCB.
Figura 2 Estampa da PCB
Iniciamos, portanto o processo de implementação física do protótipo. Durante esta fase,
identificamos que a porta RB0 não estava enviando o pulso, conforme deveria ocorrer, após
exaustivas tentativas no código, identificamos que a falha ocorria devido à declaração do
registrador “ADEN = OFF”, problema que não tínhamos como prever uma vez que o registrador
tem como função, simplesmente, a desabilitação das portas do conversor A/D.
3 CONCLUSÕES
Finalmente, o trabalho apresentado foi uma grande oportunidade de
expandirmos nossos conhecimentos acerca da programação de microcontroladores
PIC. Apesar de ser um projeto de baixa complexidade, alguns imprevistos durante o
desenvolvimento e a falta de conhecimento acerca das rotinas disponibilizadas
trouxe como impacto um grande atraso, o qual não foi possível sanar. Apesar dos
impasses, o protótipo foi fisicamente montado e preparado, entretanto, não foi
possível sua verificação, uma vez que ocorreram imprevistos relacionados com o
cabeamento do LCD, assim como aquele apresentado, relativo à porta RB0.
Em conclusão, apesar de o protótipo não ter funcionado conforme esperado, os
conhecimentos adquiridos serão levados, assim como os erros que se apresentaram,
serão mitigados e deles levaremos o aprendizado.
No Anexo I é apresentada a rotina utilizada na programação do PIC 18F4550.
4 BIBLIOGRAFIA
Data Sheet (2006), PIC18F2455/2550/4455/4550. MicroshipTechnology Inc .DS39632C;
Data Sheet ,Ultrasonic Ranging Module HC – SR04.ELEC Freaks ;
Data Sheet (2013), LM78XX/LM78XXA.Fairchild Semiconductor .Rev. 1.3.0
http://www.microchip.com/forums/f57.aspx, acessado nos dias (02, 03, 07, 11, 18,
21/11/2013,3, 11, 15, 16, 17, 19 e 20/12/2013);
hlpC18Lib.chm, hlpPIC18ConfigSet.chm – Arquivos de Ajuda do compilador C18®, acesso
nos dias 10, 11, 13, 15, 17 e 19/12/2013;
MPLAB C18 C Compiler Getting Started . (2005), MicroshipTechnology Inc. DS51295F
MPLAB C18 C Compiler Libraries (2005), MicroshipTechnology Inc. DS51297F
MGD080B-FL-YBS – Specifications for Liquid Crystal, 2005
Anexo I
Rotina do arquivo main.c
/** I N C L U D E S **********************************************************/
#include <p18cxxx.h>
#include "my_xlcd.h"
#include <delays.h>
#include <timers.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#pragma config FOSC = HSPLL_HS //HABILITA O MODO HS PARA O XTAL (20 MHZ)
#pragma config PLLDIV = 5 // CONFIGURA PLL CONFORME PG 30 DATASHEET
#pragma config MCLRE = OFF // POSSIBILITA O USO DA RE3
#pragma config PWRT = OFF //POWER UP TIMER
/** V A R I A V E I S G L O B A I S ****************************************/
int cont_vel = 0; // contador para cálculo da velocidade (tempo)
int long temp_vel = 0; //
int long temp_dist = 0;
int long dist_atual = 0;
int long dist_anterior = 0;
int long dist_vel = 0;
const int f_conver_cm = 0.02289;//174 pulsos = 1cm, com PS = 4, 4/174 = x cm
const int f_conver_ms = 0.3333;//1 tic = 4*83,33ns
int vel = 0;
int vel_1;
int vel_2;
int vel_3;
int dist_atual_1 = 0;
int dist_atual_2 = 0;
// armazena variavel na memória de dados (SDRAM)
// outro tipo sintaxe C para inicializar a variável na DECLARAÇÃO
//rom unsigned char linha2[20]="=60";
/** P R O T O T I P O S P R I V A D O S ***********************************/
void ConfiguraSistema(void);
void tempo(void);
void inter(void);
void Delay10ms (void)
{
Delay10KTCYx(13);
}
void main(void)
{
// Configura as portas e periféricos usados no projeto
ConfiguraSistema();
// Seleciona o endereço inicial da linha 1 (0x00) do display
// Escreve a string da "ROM" no display LCD
// Laço infinito
cont_vel = 0;
while(1)
{
PORTBbits.RB0 = 1;
Delay10ms();
PORTBbits.RB0 = 0;
if (~cont_vel)
{
cont_vel = 1;
OpenTimer0 (TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_256);
OpenTimer1 ( TIMER_INT_OFF & T1_16BIT_RW & T1_SOURCE_INT &
T1_PS_1_8 & T1_OSC1EN_OFF & T1_SYNC_EXT_OFF);
}
else
{
OpenTimer0 ( TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_256);
temp_vel = ReadTimer1();
cont_vel = 0;
}
while (~PORTBbits.RB1)
{
Nop();
}
temp_dist = ReadTimer0();
//dist_atual = temp_dist * f_conver_cm;
dist_vel = dist_atual - dist_anterior;
vel = (dist_vel)* 1000 / f_conver_ms;//cm/s
SetDDRamAddr (0x00);
putrsXLCD("D");
if (dist_atual < 100)
{
putrsXLCD(" ");
}
putIntXLCD(dist_atual);
SetDDRamAddr(0x07);
putrsXLCD("c");
putrsXLCD("m");
SetDDRamAddr (0x40);
putrsXLCD("V");
if (vel < 100)
{
putrsXLCD(" ");
}
putIntXLCD(vel);
SetDDRamAddr(0x45);
putrsXLCD("c");
putrsXLCD("m");
putrsXLCD("/");
putrsXLCD("s");
dist_anterior = dist_atual;
Delay10KTCYx(72);
WriteCmdXLCD(0b00000001); // Clear display
}
}//end main
void ConfiguraSistema (void)
{
TRISBbits.TRISB0 = 0; // TRIS PARA RB0 -> SAÍDA
TRISBbits.TRISB1 = 1; //TRIS PARA RB1 -> ENTRADA
RCONbits.IPEN = 0;
INTCONbits.GIEH = 1;
INTCONbits.GIEL = 1;
INTCONbits.TMR0IE = 1;
TMR0H = 0;
TMR0L = 0;
//Configura os pinos que são usados pelo LCD 16x2 alfa-numerico
OpenXLCD();
}//end ConfiguraSistema
#pragma interrupt inter
#pragma code inter = 0x08
void inter (void)
{
_asm
GOTO tempo
_endasm
}
#pragma code
void tempo (void)
{
PIR1bits.TMR1IF = 0;
if (INTCONbits.TMR0IF)
{
WriteCmdXLCD(0b00000001);
SetDDRamAddr (0x00);
putrsXLCD("FORA DE");
SetDDRamAddr (0x41);
putrsXLCD("ALCANCE");
INTCONbits.TMR0IF = 0;
}
}

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

201728 22259 manual_picgenios
201728 22259 manual_picgenios201728 22259 manual_picgenios
201728 22259 manual_picgenios
 
PLCduino - A PLC using Arduino platform
PLCduino - A PLC using Arduino platformPLCduino - A PLC using Arduino platform
PLCduino - A PLC using Arduino platform
 
Arquitetura de Microcontroladores Microchip PIC
Arquitetura de Microcontroladores Microchip PICArquitetura de Microcontroladores Microchip PIC
Arquitetura de Microcontroladores Microchip PIC
 
TDC2014 - Arduino Legacy
TDC2014 - Arduino LegacyTDC2014 - Arduino Legacy
TDC2014 - Arduino Legacy
 
Ferramentas Intel Android
Ferramentas Intel AndroidFerramentas Intel Android
Ferramentas Intel Android
 
TDC2016POA | Trilha IoT - Controlando AR Drone com PHP
TDC2016POA | Trilha IoT -  Controlando AR Drone com PHPTDC2016POA | Trilha IoT -  Controlando AR Drone com PHP
TDC2016POA | Trilha IoT - Controlando AR Drone com PHP
 
Cpic
CpicCpic
Cpic
 
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados- Freedom boa...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados- Freedom boa...Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados- Freedom boa...
Microcontroladores ARM Cortex M0+ Aplicação em robôs autoguiados- Freedom boa...
 
LEON3 e KIT ALTERA.
LEON3 e KIT ALTERA.LEON3 e KIT ALTERA.
LEON3 e KIT ALTERA.
 
Curso microcontroladores pic no mp lab 8
Curso microcontroladores pic no mp lab 8Curso microcontroladores pic no mp lab 8
Curso microcontroladores pic no mp lab 8
 
Webinar: Explorando o SimulIDE - Simulador de Circuitos Eletrônicos Open Source
Webinar:  Explorando o SimulIDE - Simulador de Circuitos Eletrônicos Open SourceWebinar:  Explorando o SimulIDE - Simulador de Circuitos Eletrônicos Open Source
Webinar: Explorando o SimulIDE - Simulador de Circuitos Eletrônicos Open Source
 
Palestra FLISOL 2013 - Java + Arduino + Raspberry PI = Uma combinação perfeita
Palestra FLISOL 2013 - Java + Arduino + Raspberry PI = Uma combinação perfeitaPalestra FLISOL 2013 - Java + Arduino + Raspberry PI = Uma combinação perfeita
Palestra FLISOL 2013 - Java + Arduino + Raspberry PI = Uma combinação perfeita
 
qcon rio 2015 - escalabilidade na plataforma de vídeos ao vivo
qcon rio 2015 - escalabilidade na plataforma de vídeos ao vivoqcon rio 2015 - escalabilidade na plataforma de vídeos ao vivo
qcon rio 2015 - escalabilidade na plataforma de vídeos ao vivo
 
Introdução ao Arduino: Fundamentos e Aplicações de Microcontroladores
Introdução ao Arduino: Fundamentos e Aplicações de MicrocontroladoresIntrodução ao Arduino: Fundamentos e Aplicações de Microcontroladores
Introdução ao Arduino: Fundamentos e Aplicações de Microcontroladores
 
Linux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoCLinux e zephyr conversando no mesmo SoC
Linux e zephyr conversando no mesmo SoC
 
2 gravação
2 gravação2 gravação
2 gravação
 
TDC-SP: Android sem gastar energia
TDC-SP: Android sem gastar energiaTDC-SP: Android sem gastar energia
TDC-SP: Android sem gastar energia
 
Arduino: Brincando de eletrônica com Python e Hardware Livre
Arduino: Brincando de eletrônica com Python e Hardware LivreArduino: Brincando de eletrônica com Python e Hardware Livre
Arduino: Brincando de eletrônica com Python e Hardware Livre
 
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDeviceHackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
 
WRVA 2015
WRVA 2015WRVA 2015
WRVA 2015
 

Andere mochten auch

Acionamento 04 conversor_de_frequencia
Acionamento 04 conversor_de_frequenciaAcionamento 04 conversor_de_frequencia
Acionamento 04 conversor_de_frequencia
Douglas Roberto
 

Andere mochten auch (11)

Aula 4 conversor ad e pwm
Aula 4   conversor ad e pwmAula 4   conversor ad e pwm
Aula 4 conversor ad e pwm
 
Pwm pic 18 f
Pwm pic 18 fPwm pic 18 f
Pwm pic 18 f
 
Acionamento 04 conversor_de_frequencia
Acionamento 04 conversor_de_frequenciaAcionamento 04 conversor_de_frequencia
Acionamento 04 conversor_de_frequencia
 
Microcontroladores PIC - Conversor A/D
Microcontroladores PIC - Conversor A/DMicrocontroladores PIC - Conversor A/D
Microcontroladores PIC - Conversor A/D
 
Low-power: Como reduzir o consumo de energia do seu produto e aumentar a vida...
Low-power: Como reduzir o consumo de energia do seu produto e aumentar a vida...Low-power: Como reduzir o consumo de energia do seu produto e aumentar a vida...
Low-power: Como reduzir o consumo de energia do seu produto e aumentar a vida...
 
Implementação do controle PID e validação real utilizando a plataforma robóti...
Implementação do controle PID e validação real utilizando a plataforma robóti...Implementação do controle PID e validação real utilizando a plataforma robóti...
Implementação do controle PID e validação real utilizando a plataforma robóti...
 
Estudo com Validação Real do Controlador Proporcional Integral e Derivativo n...
Estudo com Validação Real do Controlador Proporcional Integral e Derivativo n...Estudo com Validação Real do Controlador Proporcional Integral e Derivativo n...
Estudo com Validação Real do Controlador Proporcional Integral e Derivativo n...
 
Modbus TCP/IP implementation in Siemens S7-300 PLC
Modbus TCP/IP implementation in Siemens S7-300 PLC Modbus TCP/IP implementation in Siemens S7-300 PLC
Modbus TCP/IP implementation in Siemens S7-300 PLC
 
CPBR7 - Existe vida depois do Arduino?
CPBR7 - Existe vida depois do Arduino?CPBR7 - Existe vida depois do Arduino?
CPBR7 - Existe vida depois do Arduino?
 
An9611
An9611An9611
An9611
 
Basic of MODBUS Communication/Protocol
Basic of MODBUS Communication/ProtocolBasic of MODBUS Communication/Protocol
Basic of MODBUS Communication/Protocol
 

Ähnlich wie Relatório final

Pic apostila
Pic apostilaPic apostila
Pic apostila
moschen
 
Apostila pic-c
Apostila pic-cApostila pic-c
Apostila pic-c
jlconrado
 
(43)99668 6495 ASSESSORIA MAPA - MICROPROCESSADORES E MICROCONTROLADORES - 51...
(43)99668 6495 ASSESSORIA MAPA - MICROPROCESSADORES E MICROCONTROLADORES - 51...(43)99668 6495 ASSESSORIA MAPA - MICROPROCESSADORES E MICROCONTROLADORES - 51...
(43)99668 6495 ASSESSORIA MAPA - MICROPROCESSADORES E MICROCONTROLADORES - 51...
daimonkonicz823
 
Mini curso microcontrolador
Mini curso microcontroladorMini curso microcontrolador
Mini curso microcontrolador
marcia1135
 

Ähnlich wie Relatório final (20)

Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
 
Microcontroladores pic ling c unicamp
Microcontroladores pic ling c unicampMicrocontroladores pic ling c unicamp
Microcontroladores pic ling c unicamp
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptx
 
Desenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcadosDesenvolvimento de drivers para sistemas embarcados
Desenvolvimento de drivers para sistemas embarcados
 
Pcs2031 projeto01 introducao_pic_v4
Pcs2031 projeto01 introducao_pic_v4Pcs2031 projeto01 introducao_pic_v4
Pcs2031 projeto01 introducao_pic_v4
 
Pic apostila
Pic apostilaPic apostila
Pic apostila
 
Apostila pic-c
Apostila pic-cApostila pic-c
Apostila pic-c
 
Microprocessadores
MicroprocessadoresMicroprocessadores
Microprocessadores
 
Apostila pic-c16 f877
Apostila pic-c16 f877Apostila pic-c16 f877
Apostila pic-c16 f877
 
Apostila pic-c
Apostila pic-cApostila pic-c
Apostila pic-c
 
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas  Operacionais de Tempo Real - Criando seu próprio esc...Fundamentos de Sistemas  Operacionais de Tempo Real - Criando seu próprio esc...
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
 
Corpo relatorio
Corpo relatorioCorpo relatorio
Corpo relatorio
 
1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic1 história e características dos microcontroladores pic
1 história e características dos microcontroladores pic
 
DESENVOLVIMENTO_DE_FIRMWARE_E_SOFTWARE_D.pdf
DESENVOLVIMENTO_DE_FIRMWARE_E_SOFTWARE_D.pdfDESENVOLVIMENTO_DE_FIRMWARE_E_SOFTWARE_D.pdf
DESENVOLVIMENTO_DE_FIRMWARE_E_SOFTWARE_D.pdf
 
Programa final
Programa finalPrograma final
Programa final
 
ATmega Prática
ATmega PráticaATmega Prática
ATmega Prática
 
Programação básica de microcontroladores
Programação básica de microcontroladoresProgramação básica de microcontroladores
Programação básica de microcontroladores
 
(43)99668 6495 ASSESSORIA MAPA - MICROPROCESSADORES E MICROCONTROLADORES - 51...
(43)99668 6495 ASSESSORIA MAPA - MICROPROCESSADORES E MICROCONTROLADORES - 51...(43)99668 6495 ASSESSORIA MAPA - MICROPROCESSADORES E MICROCONTROLADORES - 51...
(43)99668 6495 ASSESSORIA MAPA - MICROPROCESSADORES E MICROCONTROLADORES - 51...
 
Clic 02-manual
Clic 02-manualClic 02-manual
Clic 02-manual
 
Mini curso microcontrolador
Mini curso microcontroladorMini curso microcontrolador
Mini curso microcontrolador
 

Relatório final

  • 1. UNIVERSIDADE FEDERAL DE SÃO JOÃO DEL-REI CURSO DE ENGENHARIA INDUSTRIAL ELÉTRICA MARCUS VINÍCIUS DA FONSECA AMANDA BOTELHO AMARAL JÚLIO CÉSAR MAGALHÃES FREITAS IMPLEMENTAÇÃO DE INTERFACE ENTRE O SENSOR DE DISTÂNCIA ULTRASÔNICO HC-SR04 E O MICROCONTROLADOR PIC ® 18F4550 São João del-Rei 2013
  • 2. Sumário 1 Introdução.............................................................................Erro! Indicador não definido. 2 Desenvolvimento ..................................................................Erro! Indicador não definido. 3 CONCLUSÕES ................................................................................................................5 4 BIBLIOGRAFIA ..............................................................................................................5
  • 3. 1 INTRODUÇÃO Como pré-requisito para aprovação, fomos solicitados pelo Professor Davidson Lafitte Firmo, implementarmos um projeto utilizando o microcontrolador PIC 18F4550. Foi escolhido, para tal fim, o desenvolvimento de um Sensor Ultrassônico da Distância, utilizando o shield HC-SR04. O protótipo foi desenvolvido através de programação no MPLab IDE , utilizando as bibliotecas de exemplo para implementação do LCD 8X2. O HC-SR04 necessita, para sua correta operação, de um pulso na porta trigger em TTL 5V, com duração de 10 ms, enviando para o microcontrolador, através do pino echo um pulso. A medida da distância, em centímetros, entre o sensor e o anteparo é medida pela relação entre o envio do pulso na porta trigger e o retorno na porta echo, da seguinte forma: [1] 2 DESENVOLVIMENTO Por se tratar de um projeto relativamente simples, optamos pela implementação em PCB, com acabamento e alimentação por bateria. O projeto iniciou-se pela confecção do programa, utilizando a IDE MPLAB®. Optamos por utilizar as preconfigurações do Timer0 e do Timer1, disponibilizadas no arquivo MPLAB C18 C Compiler Libraries. Desta forma, utilizamos o Timer0 para a contagem do tempo entre o pulso e o eco, e o Timer1 para a contagem do tempo entre duas medições consecutivas, para o cálculo da velocidade. Desta forma a distância è calculada pela fórmula [1] e a velocidade é calculada pela fórmula: [2] O valor de é calculado com base no fato de que o Prescaler definido foi de 1:4, ou seja, o timer avança 1 bit para cada quatro clocks do microcontrolador, e cada clock do controlador é de 83,33 ns, logo: [3]
  • 4. A rotina desenvolvida foi, então, simulada no ISIS®, tendo em vista simular o funcionamento do protótipo completo, assim como ser o único software com modelo de simulação do sensor HC-SR04. Figura 1 Esquemático do projeto Após concluído o processo de simulação do funcionamento do sensor, desenvolveu-se, então o protótipo físico, através da utilização do software ARES® para a confecção da PCB. Figura 2 Estampa da PCB
  • 5. Iniciamos, portanto o processo de implementação física do protótipo. Durante esta fase, identificamos que a porta RB0 não estava enviando o pulso, conforme deveria ocorrer, após exaustivas tentativas no código, identificamos que a falha ocorria devido à declaração do registrador “ADEN = OFF”, problema que não tínhamos como prever uma vez que o registrador tem como função, simplesmente, a desabilitação das portas do conversor A/D. 3 CONCLUSÕES Finalmente, o trabalho apresentado foi uma grande oportunidade de expandirmos nossos conhecimentos acerca da programação de microcontroladores PIC. Apesar de ser um projeto de baixa complexidade, alguns imprevistos durante o desenvolvimento e a falta de conhecimento acerca das rotinas disponibilizadas trouxe como impacto um grande atraso, o qual não foi possível sanar. Apesar dos impasses, o protótipo foi fisicamente montado e preparado, entretanto, não foi possível sua verificação, uma vez que ocorreram imprevistos relacionados com o cabeamento do LCD, assim como aquele apresentado, relativo à porta RB0. Em conclusão, apesar de o protótipo não ter funcionado conforme esperado, os conhecimentos adquiridos serão levados, assim como os erros que se apresentaram, serão mitigados e deles levaremos o aprendizado. No Anexo I é apresentada a rotina utilizada na programação do PIC 18F4550. 4 BIBLIOGRAFIA Data Sheet (2006), PIC18F2455/2550/4455/4550. MicroshipTechnology Inc .DS39632C; Data Sheet ,Ultrasonic Ranging Module HC – SR04.ELEC Freaks ; Data Sheet (2013), LM78XX/LM78XXA.Fairchild Semiconductor .Rev. 1.3.0 http://www.microchip.com/forums/f57.aspx, acessado nos dias (02, 03, 07, 11, 18, 21/11/2013,3, 11, 15, 16, 17, 19 e 20/12/2013); hlpC18Lib.chm, hlpPIC18ConfigSet.chm – Arquivos de Ajuda do compilador C18®, acesso nos dias 10, 11, 13, 15, 17 e 19/12/2013; MPLAB C18 C Compiler Getting Started . (2005), MicroshipTechnology Inc. DS51295F MPLAB C18 C Compiler Libraries (2005), MicroshipTechnology Inc. DS51297F MGD080B-FL-YBS – Specifications for Liquid Crystal, 2005
  • 7. Rotina do arquivo main.c /** I N C L U D E S **********************************************************/ #include <p18cxxx.h> #include "my_xlcd.h" #include <delays.h> #include <timers.h> #include <math.h> #include <stdlib.h> #include <stdio.h> #pragma config FOSC = HSPLL_HS //HABILITA O MODO HS PARA O XTAL (20 MHZ) #pragma config PLLDIV = 5 // CONFIGURA PLL CONFORME PG 30 DATASHEET #pragma config MCLRE = OFF // POSSIBILITA O USO DA RE3 #pragma config PWRT = OFF //POWER UP TIMER /** V A R I A V E I S G L O B A I S ****************************************/ int cont_vel = 0; // contador para cálculo da velocidade (tempo) int long temp_vel = 0; // int long temp_dist = 0; int long dist_atual = 0; int long dist_anterior = 0; int long dist_vel = 0; const int f_conver_cm = 0.02289;//174 pulsos = 1cm, com PS = 4, 4/174 = x cm const int f_conver_ms = 0.3333;//1 tic = 4*83,33ns int vel = 0; int vel_1;
  • 8. int vel_2; int vel_3; int dist_atual_1 = 0; int dist_atual_2 = 0; // armazena variavel na memória de dados (SDRAM) // outro tipo sintaxe C para inicializar a variável na DECLARAÇÃO //rom unsigned char linha2[20]="=60"; /** P R O T O T I P O S P R I V A D O S ***********************************/ void ConfiguraSistema(void); void tempo(void); void inter(void); void Delay10ms (void) { Delay10KTCYx(13); } void main(void) { // Configura as portas e periféricos usados no projeto ConfiguraSistema(); // Seleciona o endereço inicial da linha 1 (0x00) do display
  • 9. // Escreve a string da "ROM" no display LCD // Laço infinito cont_vel = 0; while(1) { PORTBbits.RB0 = 1; Delay10ms(); PORTBbits.RB0 = 0; if (~cont_vel) { cont_vel = 1; OpenTimer0 (TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_256); OpenTimer1 ( TIMER_INT_OFF & T1_16BIT_RW & T1_SOURCE_INT & T1_PS_1_8 & T1_OSC1EN_OFF & T1_SYNC_EXT_OFF); } else { OpenTimer0 ( TIMER_INT_ON & T0_16BIT & T0_SOURCE_INT & T0_PS_1_256); temp_vel = ReadTimer1(); cont_vel = 0; } while (~PORTBbits.RB1) { Nop(); } temp_dist = ReadTimer0(); //dist_atual = temp_dist * f_conver_cm;
  • 10. dist_vel = dist_atual - dist_anterior; vel = (dist_vel)* 1000 / f_conver_ms;//cm/s SetDDRamAddr (0x00); putrsXLCD("D"); if (dist_atual < 100) { putrsXLCD(" "); } putIntXLCD(dist_atual); SetDDRamAddr(0x07); putrsXLCD("c"); putrsXLCD("m"); SetDDRamAddr (0x40); putrsXLCD("V"); if (vel < 100) { putrsXLCD(" "); } putIntXLCD(vel); SetDDRamAddr(0x45); putrsXLCD("c"); putrsXLCD("m"); putrsXLCD("/"); putrsXLCD("s"); dist_anterior = dist_atual; Delay10KTCYx(72); WriteCmdXLCD(0b00000001); // Clear display
  • 11. } }//end main void ConfiguraSistema (void) { TRISBbits.TRISB0 = 0; // TRIS PARA RB0 -> SAÍDA TRISBbits.TRISB1 = 1; //TRIS PARA RB1 -> ENTRADA RCONbits.IPEN = 0; INTCONbits.GIEH = 1; INTCONbits.GIEL = 1; INTCONbits.TMR0IE = 1; TMR0H = 0; TMR0L = 0; //Configura os pinos que são usados pelo LCD 16x2 alfa-numerico OpenXLCD(); }//end ConfiguraSistema #pragma interrupt inter #pragma code inter = 0x08 void inter (void) { _asm GOTO tempo _endasm
  • 12. } #pragma code void tempo (void) { PIR1bits.TMR1IF = 0; if (INTCONbits.TMR0IF) { WriteCmdXLCD(0b00000001); SetDDRamAddr (0x00); putrsXLCD("FORA DE"); SetDDRamAddr (0x41); putrsXLCD("ALCANCE"); INTCONbits.TMR0IF = 0; } }