Você está na página 1de 7

INSTITUTO FEDERAL CATARINENSE

CAMPUS BLUMENAU
CURSO DE CIÊNCIAS DA COMPUTAÇÃO
DISCIPLINA DE SISTEMAS EMBARCADOS

LABORATÓRIO 2: Resposta ao Botão e Acionamento de Motor

Blumenau, 20 de 03 de 2024.
Halena Kulmann Duarte

EXPERIMENTO
Os objetivos deste laboratório foram aprender a utilizar entradas e saídas digitais e ligar um
motor a uma saída digital. Isso foi feito através da criação de um programa para ligar um LED e
depois, uma ventoinha, do microcontrolador PIC18F4550 apertando um botão e desligar apertando
outro. As principais fontes de pesquisa utilizadas foram seu datasheet e o esquemático da placa.
EMBASAMENTO TEÓRICO
O microcontrolador PIC18F4550 disponibiliza 5 portas digitais, que servem para entrada e
saída de dados, dependendo dos valores de seus pinos que se alternam entre ‘0’ e ‘1’ e representam
níveis de tensão. Cada uma delas tem três registradores, que armazenam informações, associados à
sua configuração, sendo eles o TRIS, para configurar o sentido de fluxo de dados, o PORT para
escrever/ler os pinos e o LAT para armazenar o último comando de escrita.
Um oscilador ou clock determina a velocidade de operação do microcontrolador e em quais
momentos as instruções vão ser executadas. O oscilador externo HS, High Speed, tem uma
frequência de trabalho maior, e em consequência um consumo de energia maior também, e é
designado para cristais e ressonadores cuja frequência é maior ou igual a 4 Mhz.
Os resistores de pull-up são utilizados para garantir que uma entrada digital tenha um valor
definido quando não está sendo acionada externamente. Quando o pull-up está ativo e um botão é
pressionado, ele faz com que a entrada tenha valor 0. Quando não está pressionado, o pull-up faz
com que haja um nível de tensão de alimentação, fazendo com que a entrada tenha valor 1. No caso
do PIC18F4550, é possível ativar resistores de pull-up internos nos pinos de entrada e, para ligar
verificar se o botão está ligado ou desligado, a condição deve ser 0 ou 1, respectivamente.
Boucing é um comportamento indesejável que ocorre quando o microcontrolador interpreta
múltiplos toques quando um botão é pressionado. Isso pode gerar um mau funcionamento do
sistema, como resultados instáveis, e uma solução comum é adicionar um delay no código. Assim, o
sistema aguarda um período curto de tempo para verificar o estado do botão novamente, que já não
vai mais estar como pressionado, evitando erros.
Transistor é um dispositivo semicondutor, que tem capacidade de controlar o fluxo de
corrente elétrica em um circuito. Eles são divididos em base, coletor e emissor.
MONTAGEM
Para a montagem, o simulador SimLab foi utilizado, com a placa PICGenios e o
microcontrolador PIC18F4550. A região de interesse para a primeira parte do laboratório foi o LED
INSTITUTO FEDERAL CATARINENSE
CAMPUS BLUMENAU
CURSO DE CIÊNCIAS DA COMPUTAÇÃO
DISCIPLINA DE SISTEMAS EMBARCADOS

D0 no LED1/PORTD, como pode ser visto a seguir, aceso e apagado, e os botões RB3 e RB4, para
ligar e desligar o LED.
Figura 1: Simulador da placa PICGenios com LED D0 aceso e apagado e botões RB3 e RB4.

Fonte: Autor

Já para a segunda parte, além dos botões, o interesse foi a ventoinha da placa.
Figura 2: Ventoinha do simulador da placa PICGenios.

Fonte: Autor

Quanto ao esquemático, um dos interesses principais foram os botões, em especial o RB3 e


o RB4.
INSTITUTO FEDERAL CATARINENSE
CAMPUS BLUMENAU
CURSO DE CIÊNCIAS DA COMPUTAÇÃO
DISCIPLINA DE SISTEMAS EMBARCADOS

Figura 3: Parte dos botões do esquemático do PICGenios.

Fonte: Autor

O LED ligado ao pino RD0 também foi utilizado.


Figura 4: Parte dos LEDs do esquemático do PICGenios.

Fonte: Autor

Além disso, através do esquemático foi possível descobrir que a ventoinha estava ligada ao
“botão ” RC2, do pino C2.
INSTITUTO FEDERAL CATARINENSE
CAMPUS BLUMENAU
CURSO DE CIÊNCIAS DA COMPUTAÇÃO
DISCIPLINA DE SISTEMAS EMBARCADOS

Figura 5: Parte do “botão” ligado à ventoinha do esquemático do PICGenios.

Fonte: Autor

E a distribuição da estrutura do transistor conectado a ela.


Figura 6: Parte do transistor ligado à ventoinha do esquemático do PICGenios.

Fonte: Autor

CÓDIGO
Inicialmente, o arquivo de cabeçalho do compilador e o cabeçalho do projeto foram
incluídos.
Figura 7: Código - includes iniciais.

Fonte: Autor

Alguns defines foram feitos, sendo os dois primeiros dedicados a função de delay, utilizada
mais abaixo, que nesse caso serviu para evitar o efeito de bouncing e pausar o funcionamento por
algum tempo após um botão ser pressionado. A primeira linha define a frequência do oscilador
externo em 8 MHz e isso foi feito para que o número correto de ciclos de clock possa ser calculado,
para assim gerar o valor de 50 milissegundos da constante DELAY na segunda linha. Sem isso, o
compilador não conseguiria fazer um cálculo do atraso tão preciso e proporcional à frequência real
do oscilador do microcontrolador.
Figura 8: Código - delay.

Fonte: Autor
INSTITUTO FEDERAL CATARINENSE
CAMPUS BLUMENAU
CURSO DE CIÊNCIAS DA COMPUTAÇÃO
DISCIPLINA DE SISTEMAS EMBARCADOS

Para facilitar o entendimento do código e evitar confusões durante a programação, foram


definidas macros para ligar e desligar o LED. Elas alteram o valor do registrador LATD no pino D0,
sendo 1 para ligar o LED e 0 para desligar. Além disso, foram definidas macros para verificar o
estado do LED e saber se ele está ligado ou desligado.
Figura 9: Código - macros relacionadas ao LED.

Fonte: Autor

O mesmo foi feito para a ventoinha, mas no pino C2 da porta C.


Figura 10: Código - macros relacionadas à ventoinha.

Fonte: Autor

Depois, macros para verificar o estado dos botões, sendo BOTAO1 o botão B3 do pino RB3
e BOTAO2 o botão B4 do pino RB4. O valor para ligado é 0 e desligado é 1, pois o pull-up interno
do microcontrolador foi ativado, seguindo o datasheet do PIC18F4550.
Figura 11: Código - macros relacionadas aos botões.

Fonte: Autor

A função main do código foi iniciada com a configuração do pino D0 da porta D como
saída, para que sinais possam ser enviados para outros dispositivos por ele, como nesse caso, para
acender o LED. Isso foi feito através do registrador TRISD e o valor escrito foi 0, pois no
PIC18F4550 ele é utilizado para saída e o 1 para entrada.
Figura 12: Código - saída do LED.

Fonte: Autor

O mesmo foi feito para a ventoinha, mas no pino C2, com o registrador TRISC.
INSTITUTO FEDERAL CATARINENSE
CAMPUS BLUMENAU
CURSO DE CIÊNCIAS DA COMPUTAÇÃO
DISCIPLINA DE SISTEMAS EMBARCADOS

Figura 13: Código - saída da ventoinha.

Fonte: Autor

Depois, os pinos da porta B foram definidos como entrada, pois para o pull-up é necessário
que eles não sejam de saída. Por último, definimos o bit RBPU como 0, assim, ativando o resistor
de pull-up interno do microcontrolador.
Figura 14: Código - configuração do pull-up.

Fonte: Autor

Depois da configuração do Pull-Up para os botões, o LED foi desligado para melhorar a
visualização, pois, por padrão, ele estava começando ligado.
Figura 15: Código - LED iniciando desligado.

Fonte: Autor

Já no loop do microcontrolador, a dinâmica de acender e apagar o LED com os dois botões


foi, de fato, criada, de forma que qualquer um dos dois possa fazer qualquer uma das ações,
independente da ordem que foram pressionados. Primeiro, é feita uma verificação com as macros já
definidas para ver se o BOTÃO1 (RB3) ou o BOTÃO2 (RB4) estão ativos/pressionados. Caso
estejam, se a macro de LED ligado for verdadeira, a macro de desligar o LED vai ser chamada.
Caso contrário, estando o LED desligado, a macro de ligar LED vai ser chamada. Então, o estado
do LED sempre vai ser alterado, independente de já estar ligado ou não.
Figura 16: Código - ligar e desligar o LED, conforme seu estado, ao pressionar um botão.

Fonte: Autor

O mesmo foi feito para a ventoinha, mas com as suas macros.


INSTITUTO FEDERAL CATARINENSE
CAMPUS BLUMENAU
CURSO DE CIÊNCIAS DA COMPUTAÇÃO
DISCIPLINA DE SISTEMAS EMBARCADOS

Figura 17: Código - ligar e desligar a ventoinha, conforme seu estado, ao pressionar um botão.

Fonte: Autor

Por último, a função __delay_ms() foi utilizada com o tempo que foi definido na constante
DELAY como parâmetro, para que se passem 50 milissegundos entre o acionamento do botão e a
próxima rodada de looping do programa. Isso foi feito como uma forma de deboucing, para que não
sejam interpretados múltiplos toques no botão.
Figura 18: Código - função de delay para evitar efeito de boucing.

Fonte: Autor

CONSIDERAÇÕES FINAIS
O experimento foi concluído com sucesso e, tanto o LED conectado ao pino RD0, quanto a
ventoinha conectada ao pino C2, foram ligados e desligados através dos botões conforme o
esperado, demonstrando o funcionamento correto do código desenvolvido. Em questão de
dificuldade, levei um tempo maior para encontrar o pino ligado à ventoinha e para encontrar uma
solução para o bouncing que estava acontecendo no meu programa. Felizmente, os dois desafios
foram superados.
FONTES
https://lcgamboa.github.io/picsimlab_docs/0.9.1/pdf/boards/PICGenios.pdf
https://www.bosontreinamentos.com.br/eletronica/curso-de-eletronica/eletronica-o-que-sao-resistor
es-de-pull-up/
https://drive.google.com/file/d/16wrXHFhQC_f_onrQ_EzIZTg01blfy5F5/view?usp=sharing
https://ww1.microchip.com/downloads/en/devicedoc/39632c.pdf

Você também pode gostar