Você está na página 1de 50

1.

Introduo

Vivemos na era da automao e, como prova disto, basta olhar para o lado e observar que os eletrodomsticos fazem quase todos os servios especializados sozinhos, assim como ocorre nos caixas eletrnicos quando desejamos sacar algum dinheiro ou nas linhas de produo das fbricas onde a automatizao tem incrementado a produo e reduzindo os custos. Esta revoluo silenciosa seria impensvel caso no fosse o desenvolvimento recente da microeletrnica e dos dispositivos digitais que possibilitam, dia a dia, a criao de transistores menores, mais rpidos e mais confiveis. Assim, possvel criar dispositivos digitais cada vez melhores e com mais funcionalidades. Entre os dispositivos digitais, um dos que mais vem chamando a ateno pela sua versatilidade, aplicabilidade e funcionalidade so os microcontroladores. Neste curso iremos abordar os conceitos bsicos do hardware e da linguagem de programao Assembly dos microcontroladores PIC, da Microchip. O Criatronics O Criatronics, Centro de Robtica, Inteligncia e Automao, foi fundado no ano de 2001 por pesquisadores da rea da Fsica e Computao. Sua rea de atuao o desenvolvimento de projetos com tecnologias avanadas e de cursos que abrangem as reas de Robtica e Automao. Pr-requisitos para o curso Este curso pode ser visto por estudantes que nunca tiveram um contato prvio com a eletrnica, porm, desejvel que o aluno j possua conhecimentos de eletrnica analgica e digital bsica sobretudo conhecimentos em circuitos RC e polarizao de transistores bipolar e mosfet.

2.

O que um Microcontrolador?

Histrico Em 1969, uma equipe de engenheiros da INTEL, sob a responsabilidade do engenheiro Marcian Hoff, recebeu a misso de construir calculadoras com um nmero reduzido de circuitos integrados. Hoff, que j tinha uma boa experincia no projeto de computadores, props uma maneira fundamentalmente diferente de construir as calculadoras. Segundo ele, era possvel construir uma mquina capaz de mudar sua funcionalidade com base em um programa armazenado em uma memria. Sendo assim, Hoff, juntamente com o engenheiro Frederico Faggin, implementaram para a INTEL o primeiro microprocessador. Desde ento os microprocessadores no pararam de evoluir. Porm, os microprocessadores no atendiam as necessidades dos engenheiros quando era necessrio um processamento em sistemas embarcados, como celulares, aparelhos de som, televiso, controle de motores, etc.

Aula 01

Pg. 1

Para suprir estas necessidades foi lanado o primeiro microcontrolador pela Texas em 1974, o TMS 1000 de 4 bits, que inclui RAM, ROM e suporte a I/O em um nico chip, permitindo o uso sem qualquer outro chip externo. Em 1977 a Intel lana o microcontrolador 8048, que possua memria de programa externa (ROM), e memria de dados interna (RAM). Em 1980 nasceu o 8051, com vrios perifricos, 4K de memria de programa e 128 bytes de memria de dados, possibilitando o uso sem a necessidade de chips externos. Tem encapsulamento de 40 pinos, tecnologia HMOS e ainda hoje largamente utilizado. Atualmente h diversos fabricantes no mercado de microcontroladores, por exemplo, a ATMEL, a Microchip, a HOLTEK e a Motorola. Aplicaes O microcontrolador um componente bastante verstil, podendo atravs de sua programao ter diversas aplicaes. O microcontrolador pode realizar desde o controle da velocidade e posio de um guindaste at o controle das lmpadas decorativas de uma rvore de Natal. Basicamente, o modo de operao do microcontrolador ir variar de acordo com a necessidade de seu cliente. Entre outras aplicaes de um microcontrolador podemos citar automao industrial, controle de telefones celulares, auto-rdios, fornos de microondas e videocassetes. Alm disso, a tendncia da eletrnica digital de se resumir a microcontroladores e a chips que concentram grandes circuitos lgicos, como os PLDs (Programmable Logic Devices). Para a maioria dos sistemas dedicados, o microcontrolador apresenta-se como a soluo mais vivel em funo do baixo custo e facilidade de uso. Logo, o microcontrolador, hoje em dia, um elemento indispensvel para o engenheiro eltrico, eletrnico ou ainda para o tcnico de nvel mdio da rea e hobbistas, em funo de sua versatilidade e da enorme aplicabilidade. Microcontrolador versus Microprocessador Um microcontrolador difere de um microprocessador em vrios aspectos. O primeiro e o mais importante a sua funcionalidade. Para que um microprocessador possa ser usado outros componentes devem-lhe ser adicionados, tais como memria e componentes externos para receber e enviar dados. Em resumo, isso significa que o microprocessador o verdadeiro corao do computador. Por outro lado, o microcontrolador foi projetado para ter tudo num s CI . Nenhum outro componente externo necessrio para suas aplicaes uma vez que todos os perifricos necessrios j esto embutidos nele. Assim, poupamos tempo e espao na construo dos dispositivos. Do ponto de vista da aplicao, a principal diferena entre o microcontrolador e o microprocessador que, para controle de sistemas embarcados, necessrio que o controlador seja dedicado a um pequeno conjunto de tarefas. O microcontrolador construdo para realizar o controle do ambiente
1

CI Circuito Integrado Dispositivo microeletrnico que consiste de transistores (podendo chegar a milhares) e outros

componentes interligados capazes de desempenhar diversas funes. Suas dimenses so extremamente reduzidas e estes componentes so fabricados em uma pastilha de material semicondutor em comum. Aula 01 Pg. 2

externo e, por isso, possui circuitos eltricos mais adequados para conectar-se com o ambiente, alm de ter um custo bem menor que o microprocessador. Essa caracterstica o torna ideal para sua utilizao em sistemas embarcados, como em detectores de fumaa, aeronaves e brinquedos, por exemplo. J o microprocessador construdo para otimizar o processamento de dados com o auxlio de diversos componentes externos, como memrias, co-processadores, dispositivos perifricos, etc., sendo sua aplicao mais voltada para tarefas que exijam a execuo de diferentes programas e um alto volume de processamento de dados, como no computador, por exemplo.

3.

A Microchip

A microchip uma empresa especializada em desenvolvimento de dispositivos para sistemas embarcados. Em sua linha de produtos podemos encontrar os microcontroladores PIC (MCUs), dsPIC controladores para sinais digitais, dispositivos de segurana KeeLoq, diversos produtos de interface analgica, memrias seriais EEPROMs, etc.

4.

Os Microcontroladores PIC - Peripheral Interface Controller

Os microcontroladores PIC so considerados os que apresentam a melhor relao custo/benefcio do mercado. Sua arquitetura RISC (no entraremos em detalhes neste curso sobre os tipos de arquitetura) proporciona um set de apenas 35 instrues para a maioria dos modelos (famlia MidRange ), sendo assim um dispositivo de fcil programao. A execuo de suas instrues tambm mais rpida que outros tipos de microcontroladores que utilizam a arquitetura CISC, como o famoso e ainda muito utilizado 8051. A famlia de microcontroladores PIC bastante ampla, tendo diversos modelos com diversas funcionalidades, conforme poderemos observar na prxima aula. Nesse curso todos os projetos sero com o PIC16F84A ou PIC16F628A no encapsulamento PDIP (ver figura 1). Ao longo do curso aprenderemos as funcionalidades de cada pino deste CI (ver figura 2).
2 3

SET - Conjunto MidRange Os microcontroladores PIC esto disponveis em trs famlias: Low-End, MidRange, High-End. A famlia Low-End

tem um subset reduzido de instrues, sem tratamento de interrupes, instrues de 12 bits, menor memria RAM disponvel e sem I/O avanados, logo, esta famlia no deve ser utilizada para novas aplicaes ou para o aprendizado. A famlia High-End tem instrues de 16 bits, acesso a todos os registradores diretamente, mltiplos vetores de interrupo e no recomendado para o aprendizado. A famlia MidRange a mais comum no mercado e possui as caractersticas mais adequadas para o ensino, logo, durante o curso trabalharemos com o PIC 16F84A, pertencente da famlia MidRange. Aula 01 Pg. 3

5.

Encapsulamento e Pinagem

O PIC est disponvel no mercado em diversos encapsulamentos (inclusive SMD). Por ser mais fcil de realizar testes e prototipagens, utilizaremos o PIC no encapsulamento PDIP de 18 pinos (ver figura 1).

Figura 1: Encapsulamento PDIP 18 Pinos

Figura 2: Pinos do PIC16F84A

Tabela 1: Lista dos pinos e funes

Pino OSC1 / CLKIN OSC2 / CLKOUT /MCRL RA0 RA1 RA2 RA3 RA4 / T0CKI RB0 / INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 Vss Vdd
Aula 01

PDIP 16 15 4 17 18 1 2 3 6 7 8 9 10 11 12 13 5 14

Descrio Entrada do oscilador / Entrada de clock externo Sada do oscilador / Sada para clock externo Master Clear Reset PortA - Porta bi-direcional de entrada e sada

pode ser selecionado como entrada de clock para o TMR0. A sada do tipo "open drain" PortB - Porta bi-direcional de entrada e sada Estas portas podem ser configuradas individualmente com pull-ups nas entradas RB0 pode tambm ser configurada como entrada para interrupo externa RB4:RB7 podem ser configurados como entrada para interrupo por mudana de nvel Referncia do Terra Alimentao positiva
Pg. 4

6.

Portas de Entrada e Sada

As portas de entrada e sada so os canais de comunicao entre a central de processamento e o mundo fsico. Estas portas podem ser de sada, ou seja, podem controlar dispositivos externos como rels, chaves, LEDs, ou podem ser de entrada e receber os sinais vindo de sensores e botes. Quem ir informar que pinos sero entradas e que pinos sero sadas ser o programador atravs do software. O PIC16F84A tem 13 pinos de entrada e sada (I/O pins) que podem ser individualmente configurados como entrada ou sada a depender do software. Alguns destes pinos podem ser multiplexados com outras funes do dispositivo, como: Interrupes externas; Interrupo por mudana de estado em alguns pinos; Entrada do clock para o contador, conforme veremos melhor nas prximas aulas. Os 13 pinos de I/O esto divididos em dois blocos, com diferentes caractersticas eltricas: PortA; PortB. O PortA tem 5 pinos de I/O (RA4, RA3, RA2, RA1 e RA0) e o PortB, 8 (RB7, RB6, RB5, RB4, RB3, RB2, RB1 e RB0), totalizando 13 pinos de I/O. PortA (RA3:RA0) A figura 3 mostra o esquema eltrico dos pinos de I/O RA3:RA0. Como o foco deste curso no o hardware, no iremos nos aprofundar na eletrnica interna do PIC, porm h alguns detalhes que devem ser observados.

Figura 3: Diagrama em blocos dos pinos RA3:RA0

Aula 01

Pg. 5

Podemos observar que a sada (I/O pin) est conectado a dois transistores mosfet e a um buffer TTL

de entrada. Isto indica que a impedncia de sada destes pinos baixa quando o pino est configurado como sada. J a impedncia de entrada alta quando configurado como entrada. Na prtica isto indica que devemos ter cuidado ao configurar um pino do PIC como sada, pois, um erro na ligao eltrica pode ocasionar a queima do pino devido baixa impedncia de sada (e consequentemente alta corrente de sada do pino de I/O). PortA (RA4) Um detalhe do RA4 (figura 4) que este no tem o transistor ligando o pino RA4 ao Vdd. Com isso devemos ter ateno ao utilizar este pino como sada, pois este do tipo open drain e, sendo assim, no possvel gerar 5V neste pino sem o auxlio de componentes externos auxiliares.
6

Figura 4: Diagrama em blocos do pino RA4

Na prtica temos que, se ligarmos um LED deste pino ao Terra (referncia) sem qualquer circuito externo, mesmo que o PortA 4 (pino RA4) esteja configurado como sada e o programa coloque este pino em nvel lgico 1, o LED nunca acender (figura 5). A principal utilidade de se ter um pino do tipo open-drain a possibilidade de conectar vrios dispositivos open-drain em uma nica linha fsica sem o risco de queimar algum dispositivo.

MOSFET - Metal Oxide Silicon Field Effect Transistor, um transistor de efeito de campo feito de silcio dopado com xido

metlico.
5

BUFFER TTL Seguidor de tenso formado por circuitos digitais TTL que tem como principal caracterstica a utilizao de sinais

de 5 volts para nveis lgico altos. Seus circuitos integrados so constituidos basicamente de transistores bipolares, o que os torna poucos sensveis a eletricidade esttica.
6

OPEN DRAIN O terminal do dreno do transistor de sada est desconectado. A conexo do transistor de sada ao Vcc dever

ser feita atravs de um resistor denominado de pull-up. Aula 01 Pg. 6

RA4

R1 1k D1 LED1

Q1

Figura 5: Esquema eltrico da ligao de um LED no RA4: este LED nunca acender

PortB (RB7:RB0) Uma caracterstica interessante do PortB a possibilidade da configurao de um pull-up fraco via software quando o pino est configurado como entrada. Isto permite que, por exemplo, um boto seja ligado no PortB de uma maneira bem mais simples que no PortA. O PortB tambm capaz de drenar e suprir mais corrente que o PortA, sendo bastante utilizado para o acionamento de LEDs e displays.
7

Figura 6: Diagrama em blocos dos pinos RB7:RB4

PULL UP Resistor utilizado na entrada de circuitos digitais para definir o nvel lgico quando a entrada estiver desconectada ou

em alta impedncia. Aula 01 Pg. 7

Figura 7: Diagrama em blocos dos pinos RB3:RB0

A nica diferena entre os pinos RB7:RB4, RB3:RB1 e RB0 so os tipos de interrupes que cada um deste conjunto de pinos tem. As interrupes estudadas na aula 6.

7.

Clock e execuo dos comandos

O clock quem d o sinal de partida para o microcontrolador e d o ritmo de execuo dos comandos e este obtido a partir de um componente externo chamado oscilador. Se imaginarmos que um microcontrolador um relgio de sala, o nosso clock corresponderia ao pndulo. Um ciclo de instruo executado a cada 4 ciclos de clock no PIC (gerados por osciladores ou circuitos geradores de clock externos), ou seja, caso esteja utilizando um oscilador de 4MHz, haver a execuo de um ciclo de instruo a cada 1s, conforme podemos observar abaixo: Freqncia do oscilador: 4MHz; Freqncia da execuo das instrues: 4MHz / 4 = 1MHz; Perodo de execuo das instrues: 1 / 1MHz = 1s. Se estivssemos utilizando um oscilador de 20MHz, os clculos seriam: Freqncia do oscilador: 20MHz; Freqncia da execuo das instrues: 20MHz / 4 = 5MHz; Perodo de execuo das instrues: 1 / 5MHz = 0,2s (200ns). A maioria dos comandos do PIC executada com apenas um ciclo de instruo, a menos que seja necessrio um teste condicional ou modificao no PC (ver detalhes nas prximas aulas).

Aula 01

Pg. 8

8.

Osciladores

H basicamente dois tipos de osciladores para gerar o clock que utilizamos em nossos projetos: Cristais; RC. Os osciladores mais utilizados nos projetos do Criatronics so os cristais de 20MHz pela preciso necessria e rpido processamento de dados, apesar de termos mais problemas de instabilidade inicial no funcionamento sendo necessrio um maior esforo no design da PCI . O PIC 16F84A pode funcionar em 4 modos diferentes de operao no que se diz respeito aos osciladores. A escolha do modo de operao deve ser feita no software de gravao antes da gravao do PIC, como veremos no final desta aula. Os modos possveis so: LP Low Power Crystal / resonador cermico; XT Cristal / resonador cermico; HS High Speed Crystal / resonador cermico; RC Resistor/Capacitor. Configurao LP, XT ou HS utilizando cristal Neste modo o cristal conectado aos pinos OSC1 e OSC2, como mostrado na figura 8.
8

Figura 8: Ligao eltrica do cristal

Na Tabela 2 seguem os valores recomendados para C1 e C2. Quanto maior a capacitncia, maior a estabilidade do oscilador, porm h um aumento tambm no tempo de start-up. A resistncia Rs pode ser necessria caso hajam problemas na oscilao do cristal (para maiores detalhes consultar os dados tcnicos do cristal a ser utilizado), porm, nos nossos projetos no h a necessidade de utilizar esta resistncia.

PCI Placa de Circuito Impresso pea fundamental na montagem de qualquer conjunto eletrnico. Ela costuma ter a cor verde

(mscara de solda), contudo, tambm existem nas cores azul e marrom, por exemplo. Estas placas fazem a ligao fsica entre componentes eletrnicos, por exemplo, processadores, capacitores, chips, etc. Aula 01 Pg. 9

Tabela 2: Capacitores recomendados para utilizao com o cristal

Modo LP XT HS

Frequncia 32 kHz 200 kHz 100 kHz 2 MHz 4 MHz 4 MHz 20 MHz

Capacitores 68 - 100 pF 15 - 33 pF 100 - 150 pF 15 - 33 pF 15 - 33 pF 15 - 33 pF 15 - 33 pF

Configurao LP, XT ou HS utilizando um gerador de clock externo Caso o circuito possua um gerador de clock comum para os dispositivos digitais, recomendada a utilizao da montagem conforme a figura 9.

Figura 9: Configurao para utilizao do PIC com um circuito gerador de clock externo

Configurao RC Em aplicaes onde a preciso do clock no determinante no projeto, pode-se optar por uma configurao mais simples e barata, utilizando apenas um resistor e um capacitor, conforme mostrado na Figura 10.

Figura 10: Configurao RC

Os valores recomendados para Rext e Cext so: 5K Rext 100K ;

Cext 20pF. A freqncia de oscilao estar em funo dos valores de Rext, Cext, Vdd, Vss, tipo do capacitor e temperatura de operao. Tendo assim tantas variveis de influncia significante, fica quase impossvel manter um alto grau de preciso utilizando este tipo de oscilador.

Aula 01

Pg. 10

9.

Resets
9

Estudaremos neste tpico trs tipos de Resets que o PIC diferencia: Power-on Reset; MCRL Reset; WDT Reset. No sero vistos os resets MCRL e WDT ocorridos durante o modo SLEEP Power-on Reset Um pulso de reset gerado toda vez que o microcontrolador alimentado (a tenso em Vdd detectada entre 1.2V e 1.7V), eliminando assim a necessidade de criao de um circuito eletrnico externo mais elaborado de reset atravs do pino MCRL. Power-up timer Caso ativado antes da gravao, o power-up timer mantm o microcontrolador resetado durante 72ms aps a sua alimentao, garantindo assim que a alimentao j estar estvel quando o microcontrolador comear a executar as suas instrues. Oscillator Start-up timer Aps o Power-up timer temos ainda o Oscillator Start-up timer, que espera 1024 ciclos do oscilador para estabilizar a operao do cristal antes do incio da execuo do programa.
10

do microcontrolador.

Figura 11: Instabilidade do oscilador ao circuito ser alimentado

Tempo de subida lento de Vdd Porm, se mesmo aps a ativao do Power-up o circuito ainda apresente problemas devido a um eventual tempo excessivo que o circuito de alimentao precise para suprir o CI com a tenso Vdd adequada, pode ser necessria a criao de um circuito externo para gerao de um pulso de Reset atravs do pino MCLR.
9

RESET Reinicializao do microprocessador SLEEP Modo do PIC de espera. Neste modo o PIC tem um baixo consumo de energia. Pg. 11

10

Aula 01

MCLR Reset O MCLR (Master Clear Reset) um modo de reset que pode ser facilmente acessado pelo usurio atravs do pino MCLR do PIC. O MCLR pode ser til quando necessrio reiniciar o microcontrolador atravs de um circuito externo de controle ou quando o Power-on Reset no inicializa corretamente o microcontrolador. A qualquer momento em que este pino estiver no nvel lgico 0, o circuito estar resetado. Para que as instrues sejam executadas, necessrio manter esse pino constantemente em Vdd. WDT Reset O WDT (Watchdog Timer) um oscilador RC interno ao CI que no requer nenhum componente externo para seu funcionamento. O WDT estar operando independente de qualquer oscilador externo que o PIC esteja utilizando para execuo dos comandos, ou seja, ele funciona mesmo que o oscilador principal do PIC tenha parado de funcionar. O WDT pode ser ativado no programa de gravao do CI e, quando isto feito, o circuito do WDT ir gerar um pulso de reset toda vez que o tempo do WDT for atingido (18ms para operao sem prescaler ). Em nossos projetos no utilizaremos o WDT, deixando-o sempre desabilitado.
11

10. Algumas caractersticas eltricas do PIC


Tenso em qualquer pino (exceto Vdd, MCLR e RA4) em relao ao Vss: -0.3V a (Vdd + 0.3V); Tenso de Vdd em relao ao Vss: -0.3V a 7.5V; Tenso de MCLR em relao ao Vss: -0.3V a 14V; Tenso em RA4 em relao ao Vss: -0.3V a 8.5V; Mxima corrente no pino Vss: 150mA; Mxima corrente no pino Vdd: 100mA; Mxima corrente em qualquer pino de I/O: 25mA.

11

PRESCALER Detalhado no capitulo de interrupo por TMR0 Pg. 12

Aula 01

11. O Kit Didtico Criatronics


Nas nossas prticas iremos utilizar um kit prprio para aplicaes didticas. O kit (Figura 12) dotado de uma nica placa onde esto o gravador de PIC, botes ligados no PortA, LEDs e um display de 7 segmentos ligado no PortB, alm de outras funcionalidades conforme veremos adiante. H ainda uma chave que deve estar na posio correta, conforme indicao na placa, quando for para gravar e quando for para executar o programa.

Figura 12: Kit didtico completo do Criatronics

As funcionalidades de cada item enumerado na figura esto relacionadas a seguir: 1. Microcontrolador PIC 16F84A; 2. Cristal de 4 MHz; 3. Buzina ligada ao RB5; 4. Leds ligados ao PortB; 5. Display de 7 segmentos ligado ao PortB; 6. Rel ligado ao RB7 com conectores de potncia; 7. Led infravermelho (IR) ligado ao RB6; 8. Botes ligados PortA e boto de reset ligado ao MCLR; 9. Sada para conector ligado PortA; 10. Sada para conector ligado ao PortB; 11. Sada para conexo da placa a um display LCD;
Aula 01 Pg. 13

12. Jumper para definio: o PortB estar ligado aos LEDs ou ao display 7-seg; 13. Jumpers para definio: o RB5 estar ligado ou no buzina; o RB6 estar ligado ou no ao LED IR; o RB7 estar ligado ou no ao rel eletromecnico; 14. Chave para definio: a placa for gravar um programa a partir do computador ou executar um programa j previamente gravado; 15. Conector para interface com o computador atravs do padro serial RS-232; 16. Conector para alimentao da placa (12 Vdc); 17. Regulador de tenso (5 Vdc).

12. Gravando e Testando um Programa no PIC


Para gravar um programa feito no MPLAB seguintes atividades: Verificar se o PIC, cabo de alimentao e o cabo serial esto devidamente conectados; Abrir o programa NTPICPRO.EXE; Clicar em Load e selecionar o arquivo nome_do_projeto.hex referente ao projeto que est sendo desenvolvido. Os arquivos de extenso .hex so gerados automaticamente quando o programa compilado no MPLAB e ficam na mesma pasta do projeto. Selecionar os itens adequados na guia configuration word. Como padro, pode ser desabilitado o code protect, habilitado o power up timer, desabilitado o watchdog time, selecionado o oscilador do tipo XT osc, porta de comunicao COM1, uma vez que em geral utilizaremos o mouse na porta PS2 ou USB do computador, e em mode deve ser selecionado 16C84. Na aula deve ser gravado os arquivos projeto01.hex, projeto02.hex e projeto03.hex na placa didtica. Estes arquivos, que sero passados pelo instrutor, devero ter sido previamente programados e simulados e sero utilizados inicialmente apenas para demonstrao de gravao e execuo de programas no kit didtico PIC do Criatronics.
12

no PIC atravs do nosso kit didtico, necessrio realizar as

13. Ferramentas de desenvolvimento da Microchip


A Microchip produz ferramentas para o desenvolvimento do software, hardware para testes e simulaes e tambm produz placas para demonstraes. Software Os principais softwares para desenvolvimento da Microchip so: MPLAB IDE (freeware) MPLAB C18

12

MPLAB Programa onde sero desenvolvidos, compilados e simulados os projetos em Assembly. Pg. 14

Aula 01

MPLAB C30 O MPLAB IDE ser estudado com mais detalhes adiante. O MPLAB C18 e C30 so compiladores para a linguagem C, que no sero estudados nesse curso. Hardware Os principais hardwares disponveis pela Microchip para o desenvolvimento so: MPLAB ICE MPLAB ICD Estes dois dispositivos so utilizados para a simulao e emulao do programa j quando este estiver gravado no prprio PIC, ou seja, permitem verificar a execuo do programa com o hardware final (com o PIC montado na placa onde este ser aplicado).

14. O MPLAB IDE


O MPLAB IDE o programa executado no computador que utilizamos para desenvolver as aplicaes para os microcontroladores PIC na linguagem Assembly. O termo IDE significa Integrated Development Environment por que ele um ambiente de desenvolvimento integrado de simples utilizao, onde esto integrados o gerenciador de projetos, o editor do cdigo, ferramentas para conexo dos diversos cdigos fontes e bibliotecas, debugger
13

e simuladores.

15. Programando o PIC


O MPLAB IDE tem todos os componentes necessrios para a programao do PIC. Porm, alm de realizarmos programao propriamente dita no MPLAB, devemos realizar alguns passos antes para poder obter um sistema que atenda as necessidades do usurio. As atividades tpicas para o desenvolvimento do software de um sistema embarcado sero descritas a seguir. Entendendo o problema (Anlise de requisitos) Antes de se fazer qualquer programa necessrio saber o que se quer programar. Isto parece ser bvio, mas considerado umas das principais falhas nos programadores. No Brasil no temos o costume de investir tempo e dinheiro nesta etapa do projeto, ficando o sistema muitas vezes deficiente em diversos pontos ou mesmo totalmente inadequado para a aplicao desejada pelo cliente. Esquematizar o sistema em alto nvel (Planejamento) Primeiro necessrio conhecer quais as caractersticas e desempenho necessrio para decidir qual o PIC que ser utilizado. Em seguida recomendado realizar o esquema eletrnico do hardware associado ao PIC para conhecermos quais sero os pinos de entrada, sada, quais perifricos sero utilizados, etc.

13

Debugger Programa de computador utilizado para verificar os erros de sintaxe, simular e compilar o programa. Pg. 15

Aula 01

S ento ser a hora de realizar a programao. Antes de iniciar, necessrio escolher qual a linguagem de programao que ser utilizada. Em nosso curso, aprenderemos a linguagem de baixo nvel Assembly, que diretamente convertido em linguagem de mquina. Outra opo a linguagem C para PIC, que uma linguagem de nvel mdio (mais fcil de programar, porm gera cdigos menos enxutos). A escolha da linguagem de programao dever estar em funo da complexidade do sistema, memria disponvel e eficincia do programa desejado. Criando o fluxograma (Lgica de programao) O fluxograma utiliza-se de smbolos especficos para a representao de algoritmos (seqncia de passos que devem ser executados para se alcanar um determinado objetivo). Abaixo segue uma simbologia tradicionalmente utilizada.

Processo

Deciso

Conector

Terminal

Setas de Fluxo

O fluxograma ajuda durante a programao e manutenes futuras do programa, facilitando, sobretudo, no entendimento do sistema. Esta etapa do projeto comumente desprezada por diversos programadores, porm esta prtica altamente no recomendada. Escrevendo as linhas de cdigos (Implementao) As linhas de cdigos devem ser digitadas de forma clara, seguindo fielmente o fluxograma, com rtulos (labels) e sempre que possvel, comentrios, alm de utilizar as cores disponveis no MPLAB para distinguir os diversos tipos de dados (cdigos, nmeros, comentrios, labels, etc., cada coisa de uma cor). Isto facilita bastante o entendimento quando outro programador ler seu programa, ou mesmo quando voc for fazer uma manuteno futura em seu prprio programa. Compilao do programa A compilao consiste na converso das linhas de programa digitadas pelo programador para o cdigo de mquina. Durante a compilao, o compilador tambm verifica eventuais erros de sintaxe ou inconsistncias no programa. Ateno: o compilador no verifica se a lgica empregada no programa est correta! Simulao e ajustes do programa O MPLAB j tem integrado uma ferramenta de simulao que deve ser utilizado sempre que um cdigo for escrito. O compilador no ir detectar os erros de lgica no programa, logo, a simulao necessria para verificar se seu programa est fazendo exatamente aquilo que voc queria que ele fizesse (segundo o documento de requisitos). As falhas na programao devero ser removidas neste momento.

Aula 01

Pg. 16

Gravao do programa A gravao do programa no microcontrolador o ltimo passo do processo e onde deve ser verificado se a utilizao do microcontrolador est adequada para sua aplicao final. A gravao do programa pode ocorrer de maneira integrada com a simulao caso o usurio esteja utilizando o MPLAB-ICD, onde o circuito simulado na prpria placa, on-line. Cada uma das etapas citadas pode ser bastante complexa e consumir muito mais tempo que o previsto inicialmente. Neste curso iremos abordar apenas as etapas posteriores gerao do fluxograma, uma vez que a aquisio e anlise de requisitos, planejamento e lgica de programao, cada uma, tm por si s, assuntos suficientes para novos cursos.

Aula 01

Pg. 17

16. Memrias
A memria um componente do microcontrolador indispensvel, responsvel pelo armazenamento de todos os dados do sistema (quando o sistema no possui memrias auxiliares). Os microcontroladores, em sua maioria, possuem uma pequena quantidade de memria construda internamente no dispositivo. Fazendo uma analogia a um supermercado, os dados so armazenados em prateleiras com endereos especficos. Quando o processador quer saber o que tem em certa prateleira, ele acessa o endereo da prateleira e rapidamente tem acesso ao dado l disponvel. Junto com o endereo, o processador tambm envia um sinal informando se quer apenas ler (read) o que est l naquele endereo ou se ele quer deixar algum dado escrito naquele endereo (write). imPortAnte ressaltar ainda que no PIC a memria dividida em regies com diferentes finalidades. Por exemplo, uma das regies pode ser alocada somente para armazenar o programa a ser executado pelo processador, por isso chamada memria de programa. Outra regio alocada para armazenar temporariamente os dados enquanto o programa est sendo executado, por isso chamada memria de dados. Temos ainda a regio chamada de pilha (do ingls, stack) e a regio de memria EEPROM, conforme veremos a seguir.

17. Tipos de memria


O PIC tem dois blocos de memria independentes, que podem ser acessados simultaneamente: Memria de programa (Flash); Memria de dados (RAM); H ainda um bloco de memria de dados que requer um procedimento especial para a sua escrita e leitura. Esta memria chamada EEPROM. Nesta memria devemos gravar os dados que no podem ser perdidos quando o microcontrolador for desligado, por exemplo, a temperatura em que o usurio deixou programado o ar condicionado. Neste curso no aprenderemos a utilizar este tipo de memria.

18. Organizao da Memria de Programa


O PIC 16F84, bem como toda a famlia F, possui como memria de programa um tipo chamada Flash. Memria Flash uma forma de memria no voltil que pode ser apagada e reprogramada eletronicamente. Alguns outros modelos de microcontrolador utilizam a tecnologia EPROM ou mesmo a PROM. A tecnologia EPROM permite a gravao do programa pelo PC, porm, para gravar um novo programa no microcontrolador necessrio apagar a memria de programa deste iluminando o circuito integrado com uma luz ultravioleta. J a tecnologia PROM permite apenas a gravao de um programa no microcontrolador. Uma vez programado, o microcontrolador no poder ser nunca mais reprogramado. O PIC tem capacidade de enderear um programa de 8K words (1 word tem 14 bits no caso da famlia do PIC16F84A). No PIC estudado, os primeiros 1K (do endereo 0000h ao endereo 03FFh) so fisicamente implementados. A partir do endereo 03FFh temos uma repetio dos dados anteriores. Por
Aula 02 Pg. 18

exemplo, os dados existentes nos endereos 0020h, 0420h, 0820h, 0C20h, 1020h, 1420h, 1820h e 1C20h so os mesmos. Logo, no h a necessidade de tentar enderear a partir do endereo 03FFh. O endereo inicial de processamento o 0000h, ou seja, aps um Reset (inclusive o Power-on Reset) o microcontrolador ir executar a instruo gravada no endereo 0000h. O vetor interrupo14 o 0004h (conforme veremos aplicao nas prximas aulas).

Figura 13: Mapa da memria de programa

19. Organizao da Memria de Dados


A memria de dados pode ser dividida para fins de estudo em dois blocos: Memria RAM para uso geral (GPR General Pupose Registers); Registradores especiais (SFR Special Function Registers). A memria EEPROM tambm faz parte da memria de dados, porm essa memria no mapeada diretamente na memria de dados. No PIC 16F84A temos 64 bytes de memria EEPROM disponveis para o usurio, mas, como j visto, no iremos utilizar nem estudar este tipo de memria em nossos projetos iniciais. Na Figura 14 podemos observar o mapa de memria de dados do PIC 16F84A. Verificamos a presena dos SFRs e da rea destinada para uso geral (GPR).

14

Interrupo Detalhado no captulo de interrupes Pg. 19

Aula 02

Figura 14: Mapa de memria de dados

A memria de dados est dividida em dois bancos de memria (Bank0 e Bank1). Deveremos indicar no software qual o banco que estamos trabalhando antes de operar com os registradores, conforme veremos nas prximas aulas. Os SFRs podem ser divididos em dois blocos: Registradores para controle das funes essenciais; Registradores para controle das funes dos perifricos. So nos registradores para controle das funes essenciais que so definidos, por exemplo, quais os pinos do PIC sero entrada, quais sero sada, se houve ou no a ocorrncia de um zero aps a ltima operao matemtica, se houve a ocorrncia de um reset, se as interrupes esto ativadas, etc. So nos registradores para controle das funes dos perifricos que configuramos, por exemplo, os parmetros de uma converso analgico/digital, os parmetros para gerao do PWM automtico, os parmetros para transferncia de dados atravs dos protocolos disponveis pelo PIC (SPI, USART, etc). Nos exemplos de programas aprenderemos aos poucos como trabalhar com os SFRs.
Aula 02 Pg. 20

20. O Program Counter (PC) e a Pilha (Stack)


Observando o mapa de memria de programa na Figura 13 observamos dois blocos de memria ainda no discutidos: o PC e a Pilha. O PC indica em que ponto da memria de programa o microcontrolador ler a prxima instruo. Por exemplo, se no PC estiver armazenado o valor 01Ah, isto significa que a prxima instruo a ser executada pelo microcontrolador ser a instruo gravada no endereo 01Ah. A Pilha tem a funo de armazenar temporariamente informaes sobre o fluxo de atividades do programa. Maiores detalhes sobre estas regies de memria sero vistas durante as prticas.

21. Dispositivos perifricos auxiliares


Os dispositivos perifricos so as partes do microcontrolador responsveis por atividades especficas, auxiliando o processador e realizando algumas interfaces com o mundo fsico, como a transferncia de dados via o padro RS-232, a comunicao com outros PICs via o protocolo I2C15, a gerao de um sinal PWM para controle de motores ou mesmo a converso de um sinal analgico em digital. Neste tpico iremos ver alguns perifricos disponveis em vrios modelos de PIC. O PIC que iremos trabalhar neste curso, o 16F84A, no possui boa parte desses perifricos, ficando suas utilizaes para um curso mais avanado (com exceo do mdulo Timer0 que ser visto neste curso). Mdulo Timer0 O Mdulo Timer0 um temporizador (timer) / contador que possui as seguintes caractersticas: Timer/contador de 8 bits; Pode ser acessado para leitura e escrita pelo usurio; Pode ser aplicado um prescaler; Pode ser ativado atravs de um clock externo; Pode gerar uma interrupo em seu overflow; Pode ser incrementado na borda de subida ou decida. Este mdulo ser estudado com mais detalhes nas prximas aulas. Mdulo Timer1 O mdulo Timer1 um timer/contador de 16 bits (armazenados em dois registradores) que pode ser acessado para leitura ou escrita pelo usurio.

15

IC Inter-Integrated Circuit um barramento serial inventado pela Philips que usado para conectar dispositivos perifricos

de baixa velocidade de transferncia de dados. Aula 02 Pg. 21

Mdulo Timer2 O mdulo Timer2 um timer de 8 bits com prescaler e postscaler. Este timer pode ser utilizado como base de tempo para a gerao de PWM no mdulo CCP (visto no prximo item). Este mdulo tambm pode ser acessado para leitura e escrita pelo usurio. Mdulo CCP O Mdulo CCP (Capture / Compare / PWM) contm um registrador de 16 bits que pode operar como: Registrador de captura de 16bits (captura o valor do Timer1 quando um evento ocorrer no pino CCP1 do PIC); Registrador comparador de 16bits (compara o valor do mdulo com o valor do Timer1); Modo PWM (Produz um sinal PWM com resoluo de 10bits). Mdulo MSSP O mdulo MSSP (Mster Synchrounous Serial Port) um mdulo de interface serial, muito til para comunicao com outros perifricos ou outros microcontroladores. O mdulo MSSP pode operar em um desses dois modos: SPI (Serial Peripheral Interface) ; I2C (Inter-Integrated Circuit). Mdulo USART O Mdulo USART (Addressable Universal Synchronous Receiver Transmitter) um dos dois mdulos de transmisso serial que diversos modelos de PICs possuem e tambm um dos mais utilizados, principalmente quando h a interface com o computador atravs do PortA serial. Mdulo Conversor Analgico/Digital (A/D) Quando utilizado o modo A/D do PIC, o pino de entrada fica conectado a um Sample and Hold17, e este conectado a entrada do conversor A/D. O processo ento ir converter o sinal analgico em um sinal digital de 10bits. Em PIC de 28 pinos h geralmente 5 entradas analgicas multiplexadas. Em PICs maiores, h 8 entradas multiplexadas. Mdulo Comparador Em alguns modelos de PICs h um comparador analgico, gerando uma sada digital. A tenso de referncia do comparador pode ser definida via software ou segundo uma tenso externa.
16

16

SPI - Serial Peripheral Interface Bus padro amplamente utilizado para controle de dispositivos perifricos. Um subconjunto do

SPI e bastante utilizado o microwire.


17

Sample and Hold Dispositivo utilizado para realizar a interface entre o mundo real (e seus sinais analgicos) e um conversor

analgico digital. O objetivo capturar rapidamente o sinal analgico para ser convertido posteriormente lentamente pelo A/D. Aula 02 Pg. 22

22. Alguns modelos de PICs


6 pinos - PIC10F202 Nmero de pinos: 6 Nmero de pinos de I/O: 4 Memria de programa: 512 Words Memria de dados: Memria EEPROM: 0 Timers/WDT: 1 Timer de 8bits e 1 WDT Oscilador mximo: Cristal 20MHz 8 Pinos - PIC12F675 Nmero de pinos: 8 Nmero de pinos de I/O: 6 Memria de programa: 1024 Words Memria de dados: 64 Bytes Memria EEPROM: 128 Bytes Timers/WDT: 1 Timer de 8bits, 1 Timer de 16bits e 1 WDT Conversores A/D: 4 (resoluo de 10bits) Comparadores: 1 Oscilador mximo: Cristal 20MHz 18 Pinos - PIC16F84A Nmero de pinos: 18 Nmero de pinos de I/O: 13 Memria de programa: 1024 Words Memria de dados: 68 Bytes Memria EEPROM: 64 Bytes Timers/WDT: 1 Timer de 8bits e 1 WDT Oscilador mximo: Cristal 20MHz 18 Pinos PIC16F628A Nmero de pinos: 18 Nmero de pinos de I/O: 16 Memria de programa: 2048 Words
Aula 02 Pg. 23

Memria de dados: 224 Bytes Memria EEPROM: 128 Bytes Timers/WDT: 2 Timer de 8bits, 1 Timer de 16bits e 1 WDT Comparadores analgicos: 2 Mdulo CCP: 1 Oscilador mximo: Cristal 20MHz 28 Pinos PIC16F873 Nmero de pinos: 28 Nmero de pinos de I/O: 22 Memria de programa: 4096 Words Memria de dados: 192 Bytes Memria EEPROM: 128 Bytes Timers/WDT: 2 Timer de 8bits, 1 Timer de 16bits e 1 WDT Conversores A/D: 5 (resoluo de 10bits) Mdulo CCP: 2 Interfaces: MSSP, USART Oscilador mximo: Cristal 20MHz 40 Pinos PIC16F877 Nmero de pinos: 40 Nmero de pinos de I/O: 33 Memria de programa: 8192 Words Memria de dados: 384 Bytes Memria EEPROM: 256 Bytes Timers/WDT: 2 Timer de 8bits, 1 Timer de 16bits e 1 WDT Conversores A/D: 8 (resoluo de 10bits) Comparadores: 2 Interfaces: AUSART, MI2C, SPI Oscilador mximo: Cristal 20MHz

Aula 02

Pg. 24

23. Uma viso sobre sistemas numricos


Alm do sistema decimal, onde temos 10 smbolos para representar os nmeros (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), h tambm outros sistemas numricos. Utilizamos o sistema decimal no dia a dia por questes histricas: a razo de o sistema decimal ter 10 smbolos por que possumos 10 dedos nas mos. O computador e outros aparelhos eletrnicos no necessitam utilizar o sistema decimal em seus clculos. Eles podem utilizar sistemas de numerao mais simples, que facilitem os clculos computacionais e armazenamento de dados, com apenas 2 smbolos, 8 smbolos, ou mesmo com 16 smbolos. Sistema binrio de numerao No sistema binrio h apenas 2 smbolos. Normalmente utilizamos o 0 e o 1 como smbolos binrios. Exemplo: 01001110. Com os nmeros binrios, assim como com qualquer outro sistema numrico utilizado no PIC, possvel realizar operaes aritmticas. Deste ponto em diante chamaremos um smbolo binrio de bit, um conjunto de 8 bits de byte e durante o curso iremos aprendendo aos poucos como trabalhar com este sistema de numerao. Obs.: Para saber quantas combinaes podem ser realizadas com n dgitos binrios, basta realizar o seguinte clculo: n de combinaes = 2 . As aplicaes para este clculo veremos mais adiante nas aulas prticas. Sistema hexadecimal de numerao O sistema hexadecimal (16 smbolos) um sistema numrico bastante til e utilizado no PIC. Por exemplo, os endereos da memria do PIC podem ser melhores visualizados com nmeros hexadecimais. O sistema hexadecimal composto pelos seguintes smbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Uma das principais vantagens de se utilizar o sistema hexadecimal a facilidade de converso para o sistema binrio. A cada 4 bits possvel gerar um nmero em sistema hexadecimal de maneira direta, conforme a tabela abaixo.
n

Aula 02

Pg. 25

Tabela 3: Equivalncias entre sistemas de numerao

Binrio 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

Hexadecimal 0 1 2 3 4 5 6 7 8 9 A B C D E F

Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Por exemplo, para converter o nmero binrio 010111100101100 em hexadecimal devemos dividir o nmero em partes de 4 dgitos (0010 1111 0010 1100), incluindo zeros esquerda do nmero binrio quando necessrio, e em seguida converter em hexadecimal dgito por dgito, ficando 2F2Ch. O h no final do nmero somente para indicar que o nmero est no formato hexadecimal. A operao de transformao inversa realizada da mesma maneira. No MPLAB utilizamos as seguintes sintaxes para escrevermos os nmeros: Binrio: B10010100 Decimal: .148 Hexadecimal: 0X94 Mas no vamos nos preocupar muito com os sistemas de numerao no momento, pois, o MPLAB trabalha com os trs sistemas apresentados (decimal, binrio e hexadecimal) de forma que podemos escolher sempre qual dos sistemas utilizar.

24. Configurao dos SFRs


Como j vimos antes, os SFRs so registradores especiais que ficam na memria de dados. Esses registradores, assim como toda a memria de dados, tm 8 bits e possuem neles configuraes essenciais para o funcionamento do dispositivo. Alguns autores chegam a denominar os registradores especiais como os registradores que configuram tudo. So nos registradores especiais que iremos informar quais interrupes iro ocorrer, quais portas sero entrada ou sada, se ocorreu um zero aps a ltima operao aritmtica, etc. Logo, ao longo do curso, iremos aprender para que servem alguns dos registradores do PIC16F84, comeando com o TrisA, TrisB, PortA e PortB. TrisA e TrisB Estes dois registradores especiais so reservados para a definio de quais pinos sero entrada e quais pinos sero sada. O TrisA est relacionado com o PortA; o TrisB relacionado com o PortB.
Aula 02 Pg. 26

Para definir o RA2 como uma entrada, basta armazenar em TrisA,2 (bit 2 do registrador TrisA) o valor 1. Caso eu quisesse que o RA2 fosse uma sada, bastaria armazenar em TrisA,2 o valor 0. Para qualquer bit do TrisA ou TrisB, 1 significar que o PortA associada uma entrada e 0 que o PortA uma sada. Para facilitar a memorizao, podemos relacionar 1 com Input (entrada) e 0 com Output (sada). Lembramos que o RA4 (PortA,4), quando configurado como sada, funciona com o dreno aberto, como vimos na aula 01. Vimos ainda que todos os pinos do PortB (RB7:RB0), quando configurados como entrada, podem ter em cada pino individualmente um fraco pull-up habilitado via software. PortA e PortB muito simples mudar o nvel lgico de umo PortA no PIC, quando esta est configurada como sada. Assim como tambm bastante simples ler o nvel lgico nos pinos do PIC quando este pino est configurado como entrada. Para que meu RB2 esteja no nvel lgico 1, se ele estiver configurado como sada (TrisB,2 = 0), basta gravar o bit 1 na posio PortB,2. Para que ele retorne ao nvel lgico 0, basta gravar o bit 0 na posio PortB,2. Estas operaes de escrita no PortA utilizada, por exemplo, para o acionamento de um rel, LED ou uma buzina. Mas se eu quiser ler o RB5, que est configurado como entrada (TrisB,5 = 1), basta ler o bit 5 do registrador PortB (PortB,5). As operaes de leitura do PortA podem servir, por exemplo, para verificar o status de um sensor de proximidade.

25. O Work register (W)


O W um registrador utilizado pelo PIC para auxlio nas operaes lgicas ou aritmticas. Antes de realizar qualquer soma, por exemplo, um dos operando deve estar no W e o outro em um registrador qualquer. O resultado desta soma ficar armazenado no W at que este dado seja movido para algum registrador.

26. Instrues MOVF, MOVLW e MOVWF


MOVF Sintaxe: MOVF f,d O contedo do registrador f ser movido para um destino d. Em geral utilizamos d = W, ou seja, o valor de um registrador movido para o W. Exemplo:
MOVF TRISA,W

MOVLW Move um valor numrio (literal) para o registrador W (Work).


Aula 02 Pg. 27

Sintaxe: MOVLW k Obs.: k deve estar entre 0 e 255 pois W de 8bits. Exemplo:
MOVLW .120

MOVWF Move (copia) o valor do registrador W para o registrador f Sintaxe: MOVWF f Exemplo:
MOVWF PORTB

A seguir apresentamos um exemplo para mover (copiar) um valor literal para um registrador f qualquer.
MOVLW MOVWF B11001010 STATUS

Neste exemplo, o nmero binrio 11001010 ser copiado no registrador STATUS. Como pode-se ver, para se copiar um nmero literal k em um registrador f necessrio que antes este nmero k seja copiado para o W e s ento movido para o registrador f. Outro exemplo Se quisermos configurar o RB4 e o RB7 como entradas e os demais pinos do PortB como sada, devemos realizar a seguinte seqncia de instrues:
MOVLW MOVWF B10010000 TRISB

27. Instrues BSF e BCF


BSF Sintaxe: BSF f,b O bit b do registrador f ser setado (colocado em nvel lgico 1) Exemplo: BSF PortA,3 Neste exemplo o pino RA3 foi para nvel lgico 1. BCF Sintaxe: BCF f,b O bit b do registrador f ser limpo (colocado em nvel lgico 0) Exemplo: BCF TrisA,3 Neste exemplo o pino RA3 foi definido como sada.

Aula 02

Pg. 28

28. Instrues BTFSC e BTFSS


BTFSC Sintaxe: BTFSC f,b Se o bit b do registrador f for 1, a prxima instruo ser executada. Se o bit b do registrador f for 0, a prxima instruo ser descartada (pulada). Exemplo:
BTFSC BSF BCF PortA,1 PortB,2 PortB,2

Na seqncia de instrues acima o PIC ir testar a entrada RA1. Se o pino estiver em 1, o PIC ir colocar a sada RB2 em 1 tambm e, logo em seguida, colocar o RB2 em 0. Caso o RA1 esteja em 0, a sada RB2 ir para 0 sem executar o comando BSF (que ser pulado pelo PIC). BTFSS Sintaxe: BTFSS f,b Se o bit b do registrador f for 1, a prxima instruo ser descartada (pulada). Se o bit b do registrador f for 0, a prxima instruo ser executada. Exemplo:
BTFSS BSF BCF PortA,1 PortB,2 PortB,2

Na seqncia de instrues anterior o PIC ir testar a entrada RA1. Se o pino estiver em 0, o PIC ir colocar a sada RB2 em 1 tambm e, logo em seguida, colocar o RB2 em 0. Caso o RA1 esteja em 1, a sada RB2 ir para 0 sem executar o comando BSF (que ser pulado pelo PIC).

29. Labels
Os labels so rtulos (como o nome diz em ingls) que marcam algumas posies da memria de programa. Esses rtulos auxiliam bastante o trabalho do programador uma vez que quando for necessrio realizar um desvio no programa no ser necessrio que o programador saiba o endereo do destino (conforme veremos no comando GOTO). Exemplo: supondo a existncia de LEDs ligados aos pinos RA2, RA3 e RA4, poderamos ter no programa
LIGA_LEDS BSF PORTA,2 BSF PORTA,3 BSF PORTA,4 ... DESLIGA_LEDS BCF PORTA,2 Aula 02 Pg. 29

BCF PORTA,3 BCF PORTA,4 ...

30. Instruo GOTO


Sintaxe: GOTO [label] / GOTO $+x

GOTO um desvio incondicional. Exemplos:


GOTO LIGA_LEDS

Neste exemplo o PIC ir pular incondicionalmente para o bloco de instrues logo abaixo do rtulo LIGA_LEDS.
GOTO $+2

Neste exemplo o PIC ir pular duas linhas na execuo dos comandos.

31. Comentrios
Como poderemos perceber no modelo, os comentrios devem ser inseridos no programa aps um ;. Exemplo:
MOVLW TMR0 ;Carrega o Timer 0 com o valor de W

A importncia do comentrio extrema uma vez que muito difcil, s vezes, impossvel, analisar um programa em Assembly feito por terceiro, ou pela prpria pessoa, quando o cdigo um pouco mais complexo. Quanto mais comentrio tiver o programa, mais fcil ser o entendimento do programa e as manutenes futuras.

32. Arquivos de definio padro da Microchip


Quando digitamos no programa MOVWF TRISA o compilador tem que saber em que endereo da memria est armazenado o registrador TrisA (no caso, TrisA=85h). O arquivo que indica em que endereos esto armazenados os SFR, assim como outras definies genricas, o arquivo de definio padro fornecido junto com o MPLAB. Quando digitamos um programa devemos indicar qual ser o arquivo de definies que utilizaremos de acordo com o tipo do PIC que iremos utilizar em nosso projeto. Em todos os nossos programas deste curso utilizaremos o arquivo P16F84.INC. Para realizar esta declarao do arquivo padro deveremos sempre escrever a seguinte linha no nosso programa:
#INCLUDE <P16F84.INC>

Aula 02

Pg. 30

33. Estrutura padro dos cursos Criatronics


A seguir apresentamos um modelo padro completo para o desenvolvimento dos programas deste curso. Porm, para os primeiros programas, utilizaremos uma verso reduzida deste modelo, descartando as partes que ainda no foram aprendidas at o momento.

Aula 02

Pg. 31

Modelo padro completo Criatronics


;******************************************************************** ;* CRIATRONICS - CENTRO DE ROBTICA, INTELIGNCIA E AUTOMAO * ;* CURSO DE MICROCONTROLADORES PIC I - INSTRUTORES: YGO BATISTA * ;* KOSME LUSTOSA * ;* ALUNO: DATA: XX/08/2005 * ;******************************************************************** ;******************************************************************** ;* DESCRIO DO PROGRAMA: * ;* * ;* * ;* * ;* * ;* * ;******************************************************************** ;******************************************************************** ;* DECLARAO DO ARQUIVO DE DEFINIO PADRO DA MICROCHIP * ;******************************************************************** #INCLUDE <P16F84.INC> ;******************************************************************** ;* DEFINIO DA PAGINAO DA MEMRIA * ;******************************************************************** #DEFINE BANK0 BCF #DEFINE BANK1 BSF STATUS, RP0 STATUS, RP0 ;SETA O BANCO 0 DA MEMRIA ;SETA O BANCO 1 DA MEMORIA

;******************************************************************** ;* DEFINIO DAS VARIVEIS * ;******************************************************************** CBLOCK 0X0C W_TEMP STATUS_TEMP CONTADOR_A CONTADOR_B FLAG ENDC ;ENDEREO INICIAL DA MEMRIA DE USO GERAL ;REGISTRO TEMPORRIO PARA ARMAZENAMENTO DE ; W E STATUS DURANTE A INTERRUPO ;REGISTRADOR AUXILIAR PARA GERAO ; DE DELAYS ;REGISTRADOR PARA DEFINIO DE FLAGS INTERNOS ;FIM DO BLOCO DE VARIVEIS

;******************************************************************** ;* DEFINIO DOS FLAGS INTERNOS DO SISTEMA * ;******************************************************************** ;******************************************************************** ;* DEFINIO DAS CONSTANTES * ;******************************************************************** ;******************************************************************** ;* DEFINIO DAS ENTRADAS * ;******************************************************************** ;******************************************************************** ;* DEFINIO DAS SADAS * ;******************************************************************** ;******************************************************************** ;* VETOR RESET DO SISTEMA * ;******************************************************************** ORG 0X00 GOTO INICIO ;ENDEREO INICIAL DE PROCESSAMENTO

Aula 02

Pg. 32

;******************************************************************** ;* VETOR INTERRUPO DO SISTEMA * ;******************************************************************** ORG 0X04 ;ENDEREO INICIAL PADRO DA INTERRUPO ;* ARMAZENAMENTO DE W E STATUS MOVWF W_TEMP ;ARMAZENA W MOVF STATUS,W MOVWF STATUS_TEMP ;ARMAZENA STATUS ;* IDENTIFICAO DA INTERRUPO OCORRIDA BTFSC INTCON,2 ;TESTA SE OCORREU A INTERRUPO PELO GOTO INT_TMR0 ; ESTOURO DO TMR0 BTFSC INTCON,1 ;TESTA SE OCORREU A INTERRUPO PEL0 GOTO INT_RB0 ; RB0 GOTO INT_RB ;CASO NEGATIVO, OCORREU INTERRUPO POR ; MUDANA DE PINO EM RB7:RB4 ;* ROTINA PARA TRATAMENTO DA INTERRUPO POR ESTOURO DO TMR0 INT_TMR0 ;* FIM DO TRATAMENTO DA INTERRUPO POR ESTOURO DO TMR0 BCF INTCON,2 ;LIMPA O FLAG DE IDENTIFICAO DA INTERRUPO GOTO FIM_INT ;* ROTINA PARA TRATAMENTO DA INTERRUPO PELO RB0 INT_RB0 ;* FIM DO TRATAMENTO DA INTERRUPO PELO RB0 BCF INTCON,1 ;LIMPA O FLAG DE IDENTIFICAO DA INTERRUPO GOTO FIM_INT ;* ROTINA PARA TRATAMENTO DA INTERRUPO POR MUDANA EM RB7:RB4 INT_RB

;* FIM DO TRATAMENTO DA INTERRUPO POR MUDANA EM RB7:RB4 BCF INTCON,0 ;LIMPA O FLAG DE IDENTIFICAO DA INTERRUPO GOTO FIM_INT ;* RECUPERAO DE W E STATUS FIM_INT MOVF STATUS_TEMP,W MOVWF STATUS MOVF W_TEMP,W RETFIE E RETORNO DA FUNO ;RECUPERA O STATUS ANTERIOR INTERRUPO ;RECUPERA O W ANTERIOR INTERRUPO ;RETORNA DA INTERRUPO

;******************************************************************** ;* SUB-ROTINAS DE DELAY * ;******************************************************************** ;* ROTINA DE DELAY UTILIZANDO BASE DE TEMPO EXTERNA DELAY MOVWF TMR0 ;O VALOR DE W PASSADO TMR0 BCF INTCON,2 BTFSS INTCON,2 ;O DELAY SER IGUAL GOTO $-1 ; D=(256-W)*1/PRESCALE*(BASE DE TEMPO) BCF INTCON,2 ;PARA OPTION,PS2:PS0=0, TEMOS PRESCALE=1:2 RETURN ;* ROTINA DE DELAY INTERNA ;N CICLOS DO DELAY (ND) CASO N HAJA INTERRUPES DURANTE A EXECUO ; DESTA SUB-ROTINA: ND = 3*CONTADOR_A*CONTADOR_B+4*CONTADOR_A+4 ;TEMPO DE EXECUO DA SUB-ROTINA (TE): TE = 4*ND/FREQUENCIA DELAY_INT MOVWF CONTADOR_A MOVLW .12 MOVWF CONTADOR_B DECFSZ CONTADOR_B,F GOTO $-1 DECFSZ CONTADOR_A,F GOTO $-5 RETURN ;INICIALIZA O CONTADOR_A COM O VALOR DE W ;INICIALIZA O CONTADOR_B ;DECREMENTA O CONTADOR_B, CASO CONTADOR_B=0 ; O SISTEMA DECREMENTAR O CONTADOR_A ; E RECARREGAR O CONTADOR_B, AT QUE ; CONTADOR_A SEJA IGUAL A 0

Aula 02

Pg. 33

;******************************************************************** ;* INICIO DO PROGRAMA * ;******************************************************************** INICIO BANK1 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF BANK0 B'11111111' TRISA B'11111111' TRISB B'00100000' OPTION_REG B'10000000' ; INTCON ;ALTERA PARA O BANCO 1 ;ENTRADAS NO PORTA: ;SADAS NO PORTA: ;ENTRADAS NO PORTB: ;SADAS NO PORTB: ; ;DEFINIO DE CONFIGURAES GERAIS DO PIC ;DEFINIO DE CONFIGURAES DE INTERRUPES ;ALTERA PARA O BANCO 0

;OPES DEFINIDAS (OPTION_REG): ; BIT 5 - CLOCK DE INCREMENTO DO TMR0 EXTERNO (RA4) ;INTERRUPES DEFINIDAS ; BIT 5 - HABILITA ; BIT 4 - HABILITA ; BIT 3 - HABILITA (INTCON): INTERRUPO POR OVERFLOW EM TMR0 INTERRUPO EXTERNA POR RB0 INTERRUPO POR MUDANA EM RB7:RB4

;******************************************************************** ; INICIALIZAO DAS VARIVEIS * ;******************************************************************** CLRF PORTA CLRF PORTB ;LIMPA AS SADAS DE PORTA E DE PORTB

;******************************************************************** ;* ROTINA PRINCIPAL * ;******************************************************************** MAIN GOTO MAIN ;******************************************************************** ;* FIM DO PROGRAMA * ;******************************************************************** END ;INSTRUO OBRIGATRIA - FIM DO PROGRAMA

34. Programa 01 Acendendo um LED atravs de um boto


Descrio do programa O nosso primeiro programa ir ler uma entrada (um boto) e ir acionar uma sada (um LED) caso a entrada esteja no nvel lgico 1. Ou seja, ir ligar um LED sempre que o boto estiver pressionado. O boto estar ligado ao RA2 (por escolha do programador) e o LED estar ligado ao RB5 (igualmente por escolha do programador).

Aula 02

Pg. 34

Criao do Fluxograma

Figura 15: Fluxograma do programa 01

Observamos que o sistema estar sempre verificando se o boto est pressionado ou no. Se estiver pressionado, o sistema ligar o LED. Se no estiver, o sistema desligar o LED. imPortAnte observar que, como a execuo das instrues muito rpida, o usurio no ir perceber que o sistema fica testando o boto para s depois tomar uma deciso de ligar ou no o LED. Para termos uma idia da velocidade de processamento do microcontrolador, se utilizarmos um oscilador de 4MHz este programa ir verificar se o boto est pressionado 167.000 vezes a cada segundo. Implementao
;******************************************************************** ;* CRIATRONICS - CENTRO DE ROBTICA, INTELIGNCIA E AUTOMAO * ;* CURSO DE MICROCONTROLADORES PIC I - INSTRUTORES: YGO BATISTA * ;* KOSME LUSTOSA * ;* ALUNO: YGO NETO BATISTA DATA: 20/08/2005 * ;******************************************************************** ;******************************************************************** ;* DESCRIO DO PROGRAMA: * ;* O SISTEMA IR ACIONAR O LED LIGADO AO RB5 SEMPRE QUE O BOTO * ;* LIGADO AO RA2 ESTIVER PRESSIONADO (NVEL LGICO 1) * ;******************************************************************** ;******************************************************************** ;* DECLARAO DO ARQUIVO DE DEFINIO PADRO DA MICROCHIP * ;******************************************************************** #INCLUDE <P16F84.INC> ;******************************************************************** ;* VETOR RESET DO SISTEMA * ;******************************************************************** ORG 0X00 INICIO BSF STATUS,RP0 MOVLW B'11111111' MOVWF TRISA MOVLW B'11011111' MOVWF TRISB BCF STATUS,RP0 ;ALTERA PARA O BANCO 1 ;ENTRADAS NO PORTA: TODAS ;SADAS NO PORTA: ;ENTRADAS NO PORTB: RB7:RB6,RB4:RB0 ;SADAS NO PORTB: RB5 ;ALTERA PARA O BANCO 0 ;ENDEREO INICIAL DE PROCESSAMENTO

Aula 02

Pg. 35

;******************************************************************** ;* ROTINA PRINCIPAL * ;******************************************************************** MAIN BTFSS PORTA,2 GOTO DESL GOTO LIGA DESL BCF PORTB,5 GOTO MAIN LIGA BSF PORTB,5 GOTO MAIN ;LABEL DA ROTINA PRINCIPAL ;TESTA O BOTO ;SE FOR 0 - DESVIA PARA DESL ;SE FOR 1 - DESVIA PARA LIGA ;LABEL DESL ;DESLIGA O LED ;RETORNA PARA O INCIO DO PROGRAMA ;LABEL LIGA ;LIGA O LED ;RETORNA PARA O INCIO DO PROGRAMA

;******************************************************************** ;* FIM DO PROGRAMA * ;******************************************************************** END ;INSTRUO OBRIGATRIA - FIM DO PROGRAMA

Aula 02

Pg. 36

35. General Pupouse Register (GPR)


Para o prximo programa ser necessrio conhecer um pouco mais da memria do PIC. Como j vimos na segunda aula, o PIC tem dois blocos de memria independentes, que podem ser acessados simultaneamente: Memria de programa (Flash); Memria de dados (RAM); E a memria de dados pode ser dividida para fins de estudo em dois blocos: Memria RAM para uso geral (GPR General Pupose Registers); Registradores especiais (SFR Special Function Registers). Vamos estudar neste tpico os registradores para uso geral. No PIC16F84A temos 68 registradores disponveis, iniciando com o do endereo 0Ch (at o endereo 4Fh), conforme a Figura 14, cada um registrador contendo 8 bits. Estes registradores so disponibilizados para o programador para o armazenamento dos dados necessrios do sistema. Lembramos que todos os registradores so apagados quando o microcontrolador desligado ou reiniciado. Um exemplo de utilizao destes registradores quando precisamos armazenar temporariamente o nmero de latas que passaram por um sensor em uma fbrica e quantas destas latas estavam danificadas. Aps o armazenamento destes dois nmeros na memria podemos fazer comparaes entre eles ou alguma outra funo lgica ou aritmtica. No PIC, o bloco da programao que define quais os registradores sero utilizados durante a execuo do programa o seguinte:
;******************************************************************** ;* DEFINIO DAS VARIVEIS * ;******************************************************************** CBLOCK 0X0C W_TEMP STATUS_TEMP CONTADOR_A CONTADOR_B FLAG TAMANHO_PE CLIENTE ENDC ;FIM DO BLOCO DE VARIVEIS ;ENDEREO INICIAL DA MEMRIA DE USO GERAL ;REGISTRO TEMPORRIO PARA ARMAZENAMENTO DE ; W E STATUS DURANTE A INTERRUPO ;REGISTRADOR AUXILIAR PARA GERAO ; DE DELAYS ;REGISTRADOR PARA DEFINIO DE FLAGS INTERNOS ;REGISTRADOR PARA ARMAZENAMENTO DO TAMANHO DO P DO

Neste exemplo definimos W_TEMP, STATUS_TEMP, CONTADOR_A, CONTADOR_B, FLAG e TAMANHO_PE como registradores para uso geral e estes podem ser escritos ou lidos pelo programa a qualquer momento. A linha CBLOCK 0X0C indica que o primeiro registrador da lista (no exemplo, W_TEMP) ser armazenado no endereo 0Ch da memria de dados. Os demais registradores em seguida listados sero armazenados nos endereos imediatamente aps o endereo 0Ch. O comando ENDC indica o fim do bloco de definies das variveis.
Aula 03 Pg. 37

36. Delays
Os sensores e atuadores dos seres humanos, como a viso, por exemplo, no so to rpidos quanto o microcontrolador. Logo, se o microcontrolador quiser escrever num display de LCD uma mensagem, ele tem que deixar a mensagem no display durante um tempo suficientemente grande para que haja a compreenso pelos humanos do que est escrito no display antes que o microcontrolador mude para uma outra mensagem. Por isso que necessrio o microcontrolador esperar um tempo (delay) antes de mudar de mensagem. O mesmo ocorre com teclados. Quando ns teclamos, por mais rpido que seja o digitador, os nossos dedos pressionam cada tecla por alguns milsimos de segundos (vamos supor 100ms). Logo, o computador ou microcontrolador tem que esperar um pouco (delay) para poder ler novamente o teclado e saber qual a nova tecla que o usurio est pressionando. Lembramos que enquanto o microcontrolador estiver alimentado e o oscilador estiver funcionando, este estar sempre executando algum comando. O microcontrolador no pode simplesmente parar de executar o programa por algum tempo (a exceo do modo sleep, que no estudaremos neste curso). Para a criao deste primeiro tipo de delay que apresentaremos necessrio fazer com que o microcontrolador fique executando algum comando repetidas vezes s para gastar o tempo desejado. Implementao Antes de explicarmos melhor o programa necessrio conhecermos melhor uma nova instruo do PIC.

37. Instruo DECFSZ


DECFSZ Decrementa um registrador em uma unidade e pula a prxima linha caso o resultado do decremento seja zero. Sintaxe: DECFSZ f,d Se o registrador f for 1 aps um decremento, a prxima instruo ser executada. Se o registrador f for 0 aps um decremento, a prxima instruo ser descartada (pulada). O resultado do decremento armazenado em d. Exemplo:
DECFSZ PACIENTES,F GOTO INICIO GOTO LIGA_SOM

O registrador PACIENTES ser decrementado em uma unidade e o resultado armazenado no prprio registrador PACIENTES (PACIENTES = PACIENTES - 1). Se aps o decremento PACIENTES for diferente de zero ento o programa vai para INICIO. Caso contrrio, se PACIENTES for zero, o programa vai para LIGA_SOM.
Aula 03 Pg. 38

Implementao do delay
DELAY_INT MOVWF CONTADOR_A MOVLW .12 MOVWF CONTADOR_B DECFSZ CONTADOR_B,F GOTO $-1 DECFSZ CONTADOR_A,F GOTO $-5 RETURN ;INICIALIZA O CONTADOR_A COM O VALOR DE W ;INICIALIZA O CONTADOR_B ;DECREMENTA O CONTADOR_B, CASO CONTADOR_B=0 ; O SISTEMA DECREMENTAR O CONTADOR_A ; E RECARREGAR O CONTADOR_B, AT QUE ; CONTADOR_A SEJA IGUAL A 0

No programa acima, inicialmente o CONTADOR_A carregado com o valor de W e o CONTADOR_B carregado com o valor 12. O CONTADOR_B em seguida ir decrementar e testar se zero. Como o valor inicial 12, aps a primeira execuo de DECFSZ CONTADOR_B,F o valor de CONTADOR_B passar a ser 11 (que diferente de zero) e no haver um pulo da prxima linha. Quando o comando GOTO $-1 executado, o ponteiro do PIC ir voltar uma linha e executar novamente a instruo DECFSZ CONTADOR_B, F. Aps 10 execues deste comando o valor de CONTADOR_B ser 1 e ento quando executado novamente o comando DECFSZ CONTADOR_B,F ocorrer o pulo de uma linha, passando o programa a executar a linha DECFSZ CONTADOR_A,F. Se CONTADOR_A for diferente de zero aps o decremento, o programa ir voltar 5 linhas e ir recarregar o valor 12 em CONTADOR_B e repetir todo o procedimento j descrito at ento. O delay s ir se encerrar quando, aps decrementado, o CONTADOR_A for zero e a instruo RETURN for executada.

38. Instrues CALL e RETURN


CALL Sintaxe: CALL k Chama a sub-rotina representada por k (que um endereo da memria de programa ou um nome dado pelo usurio - label). Antes de executar o desvio, o endereo de retorno (PC+1) armazenado na pilha. Exemplo:
CALL DELAY_INT

RETURN Sintaxe: RETURN Retorna de uma sub-rotina, recuperando o ltimo endereo da pilha (gravado atravs da instruo CALL).

Aula 03

Pg. 39

Exemplo: No exemplo a seguir dois LEDs ficaro piscando.


PISCA_LED BSF LED1 CALL DELAY_INT BSF LED2 CALL DELAY_INT BCF LED1 BCF LED2 CALL DELAY_INT GOTO PISCA_LED DELAY_INT MOVLW .100 MOVWF CONTADOR_A MOVLW .100 MOVWF CONTADOR_B DECFSZ CONTADOR_B,F GOTO $-1 DECFSZ CONTADOR_A,F GOTO $-5 RETURN

;INICIALIZA O CONTADOR_A COM O VALOR DE W ;INICIALIZA O CONTADOR_B ;DECREMENTA O CONTADOR_B, CASO CONTADOR_B=0 ; O SISTEMA DECREMENTAR O CONTADOR_A ; E RECARREGAR O CONTADOR_B, AT QUE ; CONTADOR_A SEJA IGUAL A 0

39. Diretriz #DEFINE


Sintaxe: #DEFINE <nome> [<texto>] Sempre que o compilador encontrar <nome>, ele ser substitudo pelo texto associado a ele. Exemplo:
#DEFINE LED PORTB,3

A aplicao deste recurso ficar clara no prximo programa que desenvolveremos.

40. Programa 02 Piscando um LED ao pressionar um boto


Nesta prtica o aluno dever fazer um sistema que pisque um LED com a freqncia de 1Hz ao pressionar um boto.

41. Programa 03 Fechadura eletrnica


Nesta prtica o aluno desenvolver um sistema para acionar um LED se, e somente se, a seguinte seqncia for pressionada: RA0, RA3, RA2, RA2 e RA1. Caso qualquer boto seja pressionado fora da seqncia o sistema dever reiniciar automaticamente, bem como se houver um tempo maior que 10s entre o pressionamento de dois botes. O sistema dever ainda acender um LED caso o usurio acerte a seqncia correta.

Aula 03

Pg. 40

42. Os Motores e o PIC


Nessa terceira aula iremos recordar de conceitos bsicos de eletrnica sobre princpio de funcionamento de motores, acionamento de motores e modulao PWM. No podemos imaginar a robtica sem os motores. Em geral, para girar uma roda, posicionar uma cmera ou mesmo movimentar um brao robotizado so utilizados motores. Porm, h diversos tipos de motores e, cada um, com finalidades e mecanismos de acionamento diferente. Em geral, para se acionar um motor, necessrio que o hardware esteja devidamente projetado para isto uma vez que os motores consomem bastante corrente alta demais para o PIC conseguir suprir. Logo, nos prximos tpicos, explicaremos como funcionam os motores, como o PIC deve operar para cada tipo de motor e como o hardware deve ser projetado para estes tipos de motores.

43. Tipos de motores


Em robtica, muito comum o uso de trs tipos de motores: Motores DC (escovados); Motores de Passo; Servomotores. Nesse curso iremos abordar apenas os motores DC.

44. Motores DC
So os motores mais simples do ponto de vista eltrico e so tambm chamados de motores CC ou de corrente contnua. Estes motores so largamente utilizados em aplicaes que variam desde brinquedos at a movimentao de uma esteira industrial. Os motores DC escovados so baratos, fcil de controlar e esto disponveis em diversos tamanhos e formas. Princpio de funcionamento O motor DC composto por um m permanente e um eletrom acoplado no eixo do motor. Ao se energizar a bobina do eletrom, o eixo do motor ir girar de modo que o norte da bobina encontre o sul do m permanente, bem como o sul da bobina encontre o norte do m permanente. Quando isto ocorre, devido detalhes de construo do motor, h uma inverso na polaridade da tenso eltrica aplicada na bobina do eletrom. O que antes era norte, agora sul e, analogamente, o que antes era sul, agora norte. Com isso o motor continuar girando para mais uma vez tentar aproximar o norte da bobina com o sul do m permanente e o sul da bobina com o norte do m permanente. Mais uma vez, quando o norte da bobina encontra o sul do m permanente e o sul da bobina encontra o norte do m permanente, haver uma nova inverso na polaridade da tenso aplicada
Aula 03 Pg. 41

na bobina fazendo com que o motor continue girando e repetindo mais uma vez o ciclo. Podemos ver as principais partes do motor DC na Figura 16.

Figura 16: Princpio de funcionamento dos motores DC

No esquema do motor visto anteriormente possvel perceber que a pilha est ligada diretamente no motor, sem elementos de chaveamento. Porm, se o microcontrolador quiser ligar ou desligar o motor, ser necessrio uma eletrnica de acionamento de motor, pois, a sada do PIC no pode alimentar o motor diretamente devido a baixa corrente que o PIC consegue suprir (ocasionaria a queima do microcontrolador). Eletrnica de acionamento O Criatronics sugere uma montagem utilizando transistores MOSFET canal-N de potncia para chaveamento de cargas. Na Figura 17 pode-se observar o esquema eltrico da ligao de um pequeno motor ao PIC. O diodo D1 tem a funo de proteger o circuito contra tenses indesejadas que surgem no momento do chaveamento do motor devido a indutncia do mesmo.

Figura 17: Eletrnica de acionamento do motor DC

Para motores maiores necessria a utilizao de um DRIVER MOSFET no lugar dos resistores R1 e R2 para que este possa carregar e descarregar o capacitor do PortA do MOSFET de maneira adequada.
Aula 03 Pg. 42

Ponte H Se for desejvel girar o motor em dois sentidos e se s tivermos uma nica fonte de alimentao (como uma bateria, por exemplo), ser necessria uma montagem mais elaborada e o dispositivo necessrio para tal denominado Ponte H. Neste caso a corrente dever fluir no motor em ambos sentidos. Na Figura 18 pode-se ver o esquema eltrico de uma Ponte H.

Figura 18: Ponte H

No esquema percebemos que esto sendo utilizados DRIVERS MOSFET e transistores MOSFET de potncia sugerindo que o motor utilizado de grande porte. Basicamente observamos que o esquema eltrico composto por quatro blocos de acionamento no qual para que o motor gire necessrio o acionamento de dois destes blocos. No entraremos mais a fundo na eletrnica de potncia envolvida na ponte H, pois, no o objetivo deste curso o desenvolvimento de sistemas de potncia, e sim, o controle dos mesmos. Modos de operao da ponte H Para que um motor gire em um sentido necessrio acionar pelo PIC as sadas CTRL1 e CTRL4. Para que o motor gire no sentido oposto ao anterior necessrio o acionamento das sadas CTR3 e CTRL2, conforme mostrado na Tabela 4.
Tabela 4: Modos de operao da ponte H

A principal preocupao que o programador deve ter em relao a ponte H de no ligar simultaneamente o Q1 e Q2 ou ento o Q3 e Q4, pois, nestes casos, haver uma alta corrente passando pelos transistores ocasionando a queima dos transistores que foram ligados erroneamente.
Aula 03 Pg. 43

45. Controle do torque em motores DC


A variao do torque em motores DC pode ser realizada variando a tenso mdia no motor. Esta variao pode ser realizada de duas formas: Variando linearmente a tenso atravs de transistores bipolares de potncia ou qualquer outra eletrnica de potncia (analogicamente - no estudado neste curso); Chaveando o motor rapidamente de modo a criar uma tenso mdia em seus terminais (digitalmente atravs do PWM); Neste curso iremos explorar o controle do torque em motores DC a partir do PWM bastando apenas variar a tenso mdia gerada pelo PWM para que o torque varie.

46. O PWM Pulse Width Modulation


Este tipo de modulao extremamente utilizada na robtica. Com ele podemos controlar torque em motores DC, posio de servomotores (que ser estudado na prxima aula), transmitimos dados entre microcontroladores, interpretamos a distncia entre um sensor ultrasom e um obstculo, etc. O PWM consiste em modular um sinal de acordo com a largura de pulsos, ou seja, a largura do pulso em um trem de pulsos ir carregar consigo alguma informao do sinal que se deseje transmitir. Por exemplo, para o sensor ultrasom a largura do pulso em milisegundos emitida pelo sensor pode representar, em centmetros, a distncia do sensor ao obstculo. Ou seja, se o PIC recebe um sinal com largura de pulso de 10ms, isto poder ser interpretado pelo PIC como se um obstculo estivesse a 10cm de distncia do sensor ultrasom.

v (V)

TL T

T H

t (s)

Figura 19: Um sinal modulado em PWM

O Duty Cicle (D) consiste na razo entre o tempo alto (TH) e o perodo do sinal (T). Logo D = TH / T. Quando TH = T temos D = 1, logo o Duty Cicle de 100%, ou seja, o sinal est sempre em 1. Quando TH = 0 temos D = 0, logo o Duty Cicle de 0%, ou seja, o sinal est sempre em 0. O Duty Cicle ir representar a tenso mdia do sinal PWM. Em controle de LEDs, por exemplo, se aplicarmos um sinal com D = 70% nos LEDs, isto ocasionar que estes dispositivos iro emitir luz com uma luminosidade = 70% da luminosidade mxima, ou seja, pode-se variar a luminosidade dos LEDs linearmente com o Duty Cicle.
Aula 03 Pg. 44

O mesmo conceito de tenso mdia pode ser aplicado a motores DC para variao do torque, como visto anteriormente. Observao: o PWM pode ser aplicado nas entradas da Ponte H para fazer o motor variar o torque.

47. Programa 04 Controlando um motor DC


Nesta prtica deve ser feito um programa para controlar um motor atravs de uma Ponte-H com as seguintes caractersticas: O sistema dever esperar que o usurio pressione um boto para que o motor comece a girar em sentido horrio; Aps a ativao do motor, este dever permanecer acionado durante 10 segundos; Aps os 10s, o motor dever inverter o sentido de rotao e girar no sentido anti-horrio durante 5s; Aps este tempo, o motor dever frear; E, finalmente, esperar que o usurio pressione outra vez o boto. O fluxograma e o cdigo fonte devero ser apresentados na prxima aula.

48. Mdulo TMR0


Na aula 1 vimos que, dentre os mdulos perifricos auxiliares que o PIC16F84 possui, est o mdulo TMR0. Como visto anteriormente, o mdulo TMR0 um timer/contador que possui as seguintes caractersticas: Timer/contador de 8 bits; Pode ser acessado para leitura e escrita pelo usurio; Pode ser aplicado um prescaler; Pode ser ativado atravs de um clock externo; Pode gerar uma interrupo em seu overflow; Pode ser incrementado na borda de subida ou decida. Todos estas caractersticas sero melhor vistas neste captulo. Fisicamente, o timer/contador um registrador de 8 bits que est continuamente sendo incrementado, paralelamente e independentemente da execuo do programa do microcontrolador. Com isto podemos medir tempo ou contar pulsos no RA4/T0CKI no mesmo momento em que executamos o programa principal. O timer/contador incrementar de 0 at atingir 255. No prximo ciclo de instruo, o timer/contador ir estourar e retornar a 0. Se soubermos quanto tempo passa para o timer/contador estourar e contarmos quantas vezes o estouro ocorreu, poderemos medir o tempo que quisermos. Ou seja,
Aula 03 Pg. 45

multiplicando quantas vezes ocorreu o estouro (overflow) pelo tempo que o timer/contador leva para estourar, teremos o tempo total que se pretende medir. Sempre que ocorrer uma transio de 255 para 0 (estouro), o bit T0IF do registrador INTCON colocado em 1. Se as interrupes estiverem habilitadas, como veremos ainda nesta aula, possvel tirar proveito das interrupes geradas e da rotina de tratamento de interrupo. Cabe ao programador zerar o bit T0IF quando desejado. Alm do oscilador do clock do microcontrolador, o contador/temporizador pode tambm ser incrementado atravs de um clock externo ligado ao pino RA4/T0CKI. A escolha entre uma destas opes (clock do oscilador ou clock externo) feita no bit T0CS, do registrador OPTION. Se o bit T0CS estiver em 0, o TMR0 ser incrementado a partir do clock do ciclo de instruo interno do PIC. Se o bit T0CS estiver em 1, o TMR0 ser incrementado a partir da transio no pino RA4/T0CKI. Se for selecionado o clock externo (atravs do RA4/T0CKI), possvel definir se o contador ir ser incrementado na borda de subida ou de decida do sinal em RA4/T0CKI atravs do bit T0SE de OPTION. Se T0SE estiver em 0, o incremento do TMR0 ocorrer na mudana baixo para alto do pino RA4/T0CKI. Se T0SE estiver em 1, o incremento do TMR0 ocorrer na mudana de alto para baixo do pino RA4/T0CKI. O valor atual do contador/timer pode ser modificado pelo programador a qualquer momento. PRESCALE O prescale um contador interno (inacessvel ao programador) do PIC que permite um incremento mais lento do TMR0. Ou seja, se o prescale estiver selecionado em 1:8, isto significa que o TMR0 s ir ser incrementado a cada 8 ciclos de instruo. A configurao do prescale feito no PSA e PS2:PS0 do registrador OPTION.

Figura 20: Registrador OPTION

O bit PSA indica se o prescale vai ser aplicado no TMR0 ou no WDT. No iremos estudar a fundo o WDT neste curso, sendo necessrio deixar este bit em 0 para que o prescale seja aplicado ao TMR0. Se colocarmos em 1, o prescale ser aplicado ao WDT e o TMR0 ficar sem prescale. A configurao da razo entre o incremento do TMR0 e o clock de instrues realizado atravs dos bits PS2:PS0 conforme a tabela a seguir.

Aula 03

Pg. 46

Tabela 5: Configurao do PS2:PS0 para prescale

49. Programa 05 Sistema aquecimento de gua


Nesta prtica o aluno dever, atravs de PWM, acionar uma resistncia eltrica para aquecer a gua de um copo e observar como a variao do duty cicle ir modificar o tempo de aquecimento da gua.

Aula 03

Pg. 47

50. Interrupes
As interrupes so um mecanismo que o microcontrolador possui e que torna possvel responder a alguns acontecimentos no momento em que eles ocorrem, qualquer que seja a tarefa que o microcontrolador esteja a executar no momento. imprescindvel que isto seja possvel por que alguns eventos do mundo real precisam ser tratados no exato momento em que eles ocorrem. Geralmente, cada interrupo muda o fluxo de execuo do programa, executando imediatamente aps o evento que gerou a interrupo uma subrotina para tratamento desta interrupo. Aps o tratamento da interrupo, ou seja, trmino da subrotina de tratamento, o microcontrolador dever voltar ao ponto onde a execuo foi interrompida. No PIC16F84 temos 4 tipos de interrupes: Interrupo externa no pino RB0/INT; Interrupo por overflow no TMR0; Interrupo por mudana nos pinos RB7:RB4 Interrupo com finalizao de gravao na memria EEPROM. Interrupo externa no pino RB0/INT A interrupo externa no pino RB0/INT desencadeada por um impulso ascendente (se o bit INTEDG = 1 no registro OPTION,6), ou por um impulso descendente (se INTEDG = 0). Quando o sinal desejado para gerar a interrupo surge no pino INT, o bit INTF do registro INTCON posto a 1. O bit INTF (INTCON,1) tem que ser limpo na rotina de interrupo, afim de que a interrupo no possa voltar a ocorrer de novo, quando do regresso ao programa principal. Esta uma parte importante do programa e que o programador no pode esquecer, caso contrrio o programa ir constantemente saltar para a rotina de interrupo. A interrupo pode ser desabilitada quando colocamos 0 no bit de controle INTE (INTCON,4). Interrupo por overflow no TMR0 O estouro do timer/contador TMR0 (passagem de FFh para 00h) vai setar o bit TOIF (INTCON,2). Esta uma interrupo muito importante, uma vez que, muitos problemas da vida real podem ser resolvidos utilizando esta interrupo. Um exemplo o da medio de tempo. Se soubermos de quanto tempo o contador precisa para completar um ciclo de 00h a FFh, ento, o nmero de interrupes ocorridas multiplicado por esse intervalo de tempo ir nos dar o tempo total decorrido. Esta interrupo pode ser desabilitada colocando 0 no bit T0IE (INTCON,5). Interrupo por mudana nos pinos RB7:RB4 Qualquer variao em qualquer um das 4 portas de entrada do PORTB (bits 4 a 7), pe 1 no RBIF (INTCON,0). A interrupo ocorre, PortAnto, quando os nveis lgicos em RB7, RB6, RB5 e RB4 do PORTB, mudam do valor lgico 1 para o valor lgico 0 ou vice-versa.
Aula 04 Pg. 48

Para que estes pinos detectem as variaes, eles devem ser definidos como entradas. Se qualquer um destes for definido como sada, nenhuma interrupo ser gerada quando surgir uma variao do nvel lgico. Esta interrupo pode ser habilitada/inibida colocando 1 ou 0 o bit RBIE do registrador INTCON (INTCON,3). Interrupo com finalizao de gravao na memria EEPROM Ns no estudaremos esta interrupo por que no utilizaremos a memria EEPROM do PIC neste curso. Registrador INTCON O registrador especial que controla as interrupes o INTCON.

Figura 21: Registrador INTCON

Bit 7 - GIE (Habilita todas as interrupes) Este bit, quando em 1, habilita as interrupes que sero selecionadas nos demais bits do registrador INTCON. Se este bit estiver em 0, todas as interrupes sero desabilitadas. Bit 5 - TOIE (bit de habilitao de interrupo por transbordo de TMR0) Este bit habilita/desabilita a interrupo por estouro no contador TMR0. Se o bit estiver em 1 = interrupo por estouro do TMR0 habilitada Se o bit estiver em 0 = interrupo por estouro do TMR0 desabilitada. Bit 4 - INTE (bit de habilitao da interrupo externa no pino RB0/INT) Este bit que permite que uma interrupo externa no PortA RB0/INT seja tratada. Se este bit estiver em 1 = interrupo externa habilitada; Se este bit estiver em 0 = interrupo externa desabilitada. Bit 3 - RBIE (bit de habilitao de interrupo por variao nas portas RB7:RB4) Este bit permite que a interrupo por variao dos nveis lgicos nos pinos 4, 5, 6 e 7 do PORTBB ocorra. Se RBIE estiver em 1 = a interrupo por mudana no nvel lgico no RB7:RB4 estar habilitada; Se RBIE estiver em 0 = a interrupo por variao dos nveis lgicos em RB7:RB4 estar desabilitada.

Aula 04

Pg. 49

Bit 2 - TOIF (Flag de interrupo por transbordo de TMR0). Este bit indica que houve um estouro em TMR0. Se este bit estiver em 1 = o contador mudou a contagem de FFh para 00h; Se este bit estiver em 0 = o contador no estourou. Para que esta interrupo seja detectada, o programador deve ter a preocupao de limpar este bit antes de ligar o TMR0. Bit 1 - INTF (flag que indica a ocorrncia da interrupo externa em INT/RB0) Este bit indica a ocorrncia de uma interrupo externa. Se o bit estiver em 1 = ocorreu uma interrupo externa; Se o bit estiver em 0 = no ocorreu uma interrupo externa; Este bit dever ser limpo pelo programador no tratamento da interrupo para que o programa no volte para a interrupo imediatamente aps o trmino do tratamento da interrupo. Bit 0 - RBIF (flag que indica variao no porto B) Bit que informa que houve mudana nos nveis lgicos nos pinos 4, 5, 6 e 7 do porto B. 1= pelo menos um destes pinos mudou de nvel lgico 0= no ocorreu nenhuma variao nestes pinos.

51. Programa 06 Utilizando interrupo de tempo para gerao do PWM


Nesta prtica deve ser feito um programa, similar ao Programa 05, substituindo a tcnica de delay utilizada anteriormente por interrupo no TMR0.

Aula 04

Pg. 50

Você também pode gostar