28
 E.T.E. REPÚBLICA CURSO TÉCNICO DE ELETRÔNICA LABORATÓRIO DE ELETRÔNICA ESPECIALIZADA MICROCONTROLADORES PIC MARÇO DE 2014

Laboratório de Eletrônica Especializada

Embed Size (px)

DESCRIPTION

Apostila da disciplina de laboratório de eletrônica especializada.

Citation preview

I.1- Principais Características ..................................................................................... 2
I.2 – Estrutura Interna ................................................................................................. 2
II – Uso do Winpic800 ................................................................................................. 4
II.1– Descrição dos fusíveis (Configurations Bits) ....................................................... 10
III – Uso do PICkit2 Programmer ................................................................................ 12
IV – Uso do CCS ........................................................................................................ 14
VI.1 – Primeiros passos em CCS C ............................................................................ 14
VI.1.1 – Utilizando o “Projetct Wizard” ........................................................................ 16
V– Primeiros Programas em CCS C ........................................................................... 22
 
I – O Microcontrolador 16F628A
O 16F84 encabeçou durante um bom tempo a lista dos microcontroladores PIC mais populares, representando a “porta de entrada” para os hobistas que desejavam ingressar no mundo dos microcontroladores. O baixo custo e a possibilidade de fácil reprogramação eram seus principais atrativos. Embora ainda esteja em linha, o PIC 16F628 o sobrepujou por apresentar mais recursos e mais flexibilidade a um custo menor.
I.1- Principais Características:
- encapsulamento de 18 pinos - 15 portas de entrada/saída e uma somente de entrada - memória de programa flash com 2K x 14 bits (contra 1K x 14bits do 16F84) - memória EEPROM com 128 x 8 bits (contra 64 x 8bits do 16F84) - memória de dados com 224 x 8 bits (contra 68 x 8bits do 16F84) - duas fontes de osciladores internos: 4MHz e 37 KHz (não disponível no 16F84) - Três timers: timer 0 (de 8 bits); timer 1 (de 16 bits); e timer 2 (de 8 bits). (o 16F84 só possui um módulo contador/temporizador). - USART (canal de comunicação serial) - comparador - compatibilidade de pinos e software com o 16F84 - tensão de alimentação de +3V a +5,5 V - temperatura de trabalho de -40ºC até + 125ºC (faixa de temperatura com designador “E”) - dissipação máxima de energia: 800 mW - correntes máximas de entrada e saída por pino: 25 mA - 10 fontes de interrupção - instruction set  de 35 instruções
I.2 – Estrutura Interna
A figura I.1 mostra o diagrama em blocos da estrutura interna do PIC 16F628A:
É característica da família PIC possuir uma memória RAM que é compartilhada pelos registradores de finalidades específicas (SFRs – Special Function Registers) , tais como o PORTx, TRISx, STATUS, INTCON e OPTION_REG; e pelos registradores de propósito geral (GPRs – General Purpose Register), que são utilizados para armazenamento temporário de dados a serem processados pelo programa.
 
I.3 – Pinagem e Descrição dos Pinos
As figuras III.2 e III.3 mostram a pinagem e a descrição dos pinos, respectivamente, dos PICs 16F62X.
Figura I.2 – Pinagem do PIC 16F62X
 
II – Uso do Winpic800
Em nossas práticas utilizaremos um dos softwares de programação mais utilizados e fáceis de usar: o winpic800 versão 3.55. Ele pode ser baixado gratuitamente do site www.winpic800.com.
 
 
Figura II.1 – Tela principal do Winpic800
A Figura II.1 mostra uma tela com o idioma de exibição – Português-BR – já selecionado. Isto é feito no penúltimo menu drop-down, da esquerda para a direita.
Os próximos passos são:
 
Figura II.3 – Configurando o programador do tipo JDM
 
7
esquerdo. Logo desta janela encontra-se a seleção da porta serial “COM” na qual o programador será conectado, no caso: “COM1”.
-
Figura II.4 – Gravadores USB disponíveis no laboratório
A Figura II.4(a) mostra um gravador “clone” do PICKIT2. Ele possui um software específico de gravação. Já a placa mostrada na Figura II.4(b) é do tipo GTP USB (Grabador TodoPic ), que pode ser gravado na versão do Winpic800 disponível no laboratório (3.55). Basta selecionar GTP – USB – #0.
Obs.: Alguns gravadores USB utilizam um conversor USB-serial que cria uma porta “COM” virtual. Neste caso, deve-se verificar no Gerenciador de Dispositivos do Windows qual o número da porta COM gerada, pois é aleatório (geralmente, funciona a partir de COM4). Diferentemente dos ajustes anteriores, este tipo de ajuste deve ser verificado toda vez que a placa for conectada.
 
FIGURA II.5 – Seleção do tipo de PIC.
3) No próximo passo, o software deve abrir o programa que se deseja gravar no PIC. Este é um programa que já foi compilado por algum software de compilação – tal como o CCS, que utilizaremos em nossas práticas –, e é um arquivo com extensão “.h”.
Figura II.6 – Abrindo o programa compilado para a gravação
 
9
A Figura II.6 mostra que basta clicar no ícone da “pastinha amarela” (para onde a seta está apontando) ou no menu “Arquivo” e logo em seguida em “Abrir”, localizando-se a pasta na qual o arquivo “.h” está gravado (a mesma pasta que foi criada para o projeto e para o programa fonte, no caso, em C CCS). No exemplo, está se abrindo um programa denominado PISCA_LED1.hex que se encontra na pasta PISCA_LED1 (que pode estar dentro da pasta criada para a turma, por exemplo).
4) O quarto passo, caso haja necessidade, é a configuração dos chamados “fusíveis de configuração interna” ou “configuration bits”. Se estes já foram definido em alguma diretiva do programa ou no próprio software de edição/compilação, este passo pode ser pulado. Independentemente do programador utilizado, é necessário escolher uma configuração de trabalho do PIC. O 16F628A possui um registrador específico para esta função, chamado CONFIG, o qual é acessado por meio do endereço 2007h. Como este endereço está fora da faixa de endereço da memória de programa (0000h até 07FFh), os bits desse registrador são acessíveis somente na gravação ou verificação.
Não há necessidade de preocupação com esta posição de memória, pois, como já mencionado, os softwares de gravação, assim como editores de linguagem, costumam permitir que o usuário escolha as opções desejadas para os fusíveis, e então efetuar a gravação automaticamente. Os itens configurados variam de PIC para PIC. O PIC 16F628A possui as seguintes opções: - Tipo de oscilador - Watchdog Timer (WDT) - Power up Timer - Brown Out Detect - Master Clear Eneable - Low Voltage Program - Data EE read Protect - Code Protect
A função de cada um desses fusíveis é descrita na seção II.1. Clicando-se na opção “Config.” do Winpic800 – como é mostrado na Figura II.7 –
é possível configurar estes bits, sem a necessidade de uma diretiva no código em C, ou sem usar o programa editor. Isto também é possível através do MPLAB, que pode trabalhar associado ao CCS, no menu Configure/Configuration Bits... 
Figura II.7 – Acesso aos fusíveis de configuração.
 
10
  A função “Config” do Winpic800 também pode ser usada simplesmente para
checar as configurações feitas anteriormente para o programa em questão. Se não houver coincidência com o que foi previamente configurado, geralmente é um dentre dois erros cometidos pelo usuário: - O PIC não foi corretamente selecionado (Passo 2); ou - O usuário abriu o programa errado.
5) Uma vez que a placa gravadora esteja conectada na porta “COM” (conector DB9) e o PIC tenha sido detectado, clica-se no ícone que tem o formato de um circuito integrado com uma seta vermelha apontado para ele (“programar tudo”), como é destacado na Figura II.8, e é só aguardar o tempo de gravação e verificação para ver se tudo correu bem.
Figura II.8 – Programando o PIC
II.1 – Descrição dos fusíveis (Configurations Bits)
Tipo de Oscilador
 
Watchdog Timer
O WDTE é um fusível de programação que permite habilitar ou desabilitar o WDT (Watchdog Timer  – temporizador “Cão de Guarda”), que é um temporizador interno RC que quando ocorre um overflow  ou estouro (atinge o máximo da contagem) provoca um reset no programa que esteja funcionando em modo normal. Tem um clock independente, rodando livre e independentemente do clock principal. A principal finalidade do WDT é recuperar a CPU de eventuais travamentos no programa, que podem ocorrer por interferências externas ou erros no software. É importante em casos onde o programa não pode parar de funcionar, como o caso de um computador de bordo. Para a maioria dos nossos programas o WDTE deve estar desabilitado, pois se o WDT estiver habilitado, este deve ser resetado de tempos em tempos, de forma a nunca ocorrer o overflow do mesmo. Este ajuste não pode ser alterado durante a execução do programa.
Power up Timer
O temporizador de power up (PWRT), se estiver habilitado, permite que o PIC só comece a operar cerca de 72 ms após a fonte ter sido ligada. Evita problemas de inicialização incorreta ou travamentos devido ao tempo de estabilização necessário da fonte de alimentação ou do reset externo.
Master Clear Eneable (MCLRE)
 
Brown Out Detect Eneable (BODEN)
A habilitação desta opção irá resetar o PIC caso a tensão de alimentação caia abaixo de certo valor (normalmente 4 V). Isto pode evitar travamentos com determinadas quedas na tensão de alimentação.
Low Voltage Program (LVP)
Ativa ou não a programação de baixa voltagem. Este recurso permite que a memória de programa do PIC seja gravada em baixa tensão (5 V ao invés dos tradicionais 13 V aplicados ao pino de programação). Isto favorece a criação de sistemas onde um PIC grava o programa de outro PIC ou sistemas de upgrades  remotos. Como os 13V raramente estão disponíveis nos projetos, este processo padroniza o hardware em níveis TTL. Em geral, esta função estará desabilitada de forma a permitir que o pino RB4/PGM atue como I/O.
Data EE Read Protect
Se esta opção estiver ativada não será possível ler a EEPROM interna através do gravador do PIC. Se esta opção estiver desativada todos os dados armazenados nesta memória serão perdidos durante a gravação.
Code Protect (CP)
Uma vez ativado o código de proteção, o programa gravado no chip não poderá mais ser lido, nem pelo programador, embora haja a possibilidade de reprogramação. Isto evita cópias indevidas.
Checksum
O checksum é o resultado da soma de todos os valores numéricos armazenados na memória de programa do PIC. Trata-se de uma técnica de verificação de erros. Se um programa já gravado possui o mesmo checksum de um programa compilado, mesmo com o code protect ativado, deduz-se, por exemplo, que os dois possuem o mesmo código fonte.
Número de Identificação
O PIC possui 4 bytes (posições de 2000h a 2003h) que podem ser gravados para uma identificação de versão, por exemplo. Facilita o rastreamento do software em caso de problemas futuros, mesmo com o código de proteção ativado. Só os quatro bits menos significativos de cada byte estão disponíveis, de forma que 4 dígitos de 0 a 9 podem ser usados como ID.
III – Uso PICkit2 Programmer
 
13
1º) Conecte o gravador numa entrada USB do computador e clique no ícone abaixo na área de trabalho:
Figura III.1 – Ícone do PICkit2 na área de trabalho
2º) após abrir a tela abrir a tela abaixo (Figura III.2), a placa e o PIC ligado a ela já devem ter sido detectados. Se a mensagem “No device found” aparecer em na janela “Device”, clique em “Programmer/Manual Device Select”.
Figura III.2 – Tela do software de programação do PICkit2
 
14
4º) Após a importação, clique em “Write” para gravar o PIC.
IV– Uso do CCS
A partir de agora passaremos a ter noções sobre a linguagem C para sistemas embarcados (embedded systems), isto é, sistemas dedicados (para propósitos específicos, em geral, automação e controle) que integram um sistema elétrico e/ou mecânico maior. Muitos desses sistemas, hoje em dia, são baseados em microcontroladores. Os sistemas dedicados têm objetivos opostos aos sistemas de propósito geral, como os PCs, voltados tipicamente para processamentos de dados. O embedded C  é uma extensão da linguagem C para operação com sistemas embarcados, incluindo operações de I/O, dentre outros recursos.
A aplicação da linguagem C em programação de microcontroladores tem ganhado campo nos últimos anos, substituindo com várias vantagens a programação em assembly que foi originalmente majoritária nessa aplicação.
Adotamos como plataforma de desenvolvimento de nossos programas em linguagem C o software PCWHD da CCS (Custom Computer Service), empresa responsável pelos primeiros compiladores C para os microcontroladores da Microchip. A versão demo, com duração de 45 dias, pode ser baixada do site www.ccsinfo.com.
Os chamados compiladores C-Aware IDE da CCS possuem as seguintes versões, cuja aquisição depende da necessidade do cliente: - PCW Para PICs 10/12/16; - PCWH Para PICs 10/12/16/18; - PCDIDE Para PICs 24/dsPIC; - PCWHD Para PICs 10/12/16/18 e PICs 24/dsPIC.
O PCWHD, além do módulo IDE, é constituído por módulos compiladores, chamados compiladores de linha de comando (comand line), que podem ser comprados separadamente, conforme a necessidade: PCB compilador para a linha base (pics de 12 bits) PCM compilador para a linha intermediária (pics de 14 bits) PCH compilador para o topo de linha (pics de 16 bits) PCD compilador para os pics de 24 bits
IV.1 – Primeiros passos em CCS C
Esta seção tem por objetivo demonstrar o uso mais básico e imediato do CCS através do processo de criação de um programa fonte em C e de exemplos de programas. A partir daí, um primeiro contato com as funções da linguagem C, bem como sua forma de estruturação, será tomado. A versão ora usada em nosso laboratório é o PCWHD versão 5.009.
Após se clicar no ícone esquematizado na Figura VI.1, na área de trabalho, será exibida a tela que é mostrada na Figura VI.2.
Figura IV.1 – Ícone do CCS na área de trabalho
 
Figura IV.2
À semelhança do MPLAB (que edita programas em assembly) e outros softwares de programação de microcontroladores e CLPs, o CCS organiza suas aplicações em “projetos”. O projeto consiste em um único arquivo de projeto (extensão “.ccspjt”, na atual versão) e um ou mais arquivos fontes em C (extensão “.c”). Só podem ser compilados arquivos fontes que façam parte de um projeto. Assim, o primeiro passo é a criação de um arquivo fonte em C e sua respectiva vinculação a um projeto. Isto é feito usando uma dentre três maneiras mais usuais:
1º) Trabalhando com o CCS de dentro do MPLAB; ou 2º) Utilizando-se o “Project Wizard” do CCS; ou ainda 3º) Manualmente
 
16
até porque se torna um pouco inviável explorar todos esses recursos durante o período letivo.
IV.1.1 – Utilizando o “Projetct Wizard”
O “Projetc Wizard” do CCS é a maneira mais simples, rápida e direta de fazer as inicializações necessárias para um novo programa fonte em linguagem C, inclusive as configurações dos fusíveis. Algumas configurações de fusíveis, inclusive, não precisariam nem ser especificadas, pois o compilador os configura automaticamente (situação default ), da seguinte maneira:
- A programação em baixa tensão (Low Voltage Program ou LVP) fica desativada; - O Power up Timer fica ativado;
- O Watch dog Timer  fica automaticamente desativado se não estiver presente no código fonte a função “restart_wdt()”; - A configuração automática dos bits de configuração é feita baseada na diretiva “#use delay(); - O Master Clear Eneable (MCLRE) é ativado.
Passos:
1º) Clique “File”, logo em seguida em “New”, e finalmente em “Project Wizard” (Figura IV.3):
Figura IV.3
17
2º) Ao ser aberta a tela “Salvar como” (Figura IV.4), salve o projeto na pasta desejada, com o nome desejado (que por default  é “main.ccspjt).
Figura IV.4
3º) Na próxima tela que se abrirá (Figura IV.5), no item “Device” – que é a primeiro que se abre – selecione PIC16 na caixa intitulada “Family” (ou mantenha o defaut  “all”), na aba “Options” – “General” – “Device”;
Na caixa “Device”, na mesma aba, selecione o número do nosso PIC: 16F628A. Ainda na mesma aba, abaixo, estão as opções de clock. Na caixa “Oscillator Type”
selecione “Internal”, para que o PIC possa funcionar com seu clock interno, sem a necessidade de clocks externos (como um cristal, por exemplo). Na caixa “Clock Speed”, digite a frequência desejada, que pode ser selecionada em Hz, KHz ou MHz. No caso, usaremos a frequência do clock interno de 4 MHz (4.000.000 Hz).
Mais abaixo, mantenha o Watchdog Timer desabilitado, mantendo “desclicado” o “eneable” na opção WDT.
4º) Desça a barra de rolagem vertical na parte esquerda da tela até o final e selecione a opção “Fuses” (Figura IV.6).
 
18
PIC – pino 4 – prescinda do uso de um resistor de pull-up, já que a entrada de Master Clear não será utilizada. Isto disponibiliza também a entrada RA5).
Figura IV.5
Habilite o “Power Up Time” e o “Reset when brownout detected”. Clicando na aba “Code” (Figura IV.8) pode-se verificar a configuração escolhida
para os fusíveis (que teria de ser introduzida manualmente no programa caso não se utilizasse o o “Project Wizard”). O que aparece à direita da dupla barra (//) são comentários. As linguagens de programação dispõem desse recurso para facilitar a interpretação do que o programa está fazendo, servindo apenas para quem está lendo o código, pois não constituem comandos ou funções da linguagem. A dupla barra é utilizada para comentários de linha (apenas em uma linha), já para comentários de bloco (várias linhas) deve-se utilizas os delimitadores “/*” no início do comentário e “*/” no final do comentário.
 
Figura IV.8
5º) Clique em “Create Project” no canto inferior direito e será exibida a tela da figura IV.9:
Figura IV.9
 
21
manualmente, caso não se houvesse empregado o “Project Wizard”, usando as seguintes diretivas:
#include<16f628a.h>
#use delay(clock=4000000)
A diretiva “include” inclui um programa fonte em outro. A primeira linha inclui um arquivo cabeçalho (header file, com extensão “.h”) com as configurações do PIC que vai ser utilizado (16F628A). Um arquivo cabeçalho é um programa reutilizável em vários outros programas, pois permite manter separados certos elementos do código fonte principal.
Sua forma geral é:
#include "nome_do_arquivo" ou #include <nome_do_arquivo>
A diferença entre se usar " "  ou < >  esta somente na ordem de procura nos diretórios pelo arquivo especificado. As aspas devem ser utilizadas, caso se deseje informar o nome do arquivo com o caminho completo, ou o arquivo estiver no diretório de trabalho. Se o arquivo for próprio do sistema, use < >, para procura por caminhos pré- especificados do compilador.
Toda diretiva é iniciada por “#” e não usa “;” no final da linha.
A diretiva “fuses” configura os fusíveis (configurations bits), de acordo com o quadro abaixo:
FUNÇÃO DESCRIÇÃO Master Clear MCLR
NOMCLR Habilita Master Clear
NOBROWNOUT Habilita brownout detect
NOWDT Habilita Watchdog Timer
NOPUT Habilita Power Up Timer
Desabilita Power Up Timer Low Voltage Program LVP
NOLVP Habilita prog. em b. tensão
desabilita prog. em b. tensão
Code Protect PROTECT NOPROTECT
Data EE Read Protect CPD NOCPD
Leitura da E²PROM prot. Leitura da E² PROM não p.
Oscilador LP, RC, XT, HS, INTRC_IO, INTRC_OSCOUT, EC e EC_OSCOUT
Vários tipos de clock internos e externos
 
22
  A diretiva ” use delay(clock=4000000)”, especifica a frequência do clock em 4 MHz.
V – Primeiros Programas em CCS C
Um dos conceitos mais importantes da linguagem C é o de função. Uma função encerra a idéia de uma sub-rotina, ou seja, um subprograma.
Todo programa em C deve ter uma e somente uma função principal, denominada “main”. O nosso programa mínimo em linguagem C está esquematizado abaixo:
1º PROGRAMA – Programa_Mínimo em CCS C
#include <16F628A.h>
}
Em qualquer compilador de linguagem C tradicional a função Main, com as duas chaves delimitando o início e o fim da função, já seria o bastante. No caso do compilador para microcontroladores, entretanto, há a necessidade da inclusão do arquivo cabeçalho (header ) que contém as informações necessárias ao PIC que será usado (no caso, o PIC 16F628A). Daí a necessidade da diretiva “include” no início do programa (como visto anteriormente, isto é feito automaticamente ao se usar o “Project Wizard”).
O programa anterior nada faz, mas já é compilado sem erros. Experimente digitar, compilar e gravar os programas a seguir e, com base nas explicações de sala de aula, responda o questionário a seguir:
2º PROGRAMA – Programa Pisca_Led1
#use delay(clock=4000000)
#use delay(clock=4000000)
#define led pin_b5
return(0); }
#use delay(clock=4000000)
main() {
while(true) {
output_bit(pin_B1,0); // coloca o bit 1 da porta B em nível baixo delay_ms(1000); output_bit(pin_B1,1); // coloca o bit 1 da porta B em nível alto delay_ms(1000);
} return(0); }
#use delay(clock=4000000)
#use delay(clock=4000000)
} return(0); }
Exercícios
1) Numere a sequência de passos abaixo de forma a colocá-la na ordem certa:
 
 
3) Em função do hardware abaixo, responda as questões a seguir:
a) Sabendo-se que o circuito será montado num protoboard apenas com os componentes apresentados, que cuidados devem ser tomados na configuração dos fusíveis em relação ao Master Clear e ao tipo de clock? Por quê? O que há de diferente na base de testes empregada no laboratório no tocante a esses itens?
b) Calcule um adequado valor para R1 considerando-se: tensão de saída em nível alto – 5,0 V corrente nominal do led – 20 mA tensão sobre o led (aceso) – 2,0 V
c) Qual dos programas Pisca_led (1, 2 ou 3) estaria adequado para este hardware, de forma que o led permaneça 1 segundo aceso e 1 segundo apagado?
d) Altere este programa de forma que:
 
  4) Quais os limites máximo e mínimo da função Delay?
5) Redesenhe o esquema de forma a atender os outros dois programas Pisca_led
6) Em relação a linguagem C, responda:
a) É uma linguagem estruturada? Por quê? b) É uma linguagem case sensitive? O que acontece no CCS? c) Defina o conceito de função em linguagem C d) Defina o conceito de diretiva e) Explique porque instruções de desvio incondicional, do tipo GOTO, são desaconselhados em C.
7) Correlacione as colunas:
1 – OUTPUT_HIGH (pino) 2 – OUTPUT_LOW (pino) 3 – OUTPUT_bit (pino, estado) 4 – OUTPUT_X (byte)
( ) coloca o pino especificado em determinado nível lógico ( ) coloca o pino especificado em “0” ( ) coloca o pino especificado em “1” ( ) Escreve um byte em uma determinada porta do microcontrolador.
8) O arquivo de um programa fonte em “C” tem extensão:
( ) .HEX ( ).CCSPJT ( ).C ( ).PBAS
9) O arquivo de um programa para ser gravado no PIC deve ter extensão:
( ) .HEX ( ).CCSPJT ( ).C ( ).PBAS
10) No Programa Pisca_Led3 cite exemplos de:
a) instrução de entrada e saída b) diretiva c) arquivo cabeçalho d) instrução de controle de fluxo e) comentário f) instrução de atraso
11) Quais as formas de citar um comentário em C?
 
27
13) Altere o 5º programa e o 6º programa de maneira a passar a informação de binário para hexadecimal.