Buscar

Relatorio PIC 3

Prévia do material em texto

Instituto Federal de Educação Ciência e Tecnologia Campus Palmeira dos Índios
Sistemas Elétricos
Microcontroladores
Relatório de Estudo Pratico 
Semáforos 
Alunos: Edgar Azevedo dos Santos
João Paulo Ferreira dos Santos
Professor: Dr. Leonaldo José Lyra do Nascimento
	
Palmeira dos índios 
12 de Setembro de 2017
Instituto Federal de Educação Ciência e Tecnologia Campus Palmeira dos Índios
Sistemas Elétricos
Microcontroladores
Relatório de Estudo Pratico 
Semáforos
Relatório de Estudo pratico utilizando Kit educacional XM118 e Software MPLAB. Reprodução de alguns projetos utilizando a plataforma do Kit. Estudo realizado sob orientação do Dr. Leonaldo para Auxiliar na aprendizagem direcionada a disciplina de Microcontroladores.
Palmeira dos índios 
12 de Setembro de 2017
SUMARIO
CONTRACAPA ----------------------------------------------------------------- 1
SUMARIO ------------------------------------------------------------------------ 2
OBJETIVOS ---------------------------------------------------------------------- 3
MATERIAS UTILIZADOS ---------------------------------------------------- 4
INTRODUÇÃO TEORICA ----------------------------------------------------- 5
PROCEDIMENTO EXPERIMENTAL--------------------------------------- 6
CONCLUSÕES ------------------------------------------------------------------ 32
REFERÊNCIAS BIBLIOGRÁFICAS ---------------------------------------- 33
OBJETIVO
O estudo Prático teve como objetivos técnicos, aproximar a teoria a pratica, utilizando o Kit Educacional XM118 que é dotado de um microcontrolador PIC18f4550 e o software MPLAB IDE para desenvolvimento Teórico.
No Kit o objetivo é identificar e conhecer as partes que o compõem, identificar os pinos do microcontrolador PIC 18f4550 assim como conhecer e utilizar alguns comandos do mesmo utilizando suas portas de comunicação. 
Utilizando exemplos de projetos repassados pelo Professor o objetivo foi desenvolver a programação utilizando linguagem C e de forma pratica utilizando o kit educacional e seus componentes reproduzir e solucionar problemas repassados no material didático.
MATERIAIS UTILIZADOS
No dia 6 de Setembro, em horário aula da disciplina de Microcontroladores no laboratório de automação industrial foi iniciado o procedimento pratico, que teve como principais equipamentos:
Kit Educacional XM118 com Chip PIC18f4550.
Software de desenvolvimento MPLAB IDE.
Cabo de alimentação três pinos (2P+T).
Cabo de comunicação USB.
Computador Pessoal
26 Resistores de 220Ω.
26 Led’s nas cores: verde, amarelo e vermelho.
Software PROTEUS v8.6.
INTRODUÇÃO TEORICA 
O conteúdo abordado na pratica realizada esta relacionado ao estudo das ferramentas e softwares utilizados para o desenvolvimento, criação e depuração de projetos destacando a importância dos mesmos para o ambiente dos microcontroladores. Ter boas ferramentas de desenvolvimento e tão importante quanto ter um bom microcontrolador para o sucesso de um projeto. 
De inicio alguns comandos são essências a configuração do Chip PIC 18f4550 dentre eles podemos destacar os seguintes:
//Incluindo Bibliotecas
#include<P18F4550.h>
#include<delays.h>
# include....
//Configurando Chip
#pragma config PLLDIV = 5 // PLL para 20MHz
#pragma config CPUDIV = OSC1_PLL2 // PLL desligado
#pragma config FOSC = HS // Fosc = 20MHz -> Tcy = 200ns
#pragma config WDT = OFF // Watchdog desativado
#pragma config LVP = OFF // Sem gravação em baixa tensão
#pragma config DEBUG = ON // Habilita debug
Vale ressaltar que a configuração e a inserção de bibliotecas varia de acordo o Projeto, mais essa configuração sempre será necessária. 
Dentre os comando básicos utilizados em um projeto que utiliza o PIC18f4550 podemos destacar os seguintes:
#include<P18F4550.h>
#include<delays.h>
Define BOTAO PORTDbits.RD0
TRISB = 0b00001111 ; TRISB = 0x0F
DDRB = 0b00001111 ; DDRB = 0x0F
TRISBbits.TRISB0 = 1
DDRBbits.RB0 = 1
PORTAA = 0x0A
LATA = 0x0A
PORTCbits.RC0 = 0
LATCbits.LATC0 = 0
Delay10KTCYx(50)
Estes são alguns comandos básicos de suma importância em um projeto. 
PROCEDIMENTO EXPERIMENTAL
Semáforos
1° Passo – Sinalizador de Garagem
Neste primeiro projeto foi desenvolvida a linguagem de programação que de acordo o problema deve atender a o funcionamento de um sinalizador de garagem. Estes sinalizadores são muito comuns em entradas de garagens ou para sinalização de entrada e saída de veículos. O seu funcionamento é bem básico onde duas lâmpadas desse sinalizador deveram acender de forma intermitente alternando entre si, com um tempo de intervalo correspondente a meio segundo.
Em mente dessas condições, e com conhecimento das ferramentas do MPLAB IDE assim como etapas para criar um novo projeto, foi criado o seguinte código em linguagem C para realizar o funcionamento do projeto.
#include<P18F4550.h>
#include<delays.h>
//Configurando PIC18F4550
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config PBADEN = OFF
#pragma config LVP = OFF
#pragma config DEBUG = ON
int tempo=100;
void main(void){
TRISA = 0x00;
TRISE = 0x00;
while(1){
 		PORTAbits.RA5 = 1; // liga led 1
		Delay10KTCYx (tempo);
    		PORTEbits.RE0 = 1; //liga led 2
    		PORTAbits.RA5 = 0; // desliga led 1
		Delay10KTCYx (tempo);
		PORTEbits.RE0 = 0; //desliga led 2
}
}	
Após digitado o código realizamos sua compilação e podemos confirmar a correta digitação e desenvolvimento do mesmo. Para representar o funcionamento desta prática foi utilizado o Kit educacional XM118. O ideal neste exemplo é utilizar lâmpadas de cores diferentes, utilizando da plataforma do Kit podemos representar esse funcionamento em sua própria parte de hardware. No bloco de ferramentas Bicolor LED’S, localizado no próprio Kit, é possível acender dois LED’S com cores diferentes entre si, dependendo da configuração realizada na programação estes LED’S podem acender nas cores verde e vermelho para LED 1 e as mesmas cores para LED 2. Utilizando do conhecimento adquirido em praticas anteriores o projeto foi transferido para o Kit e logo em seguida executado, o resultado podemos ver a seguir nas imagens 1.1, 1.2 e 1.3.
Imagem 1.1
Imagem 1.2
Imagem 1.3
A imagem 1.1 representa o inicio da sequencia, quando o LED 1 está acesso com tonalidade na cor verde, após passar um tempo de meio segundo o LED 2 acende com tonalidade vermelha como vemos na imagem 1.2 e ao mesmo tempo apaga o LED 1 que estava acesso. Essa repetição acontece intermitentemente até que o funcionamento seja interrompido. A imagem 1.3 mostra o exato momento da transição de acionamento de LED 1 para LED 2. 
2° Passo – Cruzamento de duas Ruas
Esta segunda prática foi desenvolvida a linguagem de programação que de acordo a necessidade do problema, deve comandar um semáforo que é responsável pelo controle de trafego num cruzamento de duas vias. O semáforo conta com lâmpadas verdes, amarelas e vermelhas, uma de cada cor em cada sentido da via. Para o funcionamento deve-se adotar o seguinte padrão de tempo de acionamento das lâmpadas: lâmpadas verdes e vermelhas 10 segundos e lâmpadas amarelas, 3 segundos Em mente dessas condições, e com conhecimento das ferramentas do MPLAB IDE assim como etapas para criar um novo projeto, foi criado o seguinte código em linguagem C para realizar o funcionamento do projeto.
#include<P18F4550.h>
#include<delays.h>
//Configurando PIC18F4550
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config FOSC = HS#pragma config WDT = OFF
#pragma config PBADEN = OFF
#pragma config LVP = OFF
#pragma config DEBUG = ON
void main(void){
TRISD = 0x00;
PORTD =0x00;
while(1){
 		PORTDbits.RD5 = 1; // liga vermelho 2
		Delay10KTCYx (0);
		Delay10KTCYx (0);
 		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
    	PORTDbits.RD4 = 1; //liga verde 1
    	PORTDbits.RD0 = 0; // desliga vermelho 1
		
		Delay10KTCYx (0);
		Delay10KTCYx (0);
 		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
 		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		
		PORTDbits.RD4 = 0; //desliga verde 1
		PORTDbits.RD2 = 1;  //liga amarelo 1
 		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
 		Delay10KTCYx (0);
	    
		PORTDbits.RD2 = 0; //desliga amarelo 1
		PORTDbits.RD0 = 1; //liga vermelho 1
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		PORTDbits.RD5 = 0; //desliga vermelho 2
		PORTDbits.RD1 = 1; //liga verde 2
		
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
 		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
 		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
 
 	PORTDbits.RD1 = 0;//desliga verde 2
 	PORTDbits.RD3 = 1; //liga amarelo 2
 		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
 		Delay10KTCYx (0);
	 
 	PORTDbits.RD3 = 0; //desliga amarelo 2
 	
}
}		
	
Após digitado o código realizamos sua compilação e podemos confirmar a correta digitação e desenvolvimento do mesmo. Para representar o funcionamento desta prática foi utilizado o Kit educacional XM118, em especial o seu protoboard, Applications. Neste espaço foi realizada a montagem de um circuito que utiliza 6 LED’S, dois na cor verde, dois na cor vermelha e dois na cor amarela, essa configuração representa o funcionamento de um semáforo no cruzamento de duas ruas. Utilizando do conhecimento adquirido em praticas anteriores o projeto foi transferido para o Kit e logo em seguida executado, o resultado podemos ver a seguir nas imagens a seguir:
Imagem 1.4
Imagem 1.5
Rua 2
Imagem 1.6
Imagem 1.7
Rua 2
Rua 2
Rua 1
Rua 1
Rua 1
Rua 1
Rua 1
Rua 2
Rua 2
Imagem 1.6
Rua 2
Rua 2
Rua 1
Imagem 1.9
Rua 1
Imagem 1.8
Imagem 1.8
Rua 2
Imagem 1.9
Imagem 1.8
Imagem 2.0
Rua 2
Rua 1
Rua 2
Rua 2
Imagem 1.9
Nas imagens é possível visualizar todos estágios de funcionamento desde o primeiro na imagem 1.4 até o ultimo na imagem 1.9, já que na imagem 2.0 o ciclo se repete. Em alguns momentos percebe-se que as lâmpadas vermelhas ficam acessas em ambas ruas, como podemos ver nas imagens 1.6 e 1.9, este pequeno espaço de tempo é necessário para garantir a segurança e evitar acidentes no cruzamento, ela certifica dando um tempo de segurança que os condutores de uma das vias realmente parou. 
3° Passo – Semáforo com contador de tempo para carros e pedestres
Foi desenvolvida a linguagem de programação para atender as necessidades do problema repassado onde deve ser construído um semáforo dotado de contadores de tempo para os carros e os pedestres, que ira fazer o controle do cruzamento de duas avenidas. Este semáforo além de possuir as lâmpadas comuns verde, amarela e vermelha para os carros, possui também contadores que mostram o tempo em ordem decrescente de cada estagio do semáforo, além de mostrar para os pedestres que desejam cruzar a via luzes de sinalização nas cores verde e vermelha assim como contadores que mostra quanto tempo lhe resta para atravessar a avenida.Imagem 2.0
Imagem 2.0
Em mente do funcionamento do programa, e com conhecimento das ferramentas do MPLAB IDE assim como etapas para criar um novo projeto, foi criado o seguinte código em linguagem C para realizar o funcionamento do projeto.
#include<P18F4550.h>
#include<delays.h>
//Configurando PIC18F4550
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config PBADEN = OFF
#pragma config LVP = OFF
#pragma config DEBUG = ON
int w=1,r=-1, d, tempo1 = 5,tempob=1,i=10,a,a1,z=0,p=1,r1=60,r2=-1,i1=3,i2=10,i3=3;
int const numero[] = {
			0x3F,
			0x06,
			0x5B,
			0x4F,
			0x66,
			0x6D,
			0x7D,
			0x07,
			0x7F,
			0x6F,};			
void main(void){
TRISD = 0x00;
TRISB = 0x00;
TRISA = 0x00;
TRISC = 0x00;
TRISE = 0x00;
PORTA = 0x00;
PORTB = 0x00;
PORTE = 0x00;
PORTC = 0x00;
while(1){
 		PORTBbits.RB5 = 1; // liga vermelho 2
    	PORTBbits.RB4 = 1; //liga verde 1
		PORTCbits.RC6 = 1; // liga verde para pedrestes rua 2
		PORTCbits.RC0 = 1; // liga vermelho para pedrestes rua 1
	
	   	PORTBbits.RB0 = 0; // desliga vermelho 1
w=1;		
while(w==1){
						a = (i/10);
						a1 = (i%10);
i--;
while(p==1){
				PORTD = numero [a];
				PORTAbits.RA5 = 1 ;
				Delay10KTCYx(tempo1);
				PORTAbits.RA5 = 0 ;
				PORTD = numero [a1];
				PORTAbits.RA2 = 1 ;
				Delay10KTCYx(tempo1);
				PORTAbits.RA2 = 0 ;
z++;
if(z==r1){
p=0;
z=0;
}
}
p=1;
if(i==r){
i=10;
w=0;
}
}
a1=0;
a=0;
p=1;
z=0;	
		PORTBbits.RB4 = 0; //desliga verde 1
		PORTBbits.RB2 = 1;  //liga amarelo 1
			
w=1;
while(w==1){
						a = (i1/10);
						a1 = (i1%10);
i1--;
while(p==1){ //Repetição para funcionamento da buzina durante sinal amarelo
				PORTD = numero [a];
				PORTEbits.RE0 = 1 ;
				PORTCbits.RC2 = 1; // liga buzina
				Delay10KTCYx(tempob);
				PORTCbits.RC2 = 0; // desliga buzina
			
				Delay10KTCYx(tempob);
		
				PORTCbits.RC2 = 1; // liga buzina
				Delay10KTCYx(tempob);
				PORTCbits.RC2 = 0; // desliga buzina
				Delay10KTCYx(tempob);
				PORTCbits.RC2 = 1; // liga buzina
				Delay10KTCYx(tempob);
				PORTCbits.RC2 = 0; // desliga buzina
				PORTEbits.RE0 = 0 ;
				PORTD = numero [a1];
				PORTEbits.RE2 = 1 ;
				PORTCbits.RC2 = 1; // liga buzina
				Delay10KTCYx(tempob);
				PORTCbits.RC2 = 0; // desliga buzina
			
				Delay10KTCYx(tempob);
		
				PORTCbits.RC2 = 1; // liga buzina
				Delay10KTCYx(tempob);
				PORTCbits.RC2 = 0; // desliga buzina
				Delay10KTCYx(tempob);
				PORTCbits.RC2 = 1; // liga buzina
				Delay10KTCYx(tempob);
				PORTCbits.RC2 = 0; // desliga buzina
				PORTEbits.RE2 = 0 ;
z++;
if(z==r1){
p=0;
z=0;
}
}
p=1;
if(i1==r2){
i1=3;
w=0;
}
}
	    
a1=0;
a=0;
p=1;
z=0;
		PORTBbits.RB2 = 0; //desliga amarelo 1
		PORTBbits.RB0 = 1; //liga vermelho 1
		PORTBbits.RB5 = 0; //desliga vermelho 2
		PORTCbits.RC6 = 0; // desliga verde para pedrestes rua 2
		PORTCbits.RC0 = 0; // desliga vermelho para pedrestes rua 1
		PORTCbits.RC1 = 1; // liga vermelho para pedrestes rua 2
		PORTCbits.RC7 = 1; // liga verde para pedrestes rua 1	
		PORTBbits.RB1 = 1; //liga verde 2
w=1;		
while(w==1){
						a = (i2/10);
						a1 = (i2%10);
i2--;
while(p==1){
				PORTD = numero [a];
				PORTAbits.RA5 = 1 ;
				Delay10KTCYx(tempo1);
				PORTAbits.RA5 = 0 ;
				PORTD = numero [a1];
				PORTAbits.RA2 = 1 ;
				Delay10KTCYx(tempo1);
				PORTAbits.RA2 = 0 ;
z++;
if(z==r1){
p=0;
z=0;
}
}
p=1;
if(i2==r){
i2=10;
w=0;
}}
a1=0;
a=0;
p=1;
z=0;
	
 
 	PORTBbits.RB1 = 0;//desliga verde 2
 	PORTBbits.RB3 = 1; //liga amarelo 2
		
w=1;
while(w==1){
						a = (i3/10);
						a1 = (i3%10);
i3--;
while(p==1){
				PORTD = numero [a];
				PORTEbits.RE0 = 1 ;
				PORTCbits.RC2 = 1; // liga buzina
				Delay10KTCYx(tempob);
				PORTCbits.RC2 = 0; // desliga buzina
			
				Delay10KTCYx(tempob);
		
				PORTCbits.RC2 = 1; // liga buzina
				Delay10KTCYx(tempob);
				PORTCbits.RC2 = 0; // desliga buzina
				Delay10KTCYx(tempob);
				PORTCbits.RC2 = 1; // liga buzina
				Delay10KTCYx(tempob);
				PORTCbits.RC2 = 0; // desliga buzina
				PORTEbits.RE0 = 0 ;
				PORTD = numero [a1];
				PORTEbits.RE2 = 1 ;
				PORTCbits.RC2 = 1; // liga buzina
				Delay10KTCYx(tempob);
				PORTCbits.RC2 = 0; // desliga buzina
			
				Delay10KTCYx(tempob);
		
				PORTCbits.RC2 = 1; // liga buzina
				Delay10KTCYx(tempob);
				PORTCbits.RC2 = 0; // desliga buzina
				Delay10KTCYx(tempob);
				PORTCbits.RC2 = 1; // liga buzina
				Delay10KTCYx(tempob);
				PORTCbits.RC2 = 0; // desliga buzina
			
				PORTEbits.RE2 = 0 ;
z++;
if(z==r1){
p=0;
z=0;
}
}
p=1;
if(i3==r2){
i3=3;
w=0;
}
}
a1=0;
a=0;
p=1;
z=0;
	 
 		PORTBbits.RB3 = 0; //desliga amarelo 2
		PORTCbits.RC1 = 0; // desliga vermelho para pedrestes rua 2
		PORTCbits.RC7 = 0; // desliga verde para pedrestes rua 1
		PORTCbits.RC2 = 0; // desliga buzina
	
 	
}
}
Após digitado o código realizamos sua compilação e podemos confirmar a correta digitação e desenvolvimento do mesmo. Para representar o funcionamento desta prática foi utilizado o Kit educacional XM118, em especial o seu protoboard, Applications. Neste espaço foi realizada a montagem de um circuito que utiliza, 10 LED’S, 4 de cor vermelha, 2 de cor amarela e 4 de cor verde, onde para os carros serão utilizados verde, amarelo e vermelho, e para os pedestres verde e vermelho, essa configuração pode ser vista na imagem 2.1. Utilizando o conhecimento a respeito de display de sete segmentos que foi abordada em praticas anteriores, neste exemplo será empregada uma contagem que será representada nestes displays disponíveis no próprio Kit, os tempos a serem contados são tempos de estagio de funcionamento do semáforo para os carros e o tempo para os pedestres. Mais uma ferramenta disponível no Kit será utilizada neste exemplo, uma buzina avisara aos pedestres quando o semáforo estiver perto de fechar ou seja quando este estiver no estagio de cor amarela para os veículos. Utilizando do conhecimento adquirido em praticas anteriores o projeto foi transferido para o Kit e logo em seguida executado, o resultado podemos ver a seguir nas imagens.
Imagem 2.1
P 2
Rua 2
P 1
Rua 1
Na imagem 2.1 podemos compreender que P1 é a sinalização para os pedestres relacionados à Rua 1, por outro lado P2 também é a sinalização para pedestres mais dessa vez para Rua 2. 
Os displays de sete segmentos funcionaram da seguinte forma os dois primeiros U5 e U6 mostraram o tempo de funcionamento para os estágios de sinal fechado e aberto, ou seja, quando o transito estiver livre para carros e bloqueado para pedestres ou o inverso, este tempo foi definido em 10 segundos a imagem 2.2 representa. Os displays U7 e U8 mostraram o tempo em que o semáforo ficara com a luz amarela acessa, ou seja, quando o sinal esta próximo de fechar, e justamente neste tempo soara uma buzina informando aos pedestres, este período terá duração de 3 segundos, a imagem 2.3 demostra. 
U5
Imagem 2.2
U6
U5
Imagem 2.3
U8
U7
Neste momento da imagem 2.3 a buzina emite um som que pode ser controlado através da frequência de acionamentos, ou seja quanto mais acionamentos num dado espaço de tempo o som fica mais agudo ou quanto menos acionamentos mais o som fica grave, esses acionamentos são a quantidade de vezes que a buzina varia do estado ligado ao desligado. 
4° Passo – Semáforo moderno
Foi desenvolvida a linguagem de programação para atender as necessidades do problema repassado onde deve ser construído um semáforo para o cruzamento de duas avenidas. Este semáforo possui 26 lâmpadas nas cores vermelho, amarelo e verde. 
Seu funcionamento é básico, comum de todos semáforos o diferencial esta na sua composição física e sequencia de funcionamento. É um semáforo animado, sua sequencia de funcionamento consiste no acionamento de duas lâmpadas por vez isso ajuda a reduzir o estresse dos motoristas, pois diverte a espera pela mudança de estado do semáforo.
Em mente do funcionamento do programa, e com conhecimento das ferramentas do MPLAB IDE assim como etapas para criar um novo projeto, foi criado o seguinte código em linguagem C para realizar o funcionamento do projeto.
#include<P18F4550.h>
#include<delays.h>
//Configurando PIC18F4550
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config PBADEN = OFF
#pragma config LVP = OFF
#pragma config DEBUG = ON
void main(void){
TRISD = 0x00;
TRISB = 0x00;
TRISA = 0x00;
TRISC = 0x00;
TRISE = 0x00;
PORTA = 0x00;
PORTB = 0x00;
PORTE = 0x00;
PORTC = 0x00;
while(1){
	PORTDbits.RD6 = 1; // liga 1
    	PORTAbits.RA5 = 1; //liga 6
    	PORTDbits.RD5 = 1; // liga 21
    	PORTDbits.RD0 = 1; // liga 26		
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		PORTDbits.RD6 = 0; // desliga 1
     		PORTDbits.RD0 = 0; // desliga 26
		PORTCbits.RC6 = 1; // liga 2
    		PORTDbits.RD1 = 1; // liga 25
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		PORTCbits.RC6 = 0; // desliga 2
    		PORTDbits.RD1 = 0; // desliga 25
		PORTCbits.RC2 = 1; // liga 3
    		PORTDbits.RD4 = 1; // liga 24
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		
		PORTCbits.RC2 = 0; // desliga 3
    		PORTDbits.RD4 = 0; // desliga 24
		PORTCbits.RC7 = 1; // liga 4
    		PORTDbits.RD3 = 1; // liga 23
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		PORTCbits.RC7 = 0; // desliga 4
    		PORTDbits.RD3 = 0; // desliga 23
		PORTCbits.RC1 = 1; // liga 5
    		PORTCbits.RC0 = 1; // liga 22
		
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		PORTCbits.RC1 = 0; // desliga 5
    		PORTCbits.RC0 = 0; // desliga 22
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		
		PORTAbits.RA5 = 0; //desliga 6
    
    		PORTBbits.RB0 = 1; // liga 7
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		
		PORTDbits.RD5 = 0; // deslia 21
    		PORTBbits.RB0 = 0; // desliga 7
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		
		PORTBbits.RB2 = 1; // liga 8
    		PORTBbits.RB5 = 1; //liga 13
    		PORTBbits.RB6 = 1; // liga 14
    		PORTBbits.RB1 = 1; // liga 19
		
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		
    		PORTBbits.RB5 = 0; //deslia 13
    		PORTBbits.RB6 = 0; // desliga 14
    
    		PORTBbits.RB3 = 1; //liga 12
    		PORTBbits.RB4 = 1; // liga 15
   
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		
    		PORTBbits.RB3 = 0; //desliga 12
    		PORTBbits.RB4 = 0; // desliga 15
    
    		PORTBbits.RB7 = 1; //liga 11
    		PORTAbits.RA0 = 1; // liga 16
    
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		
    		PORTBbits.RB7 = 0; //desliga 11
    		PORTAbits.RA0 = 0; // desliga 16
	
    		PORTAbits.RA4 = 1; //liga 10
    		PORTAbits.RA2 = 1; // liga 17
   
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		
    		PORTAbits.RA4 = 0; // desliga 10
    		PORTAbits.RA2 = 0; // desliga 17
    
    		PORTAbits.RA1 = 1; // liga 9
    		PORTAbits.RA3 = 1; // liga 18
    
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		
    		PORTAbits.RA1 = 0; // desliga 9
    		PORTAbits.RA3 = 0; // desliga 18
		
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		
		PORTBbits.RB1 = 0; // desliga 19
		PORTDbits.RD2 = 1; // liga 20
	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);	
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		
		PORTDbits.RD2 = 0; // desliga 20	
		PORTBbits.RB2 = 0; // desliga 8
		Delay10KTCYx (0);
		Delay10KTCYx (0);
		Delay10KTCYx (0);
			
}
}
Após digitado o código realizamos sua compilação e podemos confirmar a correta digitação e desenvolvimento do mesmo. Para representar o funcionamento desta prática foi utilizado o software PROTEUS, devido às limitações físicas do Kit XM118. Para realizar o funcionamento no PROTEUS foram utilizados como componentes os seguintes: dois capacitores de 15pF, um Crystal de 20Mhz, Chip PIC18F4550, doze LED’s verdes, doze LED’s vermelhos, 2 LED’s amarelos e 26 resistores de 220Ω. 
A montagem pode ser vista na imagem 2.4.
Imagem 2.4
Já nas imagens 2.5, 2.6, 2.7 e 2.8 podemos ver a simulação de funcionamento do circuito nas suas principais etapas. O semáforo conta com quatorze etapas de funcionamento. Com tempos de 10 segundos para sinal vermelho em uma rua e verde em outra, imagens 2.5 e 2.7, 2 segundos para sequencia de contagem, imagem 2.8 e 3 segundos para lâmpadas amarelas acessas, imagem 2.6.
Imagem 2.5
Imagem 2.6
Imagem 2.8
Imagem 2.7
5° Passo – Semáforo Formula 1
Foi desenvolvida a linguagem de programação para atender as necessidades da situação seguinte onde onde deve ser construído um semáforo tradicional utilizado na largada das corridas de formula 1. Este semáforo possui 12 lâmpadas na cor vermelha, seu funcionamento é básico, comum de todos semáforos desta característica, as lampadas devem serem acionadas em sequencia de maneira ate todas ficarem acessas, essa sequencia acontece com um intervalo de tempo de 3 segundos entre si, o que torna a largada dos carros emocionante. Em mente do funcionamento do programa, e com conhecimento das ferramentas do MPLAB IDE assim como etapas para criar um novo projeto, foi criado o seguinte código em linguagem C para realizar o funcionamento do projeto.
#include<P18F4550.h>
#include<delays.h>
//Configurando PIC18F4550
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config PBADEN = OFF
#pragma config LVP = OFF
#pragma config DEBUG = ON
		
void main(void){
TRISD = 0x00;
TRISB = 0x00;
TRISC = 0x00;
PORTB = 0x00;
PORTC = 0x00;
PORTD = 0x00;
		PORTCbits.RC6 = 1; // liga 1
    		PORTDbits.RD0 = 1; // liga 12
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
    		PORTDbits.RD1 = 1; // liga 2
    		PORTDbits.RD5 = 1; // liga 11
  		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		PORTDbits.RD2 = 1; // liga 3
		PORTBbits.RB0 = 1; // liga 10
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		PORTDbits.RD3 = 1; // liga 4
		PORTCbits.RC7 = 1; // liga 9
    		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		PORTDbits.RD4 = 1; // liga 5
		PORTCbits.RC1 = 1; // liga 8
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		PORTDbits.RD6 = 1; // liga 6
		PORTDbits.RD7 = 1; // liga 7
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
 
		PORTCbits.RC6 = 0; // desliga 1
    		PORTDbits.RD1 = 0; // desliga 2
		PORTDbits.RD2 = 0; // desliga 3
		PORTDbits.RD3 = 0; // desliga 4
		PORTDbits.RD4 = 0; // desliga 5
		PORTDbits.RD6 = 0; // desliga 6
    		PORTDbits.RD5 = 0; // desliga 11
    		PORTDbits.RD0 = 0; // desliga 12
		PORTBbits.RB0 = 0; // desliga 10
		PORTCbits.RC7 = 0; // desliga 9
		PORTCbits.RC1 = 0; // desliga 8
		PORTDbits.RD7 = 0; // desliga 7	
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		Delay10KTCYx(0);
		
}
Após digitado o código realizamos sua compilação e podemos confirmar a correta digitação e desenvolvimento do mesmo. Para representar o funcionamento desta prática foi utilizado o software PROTEUS, devido às limitações físicas do Kit XM118. Para realizar o funcionamento no PROTEUS foram utilizados como componentes os seguintes: dois capacitores de 15pF, um Crystal de 20Mhz, Chip PIC18F4550, doze LED’s vermelhos, 12 resistores de 220Ω. 
A montagem pode ser vista na imagem 2.9. 
Imagem 2.9
Já as imagens 3.0 e 3.1 mostram a simulação de funcionamento do circuito, na imagem 3.0 o estado inicial do circuito com dois LED’s ligado, ou seja, quando se inicia a contagem de tempo, na imagem 3.1 o funcionamento está em seu penúltimo estado quando todos LED’s estão acessos, ou seja, na largada. O ultimo estagio são todos LED’s desligados. 
Imagem 3.0
Imagem 3.1
Com está pratica finalizamos o Processo experimental, de desenvolvimento e aperfeiçoamento de semáforos. Todo o equipamento utilizado foi recolhido e direcionado para seus respectivos lugares.
Conclusões
Esta ultima etapa de praticas teve seus objetivos parcialmente alcançados e um saldo positivo onde possibilitou aprimorar ferramentas já utilizadas assim como adstringir novos conhecimentos, entretanto tivemos dificuldades em alguns passos devido as limitações do KIT XM118 e de funcionamento de seus componentes. 
Nessa terceira a ênfase foi em programas que envolveram o desenvolvimento e aprimoramento de semáforos de transito, o que tornou o estudo bastante pratico trazendo como exemplos situações a quais estamos habituados enfrentar no transito, desta forma além de reforçar o desenvolvimento da logica na área de programação nos aproxima daquilo que estamos habituados a encontrar no dia a dia.
O material repassado pelo Professor facilitou e ajudou na elaboração dos programas nos repassando dados importantes como sequencias de funcionamento.
A execução desse estudo nos possibilitou entender os problemas através da teoria, executa-los através da pratica observando seu funcionamento assim como aperfeiçoa-lo de acordo a necessidade.Aluno Responsável: EDGAR AZEVEDO DOS SANTOS FILHO
Referências 
Datasheet Kit XM118
Datashet PIC18f4550
Material Repassado em sala de Aula

Outros materiais

Perguntas Recentes