Programação de microcontroladores e Simulação do Sensor de Ré (20/09)
Atividade com o intuito de compreender os conceitos por trás de um microcontrolador PIC 18F1330, programando-o na prática.
1 - Conhecer o Objetivo da Tarefa
Lembre-se que a tarefa final tem como objetivo variar o brilho do LED de acordo com a leitura de um potenciômetro, utilizando uma protoboard.
Por isso, pesquise informações relevantes no datasheet do PIC 18F1330 que ajudem você a refletir a respeito da:

2 - Simulação no Protheus
A simulação primária do circuito prévia à montagem na protoboard será feita pelo software Proteus 8.10 SP0, para compreender as fases da atividade e a utilização do código anteriormente à construção do circuito real.
2.1 - Montagem do Circuito
Para montar o circuito no Proteus, é preciso ter em mente que o "sensor", propriamente dito, nada mais é do que o potenciômetro ligado a uma fonte de 5V.
1ᵃ OBS: Um sensor de distância, ao avaliar a proximidade de um objeto, emite um sinal infravermelho em direção a este objeto para que a luz, através da reflexão, seja direcionada ao seu receptor;
2ᵃ OBS: Quando isso acontece, o sensor (Sharp) processa esse sinal, isto é, essa tensão de natureza analógica e o envia até o Conversor A/D do PIC18F1330 para que seus valores se tornem legíveis. Quando isso acontece, o seu valor (agora convertido) torna-se apto para ser utilizado pelo programador em seu código.
2.1.1 - Circuito do Potenciômetro
No canto esquerdo da tela, encontre a opção Generator Mode, conforme a Figura 2. Selecione a fonte "DC" e atribua a ela o valor de 5V;

Logo mais:
Procure e selecione o resistor "7WATT100R";
Procure e selecione o potenciômetro "POT-HG".
2.1.2 - Circuito do LED
Selecione um resistor "9C04021A4700FLHF3";
Selecione o "LED-RED".
2.1.3 - Circuito do PIC
Selecione o microcontrolador "PIC18F1330".
2.1.4 - Circuito Cristal
Selecione o oscilador externo "CRYSTAL";
Selecione dois capacitores cerâmicos "AVX0603Y5V100N";
2.1.5 - Circuito Final Simulado
Monte o circuito conforme a Figura 3:

2.2 - Programação no MPLAB x IDE
Para programar um microcontrolador, é imprescindível a análise do datasheet dos elementos programáveis do PIC18F1330.
Para realizar a tarefa, é necessário conhecer elementos importantes na programação de um PIC18F. Muitos deles serão exibidos na aba Aulas e Materiais - MICROCONTROLADORES PIC, no canto esquerdo da tela.
2.2.1 - Acender o LED
As primeiras informações para se programar um microcontrolador estão anexadas no arquivo .txt a seguir. Copie e cole o conteúdo desse arquivo no projeto do MPLAB.
Em seguida, configure o PIC para acender SOMENTE O LED, em outras palavras, acionar a saída de um dos pinos do microcontrolador. Após a programação, teste o circuito no simulador Proteus;
Clique com o botão esquerdo do mouse e selecione o arquivo .hex gerado pelo MPLAB x IDE.

2.2.2 - Piscar o LED
Para piscar um LED, é necessário conhecer a sintaxe de uma função de interrupção de um microcontrolador PIC18F. Segue abaixo um exemplo dessa sintaxe:
// Sintaxe da função de interrupção
void __interrupt() interrupcao ()
{
("o que deve acontecer após uma interrupção?")
}
Todos os comandos que o programador acrescentar nesta função estarão intimamente ligados à pergunta:
"O que deve acontecer após uma interrupção?"
"O que eu quero que aconteça após uma interrupção?"
Sendo assim, é preciso configurar o PIC para habilitar o TMR0 (Timer 0) e as interrupções através dos registradores T0CON e INTCON, respectivamente.
Para saber o tempo total que o TIMER0 de 8 Bits gasta para estourar sua contagem, utilizamos a seguinte fórmula:

Conhecendo o tempo total, é possível saber quantos estouros do Timer serão necessários para que o LED comute seu estado a cada 1 segundo.
Observação
Um dos comandos responsáveis por comutar os níveis lógicos (alto e baixo) de uma das saídas do microcontrolador é
"Saída X" = ~"Saída X" ;
Para configurá-la adequadamente, verifique as sintaxes envolvendo os termos TRIS(A, B) e PORT(A,B) no MPLAB x IDE.
2.2.3 - Variar o Brilho do LED
Observação
O comando "TMR0" no MPLAB é uma variável que acompanha a contagem do Timer 0.
Suponha que eu queira acender um LED caso o timer atinja o valor de 100. Suponha que o programador deseje comparar essa variável com o atual valor de contagem do Timer 0 em uma condição "if" (se).
if (TMR0 == 100) // "==" não é operação, e sim CONDIÇÃO
{
LED = 1; // O "LED" pode ser qualquer saída do PIC
// Elevá-lo à 1 significa atribuir nível alto
}
O código diz que o LED acenderá se o Timer atingir o valor 100 em suas contagens.
Verifique o número de Bits de um Timer para saber o limite da sua contagem. Um Timer de 16 Bits, por exemplo, pode contar até 65536. Descubra até quanto um Timer de 8 Bits pode contar.
Não se esqueça de zerar a Flag e o TMR0 após uma interrupção. Procure saber mais sobre estes termos.
ATENÇÃO!
Algumas versões do Proteus não são capazes de incluir a variação da intensidade do brilho do LED em sua interface gráfica.
Para enxergá-la, basta que conectar um osciloscópio na saída do LED. Se o potenciômetro conseguir alterar o período do sinal de saída, a atividade estará correta.
Caso o display do osciloscópio desapareça, clique em "DEBUG", na parte superior da tela, e selecione "DIGITAL OSCILOSCOPE".

Sabendo dessas informações, construa um programa capaz de variar a intensidade do brilho do LED. Por exemplo: "em 50% da resistência do POT-HG, o LED começará a brilhar".
2.2.4 - Configurar o Conversor A/D
Analise a aba de conversão A/D o datasheet do PIC18F1330 e verifique os requisitos necessários para configurá-lo. Verifiquem os seguintes elementos:
Crie um código capaz de mudar o valor da conversão (ADRES) ao variar o potenciômetro.
Verifique se conversão está funcionando utilizando os recursos do Proteus.
2.2.5 - Sensor de Ré Simulado
Elabore um circuito no Proteus e um código no MPLAB x IDE capaz de atender aos requisitos mencionados abaixo:
O grande desafio é o de relacionar a variação do brilho do LED com o conversor AD. Divirtam-se!
Será considerado validado o projeto que, ao variar o potenciômetro, mude a intensidade da forma da onda, assim como a Figura 6;
O potenciômetro próximo de 0% deve monitorar um sinal com a maior parte da onda quadrada em nível lógico baixo;
O potenciômetro próximo de 50% deve monitorar: metade da onda quadrada em nível lógico alto, metade da onda quadrada em nível lógico baixo;
O potenciômetro próximo de 100% deve monitorar uma onda quadrada em nível lógico alto.
Grupo 1
Grupo 2
Grupo 3
3 - Sensor de Ré na Protoboard
Use o conhecimento e a programação desenvolvida nos últimos itens para desenvolver um circuito em protoboard que simule um sensor de ré através do uso de um Sensor Sharp.
4 - Apresentação da Tarefa
Elabore uma pequena apresentação de 5 MIN para mostrar o que você aprendeu na atividade, isto é, todos os conteúdos que foram importantes para a elaboração do seu projeto.
Os alunos (grupos) deverão organizar uma apresentação para mostrar aos professores a resolução da atividade. Use prints do código e do circuito no Proteus para explicar o funcionamento, demonstrando a protoboard montada
Verifique a planilha para consulta (Google Sheets) no cronograma.
Como Será Entregue a Atividade?
OBS: NÃO SERÁ NECESSÁRIO ENTREGAR AS CONSTRUÇÕES NO PROTEUS E OS CÓDIGOS PRÉVIOS AO DE SIMULAÇÃO DE RÉ FINAL.
Essa tarefa deve ser feita de maneira individual até o item 2, e em grupo nos itens 3 e 4. Assim, todos os candidatos enviarão os seus arquivos para a pasta do Google Drive disponibilizada para cada um. O candidato entregará o código final e um print do circuito no Proteus.
SeuNome_Código.c (Código)
SeuNome_PrintProteus.extensãoImagem (Print Proteus)
Nas tarefas de grupo, um dos membros deve ser escolhido para colocar uma foto do circuito na protoboard e o slide feito para a apresentação na sua própria pasta.
SeuNome_Slides.pptx (Slides)
SeuNome_FotoProtoboard.extensãoImagem (Foto Protoboard)
Last updated
Was this helpful?