43
Prof. M.Sc. Tácio Luiz de Souza Barbeiro http://docentes.unirp.edu.br/tacio Introdução aos Microcontroladores PIC Minicurso

Minicurso PIC

Embed Size (px)

Citation preview

Page 1: Minicurso PIC

Prof. M.Sc. Tácio Luiz de Souza Barbeiro

http://docentes.unirp.edu.br/tacio

Introdução aos Microcontroladores PIC

Minicurso

Page 2: Minicurso PIC

Motivação

� Desenvolvimento de Sistemas Eletrônicos Microprocessados – Embbeded Systems;

� Mercado de microcontroladores em expansão –Novos chips e famílias;

� Estima-se que, em poucos anos, em média uma pessoa interagirá com 300 dispositivos microcontroladores diariamente;

� Aplicação em diversas áreas: Automação, Controle e Instrumentação de Processos, etc.

Page 3: Minicurso PIC

Fabricantes de Microcontroladores

� INTEL (80C51) - www.intel.com/design/MCS51/� MOTOROLA (HC908) - www.mot-sps.com� MICROCHIP (PIC) - www.microchip.com� TEXAS INSTRUMENTS (MSPs) - www.ti.com� MITSUBISHI - www.mitsubishichips.com� ATMEL - www.atmel.com� PHILIPS - www.philips.com� NATIONAL - www.national.com

Page 4: Minicurso PIC

Introdução

Um microcontolador é um sistema computacional completo, no qual estão incluídos uma CPU (Central Processor Unit), memória, um sistema de clock, sinais de I/O (Input/Output), além de outros possíveis periféricos, tais como, módulos de temporização e conversores A/D entre outros, integrados em um mesmo componente (chip). As partes mais integrantes de qualquer computador, e que também estão presentes, em menor escala, nos microcontroladores são:� Unidade Central de Processamento (CPU);� Sistema de Clock para dar seqüência às atividades da CPU;� Memória para armazenamento de instruções e manipulação de dados;� Entradas para interiorizar na CPU informações do mundo externo;� Saídas para exteriorizar as informações processadas pela CPU para o mundo externo;� Programa (Software) para que o sistema faça alguma coisa útil.

Page 5: Minicurso PIC

Estruturação Interna

� ULA (Unidade Lógica Aritmética);� Memória de Programa – Bus de 14 bits;� Memória de Dados RAM – Bus de 8 bits;� Portas: PORTA, B, C e D – Pinos de I/O;� EEPROM (Memória de Dados Não volátil);� Timers: TIMER0, TIMER1 e TIMER2� Comparador - Módulo CCP (Capture, Compare e PWM);� Porta Serial – USART;� Circuitos Internos: Reset, Osciladores, Watchdog Timer

(WDT), Power-up e Brown-out.

Page 6: Minicurso PIC

O PIC16F877� Microcontrolador RISC de 40 pinos;� Memória de Programa FLASH (8K de 14 bits);� Memória de dados 368 bytes;� Memória EEPROM 256 bytes;� Freqüência de operação até 20MHz;� 33 I/O (Entradas/Saídas) configuráveis:

PORT A: RA0 – RA5 (6 PINOS)PORT B: RB0 – RB7 (8 PINOS)PORT C: RC0 – RC7 (8 PINOS)PORT D: RD0 – RD7 (8 PINOS)PORT E: RE0 – RE2 (3 PINOS);

� 14 Interrupções;� 3 Timers;� 2 Módulos CCP (Capture/Compare/PWM);� Comunicação Serial USART;� 8 canais de entrada de conversores A/D de 10 bits.

Page 7: Minicurso PIC

Principais Características Elétricas

� Temperatura de trabalho: -40°C até +125°C;� Temperatura de Armazenamento: -65°C até 150°C;� Tensão de Trabalho: 3.0Va 5.5V;� Voltagem Máxima nos demais pinos (em relação ao

Vss): -0.3V até (VDD + 0.3V);� Dissipação máxima de potência: 1.0 W;� Corrente máxima de saída no pino Vss: 350 mA;� Corrente máxima de saída no pino VDD: 250 mA;� Corrente máxima de entrada de um pino: 25 mA;� Corrente máxima de saída de um pino: 25 mA.

Page 8: Minicurso PIC

Pinagem do PIC 16F877

Page 9: Minicurso PIC

Descrição dos Pinos

I/O digital bidirecionalI/O38RB5

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/P

O

I

TIPO

I/O digital bidirecional ou dados da programação serial (ICSP)40RB7/PGD

I/O digital bidirecional ou clock da programação serial (ICSP)39RB6/PGC

I/O digital bidirecional37RB4

I/O digital bidirecional ou entrada para programação em baixa tensão36RB3/PGM

I/O digital bidirecional35RB2

I/O digital bidirecional34RB1

I/O digital bidirecional ou entrada para interrupção externa33RB0/INT

I/O digital bidirecional ou entrada analógica 4 ou slave select para a porta de comunicação serial síncrona

7RA5/SS/AN4

I/O digital bidirecional ou entrada de clock para contador TMR06RA4/T0CKI

I/O digital bidirecional ou entrada analógica 3 ou tensão de referência analógica positiva

5RA3/AN3/VREF+

I/O digital bidirecional ou entrada analógica 2 ou tensão de referência analógica negativa

4RA2/AN2/VREF-

I/O digital bidirecional ou entrada analógica 13RA1/AN1

I/O digital bidirecional ou entrada analógica 02RA0/AN0

MAster Clear (reset) externo. Lógica baixa para reset1MCLR/VPP 1

Saída para cristal exetrno14OSC2/CLKOUT

Entrada para ceristal externo (fonte de clock)13OSC1/CLKIN

DescriçãoN°PINONome PINO

Page 10: Minicurso PIC

Descrição dos Pinos

I/O digital bidirecional ou Porta paralela escravaI/O29RD6/PSP6

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

I/O

TIPO

I/O digital bidirecional ou Porta paralela escrava30RD7/PSP7

I/O digital bidirecional ou Porta paralela escrava28RD5/PSP5

I/O digital bidirecional ou Porta paralela escrava27RD4/PSP4

I/O digital bidirecional ou Porta paralela escrava22RD3/PSP3

I/O digital bidirecional ou Porta paralela escrava21RD2/PSP2

I/O digital bidirecional ou Porta paralela escrava 20RD1/PSP1

I/O digital bidirecional ou Porta paralela escrava 19RD0/PSP0

I/O digital bidirecional ou Recepção para comunicação USART assíncrona ou via de dados para para comunicação USART síncrona

26RC7/RX/DT

I/O digital bidirecional ou Transmissão para comunicação USART assíncrona ou via de clock para para comunicação USART síncrona

25RC6/TX//CK

I/O digital bidirecional ou saída de dados SPI24RC5/SDO

I/O digital bidirecional ou entrada de dados SPI ou I/O de dados I2C23RC4/SDI/SDA

I/O digital bidirecional ou entrada de clock serial síncrono ou saida para os modos SPI e I2C

18RC3/SCK/SCL

I/O digital bidirecional ou I/O para Capture, Compare, PWM 117RC2/CCP1

I/O digital bidirecional ou entrada para cristal esxterno para TMR1 ou I/O para Capture, Compare, PWM 2

16RC1/T1OSI/ CCP2

I/O digital bidirecional ou saída para cristal esxterno para TMR1 ou entrada de clock para contador TMR1

15RC0/T1OSO/ T1CK1

DescriçãoN°PINONome PINO

Page 11: Minicurso PIC

Descrição dos Pinos

P

P

I/O

I/O

I/O

TIPO

Alimentação Positiva (+5V)11,32VDD

Referência TERRA12,31VSS

I/O digital bidirecional ou Select Control para a Porta paralela escrava ou entrada analógica 7

10RE2/CS/AN7

I/O digital bidirecional ou Controle de Escrita para a Porta paralela escrava ou entrada analógica 6

9RE1/WR/AN6

I/O digital bidirecional ou Controle de Leitura para a Porta paralela escrava ou entrada analógica 5

8RE0/RD/AN5

DescriçãoN°PINONome PINO

LEGENDA:

I = Input (Entrada) O = Output (Saída) I/O = Input/Output (Entrada/Saída) P = Power (Alimentação)

Page 12: Minicurso PIC

Parâmetros de Configuração

� Tipo de Oscilador: 2 grupos: Internos e ExternosOscilador Interno: 32 KHz ou 4 MHz (Seleção por software)

Osciladores Externos:

- RC_CLKOUT: Para oscilador externo tipo RC com o pino 15 operando como CLKOUT, isto é, com uma onda quadrada de ¼ da freqüência;

- RC_I/O: Para oscilador externo tipo RC com o pino 15 operando como I/O(RA6);

- INTOSC_CLKOUT: Para oscilador interno com o pino 15 operando como I/O (RA6);

- EC_I/O: Para clock externo (circuito auto-oscilante) com o pino 15 operando como I/O (RA6);

- XT: Para osciladores externos tipo cristal ou ressoadores;

- HS: Para cristais ou ressoadores externos com frequencias elevadas (acima de 4 MHz);

- LP: Para cristais ou ressoadores externos com baixas freqüências (abaixo de 200 KHz). Utilizado para minimizar consumo.

Page 13: Minicurso PIC

Parâmetros de Configuração

� WATCHDOG (WDT) é um recurso disponível no PIC que parte do princípio que todo sistema é passível de falha. Se todo sistema pode falhar, cabe ao mesmo ter recursos para que, em ocorrendo uma falha, algo seja feito de modo a tornar o sistema novamente operacional. Dentro do PIC existe um contador incrementado por um sinal de relógio (clock) independente. Toda vez que este contador extrapola o seu valor máximo retornando a zero, é provocado a reinicialização do sistema (reset).

� Clear Watchdog: Se o sistema estiver funcionado da maneira correta, de tempos em tempos uma instrução denominada clear watchdog timer (CLRWDT) zera o valor deste contador, impedindo que o mesmo chegue ao valor máximo. Desta maneira o Watchdog somente irá "estourar" quando algo de errado ocorrer.

Page 14: Minicurso PIC

Parâmetros de Configuração

� POWER UP TIMER: é um temporizador que faz com que o PIC, durante a energização (power up), aguarde alguns ciclos de máquina (72 ms) para garantir que todo o sistema periférico (display, teclado, memórias, etc) estejam operantes quando o processamento estiver sendo executado.

� BROWN OUT DETECT: O Brown Out monitora a diferença de tensão entre VDD e VSS, provocando a reinicialização do PIC (reset) quando esta cai para um valor inferior ao mínimo definido em manual (4V tipícopor mais de 100µs).

� LOW VOLTAGE PROGRAM: Trata-se do sistema de programação do PIC (gravação da memória de programa) em baixa tensão: 5V. Normalmente essa programação é habilitada por uma alta (13 V) no pino MCLR.

� CÓDIGO DE PROTEÇÃO: Para gravação em série é muito importante que esta opção esteja ativada, pois impedirá que qualquer pessoa consiga ler o programa gravado dentro do PIC.

Page 15: Minicurso PIC

Linguagens de Programação

� Assembly (Baixo Nível):� - Maior Eficiência;� - Maior Velocidade de Execução;� - Alta Complexidade;� - Baixa Portabilidade.

� Linguagem C (Alto Nível):� - Programação Estruturada (funções);� - Maior velocidade na criação de novos projetos;� - Maior Portabilidade;� - Eficiência Considerável.

Page 16: Minicurso PIC

Compiladores

� Linguagem de Programação Assembly:

→ MPASM (Integrado ao MPLAB da Microchip)

� Linguagem de Programação C:

→ CCS→ MicroC

Page 17: Minicurso PIC

Ambiente de Desenvolvimento MPLAB

� Software Gratuito – www.microchip.com;� Linguagem de programação padrão: Assembly;� Gerenciamento de projetos;� Compilação;� Simulação;� Emulação;� Gravação do chip;

Page 18: Minicurso PIC

Desenvolvimento de Sistemas

� Entende-se por sistema, mais especificamente sistemas eletrônicos microprocessados (embedded systems), ao conjunto formado pelo hardware com microprocessador ou microcontrolador mais periféricos, integrado ao software básico que implementa as funções determinadas para a aplicação.O desenvolvimento de hardware é executado por um engenheiro ou técnico eletrônico que normalmente pesquisa, estuda e projeta os circuitos eletrônicos, de preferência com componentes disponíveis no mercado. Esta atividade depende basicamente de estudo, experiência acumulada e de componentes disponíveis e, uma vez projetado e testado dificilmente sofrerá alterações.O desenvolvimento de software, ao contrário do hardware, depende muito da criatividade do programador e, pode ser alterado com maior freqüência para, por exemplo, estar inserindo novas funções na aplicação.

Page 19: Minicurso PIC

Desenvolvimento de SistemasPara desenvolver sistemas com microcontroladores, o projetista deve seguir os seguintes passos:

� Especificar e documentar o sistema (problema ou idéia);� Projetar e documentar o hardware;� Descrever a implementação do software do sistema através de

fluxogramas ou outra forma de representação gráfica ou textual;� Editar um arquivo com instruções mnemônicas (arquivo fonte)

cada bloco apresentado no fluxograma, utilizando um editor;� Utilizar um assembler (software) para transcrever as instruções

mnemônicas em códigos de máquina necessários a execução do programa pelo microcontrolador;

� Simular, emular, testar as funcionalidades do programa desenvolvido.

Page 20: Minicurso PIC

Especificação do Sistema

� Desenvolver um sistema eletrônico capaz de piscar um LED com duração de 1 segundo entre os estados ativo e inativo.Embora este sistema seja simples, ele demostra os elementos mais comuns de qualquer aplicação de microcontroladores:- Como configurar os sinais de I/O (entradas e saídas);- Como um programa pode acionar (escrever) sinais digitais de saída (LED);- Implementa uma rotina rudimentar de temporização de eventos (LED piscar);O objetivo de psicar um LED pode parecer um tanto quanto “tolo”, porém se ao invés do LED for inserido um circuito a reléno pino de saída do microcontrolador, a aplicação será de um relé temporizado, bastante utilizado para aplicações em automação industrial.

Page 21: Minicurso PIC

Projeto de Hardware

Page 22: Minicurso PIC

Descrição do Software - Fluxograma

Page 23: Minicurso PIC

Programação C

� #include - Diretiva do CompiladorEx: Incluindo um arquivo coma as definições relativas ao processador-alvo, para qual o programa será compilado:#include “16F877A”

� #use – Diretiva Interna do CompiladorEx: Definindo o valor da freqüência de clock da MCU para utilização em rotinas que dependam de tempo:#use delay(clock=4000000)

� #fuses – Diretiva que especifica o estado dos “fusíveis”Ex: Configurando o PIC com oscilador interno de 4MHz com os pinos RA6 e RA7 disponíveis para E/S, watchdog desligado, timer power-upligado, reset por brown-out ligado, programação por baixa tensão desligada e MCLR interno (pino RA5 disponível como entrada):#fuses INTRC_IO,NOWDT,PUT,BROWNOUT,NOLVP,NOMCLR

Page 24: Minicurso PIC

Simulação – Software PROTEUS

Page 25: Minicurso PIC

Programa Exemplo 1

#include <16f877A.h>

#use delay(clock=4000000)

#fuses HS,NOWDT,PUT

void main()

{

while (true)

{

output_high(PIN_B0); // Seta o pino RB0

delay_ms (1000); // Aguarda 1000 ms = 1s

output_low(PIN_B0); // Resseta o pino RB0

delay_ms (1000); // Aguarda 1000 ms = 1s

}

}

Page 26: Minicurso PIC

Programação do PIC

� Para um microcontrolador executar um programa, o conteúdo do arquivo do código fonte deve ser convertido em uma sequência de instruções binárias (opcodes), e então carregadas na memória do microcontrolador.

� Esta conversão do código fonte em opcodes érealizada por um compilador (Assembler ou C), e os códigos de máquina (opcodes) resultantes são armazenados em um arquivo no formato .HEX ou .COD, que pode ser carregado/gravado na memória de programa do microcontrolador.

Page 27: Minicurso PIC

Sistema de Gravação

� O gravador McFlash opera diretamente dentro do MPLAB (Microchip): simula o PIC START PLUS. Aceita toda família Flash "16FXXX". Comunicação serial com PC (DB9-RS232). Soquete de gravação para

PICs de 18, 28 e 40 pinos.

Page 28: Minicurso PIC

Importando um arquivo .HEX no MPLABApós compilar um projeto com código fonte escrito em linguagem C é necessário importá-lo para a memória antes de gravá-lo no PIC!

Page 29: Minicurso PIC

Selecionando o Dispositivo no MPLAB

Page 30: Minicurso PIC

Selecionando e Habilitando o Gravador no MPLAB

Page 31: Minicurso PIC

Apagando e Gravando o PIC no MPLAB

Após criar um projeto e compilá-lo como demonstrado no módulo 1, a gravação é realizada da seguinte forma:

Page 32: Minicurso PIC

Módulo LCD

� Módulos de caractere baseados no chip controlador HD 44780, um chip que é praticamente um padrão de fato, no segmento de módulos de display LCD;

� Permitem uma interface simples com sistemas microcontrolados, com largura de barramento de dados selecionável para 4 ou 8 bits, requerendo ainda mais três linhas de sinalização adicionais: ENABLE, RS e R/W;

� A comunicação no modo 4 bits é realizada utilizando apenas as quatro linhas mais significativas de dados (D7 a D4), dividindo o byte em dois nibbles que são transferidos sempre iniciando pelo mais significativo seguido pelo menos significativo;

� #include <mod_lcd.c> - Biblioteca de manipulação de módulo LCD:Default: - ENABLE: Pino E1

- RS: Pino E0- RW: Pino E2- D4 à D7: Pino D4, D5, D6 e D7 respectivamente.

Page 33: Minicurso PIC

Pinagem do LCD 16x2

Page 34: Minicurso PIC

Hardware com LCD

Page 35: Minicurso PIC

Comandos LCD

Biblioteca MOD_LCD.C:OBS: É necessário que este arquivo esteja no mesmo diretório do arquivo fonte

� lcd_ini() - Inicializa LCD� lcd_escreve('\f') – Apaga LCD� lcd_pos_xy(1,2) – Posiciona cursor no LCD� Lcd_ecreve – Escreve Texto no LCD

Ex: printf(lcd_escreve,“Alo Mundo")� lcd_le(1,2) - Lê caractere do display

Page 36: Minicurso PIC

Programa Exemplo 2#include <16f877A.h>

#use delay(clock=4000000)

#fuses HS,NOWDT,PUT,NOBROWNOUT,NOLVP

#include <mod_lcd.c> // Biblioteca de Funções do LCD

void main() {

lcd_ini(); // Inicializa LCD

lcd_escreve('\f'); // Apaga LCD

lcd_pos_xy(1,2); // Posiciona cursor na linha 2 coluna 1

printf (lcd_escreve,"Prof. Tacio Luiz"); // Escreve no LCD

delay_ms(1000); // Atraso de 1s

while (true)

{

lcd_escreve('\f'); // Apaga LCD

delay_ms(1000); // Atraso de 1s

printf (lcd_escreve,"Testando Placa");

delay_ms(1000); // Atraso de 1s

}

}

Page 37: Minicurso PIC

Projeto Exemplo: Automação de Garagem

• Capacidade Máxima: 10 carros;

• Visualizar no LCD a quantidade de carros on-line;

• Ativar um painel luminoso de aviso quando a garagem estiver lotada;

Page 38: Minicurso PIC

Automação de Garagem - Hardware

O circuito para simulação do funcionamento do sensor é apresentado abaixo:

Page 39: Minicurso PIC

Programa Exemplo 3#include <16f877A.h>#use delay(clock=4000000)#fuses HS,NOWDT,PUT,NOBROWNOUT,NOLVP

#include <mod_lcd.c> // Biblioteca de Funções do LCD

// Definição de Variáveisint tcl;int carros;boolean tecla_pres;

// Subrotina de verificação de tecla pressionadaint varre_teclas (void){

if (!input(pin_b1)) return(1); // verifica a tecla S1if (!input(pin_b2)) return(2); // verifica a tecla S2// se nenhuma tecla está pressionada, desliga o flag// tecla_pres e retorna o valor 0tecla_pres = 0;return (0);

}

Page 40: Minicurso PIC

Programa Exemplo 3// Rotina principal de verificação do teclado// Verifica se é uma nova tecla e filtra ruídoint teclas (void){

int t;t = varre_teclas(); // verifica se há teclaif ((t) && (!tecla_pres)) // se há tecla e o flag está apagado{

tecla_pres = 1; // ativa o flagif (t != tcl) // se a tecla atual é diferente da tecla anterior{

// filtra o ruido de contatodelay_ms (50); // aguarda 50ms// lê novamente as tecla e verifica// se a mesma tecla ainda está pressionada// caso positivo, retorna a teclaif (varre_teclas() == t) return (t);

}}return (0); // se não há tecla, retorna 0

}

Page 41: Minicurso PIC

Programa Exemplo 3// Progama Principalvoid main() {

lcd_ini(); // inicializa o lcdtcl = 0; // limpa a tecla atualtecla_pres = 0; // desliga o flag de tecla pressionada

carros = 0;

while (true){

lcd_escreve ('\f'); // apaga o displaylcd_pos_xy(1,1);printf (lcd_escreve,"GARAGEM TABAJARA");lcd_pos_xy(1,2);printf (lcd_escreve,"Carros: %u", carros); // Escreve a Qtde de carros atual

tcl = teclas(); // verifica se há tecla pressionadaif (tecla_pres){

if (tcl == 1){carros++; // incrementa a variável carro}

if (tcl == 2){carros--; // decrementa a variável carro}

}

Page 42: Minicurso PIC

Programa Exemplo 3while (carros > 10) // Verifica lotação máxima{lcd_pos_xy(1,2);printf (lcd_escreve,"Garagem Lotada!");output_high(PIN_B0); // Seta o pino RB0tcl = teclas(); // verifica se há tecla pressionada

if (tecla_pres){

if (tcl == 2){carros--; // decrementa a varável carro}

}}

output_low(PIN_B0); // Resseta o pino RB0delay_ms(100);

}}

Page 43: Minicurso PIC

Bibliografia

� Desbravando o PIC – Ampliado e atualizado para PIC16F628AAutor: David José de SouzaEditora: Érica

� Microcontroladores PIC – Programação em CAutor: Fábio PereiraEditora: Érica