- Materiais requisitados:
- Memória flash:
- ICSP (Programação serial em circuito):
- Circuito e Hardware:
- Queimando o código usando MPLAB IPE:
Em nossos dois tutoriais anteriores, discutimos Como começar a usar o PIC usando o compilador MPLABX e XC8, também fizemos nosso primeiro programa de piscar de LED com PIC e o verificamos por simulação. Agora é hora de colocarmos as mãos no hardware. Neste tutorial vamos construir um pequeno circuito em uma placa Perf para piscar o LED usando PIC. Vamos descarregar o programa em nosso microcontrolador PIC e verificar o LED piscando. Para programar o PIC MCU, usaremos MPLAB IPE.
Materiais requisitados:
Conforme discutido em nosso tutorial anterior, precisaremos dos seguintes materiais:
- PicKit 3
- PIC16F877A IC
- 40 - Suporte de pino IC
- Quadro de desempenho
- 20 MHz Crystal OSC
- Alfinetes de Bergstick femininos e masculinos
- Capacitor 33pf - 2Nos, 100uf e 10uf cap.
- Resistor de 680 ohm, 10K e 560 ohm
- LED de qualquer cor
- 1 Kit de soldagem
- IC 7805
- Adaptador 12V
O que acontece quando "queimamos" um microcontrolador !!
É uma prática usual carregar o código em um MCU e fazê-lo funcionar dentro do MCU.
Em, para entender isso, vamos dar uma olhada em nosso programa
Como podemos ver, este código é escrito em linguagem C e não fará sentido para o nosso MCU. É aqui que entra a parte do nosso compilador; um compilador é aquele que converte este código em um formato legível por máquina. Esta forma legível por máquina é chamada de código HEX, cada projeto que criarmos terá um código HEX que estará no seguinte diretório
** Sua localização ** \ Blink \ Blink.X \ dist \ default \ production \ Blink.X.production.hex
Se você está tão interessado em saber como é este código HEX, basta abri-lo usando o bloco de notas. Para nosso programa Blink, o código HEX será semelhante ao seguinte:
: 060000000A128A11FC2F18: 100FAA008316031386018312031386018312031324: 100FBA0086150D30F200AF30F100C130F000F00BB1: 100FCA00E42FF10BE42FF20BE42F0000831203133A: 100FDA0086110D30F200AF30F100C130F000F00B95: 100FEA00F42FF10BF42FF20BF42F0000DB2F830107: 060FFA000A128A11D52F36: 02400E007A3FF7: 00000001FF
Existem maneiras de como ler isso e como entender e reverter para a linguagem Assembly, mas está completamente fora do escopo deste tutorial. Então, para simplesmente resumir; o HEX é o resultado final do software de nossa codificação e é isso que será enviado pelo MPLAB IPE para queimar o MCU.
Memória flash:
O código HEX é armazenado no MCU em um local chamado memória Flash. A memória flash é o local onde nosso programa será armazenado dentro do MCU e executado a partir daí. Depois de compilar o programa em nosso MPLABX, teríamos as seguintes informações sobre o tipo de memória no console de saída
Como acabamos de compilar um pequeno programa de LED piscando, o resumo da memória mostra que acabamos de consumir 0,5% do espaço disponível para o programa e 1,4% do espaço de dados.
A memória do microcontrolador PIC16F877 é basicamente dividida em 3 tipos:
Memória de programa: Esta memória contém o programa (que escrevemos), depois de o termos queimado. Como um lembrete, Program Counter executa comandos armazenados na memória do programa, um após o outro. Como escrevemos um programa muito pequeno, consumimos apenas 0,5% do espaço total. Esta é uma memória não volátil, significa que os dados armazenados não serão perdidos após o desligamento.
Memória de dados: Este é o tipo de memória RAM, que contém registros especiais como SFR (Registro de Função Especial) que inclui o temporizador Watchdog, Redefinição Brown out etc. e GPR (Registro de Propósito Geral) que inclui TRIS e PORT etc. As variáveis que são armazenadas na memória de dados durante o programa são excluídos após desligarmos o MCU. Qualquer variável declarada no programa ficará dentro da memória de dados. Esta também é uma memória volátil.
EEPROM de dados (memória somente leitura programável apagável eletricamente): Uma memória que permite armazenar as variáveis como resultado da gravação do programa escrito. Por exemplo, se atribuirmos uma variável "a" para salvar um valor de 5 nela e armazená-lo na EEPROM, esses dados não serão perdidos mesmo se a energia for desligada. Esta é uma memória não volátil.
Memória de programa e EEPROM são memórias não voláteis e são chamadas de Memória Flash ou EEPROM.
ICSP (Programação serial em circuito):
Estaremos programando nosso PIC16F877A usando a opção ICSP que está disponível em nosso MCU.
Agora, o que é ICSP?
ICSP é uma maneira simples que nos ajuda a programar uma MCU mesmo depois de colocada dentro de nosso painel de projeto. Não há necessidade de ter uma placa de programador separada para programar o MCU, tudo o que precisamos são 6 conexões do programador PicKit3 para nossa placa da seguinte forma:
1 |
VPP (ou MCLRn) |
Para entrar no modo de programação. |
2 |
Vcc |
Pino de alimentação 11 ou 32 |
3 |
GND |
PIN de solo 12 ou 31 |
4 |
PGD - Dados |
RB7. PIN40 |
5 |
PGC - Relógio |
RB6. PIN 39 |
6 |
PGM - habilitar LVP |
RB3 / RB4. Não obrigatório |
ICSP é adequado para todos os pacotes PIC; tudo o que precisamos é puxar esses cinco pinos (6º pino PGM é opcional) do MCU para o Pickit3 como mostrado na imagem abaixo.
Circuito e Hardware:
Agora, temos nosso código HEX pronto e também sabemos como conectar nosso PicKit 3 ao nosso PIC MCU usando ICSP. Então, vamos soldar o circuito com a ajuda dos esquemas abaixo:
No circuito acima, usei um 7805 para regular a saída de 5 V para o meu PIC MCU. Este regulador será alimentado por um adaptador de mart de parede de 12V. O Led VERMELHO é utilizado para indicar se o PIC está energizado. O conector J1 é usado para programação ICSP. Os pinos são conectados conforme discutido na tabela acima.
O primeiro pino MCLR deve ser mantido alto com a ajuda de um 10k por padrão. Isso evitará que o MCU seja reiniciado. Para reinicializar o MCU, o pino MCLR deve ser aterrado, o que pode ser feito com a ajuda da chave SW1.
O LED é conectado ao pino RB3 por meio de um resistor de valor 560 ohms (ver calculadora do resistor de LED). Se tudo estiver correto assim que nosso programa for carregado, este LED deve piscar com base no programa. Todo o circuito é construído no Perfboard soldando todos os componentes nele, como você pode ver na imagem no topo.
Queimando o código usando MPLAB IPE:
Para gravar o código, siga as etapas abaixo:
- Inicie o MPLAB IPE.
- Conecte uma extremidade do PicKit 3 ao PC e a outra extremidade aos pinos ICSP na placa de desempenho.
- Conecte-se ao seu dispositivo PIC clicando no botão conectar.
- Procure o arquivo Blink HEX e clique em Programa.
Se tudo correr conforme o planejado, você deverá obter a mensagem de sucesso na tela. Verifique o Código e o Vídeo abaixo para uma demonstração completa e use a seção de comentários se tiver alguma dúvida.
Obrigado!!!
Vamos nos encontrar no próximo tutorial, onde brincaremos com mais LEDs e um switch.