Relatorio Microcontroladores
Artigo: Relatorio Microcontroladores. Pesquise 862.000+ trabalhos acadêmicosPor: • 5/10/2013 • 1.749 Palavras (7 Páginas) • 1.562 Visualizações
FUNDAÇÃO UNIVERSIDADE FEDERAL DO PAMPA
CENTRO DE TECNOLOGIA DE ALEGRETE
CURSO DE ENGENHARIA ELÉTRICA
DISCIPLINA DE MICROCONTROLADORES
DISPOSITIVOS DE SAÍDA - DISPLAY DE SETE SEGMENTOS
Daniele Martinez
Fernando Santos Garcia
Maicon Barbieri
Nathalie Lunardi
Renan Luzardo
Roger Roos
Professor Alessandro Girardi
Alegrete, 10 de maio de 2011.
ÍNDICE
OBJETIVO 3
2. INTRODUÇÃO 4
3. DESENVOLVIMENTO 5
4. PROGRAMANDO O PIC 16F877A 7
5. QUESTÕES DA AULA PRÁTICA 10
6. CONCLUSÃO 11
BIBLIOGRAFIA 12
OBJETIVO
Compreender o funcionamento e a polarização de displays de sete segmentos conectados à saída do microcontrolador PIC16F877A. Calcular a quantidade de ciclos necessários para contar 1 segundo, determinar quantos registradores auxiliares serão necessários e como eles serão incrementados.
Elaborar o programa a ser gravado no microcontrolador utilizando o software MPLAB, implementando a função de conversão do dígito para sua representação gráfica em decimal, compilar e gravar o programa no microcontrolador utilizando o kit de gravação ICD2( ative ou desative os bits de configuração antes de gravar o programa).
Montar o circuito no protoboard e verificar se o circuito está operando de forma esperada.
2. INTRODUÇÃO
Um microcontrolador é um sistema computacional completo, no qual estão incluídos internamente uma CPU (Central Processor Unit), memórias RAM (dados), flash (programa) e E²PROM, pinos de I/O (Input/Output), além de outros periféricos internos, tais como, osciladores, canal USB, interface serial assíncrona USART, módulos de temporização e conversores A/D, entre outros, integrados em um mesmo componente (chip).
O microcontrolador PIC® (Periferal Interface Controler), da Microchip Technology Inc. (empresa de grande porte, no Arizona, Estados Unidos da América), possui uma boa diversidade de recursos, capacidades de processamento, custo e flexibilidade de aplicações. Os microcontroladores PIC possuem apenas 35 instruções em assembly para a família do PIC12 de 12 bits, PIC16 de 14 bits e PIC18 de 16 bits. [1]
Displays de LED de 7 segmentos são usados principalmente para representar graficamente informações numéricas. A figura 1 mostra o seu circuito interno e o seu símbolo. Estes displays podem ser construídos na configuração anodo comum ou catodo comum. Na conexão anodo comum, um segmento irá acender quando seu pino for polarizado com uma tensão baixa (valor lógico 0), sendo que o anodo comum deve ser conectado à tensão positiva (VDD). Na configuração catodo comum a situação é a inversa: cada segmento é ativado por uma tensão alta que corresponde ao nível lógico 1, enquanto que o catodo comum deve ser conectado a 0V (VSS).
Fig. 1 - Displays de 7 segmentos consistem de um conjunto de leds com anodo ou catodo comum, dependendo da sua construção. a) circuito interno; b) símbolo do display de 7 segmentos.
Para representar graficamente cada dígito de 0 a 9, a palavra binária que será apresentada no display precisa ser convertida em uma representação gráfica. Por exemplo para representar o número “4” no display, o qual possui uma representação binária em 8 bits igual a “00000100”, é preciso convertê-lo para a sua representação “01100110”, equivalente à sequência de segmentos “abcdefg dp” no caso da configuração catodo comum. Neste caso, os leds b, c,f e g serão ligados.
De modo genérico, a conversão pode ser feita com a ajuda da função em código assembly abaixo:
; -----------------------------------------------------------------------------
; Subrotina: tabela para representação de dados em display de 7 segmentos
; Configuração catodo comum
; -----------------------------------------------------------------------------
Tabela adwf PCL
retlw b’00111111’ ; 0
retlw b’00000110´ ; 1
; ... demais símbolos gráficos
retlw b´01101111´ ; 9
Para usar a função, é preciso colocar o número a ser convertido no registrador W e, após, chamar a função “Tabela”. O retorno da função também estará no registrador W. No exemplo abaixo, o dígito que irá aparecer no display está armazenado no registrador Temp1. Ele será convertido na sua representação gráfica através da função “Tabela” e o resultado será apresentado no display através do registrador PortB.
movf Temp1, W ; copia o valor de Temp1 no registrador W
call Tabela ; chama a função Tabela, que retornará o resultado no reg. W
movwf PORTB ; copia o conteúdo de W no registrador PORTB, o qual está
; conectado ao display de 7 segmentos
3. DESENVOLVIMENTO
Conectar um display de 7 segmentos na porta B do microcontrolador que deve mostrar um dígito de 0 a 9 que é incrementado uma vez por segundo. Monte, sobre um protoboard, um circuito utilizando o microcontrolador PIC16F877A contendo um programa que faça com que um display de 7 segmentos, conectado à porta B, apresente a representação gráfica dos dígitos de 0 a 9, incrementando-o a cada 1 segundo.
Para fazer a contagem de tempo, utilize interrupção por transbordo do registrador TMR0 conforme a aula prática anterior.
O cálculo do valor que representa o valor do TIMER0 que faz com que fique contando pra sempre de 0x00 a 0xFF, é:
TMR0=1; while(TMR0); este tempo de espera vai ser exatos 1/(4000/256) segundos. Essa divisão representa o erro de contagem do programa, pois a divisão não é exata e em cada ciclo do programa haverá à ocorrer uma defasagem do valor esperado. Para programas de “ciclo curto” pode-se usar esse tipo de contagem, mas quando utilizamos programas de longa duração, isso representaria um grande problema.
Foram utilizados 2 registradores de propósito geral auxiliares para a contagem do número de ciclos de clock necessários para atingir um tempo de 1s, e mais 2 para contagem externa. Quando chegar em 9, a contagem deve retornar a 0 e continuar incrementando a cada 1s. O display utilizado nesse experimento foi do tipo cátodo.
3.1. MATERIAL
- Microcontrolador PIC16F877A;
- Protoboard;
- 2 Capacitores de 15pF;
- 1 cristal oscilador de 4MHz;
- 1 display de 7 segmentos tipo cátodo;
- 8 resistores de 150 Ω, 1 resistor de 1 kΩ e 1 resistor de 39 kΩ;
- Fonte de alimentação 5V;
4. PROGRAMANDO O PIC 16F877A
Programa desenvolvido e gravado no microcontrolador PIC16F877A, utilizando o software MPLAB da Microchip.
PROCESSOR 16F877A
#include "p16f877a.inc"
TEMP1 EQU 50
TEMP2 EQU 51
TEMP3 EQU 53
TEMP4 EQU 53
ORG 0X00
GOTO MAIN
ORG 0X04
GOTO INTERRUPT
MAIN
BSF STATUS,5
MOVLW 0X00
MOVWF TRISB
BCF OPTION_REG,5
BCF STATUS,5
MOVLW 0XA0
MOVWF INTCON
MOVLW 0X3F
MOVWF TEMP1
MOVLW 0X3E
MOVWF TEMP2
CLRF TEMP3
LOOP
MOVF TEMP3, 0
CALL TABELA
MOVWF PORTB
GOTO LOOP
TABELA
ADDWF PCL, 1
RETLW B'00111111' ; 0
RETLW B'00000110' ; 1
RETLW B'01011011' ; 2
RETLW B'01001111' ; 3
RETLW B'01100110' ; 4
RETLW B'01101101' ; 5
RETLW B'01111101' ; 6
RETLW B'00000111' ; 7
RETLW B'01111111' ; 8
RETLW B'01101111' ; 9
INTERRUPT
MOVF TEMP4, 0
BCF STATUS,5
DECFSZ TEMP1,1
GOTO FIM_INTERRUPT
MOVLW 0X3F
MOVWF TEMP1
DECFSZ TEMP2,1
GOTO FIM_INTERRUPT
MOVLW 0X3E
MOVWF TEMP2
INCF TEMP3, 1
MOVLW 0X0A
SUBWF TEMP3,0
BTFSS STATUS,2
GOTO FIM_INTERRUPT
CLRF TEMP3
GOTO FIM_INTERRUPT
FIM_INTERRUPT:
BCF INTCON, 2
MOVFW TEMP4
RETFIE
END
4.1. MICROCONTROLADOR NA PROTOBOARD.
O programa foi gravado no PIC e logo após foi realizada a montagem do circuito na protoboard.
Figura 2: montagem do circuito no protoboard.
A figura acima mostra como o circuito fisicamente implementado na protoboard, que conta de 0 à 9, à cada segundo, continuamente. Ao desativar o WATCHDOG TIMER e alterar a função da porta RB3 para saída digital I/O, tivemos sucesso na contagem do tempo, mostrada no display.
Para compreendermos melhor o que está sendo executado, postamos esse vídeo online, via YOUTUBE : http://www.youtube.com/watch?v=_tc-fN-mg6k .
5. QUESTÃO DA AULA PRÁTICA
1) Implemente uma contagem no display de 7 segmentos na representação hexadecimal, contando de 0 a 15.
Para implementarmos a contagem de 0 até 15, basta convertermos os números 10, 11, 12, 13, 14 e 15 para hexadecimais, dispondo despectivamente das letras A, b, C, d, E e F, converteremos para binário e adicionaremos na “TABELA” do programa, ficando no formato abaixo.
TABELA
ADDWF PCL, 1
RETLW B'00111111' ; 0
RETLW B'00000110' ; 1
RETLW B'01011011' ; 2
RETLW B'01001111' ; 3
RETLW B'01100110' ; 4
RETLW B'01101101' ; 5
RETLW B'01111101' ; 6
RETLW B'00000111' ; 7
RETLW B'01111111' ; 8
RETLW B'01101111' ; 9
RETLW B'01110111' ; A
RETLW B'01111100' ; b
RETLW B'00111001' ; C
RETLW B'01011110' ; d
RETLW B'01101001' ; E
RETLW B'01110001' ; F
Não necessita-se de alteraração em nenhum outro dado, para que o programa funcione corretamente novamente com essa adição de linhas à tabela. Simplesmente o programa vai executar cada linha à cada segundo, sem difração alguma.
CONCLUSÃO
O trabalho prático desenvolvido no laboratório teve início com uma aula expositiva dialogada, onde obtivemos instruções de como calcular o tempo de cada instrução e principalmente, passos importantes para construir o programa que tivesse a função de mostrar um dígito de 0 a 9 que é incrementado uma vez por segundo, e também de 0 à 15 em hexadecimal, em um display de 7 segmentos.
Os resultados obtidos foram apresentados nos itens 4 e 5, como mostram a figura 2 e o vídeo-clipe disponibilizado na web .
Cada vez que ocorrer o transbordo de TMR0 (e, consequentemente, uma interrupção), passaram-se 256 ciclos de clock e incrementa-se outro registrador de propósito geral auxiliar, para a contagem do número de ciclos de clock necessários para atingir aproximadamente um tempo de 1s, e consequentemente, à cada segundo, pula-se a linha de instrução da “TABELA”, dando o valor respectivo ao valor binário apresentado na linha executada.
REFERÊNCIAS BIBLIOGRÁFICAS
[1] Jucá, Sandro; “Apostila de Microcontroladores PIC e Periféricos”, IF, disponível em
<http://br.groups.yahoo.com/group/GrupoSanUSB/>, acesso em março de 2011.
[2] de Souza, David José; Lavinia, Nicolás César ; “Conectando o PIC16F877A – Recursos Avançados” Editora Afiliada, 3º edição.
...