Você está na página 1de 5

UNIVERSIDADE FEDERAL DO CEARÁ – CAMPUS SOBRAL

CURSO DE ENGENHARIA ELÉTRICA


DISCIPLINA: ELETRÔNICA ANALÓGICA
PROFESSOR: MARCELO M. S. DE SOUZA

SEGUNDO TRABALHO DE MICROPROCESSADORES

ALUNO MATRÍCULA

JOÃO PEDRO DA SILVA RODRIGUES 385518

Sobral – CE

2019
TRABALHO

Desenvolva com o microcontrolador PIC18F4550 um programa em C que:

1) Em resposta à ocorrência de um pulso em um dos pinos do microcontrolador,


mede a sua largura. Suponha que a largura do pulso varie entre 500 a 2000
microssegundos;
2) Converta para digital, a cada 100 milissegundos, a voltagem em uma das
entradas analógicas do microcontrolador.
3) Tanto a largura do pulso como a voltagem analógica devem ser atualizadas e já
apresentadas em um display LCD. Ademais, o valor da voltagem analógica deve
atualizar uma escala, formada por quatro LED’s, conforme o seguinte padrão:

PROCEDIMENTO

PARTE 1

Para medir a largura de um pulso em reposta á ocorrência desse pulso em um


dos pinos do microcontrolador (com o pulso variando de 500 a 200 ms, foi utilizado o
módulo Timer0 e as interrupções por mudança de estado da porta INT0.A configuração
do TIMER0 e do INT0 pode ser observada logo abaixo:

///Configura o módulo timer0

void configTMR0(void) {

INTCONbits.TMR0IE = 0; //Desabilita interrupções por overflow

T0CONbits.TMR0ON = 0; // Inicia com o módulo desligado

T0CONbits.T08BIT = 0; /// Módulo com contagem de 16 bits


T0CONbits.T0CS = 0; //// Contagem a partir do clock interno

T0CONbits.PSA = 1; // Sem pré-escalador

TMR0H = 0;

TMR0L = 0;

///Configura o conversor AD

void configAd(void) {

TRISA = 0x01;

ADFM = 0x01;

ADCON0 = 0x01; // Define qual a porta vai ser lida

ADCON1 = 0xE; // Define a porta AN0 como analógica

ADCON2 = 0x80; //Configura o tempo do clock

///Configura a interrupção por mudança de estado

void configINT0(void) {

INTCONbits.INT0IE = 1; // Serve para habilitar a interrupção da INT0

INT0IF = 0; // Flag de interrupção da INT0 zerada

INTCON2bits.INTEDG0 = 1; // Interrupção por borda crescente

Abaixo os passos para o funcionamento do programa que realiza a medição do


tempo:

1) Aguarda interrupção de mudança de estado (borda de subida);


2) Ocorrendo uma mudança de estado na porta INT0 o programa inicia a contagem no
TMR0;
3) Aguarda interrupção por mudança de estado, enquanto o contador TIMER0 vai
contando o tempo;
4) Quando ocorre uma mudança de estado novamente, o programa atualiza a variável
de tempo e volta ao estado inicial dos seus registradores associados à medição do
tempo.

PARTE 2

A seguir o código que foi usado para converter para digital, a cada 100 ms, a
voltagem em uma das entradas analógicas do microcontrolador. Para isso, foi usado o
conversor A/D de 10 bits.

TRISA = 0x01;

ADFM = 0x01;

ADCON0 = 0x01; // Define qual a porta a ser lida

ADCON1 = 0xE; // Define a porta AN0 como analogica

ADCON2 = 0x80; // Configura o tempo de clock

A sequência e passos para fazer a da leitura da voltagem foi a seguinte:

1) A leitura no conversor A/D é feita dentro de um loop de repetição a cada 100ms


2) Para a realização da leitura, nós temos:
• 5V - 1023
• V- E
E∗5
• V = 1023

sendo E o valor lido pelo conversor A/D e V a tensão aplicada na entrada do conversor.

PARTE 3

Finalmente, para realizar o item 3 desse trabalho, foi feito uso da biblioteca
LCD. Com essa biblioteca é possível realizar o processo de envio de dados para um
display LCD genérico.

Desse modo, o funcionamento do programa para a realização da atualização no


display segue os passos descritos logo abaixo:

1) A biblioteca inicializa o LCD (inicializa_lcd());


2) Imprime o valor do tempo no display;
3) Realiza as ações da parte 2 e armazena em uma variável local (volts);
4) Atualiza os LED seguindo a escala que foi solicitada;
5) Imprime o valor no display da tensão recuperada através do processo da segunda
parte do trabalho;
6) Entra no delay de 100ms;
7) Volta para a ação 2 dessa parte.

Você também pode gostar