Baixe o app para aproveitar ainda mais
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 Display de Sete Segmentos e Push Buttons Alunos: Edgar Azevedo dos Santos João Paulo Ferreira dos Santos Professor: Dr. Leonaldo José Lyra do Nascimento Palmeira dos índios 02 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 Display de Sete Segmentos e Push Buttons 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 02 de Setembro de 2017 SUMARIO CONTRACAPA ----------------------------------------------------------------- 1 SUMARIO ------------------------------------------------------------------------ 2 OBJETIVOS ---------------------------------------------------------------------- 3 MATERIAS UTILIZADOS ---------------------------------------------------- 4 INTRODUÇÃO TEORICA ----------------------------------------------------- 5 PROCEDIMENTO EXPERIMENTAL--------------------------------------- 7 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 o que o problema pede. MATERIAIS UTILIZADOS No dia 30 de Agosto, 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 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. Nesta Pratica à necessidade de sabemos o esquema de ligação das chaves Push-Buttons que se encontram no Kit XM118, para então sabermos associa-las as respectivas entradas do PIC18F4550. A tabela Abaixo mostra as chaves, seus nomes e o pino a qual estão ligadas ao microcontrolador. Chave Nome Pinos SW1 RESET MCLR/VPP/RE3 SW4 INT0 RB0/INT SW5 INT1 RB1 SW6 INT2 RB2 SW2 TMR1 RC0 SW3 CH0 RC1 PROCEDIMENTO EXPERIMENTAL Display de sete segmentos e Push Buttons 1° Passo – Acionamento de 7 LED´s em sequência Neste primeiro passo foi dado inicio desenvolvendo a linguagem de programação que de acordo o problema deve, acionar 7 LED´s em sequencia, um por um. De inicio este acionamento deve ser realizado da esquerda para a direita. Quando todos tiverem acessos eles devem fazer o reverso, ou seja, apagarem da direita para a esquerda uma a um. Este funcionamento ira se repetir ate que um botão seja pressionado o que, isto pausará a operação e caso outro botão seja pressionado a operação continua. 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. //Acionar 7 LED´s #include<P18F4550.h> #include<delays.h> #include<stdlib.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 i,b = 0; int const numero[] = { 0b00000000, //0 led acessos 0b01000000,//1 led acesso 0b01100000,//2 led’s acessos 0b01110000,//3 led’s acessos 0b01111000,//4 led’s acessos 0b01111100, //5 led’s acessos 0b01111110, //6 led’s acessos 0b01111111, //7 led’s acessos 0b01111110, //6 led’s acessos 0b01111100, //5 led’s acessos 0b01111000, //4 led’s acessos 0b01110000, //3 led’s acessos 0b01100000, //2 led’s acessos 0b01000000, //1 led’s acessos }; void main (void){ TRISD = 0b00000000; TRISBbits.TRISB0 = 1; // define botão 1 entrada TRISBbits.TRISB1 = 1; // define botão 2 entrada PORTBbits.RB0 = 1; // define nível 1 no botão PORTBbits.RB1 = 1; // define nível 1 no botão while(1){ for (i=0;i<14;i++ ){ //Repetição teremos 14 condições PORTD = numero[i]; if (PORTBbits.RB0 == 0){ b=1; } Delay10KTCYx(0); if (PORTBbits.RB0 == 0){ b=1; } while (b == 1){ if(PORTBbits.RB1==0){ b=2; } 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 Kit educacional XM118,em especial a parte dos LED’s. 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, 1.3 e 1.4. Imagem 1.1 Imagem 1.2 Imagem 1.3 Imagem 1.4 A imagem 1.1 representa o inicio da sequencia da esquerda a direita neste momento dois LED’s estão acessos, vale ressaltar que serão utilizados os LED’s enumerados de 0 a 6. A imagem 1.2 mostra a sequencia em nível avançado com cinco LED’s acessos. A imagem 1.3 mostra o momento em que todos LED’s estão acessos. Já a imagem 1.4 mostra os LED’s apagando da direita para esquerda. Esta sequenciaé repetida ate que o botão de pausa seja pressionado e reiniciada de onde parou após apertar o botão play. Para fazer o controle foram utilizados push-buttons localizados no próprio Kit a imagem 1.5 os mostram. Botão RB1, INT 1 - Play Botão RB0, INT 0 - Pausa Imagem 1.5 2° Passo – Acionamento de 8 LED’s Esta segunda prática foi desenvolvida a linguagem de programação que de acordo a necessidade do problema, deve acionar 8 LED´s sendo da seguinte maneira: Um botão deve acionar quatro LED’s quando estiverem acessos se pressionado um segundo botão deve acender mais quatro LED’s ficando desta forma 8 LED’s acessos, caso um terceiro botão seja acionado deve acender quatro LED’s por vez de forma alternada. 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. //acionando 8 LED’s #include<P18F4550.h> #include<delays.h> #include<stdlib.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 const numero[] = { 0b11110000, // 4 Led’s acessos 0b00000000,// 8 Led’s acessos 0b10101010,// 4 Led’s acessos de forma alternada }; void main (void){ TRISD = 0b00000000; TRISBbits.TRISB0 = 1; TRISBbits.TRISB1 = 1; PORTBbits.RB0 = 1; //define nível 1 no botão PORTBbits.RB1 = 1; //define nível 1 no botão PORTBbits.RB2 = 1; //define nível 1 no botão while(1){ if (PORTBbits.RB0 == 0){ PORTD = numero[0]; // caso botão 1 pressionado liga 4 Led’s } if (PORTBbits.RB1 == 0){ PORTD = numero[1]; // caso botão 2 pressionado liga 8 Led’s } if (PORTBbits.RB2 == 0){ PORTD = numero[2]; // caso botão 3 pressionado liga 4 Led’s alternadamente } } } 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 a parte dos LED’s. 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.6, 1.7 e 1.8. Imagem 1.6 Imagem 1.7 Imagem 1.7 Imagem 1.8 A imagem 1.6 representa o inicio da sequencia neste momento quatro LED’s estão acessos, vale ressaltar que serão utilizados os LED’s enumerados de 0 a 7. A imagem 1.7 mostra a sequencia em nível avançado com todos LED’s acessos. A imagem 1.8 mostra o momento em que quatro LED’s estão acessos de forma alternada. Esta sequencia é repetida e controlada por três botões o primeiro botão aciona quatro LED’s, o segundo botão aciona mais quatro LED’s e por fim um terceiro botão aciona quatro LED’s de forma alternada. Para fazer o controle foram utilizados push-buttons localizados no próprio Kit a imagem 1.9 os mostram. Botão RB0, INT 0 – 4 LED’s Botão RB1, INT 1 – 8 LED’s Botão RB2, INT 2 – 4 LED’s Alternados Imagem 1.9 3° Passo – Contador de 0 a F Foi desenvolvida a linguagem de programação para atender as necessidades do problema repassado onde deve ser construído um contador de 0 a F (hexadecimal). Para realizar essa etapa é de suma importância ter conhecimento dos princípios de números hexadecimais e conhecer o funcionamento do display de 7 segmentos assim como a identificação de seus segmentos. A imagem 2.0 abaixo mostra a tabela verdade correspondente aos dígitos do display de 0 a 9 e a imagem 2.1 representa o esquema de segmentos de um display de 7 segmentos, já a imagem 2.2 mostra a relação entre Decimal, Hexadecimal e Binário. Estes dados são importantes para a compreensão dos próximos passos das praticas Imagem 2.1 Imagem 2.0 Imagem 2.0 Imagem 2.2 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 #define I00 PORTDbits.RD0 int tempo = 0; void main (){ TRISD=0b00000000; //Configura os pinos DO PORTD como saída PORTD=0b00000000; //Coloca o PORTD inicialmente em zero while(1) { PORTD=(0b00111111); // Display mostra numero 0 Delay10KTCYx(tempo); PORTD=(0b00000110); // Display mostra numero 1 Delay10KTCYx(tempo); PORTD=(0b01011011); // Display mostra numero 2 Delay10KTCYx(tempo); PORTD=(0b01001111); // Display mostra numero 3 Delay10KTCYx(tempo); PORTD=(0b01100110); // Display mostra numero 4 Delay10KTCYx(tempo); PORTD=(0b01101101); // Display mostra numero 5 Delay10KTCYx(tempo); PORTD=(0b01111101); // Display mostra numero 6 Delay10KTCYx(tempo); PORTD=(0b00000111); // Display mostra numero 7 Delay10KTCYx(tempo); PORTD=(0b01111111); // Display mostra numero 8 Delay10KTCYx(tempo); PORTD=(0b01100111); // Display mostra numero 9 Delay10KTCYx(tempo); PORTD=(0b01110111); // Display mostra numero A Delay10KTCYx(tempo); PORTD=(0b01111100); // Display mostra numero B Delay10KTCYx(tempo); PORTD=(0b00111001); // Display mostra numero C Delay10KTCYx(tempo); PORTD=(0b01011110); // Display mostra numero D Delay10KTCYx(tempo); PORTD=(0b01111001); // Display mostra numero E Delay10KTCYx(tempo); PORTD=(0b01110001); // Display mostra numero F Delay10KTCYx(tempo); } } 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 a parte dos LED’s que estão ligados em paralelo com display de 7 Segmentos, ativamos então a chave de um display para visualizar a contagem. 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 2.3, 2.4, 2.5 e 2.6. Imagem 2.4 Imagem 2.3 Imagem 2.6 Imagem 2.5 A imagem 2.3 representa o inicio da sequencia neste momento o display aciona os segmentos que correspondem ao numero 0. A imagem 2.4 mostra a sequencia no momento em que o numero 9 e representado pelos segmentos do display. A imagem 2.5 mostra o momento em que o display ativa seus segmentos correspondentes a letra A, ou seja o numero 10. A imagem 2.6 mostra o momento em que o display ativa seus segmentos correspondentes a letra F, ou seja, o numero 15. Esta sequencia é repetida ate que o funcionamento do Kit seja interrompido. 4° Passo – Contador de 0 a 99 controlado Utilizando do conhecimento absorvido na pratica anterior sobre display de 7 segmentos e sua multiplexação foi desenvolvida a linguagem de programação para atender as necessidades do problema seguinte, onde deve ser construído um contador de 0 a 99. Os dígitos devem serem apresentados em dois displays de 7 segmentos e a contagem deve ser controlada por dois botões onde um incrementa um valor e outro botão decrementa. Para realizar essa etapa é de suma importância ter conhecimentode quais portas do Chip PIC18f4550 são responsáveis por fazer o acionamento dos displays de 7 segmentos, abaixo uma breve relação de quais pinos são responsáveis pela multiplexação. Display de 7 segmentos – PIC18F4550 1° Display (U8) = Pino – RE2 2° Display (U7) = Pino – RE0 3° Display (U6) = Pino – RA2 4° Display (U5) = Pino – RA5 Estes dados são importantes para o correto funcionamento dos próximos passos das praticas. Em mente da necessidade 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. // contador de 0 a 99 controlado #include<P18F4550.h> #include<delays.h> #include<stdlib.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 i = 0,a,b,tempo=75, tempo1=6.5; int const numero[] = { //números a serem mostrados 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,}; void main (void){ TRISE = 0x00; //ativando porta E como saída(displays 1 e 2) TRISD = 0x00; // ativando porta D como saída(Led’s para multiplexação) TRISA = 0x00; // ativando porta A como saída(displays 3 e 4) TRISBbits.RB0 = 1; // define botão como entrada TRISBbits.RB1 = 1; // define botão como entrada PORTBbits.RB0 = 1; // define nível 1 no botão PORTBbits.RB1 = 1; // define nível 1 no botão while(1){ if( PORTBbits.RB0 == 0){ // botão pressionado incrementa i++; Delay10KTCYx(tempo); } if( PORTBbits.RB1 == 0){ //botão pressionado decrementa i--; Delay10KTCYx(tempo); } if(i==100){ // próximo digito depois de 99 ser 0 Delay10KTCYx(tempo); i=0; } if(i==-1){ //próximo digito antes de 0 ser 99 i=99; Delay10KTCYx(tempo); } PORTAbits.RA2 = 1 ; PORTEbits.RE0 = 0 ; a = (i/10); PORTD = numero[a]; Delay10KTCYx(tempo1); PORTAbits.RA2 = 0 ; PORTEbits.RE0 = 1 ; b =(i%10); PORTD = numero[b] ; Delay10KTCYx(tempo1); } } Neste exemplo é importante prestar atenção, pois deve haver uma completa sincronia entre o acionamento do display e os botões. Outro dado importante é ajustar o delay de forma a encaixa-lo entre multiplexação e o acionamento do display, de uma forma que ao apresentar um digito em um display o outro display se apague por um instante imperceptível ao olho humano, caso isso não seja obedecido será impossível acionar mais de dois displays de uma só vez devido a insuficiência de corrente nos terminais do PIC18F4550. Quanto ao botão seu delay de acionamento deve ser configurado de modo que ajusta sua sensibilidade. 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 a parte dos LED’s que estão ligados em paralelo com display de 7 Segmentos, ativamos então as chaves dos display para visualizar a contagem. 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 2.7, 2.8 e 2.9. Imagem 2.7 Imagem 2.9 Imagem 2.8 A imagem 2.7 representa o inicio da sequencia neste momento nenhum botão foi pressionado o display aciona os segmentos que correspondem ao numero 00. A imagem 2.8 mostra apos o acionamento do botão que incrementa a contagem no momento em que o numero 01 e representado pelos segmentos do display. A imagem 2.9 mostra após o botão que decrementa ter sido pressionado duas vezes o momento em que o display ativa seus segmentos correspondentes ao numero 99. Para fazer o controle foram utilizados push-buttons localizados no próprio Kit a imagem 3.0 os mostram. Botão RB1, INT1 – Decrementa Botão RB0, INT0 – Incrementa Imagem 3.0 5° Passo – Projeto do contador de 0000 a 9999 Utilizando do conhecimento absorvido nas praticas anteriores sobre display de 7 segmentos, sua multiplexação e o acionamento de mais de dois displays foi desenvolvida a linguagem de programação para atender as necessidades do problema seguinte, onde deve ser construído um contador de 0 a 9999. Os dígitos devem serem apresentados em quatro displays de 7 segmentos e a contagem deve ser aleatória partindo de 0000 e parando por fim em 9999. Em mente da necessidade 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. // contador de 0000 a 9999 #include<P18F4550.h> #include<delays.h> #include<stdlib.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 i,a,b,c,a1,a2,a3,g=1, tempo=5; int const numero[] = { // conjunto de dígitos a apresentar 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,}; void main (void){ TRISE = 0x00; TRISD = 0x00; TRISA = 0x00; while(g==1){ // repetição ate 9999 for (i=0;i<10000;i++ ){ a = (i/1000); a1 = (i%1000); b = (a1/100); a2 = (a1%100); c = (a2/10); a3 = (a2%10); PORTD = numero[a]; // mostrar 1° digito PORTAbits.RA5 = 1 ; // ativando display U5 Delay10KTCYx(tempo); // tempo da contagem e multiplexação PORTAbits.RA5 = 0 ; // desativando display U5 PORTD = numero [b]; //mostrar 2° digito PORTAbits.RA2 = 1 ; // ativando display U6 Delay10KTCYx(tempo);// tempo da contagem e multiplexação PORTAbits.RA2 = 0 ;//desativando display U6 PORTD = numero [c]; //mostrar 3° digito PORTEbits.RE0 = 1 ; // ativando display U7 Delay10KTCYx(tempo); // tempo da contagem e multiplexação PORTEbits.RE0 = 0 ; //desativando display U7 PORTD = numero [a3]; //mostrar 4° digito PORTEbits.RE2 = 1 ; // ativando display U8 Delay10KTCYx(tempo); // tempo da contagem e multiplexação PORTEbits.RE2 = 0 ; //desativando display U8 if(a==9 && b==9 && c ==9 && a3==9){ // condição para congelar no momento 9999 g=0; } } while(1){ PORTD = numero[9]; PORTAbits.RA5 = 1 ; Delay10KTCYx(tempo); PORTAbits.RA5 = 0 ; PORTD = numero [9]; PORTAbits.RA2 = 1 ; Delay10KTCYx(tempo); PORTAbits.RA2 = 0 ; PORTD = numero [9]; PORTEbits.RE0 = 1 ; Delay10KTCYx(tempo); PORTEbits.RE0 = 0 ; PORTD = numero [9]; PORTEbits.RE2 = 1 ; Delay10KTCYx(tempo); PORTEbits.RE2 = 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 Kit educacional XM118, em especial a parte dos LED’s que estão ligados em paralelo com display de 7 Segmentos. 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. As imagens 3.1, 3.2, 3.3 e 3.4 mostram com um tempo maior entre a contagem como ocorre o acionamento entre os displays, ou seja, o funcionamento de modo a acionar um por vez, apenas desta forma é possível acionar mais de dois displays. Para isso a variável tempo na programação foi alterada para, tempo = 0, tempo máximo no delay. Imagem 3.2 Imagem 3.3 Imagem 3.1 Imagem 3.4 Após essa representação ajustamos o tempo de contagem para tempo=5, para cada segmento permanecer ativo por 5 ms, e então foi dado inicio a operação normal no programa, com esse tempo curto fica imperceptívela olho humano o efeito representado nas imagens acima. Abaixo podemos observar a contagem de 0000 a 9999, nas imagens 3.5 e 3.6. Imagem 3.5 Imagem 3.6 A imagem 3.5 mostra momentos após o contador ter iniciado a contagem e a imagem 3.6 mostra após atingir o valor máximo 9999, quando a contagem é parada. 6° Passo – Projeto do contador de 0000 a 9999 controlado Utilizando do conhecimento e parâmetros de configuração absorvidos nas praticas anteriores e tendo como base programas já desenvolvidos, foi elaborada a linguagem de programação para atender as necessidades do problema seguinte, onde deve ser construído um contador de 0 a 9999. Os dígitos devem serem apresentados em quatro displays de 7 segmentos e a contagem deve ser controlada por dois botões, um primeiro botão incrementa e um segundo botão decrementa a contagem. Com base da necessidade 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. //contador de 0000 a 9999 controlado #include<P18F4550.h> #include<delays.h> #include<stdlib.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 i = 0,a,b,tempo=75, tempo1=5; int a1,a2,c,a3; int const numero[] = { //números a serem mostrados 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,}; void main (void){ TRISE = 0x00;//atribuindo porta E como saída em nível 0 TRISD = 0x00; //atribuindo porta D como saída em nível 0 TRISA = 0x00; // atribuindo Porta A como saída em nível 0 TRISBbits.RB0 = 1; // atribuindo botão 1 como entrada TRISBbits.RB1 = 1; // atribuindo botão 2 como entrada PORTBbits.RB0 = 1; // atribuindo nível 1 ao botão 1 PORTBbits.RB1 = 1; // atribuindo nível 1 ao botão 2 while(1){ if( PORTBbits.RB0 == 0){ //botão pressionado incrementa i++; Delay10KTCYx(tempo); } if( PORTBbits.RB1 == 0){ // botão pressionado decrementa i--; Delay10KTCYx(tempo); } if(i==10000){// próximo digito depois de 9999 ser 0000 Delay10KTCYx(tempo); i=0; } if(i==-1){ //próximo digito antes de 0000 ser 9999 i=9999; Delay10KTCYx(tempo); } a = (i/1000); a1 = (i%1000); b = (a1/100); a2 = (a1%100); c = (a2/10); a3 = (a2%10); PORTD = numero[a]; PORTAbits.RA5 = 1 ; Delay10KTCYx(tempo1); PORTAbits.RA5 = 0 ; PORTD = numero [b]; PORTAbits.RA2 = 1 ; Delay10KTCYx(tempo1); PORTAbits.RA2 = 0 ; PORTD = numero [c]; PORTEbits.RE0 = 1 ; Delay10KTCYx(tempo1); PORTEbits.RE0 = 0 ; PORTD = numero [a3]; PORTEbits.RE2 = 1 ; Delay10KTCYx(tempo1); PORTEbits.RE2 = 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 Kit educacional XM118, em especial a parte dos LED’s que estão ligados em paralelo com display de 7 Segmentos. 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 3.7, 3.8, 3.9 e 4.0. Imagem 3.8 Imagem 3.7 Imagem 4.0 Imagem 3.9 Nas imagens podemos observar na imagem 3.7 o estagio inicial 0000 , após pressionar o botão de incrementar varias vezes o digito a ser mostrado é 0019 como visto na imagem 3.8, caso seja pressionado o botão de decrementar podemos voltar ate o ponto desejado como podemos observar nas imagens 3.9 e 4.0 os números 0018 e 9999 respectivamente. Para fazer o controle foram utilizados push-buttons localizados no próprio Kit a imagem 4.1 os mostram. Botão RB1, INT1 – Decrementa Botão RB0, INT0 – Incrementa Imagem 4.1 7° Passo – Projeto do contador de 0000 a 9999 Utilizando do conhecimento absorvido nos passos anteriores e tendo como base programas já desenvolvidos, foi elaborada a linguagem de programação para atender as necessidades do problema seguinte, onde deve ser construído um contador de 0 a 9999. Os dígitos devem serem apresentados em quatro displays de 7 segmentos e a contagem deve ser zerada e reiniciada quando atingir o nível máximo. Sabendo dos parâmetros de 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. //contador 0000 a 9999 #include<P18F4550.h> #include<delays.h> #include<stdlib.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 i,a,b,c,a1,a2,a3,tempo=6; int const numero[] = { // números a serem mostrados 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,}; void main (void){ TRISE = 0x00; //atribuindo porta E como saída em nível 0 TRISD = 0x00; // atribuindo porta D como saída em nível 0 TRISA = 0x00; // atribuindo porta A como saída em nível 0 while(1){ //contagem de 0000 a 9999 repetição infinita for (i=0;i<10000;i++ ){ a = (i/1000); a1 = (i%1000); b = (a1/100); a2 = (a1%100); c = (a2/10); a3 = (a2%10); PORTD = numero[a]; PORTAbits.RA5 = 1 ; Delay10KTCYx(tempo); PORTAbits.RA5 = 0 ; PORTD = numero [b]; PORTAbits.RA2 = 1 ; Delay10KTCYx(tempo); PORTAbits.RA2 = 0 ; PORTD = numero [c]; PORTEbits.RE0 = 1 ; Delay10KTCYx(tempo); PORTEbits.RE0 = 0 ; PORTD = numero [a3]; PORTEbits.RE2 = 1 ; Delay10KTCYx(tempo); PORTEbits.RE2 = 0 ; } } } A descrição de sequencia de funcionamento na multiplexação e acionamento dos displays já foi informada anteriormente. Depois de 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 a parte dos LED’s que estão ligados em paralelo com display de 7 Segmentos. 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 4.2, 4.3 e 4.4. Imagem 4.3 Imagem 4.2 Imagem 4.4 Na imagem 4.2 podemos ver o contador momentos após ter entrado em funcionamento, na imagem 4.3 podemos ver próximo de atingir o seu limite máximo 9999, já na imagem 4.4 o contador já reiniciou e está continuando a sequencia. Vale ressaltar que o tempo para cada segmento permanecer ativo é 5ms, o que garante a correta visualização do funcionamento, devido características e parâmetros do Kit e do microcontrolador. 8° Passo – Projeto do contador de 0 a 50 Com base no conhecimento já adquirido anteriormente e aprimorando novos comandos foi desenvolvido a linguagem de programação para atender as necessidades do problema seguinte, onde deve ser construído um contador de 0 a 50. Os dígitos devem serem apresentados em dois displays de 7 segmentos e a contagem deve ser controlada por três botões, ao acionar um primeiro botão a contagem deve obedecer a sequencia normal de 0 a 50, ao pressionar um segundo botão a contagem deve ser reiniciada e continuar mostrando apenas números pares de 0 a 50, caso um terceiro botão seja pressionado a contagem deve ser reiniciada e começar então a sequencia mostrando apenas números impares. Sabendo dos parâmetros de funcionamento deste programa, e com conhecimento das ferramentas do MPLAB IDE assim como etapas para criar um novo projeto, foicriado o seguinte código em linguagem C para realizar o funcionamento do projeto. //De 0 a 50 #include<P18F4550.h> #include<delays.h> #include<stdlib.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 i=0,a,b,a1,a2,tempo=5,g=1,c1=1,c2,c3,resto,tempo1=2,d,w,r=400; int const numero[] = {// números a serem mostrados 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,}; void main (void){ TRISE = 0x00; // Porta E saída em nível 0 TRISD = 0x00; // Porta D saída em nível 0 TRISA = 0x00; // Porta A saída em nível 0 TRISBbits.RB0 = 1; // Entrada do botão 1 TRISBbits.RB1 = 1; // Entrada do botão 2 TRISBbits.RB2 = 1; // Entrada do botão 3 PORTBbits.RB0 = 1; // Saida do botão nível 1 PORTBbits.RB1 = 1; // Saida do botão nível 1 PORTBbits.RB2 = 1; // Saida do botão nível 1 while(1){ // Repetição geral do contador i++; if (i>50){ i=0; } if( PORTBbits.RB0 == 0){ // números normais de 0 a 50 c1=1; } if( PORTBbits.RB1 == 0){ // números pares de 0 a 50 c1=2; } if( PORTBbits.RB2 == 0){ // números impares de 0 a 50 c1=3; } if((PORTBbits.RB0 == 0) || (c1==1) ){ // Repetição de 0 a 50 normal w=1; if(PORTBbits.RB0 == 0){ i=0; } while(w==1){ d++; a = (i/10); a1 = (i%10); PORTD = numero [a]; PORTAbits.RA2 = 1 ; Delay1KTCYx(tempo1); PORTAbits.RA2 = 0 ; PORTD = numero [a1]; PORTEbits.RE0 = 1 ; Delay1KTCYx(tempo1); PORTEbits.RE0 = 0 ; if(d==r){ d=0; w=0; } } } if ((PORTBbits.RB1 == 0) || (c1==2)){ //Repetição de 0 a 50 pares w=1; if(PORTBbits.RB1 == 0){ i=0; } a = (i/10); a1 = (i%10); resto=(a1%2); if(resto==0){ while(w==1){ d++; PORTD = numero [a]; PORTAbits.RA2 = 1 ; Delay1KTCYx(tempo1); PORTAbits.RA2 = 0 ; PORTD = numero [a1]; PORTEbits.RE0 = 1 ; Delay1KTCYx(tempo1); PORTEbits.RE0 = 0 ; if(d==r){ d=0; w=0; } } } } if ((PORTBbits.RB2 == 0) || (c1==3)){ //Repetição de 0 a 50 impares w=1; if(PORTBbits.RB2 == 0){ i=0; } a = (i/10); a1 = (i%10); resto=(a1%2); if(resto != 0){ while(w==1){ d++; PORTD = numero [a]; PORTAbits.RA2 = 1 ; Delay1KTCYx(tempo1); PORTAbits.RA2 = 0 ; PORTD = numero [a1]; PORTEbits.RE0 = 1 ; Delay1KTCYx(tempo1); PORTEbits.RE0 = 0 ; if(d==r){ d=0; w=0; } } } } } } Este código foi um pouco difícil de ser elaborado, tentamos de varias formas fazer um programa simples e funcional, este tem um logica simples, porem ficou extenso. Neste código temos uma repetição geral que vai contar de 0 a 50 caso um primeiro botão seja pressionado. Caso um segundo botão seja pressionado o programa atribui a uma variável que o leva a outra repetição que mostrara números pares de 0 a 50. Ainda se um terceiro botão seja pressionado ele é atribuído a outra variável que o levara para outra repetição que desta vez repetira de 0 a 50 os números impares. 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 a parte dos LED’s que estão ligados em paralelo com display de 7 Segmentos. Utilizando do conhecimento adquirido em estudos anteriores o projeto foi transferido para o Kit e logo em seguida executado, o resultado podemos ver a seguir nas imagens. Imagem 4.7 Imagem 4.5 Imagem 4.6 Imagem 5.0 Imagem 4.9 Imagem 4.8 Da imagem 4.5 a 4.7 podemos ver a contagem em seu estado inicial ou quando o Botão INT 0 é pressionado, os números mostrados são de 0 a 50. Na imagem 4.8, 4.9 e 5.0 a contagem esta em seu segundo estagio quando após pressionado o botão INT 1 são mostrados apenas números pares de 2 a 50. Imagem 5.1 Imagem 5.3 Imagem 5.2 Nas imagens 5.1, 5.2 e 5.3 observamos a contagem apenas com números pares que vai de 1 a 49. Para fazer o controle foram utilizados push-buttons localizados no próprio Kit, a imagem 5.4 os mostram. Botão RB2, INT 2 – Números Impares Botão RB1, INT 1 – Números Pares Botão RB0, INT 0 – Números de 0 a 50 Imagem 5.4 Com está pratica finalizamos o Processo experimental, que envolveu Display de sete segmentos e Push Buttons. Todo o equipamento utilizado foi recolhido e direcionado para seus respectivos lugares. Conclusões Esta segunda pratica teve seus objetivos alcançados e um saldo positivo onde possibilitou aprimorar ferramentas já utilizadas assim como adstringir novos conhecimentos. É notável durante os passos que ouve evoluções significativas como, otimização da programação, compreensão dos problemas e desenvolvimento dos mesmos. Nessa etapa a ênfase foi em programas que envolvem os displays de 7 segmentos e botões Push Buttons, tivemos dificuldades de inicio no acionamento de mais de dois displays de 7 segmentos em ajustar o tempo certo para a sua multiplexação e representação dos dígitos, mais com atenção e ajuda de alguns materiais didáticos conseguimos avançar com facilidade, o que tornou mais fácil a execução das etapas posteriores. O material repassado pelo Professor facilitou e ajudou na compreensão dos parâmetros do Chip PIC18f4550, quanto a pinagem do mesmo, o que a colaborou na hora de configurar os botões e os Displays. 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, temos como exemplos de contadores relógios, semáforos e inúmeros displays que reproduzem diversas informações como contagem, alertas, mensagens, entre outros. Desta forma 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 bibliográficas https://www.google.com.br/search?tbm=isch&sa=1&q=display+7+segmentos+segmentos&oq=display+7+segmentos+segmentos&gs_l=psy-ab.3...130178.135025.0.135259.13.12.0.0.0.0.671.1307.2-1j1j0j1.3.0....0...1.1.64.psy-ab..10.1.670...0.f4mUx4iAzH0#imgrc=_ - Acesso em 30 de agosto de 2017 https://www.google.com.br/search?q=tabela+hexadecimal&source=lnms&tbm=isch&sa=X&ved=0ahUKEwinlbK1qoDWAhUL42MKHVsZAnUQ_AUICigB#imgrc=NnEVoApXxJPsFM: - Acesso em 30 de agosto de2017 Datasheet Kit XM118 Datashet PIC18f4550 Material Repassado em sala de Aula
Compartilhar