Escolar Documentos
Profissional Documentos
Cultura Documentos
CAMPUS BLUMENAU
CURSO DE CIÊNCIAS DA COMPUTAÇÃO
DISCIPLINA DE SISTEMAS EMBARCADOS
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
Fonte: Autor
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
Fonte: Autor
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
Fonte: Autor
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
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
Fonte: Autor
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