1.

Introdução

Vivemos na era da automação e, como prova disto, basta olhar para o lado e observar que os eletrodomésticos fazem quase todos os serviços especializados sozinhos, assim como ocorre nos caixas eletrônicos quando desejamos sacar algum dinheiro ou nas linhas de produção das fábricas onde a automatização tem incrementado a produção e reduzindo os custos. Esta revolução silenciosa seria impensável caso não fosse o desenvolvimento recente da microeletrônica e dos dispositivos digitais que possibilitam, dia a dia, a criação de transistores menores, mais rápidos e mais confiáveis. Assim, é possível criar dispositivos digitais cada vez melhores e com mais funcionalidades. Entre os dispositivos digitais, um dos que mais vem chamando a atenção pela sua versatilidade, aplicabilidade e funcionalidade são os microcontroladores. Neste curso iremos abordar os conceitos básicos do hardware e da linguagem de programação Assembly dos microcontroladores PIC, da Microchip. O Criatronics O Criatronics, Centro de Robótica, Inteligência e Automação, foi fundado no ano de 2001 por pesquisadores da área da Física e Computação. Sua área de atuação é o desenvolvimento de projetos com tecnologias avançadas e de cursos que abrangem as áreas de Robótica e Automação. Pré-requisitos para o curso Este curso pode ser visto por estudantes que nunca tiveram um contato prévio com a eletrônica, porém, é desejável que o aluno já possua conhecimentos de eletrônica analógica e digital básica – sobretudo conhecimentos em circuitos RC e polarização de transistores bipolar e mosfet.

2.

O que é um Microcontrolador?

Histórico Em 1969, uma equipe de engenheiros da INTEL, sob a responsabilidade do engenheiro Marcian Hoff, recebeu a missão de construir calculadoras com um número reduzido de circuitos integrados. Hoff, que já tinha uma boa experiência no projeto de computadores, propôs uma maneira fundamentalmente diferente de construir as calculadoras. Segundo ele, era possível construir uma máquina capaz de mudar sua funcionalidade com base em um programa armazenado em uma memória. Sendo assim, Hoff, juntamente com o engenheiro Frederico Faggin, implementaram para a INTEL o primeiro microprocessador. Desde então os microprocessadores não pararam de evoluir. Porém, os microprocessadores não atendiam as necessidades dos engenheiros quando era necessário um processamento em sistemas embarcados, como celulares, aparelhos de som, televisão, controle de motores, etc.

Aula 01

Pág. 1

Para suprir estas necessidades foi lançado 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 lança o microcontrolador 8048, que possuía memória de programa externa (ROM), e memória de dados interna (RAM). Em 1980 nasceu o 8051, com vários periféricos, 4K de memória de programa e 128 bytes de memória 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. Aplicações O microcontrolador é um componente bastante versátil, podendo através de sua programação ter diversas aplicações. O microcontrolador pode realizar desde o controle da velocidade e posição de um guindaste até o controle das lâmpadas decorativas de uma árvore de Natal. Basicamente, o modo de operação do microcontrolador irá variar de acordo com a necessidade de seu cliente. Entre outras aplicações de um microcontrolador podemos citar automação industrial, controle de telefones celulares, auto-rádios, fornos de microondas e videocassetes. Além disso, a tendência da eletrônica digital é de se resumir a microcontroladores e a chips que concentram grandes circuitos lógicos, como os PLDs (Programmable Logic Devices). Para a maioria dos sistemas dedicados, o microcontrolador apresenta-se como a solução mais viável em função do baixo custo e facilidade de uso. Logo, o microcontrolador, hoje em dia, é um elemento indispensável para o engenheiro elétrico, eletrônico ou ainda para o técnico de nível médio da área e hobbistas, em função de sua versatilidade e da enorme aplicabilidade. Microcontrolador versus Microprocessador Um microcontrolador difere de um microprocessador em vários 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 memória e componentes externos para receber e enviar dados. Em resumo, isso significa que o microprocessador é o verdadeiro coração do computador. Por outro lado, o microcontrolador foi projetado para ter tudo num só CI . Nenhum outro componente externo é necessário para suas aplicações uma vez que todos os periféricos necessários já estão embutidos nele. Assim, poupamos tempo e espaço na construção dos dispositivos. Do ponto de vista da aplicação, a principal diferença entre o microcontrolador e o microprocessador é que, para controle de sistemas embarcados, é necessário que o controlador seja dedicado a um pequeno conjunto de tarefas. O microcontrolador é construído para realizar o controle do ambiente
1

1

CI – Circuito Integrado – Dispositivo microeletrônico que consiste de transistores (podendo chegar a milhares) e outros

componentes interligados capazes de desempenhar diversas funções. Suas dimensões são extremamente reduzidas e estes componentes são fabricados em uma pastilha de material semicondutor em comum. Aula 01 Pág. 2

externo e, por isso, possui circuitos elétricos mais adequados para conectar-se com o ambiente, além de ter um custo bem menor que o microprocessador. Essa característica o torna ideal para sua utilização em sistemas embarcados, como em detectores de fumaça, aeronaves e brinquedos, por exemplo. Já o microprocessador é construído para otimizar o processamento de dados com o auxílio de diversos componentes externos, como memórias, co-processadores, dispositivos periféricos, etc., sendo sua aplicação mais voltada para tarefas que exijam a execução 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 segurança KeeLoq, diversos produtos de interface analógica, memórias seriais EEPROMs, etc.

4.

Os Microcontroladores PIC - Peripheral Interface Controller

Os microcontroladores PIC são considerados os que apresentam a melhor relação custo/benefício do mercado. Sua arquitetura RISC (não entraremos em detalhes neste curso sobre os tipos de arquitetura) proporciona um set de apenas 35 instruções para a maioria dos modelos (família MidRange ), sendo assim um dispositivo de fácil programação. A execução de suas instruções também é mais rápida que outros tipos de microcontroladores que utilizam a arquitetura CISC, como o famoso e ainda muito utilizado 8051. A família de microcontroladores PIC é bastante ampla, tendo diversos modelos com diversas funcionalidades, conforme poderemos observar na próxima aula. Nesse curso todos os projetos serão 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

2

SET - Conjunto MidRange – Os microcontroladores PIC estão disponíveis em três famílias: Low-End, MidRange, High-End. A família Low-End

3

tem um subset reduzido de instruções, sem tratamento de interrupções, instruções de 12 bits, menor memória RAM disponível e sem I/O avançados, logo, esta família não deve ser utilizada para novas aplicações ou para o aprendizado. A família High-End tem instruções de 16 bits, acesso a todos os registradores diretamente, múltiplos vetores de interrupção e não é recomendado para o aprendizado. A família MidRange é a mais comum no mercado e possui as características mais adequadas para o ensino, logo, durante o curso trabalharemos com o PIC 16F84A, pertencente da família MidRange. Aula 01 Pág. 3

5.

Encapsulamento e Pinagem

O PIC está disponível no mercado em diversos encapsulamentos (inclusive SMD). Por ser mais fácil 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 funções

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

Descrição Entrada do oscilador / Entrada de clock externo Saída do oscilador / Saída para clock externo Master Clear Reset PortA - Porta bi-direcional de entrada e saída

pode ser selecionado como entrada de clock para o TMR0. A saída é do tipo "open drain" PortB - Porta bi-direcional de entrada e saída Estas portas podem ser configuradas individualmente com pull-ups nas entradas RB0 pode também ser configurada como entrada para interrupção externa RB4:RB7 podem ser configurados como entrada para interrupção por mudança de nível Referência do Terra Alimentação positiva
Pág. 4

6.

Portas de Entrada e Saída

As portas de entrada e saída são os canais de comunicação entre a central de processamento e o mundo físico. Estas portas podem ser de saída, ou seja, podem controlar dispositivos externos como relés, chaves, LEDs, ou podem ser de entrada e receber os sinais vindo de sensores e botões. Quem irá informar que pinos serão entradas e que pinos serão saídas será o programador através do software. O PIC16F84A tem 13 pinos de entrada e saída (I/O pins) que podem ser individualmente configurados como entrada ou saída a depender do software. Alguns destes pinos podem ser multiplexados com outras funções do dispositivo, como: Interrupções externas; Interrupção por mudança de estado em alguns pinos; Entrada do clock para o contador, conforme veremos melhor nas próximas aulas. Os 13 pinos de I/O estão divididos em dois blocos, com diferentes características elétricas: 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 elétrico dos pinos de I/O RA3:RA0. Como o foco deste curso não é o hardware, não iremos nos aprofundar na eletrônica interna do PIC, porém há alguns detalhes que devem ser observados.

Figura 3: Diagrama em blocos dos pinos RA3:RA0

Aula 01

Pág. 5

6 Figura 4: Diagrama em blocos do pino RA4 Na prática temos que. 5 BUFFER TTL – Seguidor de tensão formado por circuitos digitais TTL que tem como principal característica a utilização de sinais de 5 volts para níveis lógico altos. o que os torna poucos sensíveis a eletricidade estática. A principal utilidade de se ter um pino do tipo “open-drain” é a possibilidade de conectar vários dispositivos “open-drain” em uma única linha física sem o risco de queimar algum dispositivo. sendo assim. pois este é do tipo “open drain” e. é um transistor de efeito de campo feito de silício dopado com óxido metálico.Metal Oxide Silicon Field Effect Transistor. 6 . Com isso devemos ter atenção ao utilizar este pino como saída. mesmo que o PortA 4 (pino RA4) esteja configurado como saída e o programa coloque este pino em nível lógico 1. se ligarmos um LED deste pino ao Terra (referência) sem qualquer circuito externo. Isto indica que a impedância de saída destes pinos é baixa quando o pino está configurado como saída. Já a impedância de entrada é alta quando configurado como entrada. PortA (RA4) Um detalhe do RA4 (figura 4) é que este não tem o transistor ligando o pino RA4 ao Vdd. Aula 01 Pág. A conexão do transistor de saída ao Vcc deverá ser feita através de um resistor denominado de “pull-up”. 6 OPEN DRAIN – O terminal do dreno do transistor de saída está desconectado. pois. um erro na ligação elétrica pode ocasionar a queima do pino devido à baixa impedância de saída (e consequentemente à alta corrente de saída do pino de I/O). não é possível gerar 5V neste pino sem o auxílio de componentes externos auxiliares. Na prática isto indica que devemos ter cuidado ao configurar um pino do PIC como saída. Seus circuitos integrados são constituidos basicamente de transistores bipolares.Podemos observar que a saída (I/O pin) está conectado a dois transistores mosfet e a um buffer TTL 4 5 de entrada. 4 MOSFET . o LED nunca acenderá (figura 5).

um botão seja ligado no PortB de uma maneira bem mais simples que no PortA. O PortB também é capaz de drenar e suprir mais corrente que o PortA. 7 . Aula 01 Pág.RA4 R1 1k D1 LED1 Q1 Figura 5: Esquema elétrico da ligação de um LED no RA4: este LED nunca acenderá PortB (RB7:RB0) Uma característica interessante do PortB é a possibilidade da configuração de um “pull-up” fraco via software quando o pino está configurado como entrada. sendo bastante utilizado para o acionamento de LEDs e displays. Isto permite que. 7 Figura 6: Diagrama em blocos dos pinos RB7:RB4 7 PULL UP – Resistor utilizado na entrada de circuitos digitais para definir o nível lógico quando a entrada estiver desconectada ou em alta impedância. por exemplo.

o nosso clock corresponderia ao pêndulo. RB3:RB1 e RB0 são os tipos de interrupções que cada um deste conjunto de pinos tem. As interrupções estudadas na aula 6. Período de execução das instruções: 1 / 1MHz = 1µs. caso esteja utilizando um oscilador de 4MHz. 7. 8 . Aula 01 Pág. Um ciclo de instrução é executado a cada 4 ciclos de clock no PIC (gerados por osciladores ou circuitos geradores de clock externos). A maioria dos comandos do PIC é executada com apenas um ciclo de instrução. Freqüência da execução das instruções: 20MHz / 4 = 5MHz. conforme podemos observar abaixo: Freqüência do oscilador: 4MHz. Freqüência da execução das instruções: 4MHz / 4 = 1MHz. Clock e execução dos comandos O clock é quem dá o sinal de partida para o microcontrolador e dá o “ritmo” de execução dos comandos e este é obtido a partir de um componente externo chamado oscilador. ou seja. Se estivéssemos utilizando um oscilador de 20MHz. Período de execução das instruções: 1 / 5MHz = 0.Figura 7: Diagrama em blocos dos pinos RB3:RB0 A única diferença entre os pinos RB7:RB4. Se imaginarmos que um microcontrolador é um relógio de sala.2µs (200ns). os cálculos seriam: Freqüência do oscilador: 20MHz. haverá a execução de um ciclo de instrução a cada 1µs. a menos que seja necessário um teste condicional ou modificação no PC (ver detalhes nas próximas aulas).

8 Figura 8: Ligação elétrica do cristal Na Tabela 2 seguem os valores recomendados para C1 e C2. Os modos possíveis são: LP – Low Power Crystal / resonador cerâmico. etc. porém. Os osciladores mais utilizados nos projetos do Criatronics são os cristais de 20MHz pela precisão necessária e rápido processamento de dados. Configuração LP. como mostrado na figura 8. chips. XT ou HS utilizando cristal Neste modo o cristal é conectado aos pinos OSC1 e OSC2.8. capacitores. RC. apesar de termos mais problemas de instabilidade inicial no funcionamento sendo necessário um maior esforço no design da PCI . A resistência Rs pode ser necessária caso hajam problemas na oscilação do cristal (para maiores detalhes consultar os dados técnicos do cristal a ser utilizado). também existem nas cores azul e marrom. como veremos no final desta aula. 8 PCI – Placa de Circuito Impresso – peça fundamental na montagem de qualquer conjunto eletrônico. processadores. Estas placas fazem a ligação física entre componentes eletrônicos. porém há um aumento também no tempo de start-up. Osciladores Há basicamente dois tipos de osciladores para gerar o clock que utilizamos em nossos projetos: Cristais. A escolha do modo de operação deve ser feita no software de gravação antes da gravação do PIC. Aula 01 Pág. nos nossos projetos não há a necessidade de utilizar esta resistência. XT – Cristal / resonador cerâmico. O PIC 16F84A pode funcionar em 4 modos diferentes de operação no que se diz respeito aos osciladores. RC – Resistor/Capacitor. contudo. por exemplo. por exemplo. maior a estabilidade do oscilador. 9 . HS – High Speed Crystal / resonador cerâmico. Quanto maior a capacitância. Ela costuma ter a cor verde (máscara de solda).

33 pF 100 . é recomendada a utilização da montagem conforme a figura 9. Figura 9: Configuração para utilização do PIC com um circuito gerador de clock externo Configuração RC Em aplicações onde a precisão do clock não é determinante no projeto. tipo do capacitor e temperatura de operação. Vss. conforme mostrado na Figura 10.Tabela 2: Capacitores recomendados para utilização com o cristal Modo LP XT HS Frequência 32 kHz 200 kHz 100 kHz 2 MHz 4 MHz 4 MHz 20 MHz Capacitores 68 . A freqüência de oscilação estará em função dos valores de Rext.33 pF Configuração LP.33 pF 15 . pode-se optar por uma configuração mais simples e barata. Cext. Figura 10: Configuração RC Os valores recomendados para Rext e Cext são: 5K ≤ Rext ≤ 100K .33 pF 15 . fica quase impossível manter um alto grau de precisão utilizando este tipo de oscilador.100 pF 15 . utilizando apenas um resistor e um capacitor. Vdd.150 pF 15 . Cext ≥ 20pF.33 pF 15 . XT ou HS utilizando um gerador de clock externo Caso o circuito possua um gerador de clock comum para os dispositivos digitais. 10 . Tendo assim tantas variáveis de influência significante. Aula 01 Pág.

que espera 1024 ciclos do oscilador para estabilizar a operação do cristal antes do início da execução do programa. Power-up timer Caso ativado antes da gravação.7V).9. 10 do microcontrolador. pode ser necessária a criação de um circuito externo para geração de um pulso de Reset através do pino MCLR. MCRL Reset.2V e 1. Não serão 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 tensão em Vdd é detectada entre 1. se mesmo após a ativação do Power-up o circuito ainda apresente problemas devido a um eventual tempo excessivo que o circuito de alimentação precise para suprir o CI com a tensão Vdd adequada. Figura 11: Instabilidade do oscilador ao circuito ser alimentado Tempo de subida lento de Vdd Porém. 9 RESET – Reinicialização do microprocessador SLEEP – Modo do PIC de espera. 11 10 Aula 01 . garantindo assim que a alimentação já estará estável quando o microcontrolador começar a executar as suas instruções. Pág. eliminando assim a necessidade de criação de um circuito eletrônico externo mais elaborado de reset através do pino MCRL. Neste modo o PIC tem um baixo consumo de energia. WDT Reset. Resets 9 Estudaremos neste tópico três tipos de Resets que o PIC diferencia: Power-on Reset. Oscillator Start-up timer Após o Power-up timer temos ainda o Oscillator Start-up timer. o power-up timer mantém o microcontrolador resetado durante 72ms após a sua alimentação.

3V a 8.5V. Tensão de Vdd em relação ao Vss: -0.3V a 7.3V a 14V. Máxima corrente no pino Vss: 150mA. 12 Aula 01 . quando isto é feito. Máxima corrente no pino Vdd: 100mA. 11 PRESCALER – Detalhado no capitulo de interrupção por TMR0 Pág. Algumas características elétricas do PIC Tensão em qualquer pino (exceto Vdd. é necessário manter esse pino constantemente em Vdd. 11 10.3V). deixando-o sempre desabilitado. O WDT pode ser ativado no programa de gravação do CI e. Para que as instruções sejam executadas. ele funciona mesmo que o oscilador principal do PIC tenha parado de funcionar. MCLR e RA4) em relação ao Vss: -0.3V a (Vdd + 0. ou seja.5V. O MCLR pode ser útil quando é necessário reiniciar o microcontrolador através de um circuito externo de controle ou quando o Power-on Reset não inicializa corretamente o microcontrolador. O WDT estará operando independente de qualquer oscilador externo que o PIC esteja utilizando para execução dos comandos. o circuito estará resetado. Máxima corrente em qualquer pino de I/O: 25mA. A qualquer momento em que este pino estiver no nível lógico 0.MCLR Reset O MCLR (Master Clear Reset) é um modo de reset que pode ser facilmente acessado pelo usuário através do pino MCLR do PIC. WDT Reset O WDT (Watchdog Timer) é um oscilador RC interno ao CI que não requer nenhum componente externo para seu funcionamento. Em nossos projetos não utilizaremos o WDT. Tensão em RA4 em relação ao Vss: -0. Tensão de MCLR em relação ao Vss: -0. o circuito do WDT irá gerar um pulso de reset toda vez que o tempo do WDT for atingido (18ms para operação sem prescaler ).

7. botões ligados no PortA. quando for para gravar e quando for para executar o programa. 4. Saída para conector ligado à PortA. Aula 01 Pág. Relé ligado ao RB7 com conectores de potência. Saída para conexão da placa a um display LCD. Saída para conector ligado ao PortB. 10.11. 6. O Kit Didático Criatronics Nas nossas práticas iremos utilizar um kit próprio para aplicações didáticas. 2. LED’s e um display de 7 segmentos ligado no PortB. 13 . Figura 12: Kit didático completo do Criatronics As funcionalidades de cada item enumerado na figura estão relacionadas a seguir: 1. 9. 3. Buzina ligada ao RB5. 8. O kit (Figura 12) é dotado de uma única placa onde estão o gravador de PIC. Led infravermelho (IR) ligado ao RB6. 11. Display de 7 segmentos ligado ao PortB. 5. Leds ligados ao PortB. além de outras funcionalidades conforme veremos adiante. Microcontrolador PIC 16F84A. conforme indicação na placa. Cristal de 4 MHz. Há ainda uma chave que deve estar na posição correta. Botões ligados à PortA e botão de reset ligado ao MCLR.

14 Aula 01 . desabilitado o “watchdog time”. pode ser desabilitado o “code protect”. deverão ter sido previamente programados e simulados e serão utilizados inicialmente apenas para demonstração de gravação e execução de programas no kit didático PIC do Criatronics. uma vez que em geral utilizaremos o mouse na porta PS2 ou USB do computador. é necessário realizar as 13. Ferramentas de desenvolvimento da Microchip A Microchip produz ferramentas para o desenvolvimento do software. 13.hex”. Pág. Chave para definição: a placa for gravar um programa a partir do computador ou executar um programa já previamente gravado. 16. Clicar em “Load” e selecionar o arquivo “nome_do_projeto. hardware para testes e simulações e também produz placas para demonstrações. 14. Gravando e Testando um Programa no PIC Para gravar um programa feito no MPLAB seguintes atividades: Verificar se o PIC. o RB7 estará ligado ou não ao relé eletromecânico.hex” na placa didática. 12. compilados e simulados os projetos em Assembly. e em “mode” deve ser selecionado “16C84”. Como padrão. 12 no PIC através do nosso kit didático.hex” referente ao projeto que está sendo desenvolvido. Jumpers para definição: o RB5 estará ligado ou não à buzina. Software Os principais softwares para desenvolvimento da Microchip são: MPLAB IDE (freeware) MPLAB C18 12 MPLAB – Programa onde serão desenvolvidos. 17. Conector para alimentação da placa (12 Vdc).hex são gerados automaticamente quando o programa é compilado no MPLAB e ficam na mesma pasta do projeto. Selecionar os itens adequados na guia “configuration word”. selecionado o oscilador do tipo “XT osc”. o RB6 estará ligado ou não ao LED IR. Jumper para definição: o PortB estará ligado aos LEDs ou ao display 7-seg.EXE”. Conector para interface com o computador através do padrão serial RS-232. Na aula deve ser gravado os arquivos “projeto01. que serão passados pelo instrutor. habilitado o “power up timer”. porta de comunicação “COM1”. “projeto02.hex” e “projeto03. Abrir o programa “NTPICPRO. 15. Os arquivos de extensão . Regulador de tensão (5 Vdc). Estes arquivos. cabo de alimentação e o cabo serial estão devidamente conectados.12.

quais periféricos serão utilizados. 15 Aula 01 . Pág. 15. Programando o PIC O MPLAB IDE tem todos os componentes necessários para a programação do PIC. ferramentas para conexão dos diversos códigos fontes e bibliotecas. No Brasil não temos o costume de investir tempo e dinheiro nesta etapa do projeto. Isto parece ser óbvio. Esquematizar o sistema em alto nível (Planejamento) Primeiro é necessário conhecer quais as características e desempenho necessário para decidir qual o PIC que será utilizado. que não serão estudados nesse curso. o editor do código. etc. devemos realizar alguns passos antes para poder obter um sistema que atenda as necessidades do usuário. O MPLAB C18 e C30 são compiladores para a linguagem C. saída. simular e compilar o programa. As atividades típicas para o desenvolvimento do software de um sistema embarcado serão descritas a seguir.MPLAB C30 O MPLAB IDE será estudado com mais detalhes adiante. ficando o sistema muitas vezes deficiente em diversos pontos ou mesmo totalmente inadequado para a aplicação desejada pelo cliente. O MPLAB IDE O MPLAB IDE é o programa executado no computador que utilizamos para desenvolver as aplicações para os microcontroladores PIC na linguagem Assembly. além de realizarmos programação propriamente dita no MPLAB. debugger 13 e simuladores. Porém. Entendendo o problema (Análise de requisitos) Antes de se fazer qualquer programa é necessário saber o que se quer programar. onde estão integrados o gerenciador de projetos. ou seja. mas é considerado umas das principais falhas nos programadores. Hardware Os principais hardwares disponíveis pela Microchip para o desenvolvimento são: MPLAB ICE MPLAB ICD Estes dois dispositivos são utilizados para a simulação e emulação do programa já quando este estiver gravado no próprio PIC. 13 Debugger – Programa de computador utilizado para verificar os erros de sintaxe. permitem verificar a execução do programa com o hardware final (com o PIC montado na placa onde este será aplicado). Em seguida é recomendado realizar o esquema eletrônico do hardware associado ao PIC para conhecermos quais serão os pinos de entrada. O termo IDE significa “Integrated Development Environment” por que ele é um ambiente de desenvolvimento integrado de simples utilização. 14.

Antes de iniciar. comentários. etc. Processo Decisão Conector Terminal Setas de Fluxo O fluxograma ajuda durante a programação e manutenções futuras do programa. Durante a compilação. no entendimento do sistema. que é uma linguagem de nível médio (mais fácil de programar. As falhas na programação deverão ser removidas neste momento. labels. Compilação do programa A compilação consiste na conversão das linhas de programa digitadas pelo programador para o código de máquina. Em nosso curso. Aula 01 Pág. cada “coisa” de uma cor). Isto facilita bastante o entendimento quando outro programador ler seu programa. seguindo fielmente o fluxograma. A escolha da linguagem de programação deverá estar em função da complexidade do sistema. Esta etapa do projeto é comumente desprezada por diversos programadores. logo. o compilador também verifica eventuais erros de sintaxe ou inconsistências no programa. é necessário escolher qual a linguagem de programação que será utilizada. aprenderemos a linguagem de baixo nível Assembly. memória disponível e eficiência do programa desejado. a simulação é necessária para verificar se seu programa está fazendo exatamente aquilo que você queria que ele fizesse (segundo o documento de requisitos). Criando o fluxograma (Lógica de programação) O fluxograma utiliza-se de símbolos específicos para a representação de algoritmos (seqüência de passos que devem ser executados para se alcançar um determinado objetivo). números.. porém gera códigos menos enxutos). Escrevendo as linhas de códigos (Implementação) As linhas de códigos devem ser digitadas de forma clara. comentários. que é diretamente convertido em linguagem de máquina. Atenção: o compilador não verifica se a lógica empregada no programa está correta! Simulação e ajustes do programa O MPLAB já tem integrado uma ferramenta de simulação que deve ser utilizado sempre que um código for escrito. sobretudo. facilitando. 16 .Só então será a hora de realizar a programação. porém esta prática é altamente não recomendada. com rótulos (labels) e sempre que possível. Outra opção é a linguagem C para PIC. O compilador não irá detectar os erros de lógica no programa. ou mesmo quando você for fazer uma manutenção futura em seu próprio programa. Abaixo segue uma simbologia tradicionalmente utilizada. além de utilizar as cores disponíveis no MPLAB para distinguir os diversos tipos de dados (códigos.

17 . Aula 01 Pág. planejamento e lógica de programação. cada uma. uma vez que a aquisição e análise de requisitos. assuntos suficientes para novos cursos.Gravação do programa A gravação do programa no microcontrolador é o último passo do processo e é onde deve ser verificado se a utilização do microcontrolador está adequada para sua aplicação final. têm por si só. “on-line”. onde o circuito é simulado na própria placa. Cada uma das etapas citadas pode ser bastante complexa e consumir muito mais tempo que o previsto inicialmente. A gravação do programa pode ocorrer de maneira integrada com a simulação caso o usuário esteja utilizando o MPLAB-ICD. Neste curso iremos abordar apenas as etapas posteriores à geração do fluxograma.

Já a tecnologia PROM permite apenas a gravação de um programa no microcontrolador. por isso é chamada memória de dados. Neste curso não aprenderemos a utilizar este tipo de memória. Nesta memória devemos gravar os dados que não podem ser perdidos quando o microcontrolador for desligado. Tipos de memória O PIC tem dois blocos de memória independentes. Temos ainda a região chamada de pilha (do inglês. A partir do endereço 03FFh temos uma repetição dos dados anteriores. para gravar um novo programa no microcontrolador é necessário apagar a memória de programa deste iluminando o circuito integrado com uma luz ultravioleta. Quando o processador quer saber o que tem em certa prateleira. A tecnologia EPROM permite a gravação do programa pelo PC. Por Aula 02 Pág. O PIC tem capacidade de endereçar um programa de 8K words (1 word tem 14 bits no caso da família do PIC16F84A). Esta memória é chamada EEPROM. Alguns outros modelos de microcontrolador utilizam a tecnologia EPROM ou mesmo a PROM. os dados são armazenados em prateleiras com endereços específicos. bem como toda a família “F”. Uma vez programado. É imPortAnte ressaltar ainda que no PIC a memória é dividida em regiões com diferentes finalidades. o processador também envia um sinal informando se quer apenas ler (read) o que está lá naquele endereço ou se ele quer deixar algum dado escrito naquele endereço (write). Outra região é alocada para armazenar temporariamente os dados enquanto o programa está sendo executado. Por exemplo. Os microcontroladores. 17. em sua maioria. Memórias A memória é um componente do microcontrolador indispensável. 18 . stack) e a região de memória EEPROM. possuem uma pequena quantidade de memória construída internamente no dispositivo.16. Memória Flash é uma forma de memória não volátil que pode ser apagada e reprogramada eletronicamente. uma das regiões pode ser alocada somente para armazenar o programa a ser executado pelo processador. Fazendo uma analogia a um supermercado. Organização da Memória de Programa O PIC 16F84. 18. porém. conforme veremos a seguir. por exemplo. Memória de dados (RAM). Junto com o endereço. o microcontrolador não poderá ser nunca mais reprogramado. ele acessa o endereço da prateleira e rapidamente tem acesso ao dado lá disponível. responsável pelo armazenamento de todos os dados do sistema (quando o sistema não possui memórias auxiliares). os primeiros 1K (do endereço 0000h ao endereço 03FFh) são fisicamente implementados. Há ainda um bloco de memória de dados que requer um procedimento especial para a sua escrita e leitura. por isso é chamada memória de programa. a temperatura em que o usuário deixou programado o ar condicionado. possui como memória de programa um tipo chamada Flash. No PIC estudado. que podem ser acessados simultaneamente: Memória de programa (Flash).

Verificamos a presença dos SFRs e da área destinada para uso geral (GPR). A memória EEPROM também faz parte da memória de dados. após um Reset (inclusive o Power-on Reset) o microcontrolador irá executar a instrução gravada no endereço 0000h.exemplo. porém essa memória não é mapeada diretamente na memória de dados. 19 Aula 02 . 0420h. 0C20h. 1020h. mas. 14 Interrupção – Detalhado no capítulo de interrupções Pág. não iremos utilizar nem estudar este tipo de memória em nossos projetos iniciais. Figura 13: Mapa da memória de programa 19. No PIC 16F84A temos 64 bytes de memória EEPROM disponíveis para o usuário. Registradores especiais (SFR – Special Function Registers). não há a necessidade de tentar endereçar a partir do endereço 03FFh. como já visto. ou seja. 1820h e 1C20h são os mesmos. Organização da Memória de Dados A memória de dados pode ser dividida para fins de estudo em dois blocos: Memória RAM para uso geral (GPR – General Pupose Registers). 1420h. Na Figura 14 podemos observar o mapa de memória de dados do PIC 16F84A. os dados existentes nos endereços 0020h. Logo. O vetor interrupção14 é o 0004h (conforme veremos aplicação nas próximas aulas). O endereço inicial de processamento é o 0000h. 0820h.

por exemplo. os parâmetros para transferência de dados através dos protocolos disponíveis pelo PIC (SPI. quais serão saída. os parâmetros de uma conversão analógico/digital. os parâmetros para geração do PWM automático. por exemplo. USART. São nos registradores para controle das funções essenciais que são definidos. Registradores para controle das funções dos periféricos. Aula 02 Pág. se as interrupções estão ativadas. etc). se houve a ocorrência de um reset. conforme veremos nas próximas aulas. etc. se houve ou não a ocorrência de um zero após a última operação matemática. 20 . quais os pinos do PIC serão entrada. São nos registradores para controle das funções dos periféricos que configuramos. Nos exemplos de programas aprenderemos aos poucos como trabalhar com os SFRs. Deveremos indicar no software qual o banco que estamos trabalhando antes de operar com os registradores. Os SFRs podem ser divididos em dois blocos: Registradores para controle das funções essenciais.Figura 14: Mapa de memória de dados A memória de dados está dividida em dois bancos de memória (Bank0 e Bank1).

O PC indica em que ponto da memória de programa o microcontrolador lerá a próxima instrução. A Pilha tem a função de armazenar temporariamente informações sobre o fluxo de atividades do programa.20. 15 I²C – Inter-Integrated Circuit – é um barramento serial inventado pela Philips que é usado para conectar dispositivos periféricos de baixa velocidade de transferência de dados. Pode gerar uma interrupção em seu overflow. isto significa que a próxima instrução a ser executada pelo microcontrolador será a instrução gravada no endereço 01Ah. a geração de um sinal PWM para controle de motores ou mesmo a conversão de um sinal analógico em digital. Aula 02 Pág. Neste tópico iremos ver alguns periféricos disponíveis em vários modelos de PIC. 21 . 21. se no PC estiver armazenado o valor 01Ah. como a transferência de dados via o padrão RS-232. Dispositivos periféricos auxiliares Os dispositivos periféricos são as partes do microcontrolador responsáveis por atividades específicas. O Program Counter (PC) e a Pilha (Stack) Observando o mapa de memória de programa na Figura 13 observamos dois blocos de memória ainda não discutidos: o PC e a Pilha. Módulo Timer1 O módulo Timer1 é um timer/contador de 16 bits (armazenados em dois registradores) que pode ser acessado para leitura ou escrita pelo usuário. ficando suas utilizações para um curso mais avançado (com exceção do módulo Timer0 que será visto neste curso). a comunicação com outros PICs via o protocolo I2C15. não possui boa parte desses periféricos. Este módulo será estudado com mais detalhes nas próximas aulas. auxiliando o processador e realizando algumas interfaces com o mundo físico. Por exemplo. Pode ser ativado através de um clock externo. o 16F84A. Módulo Timer0 O Módulo Timer0 é um temporizador (timer) / contador que possui as seguintes características: Timer/contador de 8 bits. Pode ser incrementado na borda de subida ou decida. Maiores detalhes sobre estas regiões de memória serão vistas durante as práticas. Pode ser acessado para leitura e escrita pelo usuário. Pode ser aplicado um “prescaler”. O PIC que iremos trabalhar neste curso.

Serial Peripheral Interface Bus – padrão amplamente utilizado para controle de dispositivos periféricos. e este conectado a entrada do conversor A/D. muito útil para comunicação com outros periféricos ou outros microcontroladores.Módulo Timer2 O módulo Timer2 é um timer de 8 bits com prescaler e postscaler. Modo PWM (Produz um sinal PWM com resolução de 10bits). Aula 02 Pág. 22 . Em PIC de 28 pinos há geralmente 5 entradas analógicas multiplexadas. Módulo Conversor Analógico/Digital (A/D) Quando utilizado o modo A/D do PIC. I2C (Inter-Integrated Circuit). Módulo CCP O Módulo CCP (Capture / Compare / PWM) contém 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). Módulo Comparador Em alguns modelos de PIC’s há um comparador analógico. Módulo MSSP O módulo MSSP (Máster Synchrounous Serial Port) é um módulo de interface serial. O módulo MSSP pode operar em um desses dois modos: SPI (Serial Peripheral Interface) . 16 16 SPI . O objetivo é capturar rapidamente o sinal analógico para ser convertido posteriormente lentamente pelo A/D. Em PIC’s maiores. há 8 entradas multiplexadas. Registrador comparador de 16bits (compara o valor do módulo com o valor do Timer1). Um subconjunto do SPI e bastante utilizado é o “microwire”. principalmente quando há a interface com o computador através do PortA serial. o pino de entrada fica conectado a um Sample and Hold17. Este timer pode ser utilizado como base de tempo para a geração de PWM no módulo CCP (visto no próximo item). O processo então irá converter o sinal analógico em um sinal digital de 10bits. Módulo USART O Módulo USART (Addressable Universal Synchronous Receiver Transmitter) é um dos dois módulos de transmissão serial que diversos modelos de PICs possuem e é também um dos mais utilizados. 17 Sample and Hold – Dispositivo utilizado para realizar a interface entre o mundo real (e seus sinais analógicos) e um conversor analógico digital. A tensão de referência do comparador pode ser definida via software ou segundo uma tensão externa. gerando uma saída digital. Este módulo também pode ser acessado para leitura e escrita pelo usuário.

PIC12F675 Número de pinos: 8 Número de pinos de I/O: 6 Memória de programa: 1024 Words Memória de dados: 64 Bytes Memória EEPROM: 128 Bytes Timers/WDT: 1 Timer de 8bits. 23 . 1 Timer de 16bits e 1 WDT Conversores A/D: 4 (resolução de 10bits) Comparadores: 1 Oscilador máximo: Cristal 20MHz 18 Pinos .PIC16F84A Número de pinos: 18 Número de pinos de I/O: 13 Memória de programa: 1024 Words Memória de dados: 68 Bytes Memória EEPROM: 64 Bytes Timers/WDT: 1 Timer de 8bits e 1 WDT Oscilador máximo: Cristal 20MHz 18 Pinos – PIC16F628A Número de pinos: 18 Número de pinos de I/O: 16 Memória de programa: 2048 Words Aula 02 Pág.22. Alguns modelos de PIC’s 6 pinos .PIC10F202 Número de pinos: 6 Número de pinos de I/O: 4 Memória de programa: 512 Words Memória de dados: Memória EEPROM: 0 Timers/WDT: 1 Timer de 8bits e 1 WDT Oscilador máximo: Cristal 20MHz 8 Pinos .

MI2C. SPI Oscilador máximo: Cristal 20MHz Aula 02 Pág. 1 Timer de 16bits e 1 WDT Conversores A/D: 5 (resolução de 10bits) Módulo CCP: 2 Interfaces: MSSP. 1 Timer de 16bits e 1 WDT Comparadores analógicos: 2 Módulo CCP: 1 Oscilador máximo: Cristal 20MHz 28 Pinos – PIC16F873 Número de pinos: 28 Número de pinos de I/O: 22 Memória de programa: 4096 Words Memória de dados: 192 Bytes Memória EEPROM: 128 Bytes Timers/WDT: 2 Timer de 8bits.Memória de dados: 224 Bytes Memória EEPROM: 128 Bytes Timers/WDT: 2 Timer de 8bits. 24 . USART Oscilador máximo: Cristal 20MHz 40 Pinos – PIC16F877 Número de pinos: 40 Número de pinos de I/O: 33 Memória de programa: 8192 Words Memória de dados: 384 Bytes Memória EEPROM: 256 Bytes Timers/WDT: 2 Timer de 8bits. 1 Timer de 16bits e 1 WDT Conversores A/D: 8 (resolução de 10bits) Comparadores: 2 Interfaces: AUSART.

ou mesmo com 16 símbolos. onde temos 10 símbolos para representar os números (0. 2. 4. um conjunto de 8 bits de byte e durante o curso iremos aprendendo aos poucos como trabalhar com este sistema de numeração.23. F. 8 símbolos. 5. 7. 1. O computador e outros aparelhos eletrônicos não necessitam utilizar o sistema decimal em seus cálculos. Deste ponto em diante chamaremos um símbolo binário de bit. Sistema binário de numeração No sistema binário há apenas 2 símbolos. Com os números binários. Eles podem utilizar sistemas de numeração mais simples. O sistema hexadecimal é composto pelos seguintes símbolos: 0. há também outros sistemas numéricos. B. Por exemplo. Exemplo: “01001110”. 6. 7. As aplicações para este cálculo veremos mais adiante nas aulas práticas. Uma das principais vantagens de se utilizar o sistema hexadecimal é a facilidade de conversão para o sistema binário. 3. E. 2. que facilitem os cálculos computacionais e armazenamento de dados. 6. Normalmente utilizamos o “0” e o “1” como símbolos binários. 1. A. Obs. 9). basta realizar o seguinte cálculo: nº de combinações = 2 . Uma visão sobre sistemas numéricos Além do sistema decimal. com apenas 2 símbolos. 9. C. 8. n Aula 02 Pág. Sistema hexadecimal de numeração O sistema hexadecimal (16 símbolos) é um sistema numérico bastante útil e utilizado no PIC. 4. conforme a tabela abaixo. D.: Para saber quantas combinações podem ser realizadas com “n” dígitos binários. Utilizamos o sistema decimal no dia a dia por questões históricas: a razão de o sistema decimal ter 10 símbolos é por que possuímos 10 dedos nas mãos. os endereços da memória do PIC podem ser melhores visualizados com números hexadecimais. 8. 25 . é possível realizar operações aritméticas. 3. assim como com qualquer outro sistema numérico utilizado no PIC. A cada 4 bits é possível gerar um número em sistema hexadecimal de maneira direta. 5.

Tabela 3: Equivalências entre sistemas de numeração Binário 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. etc. incluindo zeros à esquerda do número binário quando necessário. têm 8 bits e possuem neles configurações essenciais para o funcionamento do dispositivo.148 Hexadecimal: 0X94 Mas não vamos nos preocupar muito com os sistemas de numeração no momento. binário e hexadecimal) de forma que podemos escolher sempre qual dos sistemas utilizar. Configuração dos SFRs Como já vimos antes. ficando 2F2Ch. 24. TrisB. Aula 02 Pág. para converter o número binário 010111100101100 em hexadecimal devemos dividir o número em partes de 4 dígitos (0010 1111 0010 1100). pois. o TrisB relacionado com o PortB. se ocorreu um zero após a última operação aritmética. e em seguida converter em hexadecimal dígito por dígito. A operação de transformação inversa é realizada da mesma maneira. São nos registradores especiais que iremos informar quais interrupções irão ocorrer. Alguns autores chegam a denominar os registradores especiais como “os registradores que configuram tudo”. o MPLAB trabalha com os três sistemas apresentados (decimal. quais portas serão entrada ou saída. O TrisA está relacionado com o PortA. iremos aprender para que servem alguns dos registradores do PIC16F84. começando com o TrisA. ao longo do curso. assim como toda a memória de dados. O “h” no final do número é somente para indicar que o número está no formato hexadecimal. PortA e PortB. No MPLAB utilizamos as seguintes sintaxes para escrevermos os números: Binário: B’10010100’ Decimal: . 26 . Logo. os SFRs são registradores especiais que ficam na memória de dados. TrisA e TrisB Estes dois registradores especiais são reservados para a definição de quais pinos serão entrada e quais pinos serão saída. Esses registradores.

Para definir o RA2 como uma entrada. Para facilitar a memorização. 27 . 26. podemos relacionar “1” com Input (entrada) e “0” com Output (saída). basta ler o bit 5 do registrador PortB (PortB. PortA e PortB É muito simples mudar o nível lógico de umo PortA no PIC. Para que meu RB2 esteja no nível lógico “1”. Em geral utilizamos d = W. Para qualquer bit do TrisA ou TrisB.2 (bit 2 do registrador TrisA) o valor “1”. o valor de um registrador é movido para o W. basta gravar o bit “0” na posição PortB. bastaria armazenar em TrisA. como vimos na aula 01. por exemplo. Estas operações de escrita no PortA é utilizada. “1” significará que o PortA associada é uma entrada e “0” que o PortA é uma saída.2 o valor “0”. O resultado desta soma ficará armazenado no W até que este dado seja movido para algum registrador. quando configurados como entrada.2. LED ou uma buzina. funciona com o dreno aberto. Vimos ainda que todos os pinos do PortB (RB7:RB0). um dos operando deve estar no W e o outro em um registrador qualquer.2. 25. Caso eu quisesse que o RA2 fosse uma saída. Aula 02 Pág.5 = 1). O Work register (W) O W é um registrador utilizado pelo PIC para auxílio nas operações lógicas ou aritméticas. para verificar o status de um sensor de proximidade. Lembramos que o RA4 (PortA.2 = 0). por exemplo. se ele estiver configurado como saída (TrisB.4). Exemplo: MOVF TRISA. quando configurado como saída.W MOVLW Move um valor numério (literal) para o registrador W (Work). MOVLW e MOVWF MOVF Sintaxe: MOVF f. Para que ele retorne ao nível lógico “0”. As operações de leitura do PortA podem servir. ou seja. por exemplo. podem ter em cada pino individualmente um fraco pull-up habilitado via software. que está configurado como entrada (TrisB. Instruções MOVF.d O conteúdo do registrador f será movido para um destino d. Antes de realizar qualquer soma. Mas se eu quiser ler o RB5. para o acionamento de um relé. basta gravar o bit “1” na posição PortB.5). Assim como também é bastante simples ler o nível lógico nos pinos do PIC quando este pino está configurado como entrada. basta armazenar em TrisA. quando esta está configurada como saída.

: k deve estar entre 0 e 255 pois W é de 8bits. Como pode-se ver.b O bit b do registrador f será limpo (colocado em nível lógico 0) Exemplo: BCF TrisA. para se copiar um número literal k em um registrador f é necessário que antes este número k seja copiado para o W e só então movido para o registrador f.3 Neste exemplo o pino RA3 foi para nível lógico 1.Sintaxe: MOVLW k Obs.3 Neste exemplo o pino RA3 foi definido como saída. MOVLW MOVWF B’11001010’ STATUS Neste exemplo.b O bit b do registrador f será setado (colocado em nível lógico 1) Exemplo: BSF PortA. Outro exemplo Se quisermos configurar o RB4 e o RB7 como entradas e os demais pinos do PortB como saída. Aula 02 Pág.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. BCF Sintaxe: BCF f. 28 . devemos realizar a seguinte seqüência de instruções: MOVLW MOVWF B’10010000’ TRISB 27. Instruções BSF e BCF BSF Sintaxe: BSF f. o número binário 11001010 será copiado no registrador STATUS. Exemplo: MOVLW .

Se o pino estiver em 1. a próxima instrução será executada. Caso o RA1 esteja em 0. a próxima instrução será descartada (pulada). a saída RB2 irá para 0 sem executar o comando BSF (que será pulado pelo PIC).2 Aula 02 Pág. logo em seguida. 29 .2 Na seqüência de instruções acima o PIC irá testar a entrada RA1. a saída RB2 irá para 0 sem executar o comando BSF (que será pulado pelo PIC). Se o bit b do registrador f for 0.. Caso o RA1 esteja em 1.2 BSF PORTA.4 . 29.1 PortB. a próxima instrução será descartada (pulada). DESLIGA_LEDS BCF PORTA. BTFSS Sintaxe: BTFSS f.3 BSF PORTA. Exemplo: BTFSC BSF BCF PortA.1 PortB. a próxima instrução será executada. Exemplo: supondo a existência de LEDs ligados aos pinos RA2.2 Na seqüência de instruções anterior o PIC irá testar a entrada RA1. Se o pino estiver em 0. Labels Os labels são rótulos (como o nome diz em inglês) que marcam algumas posições da memória de programa. colocará o RB2 em 0.b Se o bit b do registrador f for 1.2 PortB. Instruções BTFSC e BTFSS BTFSC Sintaxe: BTFSC f. colocará o RB2 em 0. Se o bit b do registrador f for 0..b Se o bit b do registrador f for 1.2 PortB.28. Esses rótulos auxiliam bastante o trabalho do programador uma vez que quando for necessário realizar um desvio no programa não será necessário que o programador saiba o endereço do destino (conforme veremos no comando GOTO). RA3 e RA4. o PIC irá colocar a saída RB2 em 1 também e. o PIC irá colocar a saída RB2 em 1 também e. Exemplo: BTFSS BSF BCF PortA. poderíamos ter no programa LIGA_LEDS BSF PORTA. logo em seguida.

ou pela própria pessoa.BCF PORTA. 30 ..INC> Aula 02 Pág.INC”. quando o código é um pouco mais complexo. O arquivo que indica em que endereços estão armazenados os SFR. assim como outras definições genéricas.”. Exemplo: MOVLW TMR0 . 30. 31. Instrução GOTO Sintaxe: GOTO [label] / GOTO $+x GOTO é um desvio incondicional. mais fácil será o entendimento do programa e as manutenções futuras. GOTO $+2 Neste exemplo o PIC irá pular duas linhas na execução dos comandos.Carrega o Timer 0 com o valor de W A importância do comentário é extrema uma vez que é muito difícil. Arquivos de definição padrão da Microchip Quando digitamos no programa “MOVWF TRISA” o compilador tem que saber em que endereço da memória está armazenado o registrador TrisA (no caso. 32. Exemplos: GOTO LIGA_LEDS Neste exemplo o PIC irá pular incondicionalmente para o bloco de instruções logo abaixo do rótulo LIGA_LEDS.. impossível. analisar um programa em Assembly feito por terceiro.4 . Comentários Como poderemos perceber no modelo. os comentários devem ser inseridos no programa após um “. Em todos os nossos programas deste curso utilizaremos o arquivo “P16F84. Quando digitamos um programa devemos indicar qual será o arquivo de definições que utilizaremos de acordo com o tipo do PIC que iremos utilizar em nosso projeto. é o arquivo de definição padrão fornecido junto com o MPLAB. TrisA=85h). Para realizar esta declaração do arquivo padrão deveremos sempre escrever a seguinte linha no nosso programa: #INCLUDE <P16F84. Quanto mais comentário tiver o programa.3 BCF PORTA. às vezes.

para os primeiros programas. Estrutura padrão dos cursos Criatronics A seguir apresentamos um modelo padrão completo para o desenvolvimento dos programas deste curso.33. descartando as partes que ainda não foram aprendidas até o momento. Porém. utilizaremos uma versão reduzida deste modelo. Aula 02 Pág. 31 .

FIM DO BLOCO DE VARIÁVEIS .REGISTRADOR PARA DEFINIÇÃO DE FLAGS INTERNOS .REGISTRADOR AUXILIAR PARA GERAÇÃO .******************************************************************** .* CURSO DE MICROCONTROLADORES PIC I .******************************************************************** .* DEFINIÇÃO DA PAGINAÇÃO DA MEMÓRIA * .* DEFINIÇÃO DAS CONSTANTES * . W E STATUS DURANTE A INTERRUPÇÃO .* KOSME LUSTOSA * .* DEFINIÇÃO DOS FLAGS INTERNOS DO SISTEMA * . DE DELAYS .* * .******************************************************************** . RP0 .******************************************************************** .******************************************************************** CBLOCK 0X0C W_TEMP STATUS_TEMP CONTADOR_A CONTADOR_B FLAG ENDC .Modelo padrão completo Criatronics .******************************************************************** .* DEFINIÇÃO DAS SAÍDAS * . RP0 STATUS.* VETOR RESET DO SISTEMA * .******************************************************************** #INCLUDE <P16F84.* ALUNO: DATA: XX/08/2005 * .* DESCRIÇÃO DO PROGRAMA: * .* DEFINIÇÃO DAS ENTRADAS * .CENTRO DE ROBÓTICA.******************************************************************** .ENDEREÇO INICIAL DA MEMÓRIA DE USO GERAL .ENDEREÇO INICIAL DE PROCESSAMENTO Aula 02 Pág.* DEFINIÇÃO DAS VARIÁVEIS * .REGISTRO TEMPORÁRIO PARA ARMAZENAMENTO DE .INSTRUTORES: YGO BATISTA * .******************************************************************** .******************************************************************** .* * .* * .INC> .* DECLARAÇÃO DO ARQUIVO DE DEFINIÇÃO PADRÃO DA MICROCHIP * .******************************************************************** .******************************************************************** .******************************************************************** .SETA O BANCO 1 DA MEMORIA .******************************************************************** ORG 0X00 GOTO INICIO .* * .******************************************************************** #DEFINE BANK0 BCF #DEFINE BANK1 BSF STATUS.SETA O BANCO 0 DA MEMÓRIA .******************************************************************** .******************************************************************** . 32 .* CRIATRONICS . INTELIGÊNCIA E AUTOMAÇÃO * .******************************************************************** .* * .******************************************************************** .******************************************************************** .

TESTA SE OCORREU A INTERRUPÇÃO PELO GOTO INT_TMR0 .PARA OPTION.* ROTINA DE DELAY UTILIZANDO BASE DE TEMPO EXTERNA DELAY MOVWF TMR0 .* ARMAZENAMENTO DE W E STATUS MOVWF W_TEMP .LIMPA O FLAG DE IDENTIFICAÇÃO DA INTERRUPÇÃO GOTO FIM_INT .ARMAZENA W MOVF STATUS. CASO CONTADOR_B=0 . CONTADOR_A SEJA IGUAL A 0 Aula 02 Pág.2 BTFSS INTCON.LIMPA O FLAG DE IDENTIFICAÇÃO DA INTERRUPÇÃO GOTO FIM_INT . ATÉ QUE .* ROTINA PARA TRATAMENTO DA INTERRUPÇÃO POR MUDANÇA EM RB7:RB4 INT_RB .* VETOR INTERRUPÇÃO DO SISTEMA * .TEMPO DE EXECUÇÃO DA SUB-ROTINA (TE): TE = 4*ND/FREQUENCIA DELAY_INT MOVWF CONTADOR_A MOVLW . OCORREU INTERRUPÇÃO POR .0 .1 . ESTOURO DO TMR0 BTFSC INTCON.O DELAY SERÁ IGUAL À GOTO $-1 .* ROTINA DE DELAY INTERNA .* ROTINA PARA TRATAMENTO DA INTERRUPÇÃO PELO RB0 INT_RB0 . E RECARREGARÁ O CONTADOR_B.1 .* FIM DO TRATAMENTO DA INTERRUPÇÃO POR ESTOURO DO TMR0 BCF INTCON..* FIM DO TRATAMENTO DA INTERRUPÇÃO PELO RB0 BCF INTCON.RECUPERA O W ANTERIOR À INTERRUPÇÃO .CASO NEGATIVO.2 .TESTA SE OCORREU A INTERRUPÇÃO PEL0 GOTO INT_RB0 . TEMOS PRESCALE=1:2 RETURN .12 MOVWF CONTADOR_B DECFSZ CONTADOR_B.W MOVWF STATUS_TEMP .INICIALIZA O CONTADOR_B .Nº CICLOS DO DELAY (ND) CASO N HAJA INTERRUPÇÕES DURANTE A EXECUÇÃO .* SUB-ROTINAS DE DELAY * .W RETFIE E RETORNO DA FUNÇÃO .PS2:PS0=0.******************************************************************** .******************************************************************** ORG 0X04 . DESTA SUB-ROTINA: ND = 3*CONTADOR_A*CONTADOR_B+4*CONTADOR_A+4 .2 .* FIM DO TRATAMENTO DA INTERRUPÇÃO POR MUDANÇA EM RB7:RB4 BCF INTCON. 33 .DECREMENTA O CONTADOR_B.RECUPERA O STATUS ANTERIOR À INTERRUPÇÃO . RB0 GOTO INT_RB .2 .INICIALIZA O CONTADOR_A COM O VALOR DE W .F GOTO $-5 RETURN .* RECUPERAÇÃO DE W E STATUS FIM_INT MOVF STATUS_TEMP.ARMAZENA STATUS .W MOVWF STATUS MOVF W_TEMP.******************************************************************** .RETORNA DA INTERRUPÇÃO . D=(256-W)*1/PRESCALE*(BASE DE TEMPO) BCF INTCON. O SISTEMA DECREMENTARÁ O CONTADOR_A .ENDEREÇO INICIAL PADRÃO DA INTERRUPÇÃO .******************************************************************** .F GOTO $-1 DECFSZ CONTADOR_A.O VALOR DE W É PASSADO À TMR0 BCF INTCON.* IDENTIFICAÇÃO DA INTERRUPÇÃO OCORRIDA BTFSC INTCON.LIMPA O FLAG DE IDENTIFICAÇÃO DA INTERRUPÇÃO GOTO FIM_INT .2 . MUDANÇA DE PINO EM RB7:RB4 .* ROTINA PARA TRATAMENTO DA INTERRUPÇÃO POR ESTOURO DO TMR0 INT_TMR0 .

HABILITA . Aula 02 Pág.******************************************************************** .* FIM DO PROGRAMA * . BIT 3 . INTCON .* INICIO DO PROGRAMA * . BIT 5 .******************************************************************** CLRF PORTA CLRF PORTB .LIMPA AS SAÍDAS DE PORTA E DE PORTB .OPÇÕES DEFINIDAS (OPTION_REG): .******************************************************************** INICIO BANK1 MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF MOVLW MOVWF BANK0 B'11111111' TRISA B'11111111' TRISB B'00100000' OPTION_REG B'10000000' .ENTRADAS NO PORTB: .CLOCK DE INCREMENTO DO TMR0 EXTERNO (RA4) .ALTERA PARA O BANCO 1 .INSTRUÇÃO OBRIGATÓRIA .HABILITA . irá ligar um LED sempre que o botão estiver pressionado.DEFINIÇÃO DE CONFIGURAÇÕES GERAIS DO PIC . BIT 4 .******************************************************************** MAIN GOTO MAIN .ALTERA PARA O BANCO 0 .INTERRUPÇÕES DEFINIDAS .HABILITA (INTCON): INTERRUPÇÃO POR OVERFLOW EM TMR0 INTERRUPÇÃO EXTERNA POR RB0 INTERRUPÇÃO POR MUDANÇA EM RB7:RB4 . Ou seja. 34 .SAÍDAS NO PORTA: ..******************************************************************** .DEFINIÇÃO DE CONFIGURAÇÕES DE INTERRUPÇÕES .******************************************************************** . INICIALIZAÇÃO DAS VARIÁVEIS * .* ROTINA PRINCIPAL * . .ENTRADAS NO PORTA: . BIT 5 .******************************************************************** .FIM DO PROGRAMA 34. Programa 01 – Acendendo um LED através de um botão Descrição do programa O nosso primeiro programa irá ler uma entrada (um botão) e irá acionar uma saída (um LED) caso a entrada esteja no nível lógico 1. O botão estará ligado ao RA2 (por escolha do programador) e o LED estará ligado ao RB5 (igualmente por escolha do programador).******************************************************************** END .SAÍDAS NO PORTB: .

SAÍDAS NO PORTA: . Implementação . Se não estiver.******************************************************************** .* KOSME LUSTOSA * . o sistema desligará o LED. como a execução das instruções é muito rápida.******************************************************************** . Se estiver pressionado.* ALUNO: YGO NETO BATISTA DATA: 20/08/2005 * .******************************************************************** ORG 0X00 INICIO BSF STATUS.* DECLARAÇÃO DO ARQUIVO DE DEFINIÇÃO PADRÃO DA MICROCHIP * .000 vezes a cada segundo.******************************************************************** . o usuário não irá perceber que o sistema fica testando o botão para só depois tomar uma decisão de ligar ou não o LED.* CRIATRONICS . se utilizarmos um oscilador de 4MHz este programa irá verificar se o botão está pressionado 167.* DESCRIÇÃO DO PROGRAMA: * .******************************************************************** #INCLUDE <P16F84.CENTRO DE ROBÓTICA.INC> .ALTERA PARA O BANCO 0 .INSTRUTORES: YGO BATISTA * .RP0 MOVLW B'11111111' MOVWF TRISA MOVLW B'11011111' MOVWF TRISB BCF STATUS.ALTERA PARA O BANCO 1 . o sistema ligará o LED.******************************************************************** . 35 .ENDEREÇO INICIAL DE PROCESSAMENTO Aula 02 Pág.SAÍDAS NO PORTB: RB5 .* VETOR RESET DO SISTEMA * . Para termos uma idéia da velocidade de processamento do microcontrolador.RP0 .ENTRADAS NO PORTA: TODAS .******************************************************************** .ENTRADAS NO PORTB: RB7:RB6.Criação do Fluxograma Figura 15: Fluxograma do programa 01 Observamos que o sistema estará sempre verificando se o botão está pressionado ou não.* CURSO DE MICROCONTROLADORES PIC I . INTELIGÊNCIA E AUTOMAÇÃO * .RB4:RB0 .* LIGADO AO RA2 ESTIVER PRESSIONADO (NÍVEL LÓGICO 1) * .* O SISTEMA IRÁ ACIONAR O LED LIGADO AO RB5 SEMPRE QUE O BOTÃO * .******************************************************************** . É imPortAnte observar que.

DESLIGA O LED .******************************************************************** END .DESVIA PARA DESL .RETORNA PARA O INÍCIO DO PROGRAMA .5 GOTO MAIN LIGA BSF PORTB.FIM DO PROGRAMA Aula 02 Pág.LABEL LIGA .TESTA O BOTÃO .2 GOTO DESL GOTO LIGA DESL BCF PORTB.RETORNA PARA O INÍCIO DO PROGRAMA .SE FOR 1 .LABEL DA ROTINA PRINCIPAL .* FIM DO PROGRAMA * . 36 .LIGA O LED .SE FOR 0 .* ROTINA PRINCIPAL * .******************************************************************** MAIN BTFSS PORTA.******************************************************************** ..5 GOTO MAIN .******************************************************************** .INSTRUÇÃO OBRIGATÓRIA .DESVIA PARA LIGA .LABEL DESL .

CONTADOR_A. E a memória de dados pode ser dividida para fins de estudo em dois blocos: Memória RAM para uso geral (GPR – General Pupose Registers). A linha CBLOCK 0X0C indica que o primeiro registrador da lista (no exemplo.******************************************************************** CBLOCK 0X0C W_TEMP STATUS_TEMP CONTADOR_A CONTADOR_B FLAG TAMANHO_PE CLIENTE ENDC . Memória de dados (RAM). No PIC16F84A temos 68 registradores disponíveis. Lembramos que todos os registradores são apagados quando o microcontrolador é desligado ou reiniciado.REGISTRO TEMPORÁRIO PARA ARMAZENAMENTO DE . iniciando com o do endereço 0Ch (até o endereço 4Fh). STATUS_TEMP. Registradores especiais (SFR – Special Function Registers). O comando ENDC indica o fim do bloco de definições das variáveis. FLAG e TAMANHO_PE como registradores para uso geral e estes podem ser escritos ou lidos pelo programa a qualquer momento. W E STATUS DURANTE A INTERRUPÇÃO . Estes registradores são disponibilizados para o programador para o armazenamento dos dados necessários do sistema. o bloco da programação que define quais os registradores serão utilizados durante a execução do programa é o seguinte: . No PIC.* DEFINIÇÃO DAS VARIÁVEIS * . cada um registrador contendo 8 bits.REGISTRADOR PARA ARMAZENAMENTO DO TAMANHO DO PÉ DO Neste exemplo definimos W_TEMP. 37 . Após o armazenamento destes dois números na memória podemos fazer comparações entre eles ou alguma outra função lógica ou aritmética.******************************************************************** . Como já vimos na segunda aula. Vamos estudar neste tópico os registradores para uso geral.35. CONTADOR_B. Aula 03 Pág. o PIC tem dois blocos de memória independentes. DE DELAYS . conforme a Figura 14.REGISTRADOR AUXILIAR PARA GERAÇÃO . W_TEMP) será armazenado no endereço 0Ch da memória de dados. Os demais registradores em seguida listados serão armazenados nos endereços imediatamente após o endereço 0Ch. Um exemplo de utilização destes registradores é quando precisamos armazenar temporariamente o número de latas que passaram por um sensor em uma fábrica e quantas destas latas estavam danificadas. que podem ser acessados simultaneamente: Memória de programa (Flash).FIM DO BLOCO DE VARIÁVEIS .ENDEREÇO INICIAL DA MEMÓRIA DE USO GERAL .REGISTRADOR PARA DEFINIÇÃO DE FLAGS INTERNOS . General Pupouse Register (GPR) Para o próximo programa será necessário conhecer um pouco mais da memória do PIC.

por mais rápido que seja o digitador.d Se o registrador f for 1 após um decremento. O microcontrolador não pode simplesmente parar de executar o programa por algum tempo (a exceção do modo “sleep”. Logo. Exemplo: DECFSZ PACIENTES. a próxima instrução será descartada (pulada).1). o computador ou microcontrolador tem que esperar um pouco (delay) para poder ler novamente o teclado e saber qual é a nova tecla que o usuário está pressionando. O resultado do decremento é armazenado em d. que não estudaremos neste curso). Logo. se o microcontrolador quiser escrever num display de LCD uma mensagem. 38 . Para a criação deste primeiro tipo de delay que apresentaremos é necessário fazer com que o microcontrolador fique executando algum comando repetidas vezes só para gastar o tempo desejado. a próxima instrução será executada.36. O mesmo ocorre com teclados. Por isso é que é necessário o microcontrolador esperar um tempo (delay) antes de mudar de mensagem. Instrução DECFSZ DECFSZ Decrementa um registrador em uma unidade e pula a próxima linha caso o resultado do decremento seja zero. Aula 03 Pág. Se o registrador f for 0 após um decremento. por exemplo. os nossos dedos pressionam cada tecla por alguns milésimos de segundos (vamos supor 100ms). Caso contrário. Se após o decremento PACIENTES for diferente de zero então o programa vai para INICIO. se PACIENTES for zero. ele tem que deixar a mensagem no display durante um tempo suficientemente grande para que haja a compreensão pelos humanos do que está escrito no display antes que o microcontrolador mude para uma outra mensagem. Sintaxe: DECFSZ f. Quando nós teclamos. Delays Os “sensores” e “atuadores” dos seres humanos. Lembramos que enquanto o microcontrolador estiver alimentado e o oscilador estiver funcionando. não são tão rápidos quanto o microcontrolador.F GOTO INICIO GOTO LIGA_SOM O registrador PACIENTES será decrementado em uma unidade e o resultado armazenado no próprio registrador PACIENTES (PACIENTES = PACIENTES . o programa vai para LIGA_SOM. como a visão. este estará sempre executando algum comando. Implementação Antes de explicarmos melhor o programa é necessário conhecermos melhor uma nova instrução do PIC. 37.

CASO CONTADOR_B=0 . Instruções CALL e RETURN CALL Sintaxe: CALL k Chama a sub-rotina representada por k (que é um endereço da memória de programa ou um nome dado pelo usuário .INICIALIZA O CONTADOR_B .F GOTO $-5 RETURN . CONTADOR_A SEJA IGUAL A 0 No programa acima. O SISTEMA DECREMENTARÁ O CONTADOR_A . inicialmente o CONTADOR_A é carregado com o valor de W e o CONTADOR_B é carregado com o valor 12. o CONTADOR_A for zero e a instrução RETURN for executada. o endereço de retorno (PC+1) é armazenado na pilha. Aula 03 Pág.12 MOVWF CONTADOR_B DECFSZ CONTADOR_B. passando o programa a executar a linha DECFSZ CONTADOR_A.F. Antes de executar o desvio. Quando o comando GOTO $-1 é executado.F GOTO $-1 DECFSZ CONTADOR_A. após decrementado.Implementação do delay DELAY_INT MOVWF CONTADOR_A MOVLW . ATÉ QUE .DECREMENTA O CONTADOR_B. F. 38.label). Exemplo: CALL DELAY_INT RETURN Sintaxe: RETURN Retorna de uma sub-rotina. o ponteiro do PIC irá voltar uma linha e executará novamente a instrução DECFSZ CONTADOR_B. O CONTADOR_B em seguida irá decrementar e testar se é zero.INICIALIZA O CONTADOR_A COM O VALOR DE W . Como o valor inicial é 12. após a primeira execução de DECFSZ CONTADOR_B. o programa irá voltar 5 linhas e irá recarregar o valor 12 em CONTADOR_B e repetirá todo o procedimento já descrito até então.F o valor de CONTADOR_B passará a ser 11 (que é diferente de zero) e não haverá um pulo da próxima linha. Após 10 execuções deste comando o valor de CONTADOR_B será 1 e então quando executado novamente o comando DECFSZ CONTADOR_B. O delay só irá se encerrar quando. Se CONTADOR_A for diferente de zero após o decremento. 39 . recuperando o último endereço da pilha (gravado através da instrução CALL). E RECARREGARÁ O CONTADOR_B.F ocorrerá o pulo de uma linha.

RA2. Aula 03 Pág.F GOTO $-5 RETURN . 41. Programa 03 – Fechadura eletrônica Nesta prática o aluno desenvolverá um sistema para acionar um LED se.100 MOVWF CONTADOR_B DECFSZ CONTADOR_B.Exemplo: No exemplo a seguir dois LEDs ficarão piscando.100 MOVWF CONTADOR_A MOVLW . O SISTEMA DECREMENTARÁ O CONTADOR_A . E RECARREGARÁ O CONTADOR_B. CASO CONTADOR_B=0 .INICIALIZA O CONTADOR_B . 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 . Diretriz #DEFINE Sintaxe: #DEFINE <nome> [<texto>] Sempre que o compilador encontrar <nome>.3 A aplicação deste recurso ficará clara no próximo programa que desenvolveremos. ele será substituído pelo texto associado a ele. O sistema deverá ainda acender um LED caso o usuário acerte a seqüência correta. 40 . e somente se. ATÉ QUE . CONTADOR_A SEJA IGUAL A 0 39. 40.DECREMENTA O CONTADOR_B. RA3. Programa 02 – Piscando um LED ao pressionar um botão Nesta prática o aluno deverá fazer um sistema que pisque um LED com a freqüência de 1Hz ao pressionar um botão. RA2 e RA1. bem como se houver um tempo maior que 10s entre o pressionamento de dois botões.INICIALIZA O CONTADOR_A COM O VALOR DE W . Caso qualquer botão seja pressionado fora da seqüência o sistema deverá reiniciar automaticamente. Exemplo: #DEFINE LED PORTB.F GOTO $-1 DECFSZ CONTADOR_A. a seguinte seqüência for pressionada: RA0.

devido detalhes de construção do motor. fácil de controlar e estão disponíveis em diversos tamanhos e formas. 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. há uma inversão na polaridade da tensão elétrica aplicada na bobina do eletroímã. agora é norte. Motores DC São os motores mais simples do ponto de vista elétrico e são também chamados de motores CC ou de corrente contínua. o que antes era sul. acionamento de motores e modulação PWM. explicaremos como funcionam os motores. é muito comum o uso de três tipos de motores: Motores DC (escovados). Ao se energizar a bobina do eletroímã. Os motores DC escovados são baratos. haverá uma nova inversão na polaridade da tensão aplicada Aula 03 Pág. como o PIC deve operar para cada tipo de motor e como o hardware deve ser projetado para estes tipos de motores. há diversos tipos de motores e. para girar uma roda. Princípio de funcionamento O motor DC é composto por um ímã permanente e um eletroímã acoplado no eixo do motor. Os Motores e o PIC Nessa terceira aula iremos recordar de conceitos básicos de eletrônica sobre princípio de funcionamento de motores. Quando isto ocorre.42. O que antes era norte. Porém. cada um. quando o norte da bobina encontra o sul do ímã permanente e o sul da bobina encontra o norte do ímã permanente. analogamente. Servomotores. nos próximos tópicos. Estes motores são largamente utilizados em aplicações que variam desde brinquedos até a movimentação de uma esteira industrial. 43. agora é sul e. bem como o sul da bobina encontre o norte do ímã permanente. posicionar uma câmera ou mesmo movimentar um braço robotizado são utilizados motores. Mais uma vez. Não podemos imaginar a robótica sem os motores. Logo. para se acionar um motor. Motores de Passo. o eixo do motor irá girar de modo que o norte da bobina encontre o sul do ímã permanente. Tipos de motores Em robótica. é necessário que o hardware esteja devidamente projetado para isto uma vez que os motores consomem bastante corrente – alta demais para o PIC conseguir suprir. Nesse curso iremos abordar apenas os motores DC. 41 . com finalidades e mecanismos de acionamento diferente. Em geral. Em geral. 44.

sem elementos de chaveamento. Eletrônica de acionamento O Criatronics sugere uma montagem utilizando transistores MOSFET canal-N de potência para chaveamento de cargas. Podemos ver as principais partes do motor DC na Figura 16. pois. Figura 16: Princípio de funcionamento dos motores DC No esquema do motor visto anteriormente é possível perceber que a pilha está ligada diretamente no motor. 42 . O diodo D1 tem a função de proteger o circuito contra tensões indesejadas que surgem no momento do chaveamento do motor devido a indutância do mesmo. Na Figura 17 pode-se observar o esquema elétrico da ligação de um pequeno motor ao PIC. Aula 03 Pág.na bobina fazendo com que o motor continue girando e repetindo mais uma vez o ciclo. se o microcontrolador quiser ligar ou desligar o motor. Figura 17: Eletrônica de acionamento do motor DC Para motores maiores é necessária a utilização 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. a saída do PIC não pode alimentar o motor diretamente devido a baixa corrente que o PIC consegue suprir (ocasionaria a queima do microcontrolador). Porém. será necessário uma eletrônica de acionamento de motor.

pois. será necessária uma montagem mais elaborada e o dispositivo necessário para tal é denominado Ponte H. Para que o motor gire no sentido oposto ao anterior é necessário o acionamento das saídas CTR3 e CTRL2. por exemplo). Aula 03 Pág. não é o objetivo deste curso o desenvolvimento de sistemas de potência. Basicamente observamos que o esquema elétrico é composto por quatro blocos de acionamento no qual para que o motor gire é necessário o acionamento de dois destes blocos. nestes casos.Ponte H Se for desejável girar o motor em dois sentidos e se só tivermos uma única fonte de alimentação (como uma bateria. Na Figura 18 pode-se ver o esquema elétrico de uma Ponte H. Modos de operação da ponte H Para que um motor gire em um sentido é necessário acionar pelo PIC as saídas CTRL1 e CTRL4. Não entraremos mais a fundo na eletrônica de potência envolvida na ponte H. o controle dos mesmos. haverá uma alta corrente passando pelos transistores ocasionando a queima dos transistores que foram ligados erroneamente. pois. conforme mostrado na Tabela 4. e sim. Figura 18: Ponte H No esquema percebemos que estão sendo utilizados DRIVERS MOSFET e transistores MOSFET de potência sugerindo que o motor utilizado é de grande porte. Neste caso a corrente deverá fluir no motor em ambos sentidos. Tabela 4: Modos de operação da ponte H A principal preocupação que o programador deve ter em relação a ponte H é de não ligar simultaneamente o Q1 e Q2 ou então o Q3 e Q4. 43 .

a largura do pulso em um trem de pulsos irá carregar consigo alguma informação do sinal que se deseje transmitir. logo o Duty Cicle é de 100%. o sinal está sempre em 1. interpretamos a distância entre um sensor ultrasom e um obstáculo. pode-se variar a luminosidade dos LEDs linearmente com o Duty Cicle. Ou seja. O Duty Cicle irá representar a tensão média do sinal PWM. Por exemplo. O PWM – Pulse Width Modulation Este tipo de modulação é extremamente utilizada na robótica. Logo D = TH / T. isto poderá ser interpretado pelo PIC como se um obstáculo estivesse a 10cm de distância do sensor ultrasom. ou seja. v (V) TL T T H t (s) Figura 19: Um sinal modulado em PWM O Duty Cicle (D) consiste na razão entre o tempo alto (TH) e o período do sinal (T). ou seja. Em controle de LEDs. o sinal está sempre em 0. isto ocasionará que estes dispositivos irão emitir luz com uma luminosidade = 70% da luminosidade máxima. em centímetros. transmitimos dados entre microcontroladores. Chaveando o motor rapidamente de modo a criar uma tensão média em seus terminais (digitalmente – através do PWM). Quando TH = 0 temos D = 0. posição de servomotores (que será estudado na próxima aula). se o PIC recebe um sinal com largura de pulso de 10ms.45. para o sensor ultrasom a largura do pulso em milisegundos emitida pelo sensor pode representar. logo o Duty Cicle é de 0%. etc. ou seja. Controle do torque em motores DC A variação do torque em motores DC pode ser realizada variando a tensão média no motor. Aula 03 Pág. a distância do sensor ao obstáculo. Neste curso iremos explorar o controle do torque em motores DC a partir do PWM bastando apenas variar a tensão média gerada pelo PWM para que o torque varie. ou seja. Esta variação pode ser realizada de duas formas: Variando linearmente a tensão através de transistores bipolares de potência ou qualquer outra eletrônica de potência (analogicamente . por exemplo. 44 . se aplicarmos um sinal com D = 70% nos LEDs. 46. O PWM consiste em modular um sinal de acordo com a largura de pulsos. Quando TH = T temos D = 1. Com ele podemos controlar torque em motores DC.não estudado neste curso).

esperar que o usuário pressione outra vez o botão. o timer/contador irá estourar e retornar a 0. como visto anteriormente. Aula 03 Pág. Programa 04 – Controlando um motor DC Nesta prática deve ser feito um programa para controlar um motor através de uma Ponte-H com as seguintes características: O sistema deverá esperar que o usuário pressione um botão para que o motor comece a girar em sentido horário. Ou seja. Pode ser acessado para leitura e escrita pelo usuário. E. 48. Módulo TMR0 Na aula 1 vimos que. Pode gerar uma interrupção em seu overflow. Com isto podemos medir tempo ou contar pulsos no RA4/T0CKI no mesmo momento em que executamos o programa principal. Observação: o PWM pode ser aplicado nas entradas da Ponte H para fazer o motor variar o torque. o motor deverá inverter o sentido de rotação e girar no sentido anti-horário durante 5s. 47. Como visto anteriormente. Após a ativação do motor. Pode ser ativado através de um clock externo. o motor deverá frear. Após este tempo. o módulo TMR0 é um timer/contador que possui as seguintes características: Timer/contador de 8 bits. O timer/contador incrementará de 0 até atingir 255. Se soubermos quanto tempo passa para o timer/contador estourar e contarmos quantas vezes o estouro ocorreu. Todos estas características serão melhor vistas neste capítulo. finalmente. poderemos medir o tempo que quisermos. No próximo ciclo de instrução. este deverá permanecer acionado durante 10 segundos. paralelamente e independentemente da execução do programa do microcontrolador. está o módulo TMR0. Pode ser aplicado um “prescaler”. dentre os módulos periféricos auxiliares que o PIC16F84 possui. 45 . O fluxograma e o código fonte deverão ser apresentados na próxima aula. Após os 10s.O mesmo conceito de tensão média pode ser aplicado a motores DC para variação do torque. o timer/contador é um registrador de 8 bits que está continuamente sendo incrementado. Pode ser incrementado na borda de subida ou decida. Fisicamente.

Se T0SE estiver em “1”. o contador/temporizador pode também ser incrementado através de um clock externo ligado ao pino RA4/T0CKI. teremos o tempo total que se pretende medir. Sempre que ocorrer uma transição de 255 para 0 (estouro).multiplicando quantas vezes ocorreu o estouro (overflow) pelo tempo que o timer/contador leva para estourar. o bit T0IF do registrador INTCON é colocado em “1”. A escolha entre uma destas opções (clock do oscilador ou clock externo) é feita no bit T0CS. do registrador OPTION. isto significa que o TMR0 só irá ser incrementado a cada 8 ciclos de instrução. 46 . como veremos ainda nesta aula. sendo necessário deixar este bit em “0” para que o prescale seja aplicado ao TMR0. o TMR0 será incrementado a partir da transição no pino RA4/T0CKI. é possível definir se o contador irá ser incrementado na borda de subida ou de decida do sinal em RA4/T0CKI através do bit T0SE de OPTION. o TMR0 será incrementado a partir do clock do ciclo de instrução interno do PIC. o prescale será aplicado ao WDT e o TMR0 ficará sem prescale. Não iremos estudar a fundo o WDT neste curso. Ou seja. PRESCALE O prescale é um contador interno (inacessível ao programador) do PIC que permite um incremento mais lento do TMR0. Cabe ao programador zerar o bit T0IF quando desejado. Além do oscilador do clock do microcontrolador. se o prescale estiver selecionado em 1:8. A configuração do prescale é feito no PSA e PS2:PS0 do registrador OPTION. Se colocarmos em “1”. é possível tirar proveito das interrupções geradas e da rotina de tratamento de interrupção. o incremento do TMR0 ocorrerá na mudança baixo para alto do pino RA4/T0CKI. Se for selecionado o clock externo (através do RA4/T0CKI). A configuração da razão entre o incremento do TMR0 e o clock de instruções é realizado através dos bits PS2:PS0 conforme a tabela a seguir. O valor atual do contador/timer pode ser modificado pelo programador a qualquer momento. Figura 20: Registrador OPTION O bit PSA indica se o prescale vai ser aplicado no TMR0 ou no WDT. Se T0SE estiver em “0”. Se o bit T0CS estiver em “1”. o incremento do TMR0 ocorrerá na mudança de alto para baixo do pino RA4/T0CKI. Aula 03 Pág. Se o bit T0CS estiver em “0”. Se as interrupções estiverem habilitadas.

47 . através de PWM.Tabela 5: Configuração do PS2:PS0 para prescale 49. Programa 05 – Sistema aquecimento de água Nesta prática o aluno deverá. acionar uma resistência elétrica para aquecer a água de um copo e observar como a variação do duty cicle irá modificar o tempo de aquecimento da água. Aula 03 Pág.

término da subrotina de tratamento. Esta é uma interrupção muito importante. 48 . afim de que a interrupção não possa voltar a ocorrer de novo. PortAnto. caso contrário o programa irá constantemente saltar para a rotina de interrupção. o número de interrupções ocorridas multiplicado por esse intervalo de tempo irá nos dar o tempo total decorrido. Interrupção externa no pino RB0/INT A interrupção externa no pino RB0/INT é desencadeada por um impulso ascendente (se o bit INTEDG = 1 no registro OPTION. ou seja. RB5 e RB4 do PORTB.50. muitos problemas da vida real podem ser resolvidos utilizando esta interrupção. É imprescindível que isto seja possível por que alguns eventos do mundo real precisam ser tratados no exato momento em que eles ocorrem. uma vez que. quando do regresso ao programa principal. Um exemplo é o da medição de tempo. Interrupção por overflow no TMR0 O estouro do timer/contador TMR0 (passagem de FFh para 00h) vai setar o bit TOIF (INTCON. Interrupção por overflow no TMR0.2). Após o tratamento da interrupção.6). cada interrupção muda o fluxo de execução do programa.0). o microcontrolador deverá voltar ao ponto onde a execução foi interrompida.4). qualquer que seja a tarefa que o microcontrolador esteja a executar no momento.5).1) tem que ser limpo na rotina de interrupção. A interrupção pode ser desabilitada quando colocamos ‘0’ no bit de controle INTE (INTCON. Se soubermos de quanto tempo o contador precisa para completar um ciclo de 00h a FFh. Quando o sinal desejado para gerar a interrupção surge no pino INT. Aula 04 Pág. A interrupção ocorre. Geralmente. o bit INTF do registro INTCON é posto a ‘1’. Esta interrupção pode ser desabilitada colocando ‘0’ no bit T0IE (INTCON. Interrupção por mudança nos pinos RB7:RB4 Qualquer variação em qualquer um das 4 portas de entrada do PORTB (bits 4 a 7). executando imediatamente após o evento que gerou a interrupção uma subrotina para tratamento desta interrupção. Interrupções As interrupções são um mecanismo que o microcontrolador possui e que torna possível responder a alguns acontecimentos no momento em que eles ocorrem. ou por um impulso descendente (se INTEDG = 0). quando os níveis lógicos em RB7. RB6. Interrupção por mudança nos pinos RB7:RB4 Interrupção com finalização de gravação na memória EEPROM. põe “1” no RBIF (INTCON. Esta é uma parte importante do programa e que o programador não pode esquecer. então. No PIC16F84 temos 4 tipos de interrupções: Interrupção externa no pino RB0/INT. mudam do valor lógico “1” para o valor lógico “0” ou vice-versa. O bit INTF (INTCON.

5. Registrador INTCON O registrador especial que controla as interrupções é o INTCON. nenhuma interrupção será gerada quando surgir uma variação do nível lógico.Para que estes pinos detectem as variações. Se RBIE estiver em “0” = a interrupção por variação dos níveis lógicos em RB7:RB4 estará desabilitada. Interrupção com finalização de gravação na memória EEPROM Nós não estudaremos esta interrupção por que não utilizaremos a memória EEPROM do PIC neste curso. eles devem ser definidos como entradas.RBIE (bit de habilitação de interrupção por variação nas portas RB7:RB4) Este bit permite que a interrupção por variação dos níveis lógicos nos pinos 4. Bit 5 . Se qualquer um destes for definido como saída. todas as interrupções serão desabilitadas. Bit 4 .TOIE (bit de habilitação de interrupção por transbordo de TMR0) Este bit habilita/desabilita a interrupção por estouro no contador TMR0. Esta interrupção pode ser habilitada/inibida colocando ‘1’ ou ‘0’ o bit RBIE do registrador INTCON (INTCON. habilita as interrupções que serão selecionadas nos demais bits do registrador INTCON.INTE (bit de habilitação da interrupção externa no pino RB0/INT) Este bit que permite que uma interrupção externa no PortA RB0/INT seja tratada. Se o bit estiver em “1” = interrupção por estouro do TMR0 habilitada Se o bit estiver em “0” = interrupção por estouro do TMR0 desabilitada. Aula 04 Pág. Se este bit estiver em “0” = interrupção externa desabilitada. quando em “1”. 6 e 7 do PORTBB ocorra. Figura 21: Registrador INTCON Bit 7 . Se RBIE estiver em “1” = a interrupção por mudança no nível lógico no RB7:RB4 estará habilitada.3).GIE (Habilita todas as interrupões) Este bit. 49 . Se este bit estiver em “1” = interrupção externa habilitada. Se este bit estiver em “0”. Bit 3 .

RBIF (flag que indica variação no porto B) Bit que informa que houve mudança nos níveis lógicos nos pinos 4. similar ao Programa 05. 1= pelo menos um destes pinos mudou de nível lógico 0= não ocorreu nenhuma variação nestes pinos. 51. 50 . Bit 1 . Se o bit estiver em “1” = ocorreu uma interrupção externa.TOIF (Flag de interrupção por transbordo de TMR0). Se este bit estiver em “0” = o contador não estourou.Bit 2 . Este bit indica que houve um estouro em TMR0. o programador deve ter a preocupação de limpar este bit antes de ligar o TMR0. 6 e 7 do porto B. Para que esta interrupção seja detectada. Programa 06 – Utilizando interrupção de tempo para geração do PWM Nesta prática deve ser feito um programa. Este bit dever ser limpo pelo programador no tratamento da interrupção para que o programa não volte para a interrupção imediatamente após o término do tratamento da interrupção.INTF (flag que indica a ocorrência da interrupção externa em INT/RB0) Este bit indica a ocorrência de uma interrupção externa. Se este bit estiver em “1” = o contador mudou a contagem de FFh para 00h. Aula 04 Pág. 5. substituindo a técnica de delay utilizada anteriormente por interrupção no TMR0. Bit 0 . Se o bit estiver em “0” = não ocorreu uma interrupção externa.

Sign up to vote on this title
UsefulNot useful