Program an Do Micro Control Adores PIC Linguagem C com

download Program an Do Micro Control Adores PIC Linguagem C com

of 225

Transcript of Program an Do Micro Control Adores PIC Linguagem C com

Programando Microcontroladores PIC

_

Programando Microcontroladores PICLinguagem C

www.mecatronicadegaragem.blogspot.com

_

Renato A. Silva

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

_

Renato A. Silva

Programando Microcontroladores PICLinguagem C

www.mecatronicadegaragem.blogspot.com

_

Renato A. Silva

Copyright 2006 by Jubela Livros Ltda Copyright 2006 by Renato A. SilvaNenhuma parte desta publicao poder ser reproduzida sem autorizao prvia e escrita de Jubela Livros Ltda. Este livro publica nomes comerciais e marcas registradas de produtos pertencentes a diversas companhias. O editor utiliza estas marcas somente para fins editoriais e em benefcio dos proprietrios das marcas, sem nenhuma inteno de atingir seus direitos.

Novembro de 2006Produo: Ensino Profissional Editora Editor Responssvel: Fbio Luiz Dias Organizao: Julianna Alves Dias Design da Capa: Renato A. Silva Diagramao : Renato A. Silva Correo ortogrfica: Ligia Vaner da Silva Direitos reservados por: Jubela Livros Ltda. Rua Maestro Bortolucci, _9_ Vila Albertina - So Paulo - SP Cep: 0__57-0_0 Telefone: (__) 6_0_ - 6__8 Fax: (__) 6_6_ - _9__

S586p Silva, Renato A. Programando microcontroladores PIC : Linguagem C / Renato A. Silva. So Paulo : Ensino Profissional, 2006. _7_p. _. Microcontroladores. _. Microprocessadores. _. C (Linguagem de Programao de Computadores). I. Ttulo.

CDU: 68_.__

Catalogao na publicao por: Onlia Silva Guimares CRB-14/071 E-mail da Editora: [email protected] Homepage: www.ensinoprofissional.com.br Atendimento ao Consumidor: [email protected] Contato com o Autor: [email protected] http://www.renato.silva.nom.br

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

5

Quanto ao mais irmos, fortaleci-vos no Senhor, pelo seu soberano poder. Revesti-vos da armadura de Deus para que possais resistir s ciladas do Demnio. Porque ns no temos que lutar contra a carne e o sangue, mas contra os Principados, Potestades, contra os Dominadores deste mundo tenebroso, contra os espritos malignos espalhados pelos ares. Tomai portanto, a armadura de Deus para que possais resistir no dia mau, e ficar de p depois de terdes cumprido todo o vosso dever. Ficai firmes, tendo os vossos rins congidos com a verdade, revestidos com a couraa da justia, e os ps calados, prontos para ir anunciar o Evangelho da Paz. So Paulo, Efe 6,_0-_5

PIC, PICmicro, e MPLAB so marcas registadas e protegidas da Microchip Technology Inc. USA. O nome e o logotipo Microchip so marcas registadas da Microchip Technology. Copyright 2003, Microchip Technology Inc. Todas as outras marcas mencionadas no livro constituem propriedade das companhias s quais pertencem

www.mecatronicadegaragem.blogspot.com

6

Renato A. Silva

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

7

SumrioPrefcio..................................................................................11 Apresentao.........................................................................13 Introduo:.............................................................................14 1- Histria do transistor e do microchip 1.1 O Transistor.....................................................................16 1.3 Tipos de transistor.......................................................... 18 1.4 O Nascimento do Microchip...........................................19 2- Portas Lgicas, Nmeros Binrios e Hexadecimais 2.0- As Portas Lgicas...........................................................20 2.1- Nmeros Decimais.........................................................22 2.1.1- Nmeros Binrios........................................................22 2.1.2- Nmero Hexadecimal.................................................23 2.1.3- Numerao Octal.........................................................24 3- Memrias e Microcontroladores 3.1- Memrias.......................................................................26 3.2- Microcontrolador...........................................................27 3.3- Histria dos microcontroladores ................................. 28 3.4- Apresentando o PIC 16F62x...........................................29 3.5- Alimentao................................................................... 30 3.6- Definio da CPU...........................................................31 3.7- Arquitetura Interna........................................................32 3.8- Caractersticas do PIC 16F62x.......................................33 3.9- Organizao da Memria.............................................. 34 3.10- A Pilha ou Stack...........................................................34 3.11- Organizao da memria de dados.............................35 3.12- Registradores de Funes Especiais............................36 3.13- Palavra de configurao e identificao..................... 41 3.14- Portas de Entrada / Sada...........................................42 3.15- Oscilador...................................................................... 44 3.16- Pipeline.........................................................................44

www.mecatronicadegaragem.blogspot.com

8

Renato A. Silva

3.16.1 Oscilador com cristal modo XT, LP ou HS................46 3.16.2 oscilador com cristal paralelo....................................46 3.16.3 Oscilador com cristal em srie...................................47 3.16.4 Clock externo..............................................................47 3.16.5 Oscilador com resistor externo..................................47 3.16.6 Oscilador interno 4 Mhz............................................ 48 3.16.7 Oscillator Start-Up timer (OST).................................48 3.17 Reset.............................................................................. 48 3.17.1- Reset Normal.............................................................49 3.17.2- Reset Power-on (POR).............................................. 49 3.17.3- Power-up Timer (PWRT).......................................... 50 3.17.4- Brown-out detect (BOD)........................................... 50 3.17.5- Reset por transbordamento de WDT....................... 50 3.18- WatchDog Timer (WDT)..............................................51 3.19- Set de instrues ......................................................... 52 4- Construindo o Primeiro projeto: 4.1 Pisca Led......................................................................... 54 4.1 MPLAB verso 7.0...........................................................57 4.2- O Gravador.....................................................................63 4.3.1- IC-Prog........................................................................65 4.3.2- Gravando o programa................................................ 65 4.3.3- Erro de gravao.........................................................66 4.3.4- Arquivo Hexa..............................................................66 5- Linguagem C 5.1- Linguagem de programao..........................................68 5.2- Comentrios...................................................................69 5.3- Identificadores............................................................... 70 5.4- Endentao.....................................................................70 5.5- Constantes......................................................................70 5.6- Variveis........................................................................ 70 5.7- Elementos definidos pela linguagem C:....................... 70 5.8- Operadores e Smbolos Especiais..................................71 5.9- Tipos de dados...............................................................71 5.10- Comando IF.............................................................. 73

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

9

5.11- Comando WHILE.....................................................74 5.12- Comando DO............................................................75 5.13- Comando FOR..............................................................76 5.14- Comando SWITCH......................................................77 5.15- Comando RETURN......................................................78 5.16- Comando GOTO.......................................................... 78 5.17- Comando BREAK.........................................................79 5.18- Comando CONTINUE................................................. 79 5.19- Estrutura de um Programa em C................................ 79 5.20- compilador CCS C Compiler................................... 80 6- Temporizadores - timers 6.1- Temporizador TMR0.....................................................85 6.1- Temporizador TMR1......................................................87 6.2- Temporizador Timer2....................................................89 6.3- Configurao do Timer..................................................91 7- Comunicao 7.1- Comunicao Serial RS232.............................................96 7.2- Funes para comunicao I2C................................... 113 7.3- Comunicao SPI..........................................................115 8- Captura, Comparao e PWM 8.1- Modo captura...............................................................117 8.2- Modo comparao........................................................119 8.3- Modo PWM Modulao por Largura de Pulso...........120 9- Comparadores e Tenso de Referncia 9.1- Modulo Comparador................................................... 123 9.2- Tenso de Referncia................................................... 126 10- Displays 10.1- Display LED de sete segmentos:................................129 10.2- Display LCD...............................................................134

www.mecatronicadegaragem.blogspot.com

_0

Renato A. Silva

11- Motores de Passo 11.1- Definio.....................................................................145 11.2- Motor de Passo Unipolar...........................................146 11.3- Motor de Passo Bipolar..............................................147 11.4- Motor de Passo de Relutncia varivel.....................148 11.4- Modos de acionamento..............................................148 Apndice Tabela de funes do compilador CCS...............................158 Tabela de converso de caracteres .......................................166 Layout da placa experimental..................................................170 Referncia............................................................................173

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

__

PrefcioNa atualidade uma diversidade de microcontroladores esta presente no mercado exigindo a efetiva busca por atualizao, para fins aplicativos operacionais e/ou didticos existe uma procura por aperfeioamento numa programao mais fcil. Cada dia se faz mais necessrio um conjunto de instrues que no sofra variaes bruscas e relevantes entre os microcontroladores. Logo, a sua aprendizagem deve possibilitar o entendimento dos demais. Com base nisto, o contedo da presente obra vem produzir uma documentao para uso como instrumento de aplicao pedaggica e operacional nos mais variados ambientes, bem como em desenvolver competncias no mbito das aplicaes de microcontroladores e motivar desenvolvedores a projetar, desenvolver e implementar sistemas microcontrolados de pequeno e mdio porte. O contedo deste livro apresenta a fundamentao terica sobre o microcontrolador PIC _6F6_7 e _6F6_8, realiza experimentaes prticas com esses microcontroladores e segue um tipo de metodologia cujo objetivo permitir ao desenvolvedor a familiaridade com componentes eletrnicos, a montagem em matrizes de contato e posterior anlise, testes e programao dos circuitos propostos. Mais uma vez, este livro dedica-se ao aprendizado da tecnologia de automao e robtica, utilizando microcontroladores para executar tarefas especficas. No decorrer do livro o leitor ter a oportunidade de inteirar-se da tecnologia dos microcontroladores da famlia PIC da Microchip, iniciando no mdulo bsico com o uso de transistores passando pelas portas lgicas e avanando passo-a-passo at os microcontroladores, onde aprender a fazer softwares em linguagem assembler e posteriormente utilizando a linguagem C. Finalmente, cabe ao leitor sempre, o esforo para aprender a programar microcontroladores e usa-los com criatividade e imaginao para o desenvolvimento de novos projetos. Aqui reforamos o pedido do autor no sentido de ter uma boa dose de pacincia no aprendizado e no desistir frente s dificuldades, pois com certeza, uma caminhada de enriquecimento de conhecimentos. E para aqueles que felizmente encontra-se em um degrau mais elevado, espera-se que a obra venha somar algo mais a sua carreira.

Antonio Ildio Reginaldo da Silva Diretor Escola Senai Catalo - GO

www.mecatronicadegaragem.blogspot.com

__

Renato A. Silva

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

__

ApresentaoEste livro, dedica-se ao aprendizado da programao de microcontroladores utilizando-se da linguagem C, de forma prtica, conduzindo o leitor a um aprendizado gradativo ao uso dos microcontroladores para executar tarefas especficas. No decorrer do livro o leitor ter a oportunidade de inteirar-se da tecnologia dos microcontroladores da famlia PIC MCU da Microchip de forma terica e prtica. Com o auxlio da placa experimental proposta, cujo layout pode ser baixado gratutamente da internet no endereo http://renato.silva.nom.br e com a realizao dos exerccios complementares, o leitor encontrar em condies de desenvolver aplicaes de controle de microcontroladores PIC, utilizando-se da linguagem de programao C. A viso da obra consiste em apresentar o microcontrolador com os seus recursos e a medida que forem utilizados, indicar a forma de programao. Inicialmente apresentado a forma de programao em assembler de uma aplicao simples, e os meios de gravao no microcontrolador. Posteriormente a programao seguir em linguagem C, a medida que for sendo utilizado os recursos do microcontrolador e de alguns perifricos. As ferramentas aqui utilizadas so livres para uso com execesso do compilador CCS PIC C Compiler da CCS Inc. cujas informaes adcionais e sobre aquisio, podem ser adquiridas diretamente do fabricante no endereo http://www.ccsinfo.com/

www.mecatronicadegaragem.blogspot.com

__

Renato A. Silva

Introduo:O desenvolvimento atual da tecnologia nas reas de automao e robtica deve-se principalmente ao desenvolvimento dos microcontroladores e processadores digitais de sinais (DSP), tendo estes memrias e estrutura que lembra os microcomputadores atuais, executando um software escrito para uma determinada finalidade, sendo extremamente robustos, baratos e confiveis. Dentre os diversos fabricantes, encontramos os microcontroladores da Microchip, uma empresa norte americana, fundada em 1989, com sede na cidade de Chandler, Arizona (oeste dos E.U.A.) que fabrica os microcontroladores da famlia PIC, uma das mais variadas do mercado, tendo eles, uma filosofia de produto em comum, caracterstica que permite a compatibilidade de software e a estruturao das aplicaes, pois um cdigo escrito para um modelo de PIC poder ser migrado para outro modelo sem que sejam necessrias grandes mudanas no cdigo fonte. Isto facilita o trabalho de quem desenvolve e preserva o investimento de quem produz. Os microcontroladores PIC, rene em um nico chip todos os circuitos necessrios para o desenvolvimento de um sistema digital programvel, dispondo internamente de uma CPU (Unidade central de processamento) que controla todas as funes realizadas pelo sistema, tendo em seu interior diversos registradores e a Unidade Lgica Aritmtica (ALU) onde so executadas todas as funes matemticas e lgicas, basicamente toda movimentao de dados passa atravs da ALU. A CPU conta tambm com memria de programa PROM (Memria programvel somente de leitura), memria RAM (memria de acesso randmico) e registrador W (uso geral) dentre outros.

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

_5

www.mecatronicadegaragem.blogspot.com

_6

Renato A. Silva

1 Histria do transistor e do microchip1.1 O TransistorAntes de PICarmos um pouco, faz-se necessrio uma pequena viso do desenvolvimento, iniciando no final dos anos 40, com a construo do primeiro transistor nos laboratrios da BELL em 23 de dezembro de 1947 por John Bardeen, Walter Houser Brattain, e William Bradford Shockley, os quais ganharam o prmio Nobel de fsica 1956. O transistor a contrao das palavras transfer resistor, resistncia de transferncia. um dispositivo eletrnico semicondutor, componente chave em toda a eletrnica moderna, de onde amplamente utilizado formando parte de computadores, portas lgicas memrias e uma infinidade de circuitos. Este revolucionrio engenho transformou o mundo em pouco tempo. Cientistas em diversos laboratrios estavam procura de um componente que substitusse as vlvulas e reles antigos. Diversos materiais foram submetidos a testes fsico-qumicos e classificados em dois grupos, os condutores e os no condutores, isolantes ou dieltricos. Alguns materiais no se enquadravam em nenhum dos dois grupos, ora conduziam ora isolavam, foi ento classificado como semicondutor. Em 1945, por iniciativa de Mervin Kelly, ento diretor da Bell Labs, formou-se um grupo de pesquisa para o estudo dos semi-

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

_7

condutores. Um ano mais tarde o grupo j estava quase formado. William Bradford Shockley, fsico do MIT (instituto de pesquisa de Massasshussets), John Bardeen, engenheiro eltrico e Walter Houser Brattain, fsico. Dois anos mais tarde e depois de muito trabalho, os cientistas conseguiram em 16 de dezembro de 1947 construir o transistor primordial construdo com duas folhas de ouro prensados em um cristal de germnio e com uma carga eltrica aplicada, esta flua entre o cristal, obtendo o efeito de amplificao to desejado. A Bell Labs. Promoveu uma ampla difuso de informaes a fim de incentivar outros a pesquisarem, e fabricarem o transistor, chegando a ponto de vender a patente do transistor por apenas U$ 25.000,00. O objetivo era que outras empresas alavancassem o desenvolvimento de novas tecnologias que pudessem ser usadas em telecomunicaes, sua rea de atuao. Anos mais tarde, uma dessas companhias, a Texas Instruments, anunciou o primeiro transistor de silcio, material, que apresentava inmeras vantagens sobre o germnio, uma delas era a abundante matria prima o que reduziria os custos de fabricao. A Texas tornou-se assim uma poderosa concorrente no mercado. O transistor um dispositivo semicondutor de estado slido, ele foi assim chamado pela propriedade de trocar a resistncia pela corrente eltrica entre o emissor e o coletor. um sanduche de diferentes materiais semicondutores em quantidade e disposio diferentes intercalados. Pode-se obter assim transistores PNP e NPN. Estas trs partes so: Uma que emite eltrons (emissor) uma outra que recebe e os coleta (coletor) e uma terceira (base) que est intercalada entre as duas primeiras, regula a quantidade desses eltrons. Um pequeno sinal eltrico aplicado entre a base e o emissor modula a corrente que circula entre o emissor e coletor. O sinal base emissor por ser muito pequeno em comparao com o emissor base. A corrente emissor coletor aproximadamente

www.mecatronicadegaragem.blogspot.com

_8

Renato A. Silva

da mesma forma que a da base emissor, mas amplificada por um fator de amplificao, chamado Beta. Todo transitor tem um fator beta sendo assim amplificador, pode tambm se usado para oscilar, para retificar, para comutar, sendo esta a principal funo do transistor na eletrnica digital.

1.3 Tipos de transistorExistem diversos tipos de transistores, mais a classificao mais acertada consiste em dividi-los em transistores bipolares e transistor de efeito de campo FET, sendo est dividida em JFET, MOSFET, MISFET, etc. A diferena bsica entre os diversos tipos de transistores est na forma em que controla o fluxo de corrente. Nos transistores bipolares que possuem uma baixa impedncia de entrada, onde o controle se exerce injetando uma baixa corrente (corrente de base), ao passo que o transistor de efeito de campo que possui uma alta impedncia, tendo o controle atravs de tenso (tenso de gate). Os transistores de efeito de campo FET mais conhecidos so os JFET (Junction Field Effect Transistor), MOSFET (Metal-Oxide-Semiconductor FET) e MISFET (Metal-Insulator-Semiconductor FET). Este tem trs terminais denominados gate, dreno, supridouro. O gate regula a corrente no dreno, fornecida no supridouro. Indiscutivelmente com o surgimento do transistor os equipamentos eletrnicos ficaram mais leves, compactos e passaram a consumir menos energia, tendo estas caractersticas cada vez mais relevncia na indstria.

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

_9

1.4 O Nascimento do MicrochipApenas treze anos aps a inveno do transistor, houve outro grande salto tecnolgico, a inveno do circuito integrado ou microchip, por Jack S. Kilby da Texas Instruments e Robert N. Noyce da Fairchild Semicondutor. No vero de 1958, Jack S. Kilby, entrou para a equipe da Texas Instruments, em Dallas, E.U.A, onde desenvolveu o primeiro microchip da histria, usando componentes ativos (transistores, diodos) e passivos (resistores, capacitores) em uma nica pea de material semicondutor do tamanho de um clips de papel. O sucesso da demonstrao de laboratrio foi o nascimento do primeiro microchip simples da histria, em 12 de Dezembro de 1958. Paralelamente na Fairchild Semicondutor, Robert N. Noyce avanava em suas pesquisas, inspirado nas tcnicas de mascaramento que empregavam dixido de silcio para a difuso de impurezas, e utilizando-se de trilhas de ouro ou alumnio aplicado com ajuda de mscara e fotolitogrfia, enquanto o processo de Kilby empregava pequenos fios nas ligaes internas do circuito. A tecnologia evoluiu, e tambm o nmero de empresas e em 1962 nasceu lgica TTL, e anos mais tarde a tecnologia MOS (metal-oxide semiconductor), seguida pela CMOS (complementary metal-oxide semiconductor), tecnologia atual hoje em dia. Com a tecnologia CMOS e a crescente miniaturizao do microchip, surgiu em 1974 o primeiro microprocessador da histria denominado 1802 fabricado pela RCA, seguido pelo microprocessador de 4 bits da Texas Instruments, o TMS1000. A eletrnica digital baseia-se em tenso (definido como 1) e ausncia de tenso (definido como 0) onde o nvel alto ou 1 de 5 volts ou 2/3 da fonte e o nvel 0 zero volt ou um pouco acima, portanto, para a eletrnica digital somente importa o nvel alto ou baixo. Com esta tica as indstria desenvolveram blocos com a unio de centenas de transistores para realizao de uma tarefa especfica denominando-se circuito integrado.

www.mecatronicadegaragem.blogspot.com

_0

Renato A. Silva

2 Portas Lgicas, Nmeros Binrios e Hexadecimais2.0- As Portas LgicasAs portas lgicas formam a base da eletrnica digital iniciando um novo compndio na eletrnica e o seu estudo essencial ao entendimento e aprendizado dos microcontroladores e microprocessadores. Ao agrupar circuitos ativos e passivos em blocos, os cientistas criaram blocos que executavam uma determinada funo lgica. Estas funes so AND (E), NAND (NO E), OR (OU), XOR (OU EXCLUSIVO), XNOR (NO EXCLUSIVO) e NO (NO). Para trabalharmos com as portas lgicas faz-se o uso de uma tabela verdade, a qual cada funo tem a sua. Nas portas AND tm-se nvel alto (tenso) em sua sada somente se todas as suas entradas, tiverem nvel alto, obtendo assim um E em suas entradas, pr exemplo entrada E entrada b. Dizemos assim, que a sada o resultado da entrada A, E da entrada B. As portas NAND, ao contrrio das portas AND somente ter

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

__

nvel alto em sua sada se as suas entradas tiverem nvel baixo. As portas lgicas do tipo OR tero nvel alto em sua sada se uma OU outra entrada tiver nvel alto. As portas lgicas tipo NOR, ao contrrio da funo OR, somente ter nvel alto ou 1 em sua sada se as entradas forem zero. Observe a diferena bsica entre a funo OR e a NOR. As portas lgicas XOR, garantem o nvel alto em sua sada se uma entrada tiver em nvel alto e outra em nvel baixo. Observe que diferentemente da AND se tivermos 1 e 1 a sada ser 0. As portas XNOR apresentam princpio semelhante funo XOR, apenas com o detalhe de ter sadas invertidas. As portas lgicas NO, so as mais fcil de todas, apresenta nvel alto em sua sada se sua entrada for nvel baixo, invertendo assim os nveis lgicos. Como j sabemos o nvel alto (normalmente 5 volts) representados pr 1 e o nvel baixo (zero volts) pr 0, assim a combinao de 1 e 0 em grupos de 8, formo um conjunto denominado byte. Veremos agora as vrias representaes de conjuntos numricos e as suas formas de converso.

www.mecatronicadegaragem.blogspot.com

__

Renato A. Silva

2.1- Nmeros DecimaisDesde cedo aprendemos a raciocinar com nmeros decimais, onde o conjunto matemtico contm 10 elementos [0..9], este sistema de numerao baseia-se em potencia de 10 onde cada dgito corresponde ao nmero 10 (base) elevado a uma potncia (expoente) de acordo com sua posio.

2.1.1- Nmeros BinriosDa mesma forma os nmeros que os nmeros decimais, os nmeros binrios, so assim chamados porque o seu conjunto contm apenas 2 elementos [0,1]. Este conjunto numrico representa os estados lgicos 0 e 1. Ao organizarmos os bits 0 e 1 em grupos de 8 temos um byte de oito bits, em grupos de 16 temos um byte de 16 bits e assim sucessivamente. A escrita do nmero binrio sempre feita da direita para a esquerda, dizemos que a parta da direita a mais significativa ou MSB (most significative bit) e a parte da esquerda a menos significativa ou LSB (louse significative bit), dai devemos elevar 2 ao expoente da casa correspondente ao 1 do bit. Observe na tabela de expoentes da figura que o primeiro expoente da direita 1, portanto 2 0 = 1 e o quarto expoente da direita para a esquerda o 3, portanto 2 3 8 agora fazemos = a soma de todos os resultados, neste caso 1 + 8 = 9. Tudo uma questo de prtica, ao praticar um pouco voc entender melhor esta relao. Voc j deve ter percebido, aqui, que existe uma relao, uma forma de representar o 0 e o 5 volts dos circuitos digitais em nmeros, desta forma, podemos conversar facilmente com as mquinas digitais utili-

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

__

zando nmeros e realizar operaes com eles. Para convertemos uma representao decimal em binria, fazemos sucessivas divises por 2 e anotamos os resultados. Depois ordenamos de forma lgica da direita para a esquerda

2.1.2- Nmero HexadecimalA numerao hexadecimal que como as anteriores tem seu conjunto matemtico representado por 16 nmeros, facilita e acelera a decodificao de dados, economizando espao em armazenamento de dados. Neste conjunto temos 16 nmeros sendo [0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F]. Utilizamos basicamente o conjunto de nmeros decimais (com10 elementos) e lanamos mos das letras (A,B,C,D,E,F) para complementar o conjunto atribuindo-lhe valor. Desta forma o nmero A passa a ter o valor 11 e o F o valor 16. O nmero 17 decimal igual a 11 hexadecimal e o nmero 23 decimal igual ao nmero 17 hexadecimal. Parece um pouco confuso mas no , acompanhe no apndice a tabela de nmeros decimais x binrio x hexadecimal. Assim o nmero 65535 (5 casas) em decimal, ficaria como 11111111.11111111 (16 casas) em binrio e FFFF (4 casas) em hexadecimal. A converso Hexadecimal para decimal multiplica o valor do digito pela potncia de 16, fazendo a somatria. Ex: 8AB1 = 35.505 Para convertermos hexadecimal em binrio, a forma mais prtica termos em mente a tabela de nmeros de A at F em binrio e depois agrupar os dgitos binrios, veja 1A fica com 1 (primeiro dgito) e 1010 da tabela. Outro exemplo 3C convertido d 11(referente ao 3) e 1100(referente ao C).

www.mecatronicadegaragem.blogspot.com

__

Renato A. Silva

Tabela hexadecimal x binria A - FA 1010 B 1011 C 1100 D 1101 E 1110 F 1111

2.1.3- Numerao OctalO sistema de numerao octal um conjunto matemtico onde temos oito elementos [0,1,2,3,4,5,6,7] que apresenta grande importncia principalmente pela facilidade de converso de binrio para octal. A metodologia de converso semelhante as anteriores, para converso de numerao decimal para numerao octal, faz-se divises sucessivas por 8 at encontrar o menor quociente e posteriormente pegamos o resto da diviso em ordem inversa. Para converso de octal para decimal, multiplicamos o numeral por 8 elevado a potencia correspondente.

A Converso de numerao octal para numerao binria faz-se uso da tabela octal onde temos o correspondente binrio de cada nmero octal, depois agrupamos os bytes correspondentes ao octal da direita para a esquerda. Tabela de converso entre diversas basesDecimal 0 1 2 Hexadecimal 0 1 2 Binrio 0000 0001 0010 Octal 000 001 010

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

_5

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

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

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

Octal 011 100 101 110 111

As funes lgicas booleanas so utilizadas quase que na totalidade das aplicaes com microcontroladores. No captulo anterior o leitor viu as diversas funes (portas lgicas), veja agora exemplo de aplicao destas funes em numerao binrio e hexadecimal. Neste captulo, tivemos uma viso geral da relao, converso e utilizao dos diversos conjuntos numricos e sua indiscutvel e relevante importncia para os sistemas computacionais. No prximo captulo veremos os diversos tipos de memrias e a suas utilizaes.

www.mecatronicadegaragem.blogspot.com

_6

Renato A. Silva

3 Memrias e Microcontroladores

3.1 MemriasA memria a capacidade de reter, recuperar, armazenar e evocar informaes disponveis, neste caso em forma binria de 0 e 1. Transistores, portas lgicas e flip-flops so utilizados na implementao de memrias eletrnicas, sendo as principais tecnologias definidas como memrias ROM, PROM, EPROM, EEPROM, FLASH e RAM. Memrias ROM, memria somente de leitura, uma memria onde os dados gravados no podem ser modificados ou cancelados. Os dados so gravados na fabricao atravs de uma mscara colocada sobre o chip de modo a registrar nas clulas disponveis as informaes desejadas. Memrias PROM, memria somente de leitura programvel aquela onde os dados podem ser inseridos pr meio de gravadores especficos uma nica vez. Cada clula deve armazenar um bit de byte, como um fusvel onde o 1 seria o fusvel intacto e o 0 fusvel rompido, preciso muito cuidado ao programar este tipo de memria, pois se um bit ou um byte for gravado errado, no h como corrigir. A gravao feita utilizando uma tenso chamada VPP, cuja amplitude depende da memria, normalmente 25 volts. Memrias EPROM, memria somente de leitura apagvel, esta sem dvida bem mais comum dos que a PROM, pode ser apagada se exposta luz ultravioleta atravs de uma janelinha de quartzo (transparente a radiaes ultravioletas) e programada novamente

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

_7

pr meio de gravadores especficos, pr muitas vezes. Memrias EEPROM, memria somente de leitura apagvel eletricamente, pode ser apagada eletricamente e regravadas milhares de vezes, utilizando gravadores especficos, no precisando exp-la a radiao ultravioleta, sendo muitas vezes menores que as EPROM, j que no tem a janelinha de quartzo. Memria FLASH, parecida em tudo com as do tipo EEPROM, podendo ser apaga e gravada eletricamente e gravada novamente, podendo ter at 100.000 ciclos de apagamentos Memria RAM, Constituda de transistores ou flip-flop, podem armazenar dados somente quando tiverem tenso, quando no houver tenso estaro zeradas, sendo volteis, tem seu uso no processo auxiliar ao processador armazenando informaes temporrias. Basicamente so constitudas de dois tipos: estticas e dinmicas. As memrias RAM estticas, muito utilizada no final dos anos 80, tinham como principal desvantagem o tamanho, pois cada chip podia armazenar pequena quantidade de bytes, algo em torno de 1k, 4k byte. Portanto para criar um banco de memria com certa capacidade, fazia-se necessrio projetar uma placa de propores considervel. As memrias RAM dinmicas, ao contrrio tinham alta densidade podendo armazenar por chip 1 megabyte facilmente, porm estas memrias necessitam de refresh constante e conseqentemente circuitos de apoio. So estas empregadas hoje em dia nos computadores, normalmente tem entre 8 e 10 transistores por byte e um tempo de acesso da ordem de 7 nanosegundos !

3.2 MicrocontroladorMicrocontrolador um circuito integrado programvel que contm todos os componentes de um computador como CPU (unidade central de processamento), memria para armazenar programas, memria de trabalho, portas de entrada e sadas para comunicar-se com o mundo exterior, sistema de controle de

www.mecatronicadegaragem.blogspot.com

_8

Renato A. Silva

tempo interno e externo, conversores analgico digital, uart de comunicao e outros. Pode-se controlar qualquer coisa ou estar includo em unidades de controle para: - mquinas pneumticas, hidrulicas comandadas - mquinas dispensadoras de produtos - motores, temporizadores - sistemas autnomos de controle, incndio, umidade temperatura - telefonia, automveis, medicina, ...etc Estamos rodeados por mquinas que realizam algum trabalho ajudado por sensores e atuadores que recolhem as informaes.

3.3 Histria dos microcontroladoresEm 1965 a GI Microelectronics, deu seus primeiros passos, fabricando memrias EPROM e EEPROM, desenhou no incio dos anos 70 o microprocessador de 16 bits CP1600. Este trabalhava bem, mas de forma ineficaz , no controle de portas de entrada / sada. Para resolver este problema em 1975 desenhou-se um chip destinado a controlar portas de entrada / sada. Nascia assim o PIC (Peripherical Interface Controler), Com estrutura muito mais simples que um processador, este podia manejar as entradas e sadas com muita facilidade, rapidez e eficincia. Uma das razes do sucesso do PIC base de sua utilizao, ou seja, quando se aprende a trabalhar com um modelo, fica fcil migrar para outros modelos j que todos tm uma estrutura parecida. Um dos grandes fabricantes de microcontroladores a Microchip que tem como fbrica principal em Chandler, Arizona, onde so fabricados e testados os ltimos lanamentos. Em 1993 foi construda outra fbrica em Tempe, Arizona, que tambm conta com centros de fabricao em Taiwan e Tailndia. Para se Ter uma idia de sua produo, s na famlia 16CSX, de aproximadamente 1 milho de unidades semanais.

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

_9

Cada tipo de microcontrolador serve para um propsito e cabe ao projetista selecionar o melhor microcontrolador para o seu trabalho. Dentre os mais populares, encontramos o 16F84, ainda fcil de se obter, mas est sendo substitudo pelo modelo 16F627 ou 16F628 por ter mais recursos e preo aproximado. A diferena entre o PIC 16F627 e o PIC 16F628 est na quantidade de memria.

3.4 Apresentando o PIC 16F62xO microcontrolador PIC 16F62x, rene em uma pastilha todos os elementos de uma CPU RISC de alta performance, sendo fabricado em encapsulamento DIP (18 Pinos), SOIC (18 pinos) ou SSOP (20 pinos). Onde encontramos: - Set (conjunto) de instrues com 35 funes - 200 nanosegundos por instruo @ 20 Mhz. - Clock de at 20 Mhz. - 1024 bytes de memria de programa (16F627) - 2048 bytes de memria de programa (16F628) - Stack com 8 nveis - 16 registradores especiais de funes - Capacidade de interrupo - 16 portas de entrada / sadas independente - Alta corrente de sada, suficiente para acender um LED - Comparador analgico. - Timer0 de 8 bits com prescaler, postscaler - Timer1 de 16 bits com possibilidade de uso de cristal externo - Timer2 de 8 bits com registro de perodo, prescaler e postscaler - Captura com 16 bits e resoluo mxima de 12,5 nS. - Comparao com 16 bits e resoluo mxima de 200 nS. - PWM com resoluo mxima de 10 bits. - USART para comunicao serial - 16 bytes de memria RAM comum

www.mecatronicadegaragem.blogspot.com

_0

Renato A. Silva

- Power On Reset (POR) - Power Up Timer (PWRT) - Oscillator start-up (OST) - Brow-out Detect (BOD) - Watchdog Timer (WDT) - MCLR multiplexado - Resistor pull-up programveis no PORTB - Proteo de cdigo programvel - Programao em baixa voltagem - Power save SLEEP - Oscilador Resistor externo ER - Resistor interno - INTRC Clock externo EC - Cristal alta velocidade - XT Cristal baixa velocidade HS Cristal LP - Programao in-circuit - Baixo consumo - < 2.0 mA @ 5.0V, 4 Mhz. - 15 uA @ 3.0V, 32 Khz. - < 1 uA em repouso @ 3.0V. - Quatro localizaes para ID de usurio

3.5 AlimentaoNormalmente o PIC alimentado com uma tenso 5,0 volts provenientes de uma fonte DC com regulao positiva, um regulador 7805 ou 78L05 podem ser utilizados para tal funo, lembrando aqui que o 78L05 tem capacidade de suprir at 100ma, no devendo exceder 80% deste consumo pois aumenta muito o aquecimento do regulador. O consumo de corrente do microcontrolador mnimo, consumindo menos de 2,0 mA com 5 volts, trabalhando a 4Mhz ou 15,0 micro amp com 3 volts, trabalhando

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

__

a 32 Khz. Quando em modo StandBy, consome menos de 1,0 micro amp. com 3.0V, porm devemos ver o consumos dos outros componentes do circuito. - PIC 16F62x - 3.0V a 5.5V - PIC 16LF62x - 2.0V a 5.5V Em suas portas de sadas temos uma corrente de aproximadamente 10 mA, o suficiente para iluminar um led diretamente, no entanto, sempre devemos utilizar um resistor em srie na porta normalmente de 10k. Respeitando suas caractersticas o PIC trabalhar sem problemas com grande estabilidade durante muito tempo sem necessidade de manuteno.

3.6 Definio da CPUAs CPUs dependendo do tipo de instrues que utilizam podem ser classificadas em: CISC: (Complex Instruction Set Computer) processadores com conjunto de instrues complexas, dispe de um conjunto com elevado nmero de instrues algumas sofisticadas e potentes. Em contrapartida requerem muitos ciclos de mquina para executar as instrues complexas. RISC: (Reduced Instruction Set Computer) processadores com conjunto de instrues reduzidos, em nosso caso so 35 instrues simples que executam em 1 ou 2 ciclos de mquina com estrutura pipeline onde todas as instrues executam na mesma velocidade. SISC.(SpecificInstruction Set Computer) processadores

www.mecatronicadegaragem.blogspot.com

com conjunto de instrues especficas.

www.mecatronicadegaragem.blogspot.com

__

Renato A. Silva

3.7 Arquitetura InternaEntende-se por arquitetura interna a forma como o circuito construdo, representada por blocos, isto como suas partes internas se interligam, podemos definir os PICs como sendo Arquitetura Harvard, onde a CPU interligada memria de dados (RAM) e a memria de programa (EPROM) por um barramento especfico. Tradicionalmente os microprocessadores tm como base estrutura de Von Neumann, que se caracteriza por dispor de uma nica memria principal em que se armazenam dados e instrues. O acesso memria feito atravs de um sistema de uma nica via (bus de dados, instrues e de controle). A arquitetura interna do PIC do modelo Harvard,

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

__

onde dispe de memrias de dados e de programas. Cada memria dispe de seu respectivo bus, o que permite, que a CPU possa acessar de forma independente a memria de dados e a de instrues. Como as vias (bus) so independentes estes podem ter contedos distintos na mesma direo. A separao da memria de dados da memria de programa faz com que as instrues possam ser representadas por palavras de mais que 8 bits, assim o PIC, usa 14 bits para cada instruo, o que permite que todas as instrues ocupem uma s palavra de instruo, sua arquitetura ortogonal, onde qualquer instruo pode utilizar qualquer elemento da arquitetura como fonte ou destino. Todo o processo baseia-se em banco de registros onde todos os elementos do sistema como, temporizadores, portas de entrada/ sada, posies de memrias, etc, esto implementados fisicamente como registros. O manejo do banco de registros, que participam ativamente na execuo das instrues, muito interessante ao ser ortogonal.

3.8 Caractersticas do PIC 16F62xConforme vemos no diagrama em blocos do PIC 16F627 e 16F628, podemos ressaltar as seguintes caractersticas: memria de programa EEPROM de 1Kb x 14 bits no 16F627. memria de programa EEPROM de 2Kb x 14 bits no 16F628. Memria de dados EEPROM de 64 bytes. memria de dados RAM com 224 bytes dividida em 4 bancos. Registro de propsito especfico (SFR) com 32 posies. Registro de propsito geral (GPR) com 224 posies. ALU de 8 bits e registro de trabalho W que normalmente recebe um operando que pode ser qualquer registro, memria, porta de entrada/sada ou o prprio cdigo de instruo. Pilha (Stack) de 8 nveis. Contador de programa (PC) de 13 bits (o que permite enderear at 8 KB de memria).

www.mecatronicadegaragem.blogspot.com

__

Renato A. Silva

Recursos conectados al bus de dados: PortA de 8 bits PortB de 8 bits Temporizadores / contadores TMR0, TMR1, TMR2 Comparadores Captura , Comparao e PWM Voltagem de referencia USART para comunicao serial Memria EEPROM

3.9 Organizao da MemriaO PIC contm um registrador denominado PC (Program Counter) que implementado com 13 bits, capaz de enderear at 8K de programa, mas que somente 1k implementado fisicamente no 16F627 (0000h 03FF) e 2K so implementados no 16F628 (0000H 07FFh). Este registrador ligado diretamente a Pilha (stack) armazena o endereo contm o endereo da instruo que vai ser executada. Ao incrementar ou alterar o contedo do PC, o microcontrolador tem um mapa seguro de onde esta e para onde ir.

3.10 A Pilha ou StackA pilha uma memria independente da memria de programa e da memria de dados, com estrutura LIFO (Last In First Out) ltimo dado a entrar

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

_5

ser o primeiro dado a sair com oito nveis de profundidade ou armazenamento com 13 bits cada um, sua funo guardar o valor do PC quando ocorre um salto do programa principal para o endereo de um subprograma a ser executado, fazendo assim com que o microcontrolador tenha total controle as chamadas de rotinas. Seu funcionamento como um buffer circular onde o endereo da ltima chamada o primeiro a retornar em uma chamada RETUR, RETLW ou RETIE, como no h nenhuma flag indicando o transbordamento da pilha se houver uma chamada de rotina aps outra coma mais de oito nveis a primeira ser sobrescrita, impossibilitando o retorno correto do programa causando um erro fantstico.

3.11 Organizao da memria de dadosA memria de dados divide-se em quatro bancos, contendo os registros de propsitos gerais (GPR), registros de funes especiais (FSR). A seleo do banco de memria feita atravs dos bits RP1 (STATUS ) e RP0 (STATUS ) conforme a seguinte tabela:RP1, RP0 00 01 10 11 Banco 0 1 2 3 Endereo 000h - 07Fh 080h - 0FFh 100h - 17Fh 180h - 1FFh

Em cada banco temos 7F posies de memrias (128 bytes) o que nos d 512 bytes, no entanto existe uma lacuna nos bancos onde temos endereos no implementados, assim para memria RAM, ou melhor, para os registro de propsito geral (GPR) temos 224 bytes. Os Registros especiais (FSR) ocupam os primeiros 32 bytes de cada banco e so utilizados pela CPU e pelos mdulos perifricos para controlar o funcionamento do dispositivo, onde alguns destes registros especiais esto duplicados nos 4 bancos

www.mecatronicadegaragem.blogspot.com

_6

Renato A. Silva

para reduzir o cdigo e tornar o acesso mais rpido. Os registros que afetam a CPU so: STATUS, OPTION, INTCON, PIE1, PIR e PCON. Veremos agora descrio destes e outros registros.

3.12 Registradores de Funes EspeciaisRegistro de STATUS endereos 03h, 83h,103h e 183h, contm o estado da Unidade Lgica Aritmtica ALU (C, DC, Z), estado de RESET (TO, PD) e os bits para seleo do banco de memria (IRP, RP1, RP0).bit 7 IRP bit IRP RP1,RP0 bit 6 RP1 bit 5 RP0 descrio Registrador de seleo de banco 1 = banco 2 e 3 (100h-1FFh) 0 = banco 0 e 1 (00h - FFh) Registrador de seleo de banco RAM bit 4 #TO bit 3 #PD bit 2 Z bit 1 DC bit 0 C

RP1,RP0 00 01 10 11TO PD Z DC

banco banco 0 banco 1 banco 2 banco 3

localizao 00h 7Fh 80h FFh 100h 17Fh 180h 1FFFh

TimeOut - bit somente leitura 1 = depois de power-up, instruo CLRWDT ou SLEEP 0 = ocorreu estouro de WDT Power Down - bit somente para leitura 1 = depois de power-up ou CLRWDT 0 = execuo da instruo SLEEP Zero 1 = resultado da operao aritmtica ou lgica zero 0 = resultado da operao aritmtica ou lgica no zero Digit Carry - Transporte de dgito 1 = um valor menor subtrado de um valor maior 0 = um valor maior subtrado de um menor

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

_7

bit IRP C

descrio Registrador de seleo de banco 1 = banco 2 e 3 (100h-1FFh) 0 = banco 0 e 1 (00h - FFh) Carry - Transporte 1 = um valor mais pequeno subtrado de um valor maior 0 = um valor maior subtrado de um menor

Registro OPTION ou OPTION_REG endereo 81h e 181h um registro de leitura e escrita que contm vrios bits de controle para configurar o funcionamento do prescaler ao timer0 e ao WDT, interrupo externa ao timer0 e os resistores de pullup do PORTB.bit 7 RBPU bit RBPU INTDEG TOCS TOSE PS2, PS1, PS0 bit 6 INTED bit 5 TOCS bit 4 TOSE bit 3 PSA bit 2 PS2 bit 1 PS1 bit 0 PS0

descrio habilitao dos resistores pull-up no portB 1 = resistncias de pull-up desligadas 0 = resistncias de pull-up ligadas Interrupo no pino RB0/INT 1 = interrupo ligada, sensvel descida do pulso 0 = interrupo desligada, sensvel subida do pulso seleo da fonte de clock para o timer 0 TMR0 1 = tmr0 atua como contador por transio de RA4/TOCKL fonte de pulso para o timer 0 TMR0 1 = incrementa pulso alto para baixo (descendente) 0 = incrementa pulso de baixo para alto (ascendente) divisor de freqncia (prescaler) BIT 2, 1, 0 000 001 010 011 100 101 110 111 TMR0 1:2 1:4 1:8 1:16 1:32 1:64 1:128 1:256 WDT 1:1 1:2 1:4 1:8 1:16 1:32 1:64 1:128

www.mecatronicadegaragem.blogspot.com

_8

Renato A. Silva

Registro INTCON - endereo 0Bh, 8Bh, l0Bh e 18Bh um registro de leitura e escrita que contm os bits de habilitao das vrias interrupes (exceto do comparador), inclusive por mudana de estado no PORTB.bit 7 GIE bit GIE PEIE TOIE INTE RBIE TOIF INTF RBIF bit 6 PEIE bit 5 TOIE bit 4 INTE bit 3 RBIE bit 2 TOIF bit 1 INTF bit 0 RBIF

descrio interrupo global 1 = habilita todas as interrupes 0 = desabilita todas as interrupes interrupes de perifricos 1 = habilita todas as interrupes de perifricos 0 = desabilita todas as interrupes de perifricos interrupo por transbordamento (over_ow) de timer0 TMR0 1 = habilita interrupo para TMR0 0 = desabilita interrupo para TMR0 interrupo externa 1 = habilita interrupo externa de RB0/INT 0 = desabilita interrupo externa de RB0/INT interrupo por mudana de estado no portB 1 = habilita interrupo para o portB 0 = desabilita interrupo para o portB _ag de over_ow para o TMR0 1 = ocorreu estou em TMR0 - deve ser zerado via soft 0 = no ocorreu estouro ocorrncia de interrupo externa em RB0/INT 1 = ocorreu interrupo 0 = no ocorreu interrupo ocorrncia de estado no portB 1 = ocorreu mudana de estado em RB7:RB4 0 = no ocorreu mudana de estado em RB7:RB4

Registro PIE1 - endereo 8Ch. Este registro contm os bits individuais de interrupes dos perifricos, sendo que para seu funcionamento o bit PEIE (INTCON ) deve estar habilitado.bit 7 EEIE bit 6 CMIE bit 5 RCIE bit 4 TXIE bit 3 bit 2 CCP1IE bit 1 TMR2IE bit 0 TMR1IE

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

_9

bit EEIE CMIE RCIE TXIE CCP1IE TMR2IE TMR1IE

descrio _ag de interrupo de escrita na EEPROM completada 1 = habilita interrupo de trmino de escrita 0 = desabilita interrupo de trmino de escrita interrupo do comparador habilitada 1 = habilita interrupo do comparador 0 = desabilita interrupo do comparador interrupo de recebimento de caracter no USART 1 = habilita interrupo de recebimento do USART 0 = desabilita interrupo de recebimento do USART interrupo de envio de caractere no buffer do USART 1 = habilita a interrupo de transmisso do USART 0 = desabilita a interrupo de transmisso do USART interrupo do CCP1 para captura, comparao e PWM 1 = interrupo habilitada 0 = interrupo desabilitada interrupo 1 = habilita interrupo 0 = desabilita interrupo _ag de over_ow 1 = habilita interrupo para estouro de TMR1 0 = desabilita interrupo de estouro de TMR1

Registro PIRI endereo 0Ch Este registro contm as flags individuais que indicam as interrupes provocadas por perifricos.bit 7 EEIF bit EEIF CMIF RCIF TXIF bit 6 CMIF bit 5 RCIF bit 4 TXIF bit 3 bit 2 CCP1IF bit 1 TMR2IF bit 0 TMR1IF

descrio _ag de interrupo de escrita na EEPROM 1 = operao de escrita na eeprom terminou. limpar via soft 0 = operao de escrita na eeprom no terminou _ag de interrupo do comparador 1 = houve mudana na sada do comparador 0 = no houve mudana na sada do comparador _ag de interrupo de recebimento no USART 1 = buffer de recebimento est cheio 0 = buffer de recebimento est vazio _ag de interrupo de transmisso do USART 1 = buffer de transmisso est vazio 0 = buffer de transmisso est cheio

www.mecatronicadegaragem.blogspot.com

_0

Renato A. Silva

bit CCPIF

descrio _ag de captura, comparao e PWM (no aplicado)

modo captura 1 = ocorreu captura 0 = no ocorreu capturaTMR2IF TMR1IF

modo comparao 1 = ocorreu comparao 0 = no ocorreu comp.

_ag de interrupo do TMR2 1 = houve ocorrncia entre TMR2 e PR2 0 = no houve ocorrncia _ag de interrupo do TMR1 1 = ocorreu estou em TMR1 - deve ser limpo via soft 0 = no ocorreu estouro no TMR1

Registro PCON - endereo 0Ch Este registro contm as flags que permitem diferenciar entre um Power-on Reset (POP), um Brown-out Reset (BOD), um Reset por Watchdog (WDT) e um Reset externo por MCLR.bit 7 bit OSCF POR BOD bit 6 bit 5 descrio freqncia do oscilador INTRC/ER 1 = 4 Mhz. 0 = 32 Khz. status Power-on-reset 1 = no ocorreu 0 = ocorreu (aps ocorrncia deve ser setado) status do Brown-out 1 = no ocorreu reset brown-out 0 = ocorreu reset (aps ocorrncia deve ser setado) bit 4 bit 3 OSCF bit 2 bit 1 POR bit 0 BOD

Os demais registros especiais relacionados com o funcionamento dos perifricos sero utilizados junto dos perifricos.

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

__

3.13 Palavra de configurao e identificao: um registrador com 14 bits que se escreve durante o processo de gravao do dispositivo que deve estar de acordo com o esquema / sistema em que ser utilizado, pois determina a forma do oscilador, se usar reset entre outros. Ocupa a posio reservada de memria 2007h.13 CP1 6 BODEN 12 CP0 5 MCLRE 11 CP1 4 FOSC2 10 CP0 3 PWRTE 2 WDTE 9 8 CPD 1 FOSC1 7 LVP 0 FOSC0

bitCP1, CP0

descriobit 13,12,11,10 11 10 01 00 para 2K de mem. desativado 0400h - 07FFh 0200h - 07FFh 0000h - 07FFh para 1k de mem. desativado desativado 0200h - 03FFh 0000h - 03FFh

CPD LVP BODEN MCLRE PWRTEN WDTE

bit de proteo de cdigo 1 = desabilitada proteo da memria de cdigo 0 = proteo habilitada habilitao do modo de programao em baixa voltagem 1 = habilitado em Rb.4 0 = desabilitado e Rb.4 usado como entrada/sada habilitao do reset por deteco Brown-out 1 = reset habilitado 0 = reset desabilitado seleo do Master Clear Reset 1 = reset habilitado em Ra.4 0 = reset desabilitado e Ra.4 como entrada termpo de estabilizao - POWER-UP 1 = desabilitado 0 = habilitado habilitao do WDT - WatchDog Timer 1 = habilitado 0 = desabilitado

www.mecatronicadegaragem.blogspot.com

__

Renato A. Silva

bitFOSC2 FOSC1 FOSC0

descriobits 4, 1, 0 000 001 010 011 100 101 110 111 descrio LP cristal com baixa freqncia XT cristal/ressonador 4 Mhz EC clock em Ra.7 e I/O em Ra.6 INTRC resistor/capacitor interno com I/O em Ra.7 e Ra.6 INTRC resistor/capacitor com I/O em Ra.7 ER resistor externo em Ra.7 - I/O em Ra.6 ER resistor externo em Ra.7 clkout em Ra.6

3.14 Portas de Entrada / SadaAs linhas de comunicao de entrada ou sada de dados (io) no microcontrolador so chamadas de portas, conforme vemos na representao esquemtica do microcontrolador, encontramos 16 portas de entrada ou sada (I/O). Estas portas esto divididas em dois grupos, o grupo A com 8 portas e o grupo B com 8 portas. O grupo A chamado de PORTA e o grupo B de PORTB. Cada porta para ser identificada chamada de R seguido do grupo (A, B) e do nmero da porta, sempre iniciando em zero. Ex. RA0, RA1, RA2, RB0, RB1, RB2. Ao contrario de alguns modelos, o 16F62x pode utilizar oscilador interno, ou externo. Quando usar o oscilador interno, sobraro duas portas para utilizar como entrada ou sada. Porta Bidirecional A (PORTA) Consta de 8 linhas de entrada/sada multifuncionais com as seguintes funes:Pino Ra0 Funo Ra0 AN0 Tipo ST NA Sada CMOS Descrio Entrada / sada bidirecional Entrada do comparador analgico

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

__

Pino Ra1 Ra2 Ra3 Ra4 Ra5 Ra6 Ra7

Funo Ra1 AN1 Ra2 AN2 Vref Ra3 AN3 CMP1 Ra4 TOCKL CMP2 Ra5 MCLR VPP

Tipo ST NA ST NA ST NA ST ST ST ST -

Sada CMOS CMOS AN CMOS CMOS OD OD -

Descrio Entrada / sada bidirecional Entrada do comparador analgico Entrada / sada bidirecional Entrada do comparador analgico Sada de voltagem de referncia Entrada / sada bidirecional Entrada do comparador analgico Sada do comparador 1 Entrada / sada bidirecional Entrada de sinal para o timer0 Sada do comparador 2 Entrada / sada bidirecional Master Clear Reset Voltagem de programao Entrada / sada bidirecional Entrada do oscilador a cristal Sada de clock Entrada / sada bidirecional Entrada do oscilador a cristal Entrada de clock externo

Ra6 ST CMOS OSC2 XTAL CLKOUT CMOS Ra7 OSC1 CLKIN ST CMOS ST XTAL -

ST = Schmitt trigger, NA = Analgico, OD = Coletor Aberto

Porta Bidirecional (PORTB) Consta de 8 linhas de entrada/sada multifuncionais com as seguintes funes:Pino Funo Rb0 Rb0 INT Rb1 Rb2 Rb3 Rb4 Rb5 Rb6 Rb1 RX DT Rb2 TX CK Rb3 CCP1 Rb4 PGM Rb5 Rb6 T10S0 T1CKL PGC Tipo TTL ST TTL ST ST TTL ST TTL ST TTL ST TTL TTL ST ST Sada CMOS CMOS CMOS Descrio Entrada / sada bidirecional Interrupo externa Entrada / sada bidirecional Recebimento comunicao serial USART Entrada / sada de dados sincromono

CMOS Entrada / sada bidirecional CMOS Transmisso comunicao serial USART CMOS Entrada / sada de clock sincromono CMOS CMOS CMOS CMOS CMOS CMOS XTAL Entrada / sada bidirecional Captura / comparao / PWM Entrada / sada bidirecional Programao em baixa voltagem Entrada / sada bidirecional Entrada / sada bidirecional Sada do oscilador do timer1 Entrada do oscilador do timer1 Clock para programao

www.mecatronicadegaragem.blogspot.com

__

Renato A. Silva

Pino Rb7

Funo Rb7 T10SI PGD

Tipo

Sada

Descrio Entrada / sada bidirecional Entrada do oscilador do timer1 de Sleep Entrada / sada de dados para programao

TTL CMOS XTAL ST CMOS

ST = Schmitt trigger, NA = Analgico, OD = Coletor Aberto

3.15 OsciladorTodo microcontrolador ou microprocessador para que funcione, necessita de um sinal de relgio (clock) para faz-lo oscilar j que todas as operaes internas ocorrem em perfeito sincronismo. No PIC o clock tem quatro fases, chamadas de Q1,Q2,Q3 e Q4. Estas quatro pulsaes perfazem um ciclo mquina (instruo), durante o qual uma instruo executada. Internamente o contador de programa (PC) incrementado a cada ciclo Q1 onde a instruo requisitada da memria de programa e armada na instruo registrada em Q4. A instruo decodificada e executada no perodo Q1 a Q4. No 16F62x temos 8 possibilidades para o clock, selecionado atravs da palavra de configurao como vimos no item 4.13.

3.16 PipelineO processo pipelining uma tcnica de segmentao que permite ao microcontrolador realizar simultaneamente a busca de cdigo de uma instruo da memria de programa, num ciclo de instruo, enquanto que a sua decodificao e execuo, so feitos

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

_5

no ciclo de instruo seguinte. Consideramos que cada instruo armada e executada em um ciclo de mquina, contudo se uma instruo provocar uma mudana no contedo do contador de programa (PC), caso ele no aponte para o endereo seguinte na memria de programa, mas sim para outro (como acontece em saltos ou chamadas de sub-rotinas), ento dever considerar-se que a execuo desta instruo demora dois ciclos de mquina, porque a instruo dever ser processada de novo mas desta vez a partir do endereo correto. veja:

T1 feita a busca da instruo MOVLW 0x05 T2 executada a instruo MOVLW 0x05 e feita a busca da instruo MOVWF PORTB T3 executada a instruo MOVWF PORTB e feita busca da instruo CALL LED T4 executado o salto (CALL) e feita a busca da instruo seguinte BSF PORTA,0 e como BSF PORTA,0 no a primeira instruo aps entrar na sub-rotina LED, faz-se necessrio uma nova leitura do salto, gastando um ciclo. T5 busca da instruo da subrotina T6 execuo da primeira instruo da sub-rotina e busca da prxima instruo.

www.mecatronicadegaragem.blogspot.com

_6

Renato A. Silva

3.16.1 Oscilador com cristal modo XT, LP ou HSO cristal ou ressonador cermico conectado em, paralelo nos pinos RA6(OSC1) e RA7(OSC2) com dois capacitores para massa, conforme a tabela seleo do capacitor para uso com cristal.Modo LP XT HS Freqncia 32 Khz. 200 Khz. 100 Khz. 2 Mhz. 4 Mhz. 8 Mhz. 10 Mhz. 20 Mhz. OSC 1 - C1 68 - 100 pF. 15 - 30 pF. 68 - 150 pF. 15 - 30 pF 15 - 30 pF. 15 - 30 pF 15 - 30 pF. 15 - 30 pF. OSC 2 - C2 68 - 100 pF. 15 - 30 pF. 150 - 200 pF 15 - 30 pF 15 - 30 pF. 15 - 30 pF 15 - 30 pF. 15 - 30 pF.

seleo do capacitor para uso com ressonador cermicoModo XT HS Freqncia 455 Khz. 2 Mhz. 4 Mhz. 8 Mhz. 20 Mhz. OSC 1 - C1 22 - 100 pF. 15 - 68 pF 15 - 68 pF. 10 - 68 pF 10 - 22 pF OSC 2 - C2 22 - 100 pF 15 - 68 pF 15 - 68 pF. 10 - 68 pF 10 - 22 pF

Modo de ligar o cristal

3.16.2 oscilador com cristal paraleloPreparado com portas TTL, este circuito simples, apresenta boa estabilidade e performance, fazendo uso da fundamental do cristal. Necessita de um resistor de 4,7k para uma realimentao

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

_7

negativa para estabilidade do circuito e os potencimetros de 10k faz ajuste (bias) do 74AS04 em uma regio linear.

3.16.3 Oscilador com cristal em srieTambm desenhado para usar a fundamental do cristal, necessita de um resistor de 330k para prover realimentao negativa

3.16.4 Clock externoQuando em uma determinada aplicao, j existe um sinal de clock (mnimo de 200Khz.), pode ser usado para o microcontrolador atravs do pino OSC1, conforme a imagem abaixo:

3.16.5 Oscilador com resistor externoSem dvida neste modo, temos uma economia no custo do projeto, com apenas um resistor para massa podemos controlar a freqncia do microcontrolador. O resistor drena a corrente bias DC de controle do oscilador e em adio a ao valor da resistncia a freqncia do oscilador ir variar de unidade em unidade, em funo da voltagem DC e da temperatura. O parmetro de controle corrente DC e no capacitncia.

www.mecatronicadegaragem.blogspot.com

_8

Renato A. Silva

Resistor 0 1k. 10k. 20k. 47k. 100k. 220k. 470k. 1M.

Freqncia 10.4 Mhz. 10 Mhz. 7.4 Mhz. 5.3 Mhz 3 Mhz. 1.6 Mhz. 800 Khz. 300 Khz. 200 Khz.

3.16.6 Oscilador interno 4 Mhz.Este modo prov 4Mhz fixo @5,0 volts e 25C podendo sofrer variaes no mnimo de 3,65 Mhz E de no mximo 4,28 Mhz conforme alimentao e temperatura.

3.16.7 Oscillator Start-Up timer (OST)O OST faz uma pausa de 1024 ciclos de clock atravs da entrada do OSC1, para que haja uma estabilizao de tenso e perifricos. Ocorre somente na utilizao de oscilador no modo XT, LP e HS.

3.17 ResetO vetor RESET, localizao 0x00h, ativo em nvel baixo, leva o microcontrolador a reiniciar seus registradores para valores iniciais pr-definidos na fabricao e um dos mais importantes efeitos de um reset, zerar o contador de programa (PC), o que faz com que o programa comece a ser executado a partir da pri-

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

_9

meira instruo do software programado. Em suma Este reincio de atividade pode ocorrer de causa manual, por deficincia na alimentao ou mesmo erro no software. Para o microcontrolador funcionar corretamente deve ter seu pino MCLR em nvel alto. Caso ocorra uma variao para zero, ocorre a condio de RESET. Este evento pode ocorrer de seis formas:1 2 3 4 5 6 Nvel baixo em MCLR durante a operao normal. Power-on reset (POR). Brown-out detect (BOD). Reset durante o repouso (SLEEP). Estouro de WDT durante um repouso (SLEEP). Estouro de WDT em operao normal

3.17.1- Reset NormalA condio de reset normal ocorre colocamos o pino MCLR em nvel baixo. Normalmente isto feito atravs de uma chave Push-Bottom, como mostrado no esquema ao lado.

3.17.2- Reset Power-on (POR)Este reset segura o chip em condio de reset tempo at que VDD esteje em nvel suficiente para operao. selecionado pelo bit 1 do registro PCOM endereo 0Ch.

www.mecatronicadegaragem.blogspot.com

50

Renato A. Silva

3.17.3- Power-up Timer (PWRT)Este prov um tempo fixo nominal de 72ms (28ms a 132ms) para uso em power-on reset e brown-out.

3.17.4- Brown-out detect (BOD)Se VDD cair abaixo de VBOD por mais tempo do que 100us (TBOD), ento ocorrer a situao do brown-out resetando o microcontrolador. Se VDD cair abaixo de VBOD, por um perodo inferior a TBOD, ento a condio no ter garantias de ocorrer. Em qualquer reset (Power-on, brown-out, WDT, etc..) o chip continuar em reset at que VDD suba acima de VBOD, invocando o power-on timer dando um atraso adcional de 72ms. Pode ser habilitado ou desabilitado pelo bit BODEN da palavra de configurao no endereo 2007h e sua ocorrncia pode ser monitorada pelo bit BOD do registro PCON endereo 8Eh

3.17.5- Reset por transbordamento de WDTQuando ocorre transbordamento do WDT, normalmente em 18ms, este, leva o microcontrolador a condio de reset.

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

5_

3.18- WatchDog Timer (WDT)A traduo deste termo no faz sentido, mas pode ser entendido como co de guarda, um contador de 8 bits, preciso, que atua como temporizador e tem o objetivo de vigiar o microcontrolador impedindo que este entre em alguma rotina ou alguma instabilidade, que o faria trabalhar em um loop infinito ou parasse de responder. O WDT tem um controle de tempo independente do oscilador principal com base em uma rede RC, causando normalmente o estouro, normalmente em de 18 ms. (podendo ser aplicado postscaler), causando um reset no microcontrolador. Para ativ-lo devemos colocar em 1 o bit WDTE da palavra de configurao, e estando ativo, caso seu software deixe de responder por algum motivo, o WDT ir estourar causando um reset no microcontrolador carregando novamente o software. Devido a esta caracterstica talvez a melhor definio para este sinal co de guarda. Havendo necessidade pode-se aplicar o divisor de freqncia (postscaler) no WDT o qual poderia alcanar tempos de at 2 segundos. Para que o seu software no seje resetado a cada estouro de WDT, deve-se limpa-lo em perodos de tempo inferior ao calculado para o estouro, utilizando-se a instruo CLRWDT ou SLEEP, sendo que esta ltima colocaria o microcontrolador em repouso. O projetista / programador deve colocar a instruo CLRWDT em pontos estratgicos de seu software de acordo com o fluxo lgico de maneira que o software vigie o WDT evitando o seu estouro. Por exemplo, se no software h uma rotina ou temporizao que gaste um determinado tempo vrias vezes maiores que

www.mecatronicadegaragem.blogspot.com

5_

Renato A. Silva

o WDT, nesta rotina deve haver uma instruo CLRWDT. A instruo CLRWDT simplesmente zera o contedo do registrador WDT, reiniciando a contagem. J a instruo SLEEP alm de zerar o WDT, tambm detm todo o sistema entrando em repouso com baixo consumo de energia.

3.19- Set de instruesChamamos de Set de instrues o conjunto de instrues que comandam o microcontrolador. Estes comandos j vm gravados de fbrica e ficam na memria ROM. A CPU RISC contm um nmero reduzido de instrues isto o torna mais fcil de aprender, pois temos menos instrues. No entanto temos que reutiliza-las mais vezes para realizar operaes diferentes, Ao contrrio outras CPU como o x86 base de todos os computadores INTEL tem um set de instrues gigantesco. Desta forma temos instrues separadas para cada operao, aumentando tambm o grau de aprendizado de seu assembler. No PIC o set de instrues divide-se em trs grupos: - Operaes orientadas para Byte - Operaes orientadas para bit - Operaes orientadas para literais. Conjunto de instrues para operaes orientadas por byteMnemnico Ciclos Afeta Status C,DC,Z Z Z Z Z Z Descrio soma W e f, resultado em W AND W com F CLear File f limpa o valor da varivel CLeaR Work limpa o valor de W COMplementa F DECrementa F DECrementa F e Salta se o result. for Zero

ADDWF f,d 1 ANDWF f,d 1 CLRF f CLRW COMF f,d DECF f,d 1 1 1 1

DECFSZ f,d 1 ou 2

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

5_

Mnemnico INCF f,d INCFSZ f,d IORWF f,d MOVF f,d MOVWF f NOP RLF RRF f,d f,d

Ciclos 1 1 ou 2 1 1 1 1 1 1 1 1

Afeta Status Z Z Z Z Z C,DC,Z Z C,DC,Z Z TO,PD Z TO, PD C,DC,Z Z

Descrio INCrementa F INCrementa F e Salta se o result. For Zero Inclusive OR W com F MOVe para F MOVe W para F No faa nada Rotaciona F a esquerda (Left) Rotaciona F a direita (Right) SUBtrai W de F Troca bits de posio Exclusive OR W com F Bit Clear File limpa (0) um bit do byte Bit Set File seta (1) um bit do byte Bit Testa File Salta se for zero - Clear Bit Testa File Salta se for um - Setado Soma (ADD) Literal com W AND F com W Chama uma sub-rotina Limpa WatchDog Timer Go To Adress vai para um endereo Inclusive OR Literal com W MOVa Literal para W Retorne de Interrupo RETorne com Literal em W Retorne de uma sub-rotina Vai para o repouso SUBtraia Literal de W EXclusive OR Literal com W

SUBWF f,d SWAPF f,d

XORWF f,d 1 BCF BSF f,d f,d 1 1 1 ou 2 1 ou 2 1 1 2 1 k k 2 1 2 2 2 1 1 1

Conjunto de instrues para operaes orientadas para bit

BTFSC f,d BTFSS f,d ADDLW k

Operaes orientadas para literais e controle de operaes.ANDLW k CALL k CLRWDT GOTO IORLW MOVLW RETFIE RETLW k RETURN SLEEP SUBLW XORLW k k

k 1

www.mecatronicadegaragem.blogspot.com

5_

Renato A. Silva

4 Construindo o Primeiro projeto:

4.1 Pisca LedNosso primeiro projeto ser fazer um led piscar (oscilar) a uma certa freqncia. Neste primeiro exemplo, embora simples, serve perfeitamente para mostrar o uso das intrues vistas at aqui. Para tal usaremos o seguinte esquema ao lado: Neste caso a forma de controle do tempo em que o led permanece aceso ou apagado atravs do artifcio de fazer com que o microcontrolador perca tempo, este artifcio chama-se Delay Time. A rotina abaixo faz um loop, determinado pelo valor no registrador w (work), assim o numero de ciclos de mquina deve ser colocado em W antes de chamar a rotina. Para um perodo de tempo maior devemos utilizar varivel (registrador) declarada no incio do software, com valor antes de entrar na rotina de tempo. Veja:milisegundos movlw miliseg delay movlw 0xF8 call + 2 = nop

; total ; 248 microsegundos ; 994 microsseg.

1000 ( ;

ciclos 248 995 x 4 )

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

55

decfsz miliseg, goto ento continua retlw 0 rotina principal

F delay ;

;

subtrai 1, ; ainda desta

salta no

se volta

for zero, a

0

sai

rotina e

; + movlw + + loops 1 + + retlw 995 + 2 = 1000

call

; 2 microsegundos microsegundos: addlw ; 1 btfss w = goto ento repete retlw

0xFF subtrai 1

de

w

ou

w

= ;

w salta zero

se

STATUS, Z 0 microsegundos 0 ;

;

ainda

no

retorna a

rotina principal

Este processo se repete quantas vezes for o valor da varivel miliseg colocada antes de chamar o procedimento milisegundos. Assim para um delay de 10 mSeg fazemos:Movlw Call 0x10 milisegundos

Trabalhando com um cristal de 4Mhz temos 1 microsegundos por ciclo, ento no caso esta rotina no mximo, nos daria 255 milisegundos, o que seria suficiente para ver um flash rpido do led, porm, podemo ampliar esta faixa adcionando ajustando a rotina milisegundos para 250 e cham-la 4 vezes, assim teremos um segundo, mais precisamente 1.000035 segundos.umsegundo ; um Neste seg. movlw ; loop caso quantas vezes ( 4 for x ; 250 o ) valor = de nsegundos. 1.000035 esta rotina ir executar

call milisegundos decfsz nsegundos, zero ? goto

0xFA carrega W com milisegundos F umsegundo

250 ; ; executa loop por 250 = no,

nmero de

segundos ;

www.mecatronicadegaragem.blogspot.com

ento retlw

repete a 0

rotina ; sim, ento sai

Veja o cdigo fonte de nosso exemplo.;--------------------------------------------------;Projeto........: Pisca_Led ;Cliente........: Programando Microcontroladores ;Desenvolvimento: Renato ;Verso:........: 1.00 ;Modelo.........: 16F627 16F628 ;Descrio......: Faz um led lig. na piscar a 1 Hz.

PIC

porta

RB0

www.mecatronicadegaragem.blogspot.com

56;--------------------------------------------------PROCESSOR #include __CONFIG & _XT_OSC 16F627 _CP_OFF & _WDT_OFF

Renato A. Silva

&

_PWRTE_ON

ORG 0x0000 ;--------------------------------------------------;variveis de memrias miliseg equ 0x20 nsegundos equ 0x21 ;--------------------------------------------------inicio: nop ; ciclo movlw sem fazer nada 0x00 o registrador STATUS de W em STATUS, da RAM b00000000 fca um

; zera W movwf coloca o valor Status bsf RP0 ; o banco 1 movlw ; coloca 0 registrador W movwf TRISA ; determina o modo do PORTA movlw b00000000 ; coloca 0000 W movwf TRISB ; Bit 0 de PORTB como sada bcf STATUS, RP0 ; banco 0 crlf PORTB ; limpa o buffer do PORTB clrf PORTA ; limpa o buffer do PORTA loop: bsf PORTB, 0 ; led acendeu na porta RB0 movlw 0x04 ; carrega W com 4 movwf nsegundos ; valor para varivel call umsegundo chama rotina de um segundo bcf PORTB, 0 ; led apagou na porta RB0 movlw 0x04 ; carrega W com 4 movwf nsegundos ; valor para varivel call umsegundo chama rotina de um segundo goto loop ; repete o processo infnitamente ;--------------------------------------------------; esta rotina ir executar um loop ; o valor de nsegundos. ( 4

; Vai no para

0001

em

retorna ao

carrega o ;

carrega o ;

quantas vezes x 250

for )

www.mecatronicadegaragem.blogspot.com

= movlw call 250

umsegundo 0xFA ;

1.000035 carrega W milisegundos

seg. com 250 ; ; executa loop nmero de ; ; sim, ento retorna com 0 por

milisegundos decfsz nsegundos, F segundos = zero ? goto umsegundo no, ento repete a rotina retlw 0 em w

;--------------------------------------------------milisegundos movwf miliSeg Delay ; total 1000 movlw 0xF8 ; 248 call microsegundos ;( 248 2 = 994 microssegundos nop ; 995 decfsz miliSeg, F ; subtrai 1 0 goto Delay ; ainda no zero, ento retlw 0 ; sai desta rotina principal

ciclos x 4 ) +

e

salta

se

for

continua rotina e volta a

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

57

;--------------------------------------------------microsegundos: addlw 0xFF ; subtrai 1 de w ou w 1 btfss STATUS, Z w = 0 goto microsegundos ; ainda no ento repete retlw 0 ; retorna a rotina ;--------------------------------------------------END; ;---------------------------------------------------

= ;

w salta zero

se

principal

Este exemplo exemplifica o modo de controle de portas e funes internas do PIC. Ao invs do led, poderamos ter um mecanismo hidrulico fazendo uma determinada tarefa em perodos de tempo iguais ou com variaes. Por exemplo mquina que coloca a tampinha em refrigerantes, cerveja e muitos outros produtos. Basicamente a mesma coisa do led onde voc aciona um dispositivo ou vrios, aguarda um determinado tempo ou aguarda sinal de outros sensores e depois de acordo com o seu software aciona a(s) sada(s). Poderia tambm ser uma esteira, onde a sada do PIC acionaria um rele, acionando o motor da esteira em perodos de tempos pr-determinados, enfim praticamente no h limites para o nmero de coisas que podem ser feitas, baseado ou derivado deste pequeno exemplo. Mas para voc que pensa que acabou, esta redondamente enganado, agora temos que converter este texto (programa) em nmeros hexadecimais e coloca-lo dentro da memria do PIC. Para tal usaremos o MPLAB.

4.1 MPLAB verso 7.0MPLAB uma ferramenta da MicroChip para edio do software, simulao e at gravao do microcontrolador. Este tem a funo de auxiliar no desenvolvimento de projetos, facilitando assim a vida do projetista. Esta ferramenta distribuda gratuitamente pela MicroChip, podendo ser baixado da internet diretamente do site do fabricante no endereo www.microchip.

www.mecatronicadegaragem.blogspot.com

com ou em nosso site.

www.mecatronicadegaragem.blogspot.com

58

Renato A. Silva

O MPLAB integra em uma nica ferramenta, um editor de programa fonte, compilador, simulador e quando conectado s ferramentas da Microchip tambm integra o gravador do PIC, o emulador etc. O programa fonte digitado, ser convertido pelo MPLAB em cdigos de mquina (veremos logo mais) que ser gravado e executado pelo microcontrolador. Normalmente todo software que converte uma seqncia de comandos em linguagem de mquina chamado de compilador. O compilador composto por diversos nveis desde analisador lxico at linkeditor. O ponto alto do MPLAB o simulador, que permite que voc rode (execute) seu programa sem a necessidade de grava-lo no microcontrolador, permitindo assim fazer diversas correes enquanto se desenvolve o software. No desanime se o primeiro software que voc fizer apresentar algum problema, lembre-se que nada acontece do dia para a noite, mas com dedicao e perseverana, far com que voc, caro leitor, supere as dificuldades que aparecerem. O conceito do MPLAB que voc leitor trabalhe com pastas de projetos, ao fazer um novo projeto, primeiro crie uma pasta em seu computador, depois inicie o MPLAB iniciando um novo projeto ou abrindo se o projeto j existir. Na pasta do projeto que o MPLAB mantm est armazenado todas as informaes do PIC utilizado, do clock utilizado da linguagem de programao, das posies das janelas, enfim o projeto de forma global. Para encerrar o projeto salve e feche apenas o projeto. Crie uma pasta em seu computador chamada c:\projeto\pisca_led, depois inicie o MPLAB, quando estiver no ambiente de

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

59

trabalho do MPLAB voc ver o seu menu principal. Selecione a opo Project Wizard; esta janela permite criar um projeto em quatro passos: Passo 1)- Seleo do tipo do microcontrolador utilizado, selecione PIC16F628A Passo 2)- Seleo da linguagem a ser utilizada. Posteriormente faremos alterao nesta janela, por ora deixe como est. Microchip MPASM Toolsuite Passo 3)- Especifique o nome do projeto pisca_led e a pasta de armazenamento dos arquivos C:\projeto\pisca_led. Passo 4)- Seleo de arquivo fonte .ASM, a seleo de arquivos fontes que faro parte do projeto. Se j tiver o arquivo com a extenso .ASM poder adicion-los aqui, caso contrrio apenas avance e conclua esta fase. Depois no menu voc encontrar a opo Configure e a sub opo Configuration Bits, nesta janela ajuste os bits de configurao do projeto. - Oscilador = XT - Watchdog Timer = off - Power Up Timer = enabled - Brown Out Detect = disabled - Master Clear Enabled = enabled - Low Voltage Program = off - Data EE Read Protect = off - Code Protect = off Feche a janela Configuration Bits e Clique no Menu File e depois em New. Abrir ento a janela Code Editor onde voc ira escrever o programa fonte. Esta janela um editor de texto comum como o bloco de Notas do Windows, com a diferena que ele diferencia os comandos, literais

www.mecatronicadegaragem.blogspot.com

60

Renato A. Silva

e os labels com cores diferentes, tudo isso para ajuda-lo na hora da escrita do software. Depois de editar o soft, salve-o na pasta do projeto e clique com o boto esquerdo do mouse sobre Source Files na tela da esquerda e depois em Add File. localize na pasta o arquio digitado e adicione-o no projeto. Ajuste a freqncia de clock em Debugger e depois em Setting, na janela que se abre, na aba Clock, digite a freqncia do clock que estamos trabalhando. 4 Mhz. Digite o programa fonte com calma para evitar erros de digitao. A maneira de digita livre, particularmente acho que as letras minsculas deixam o texto mais legvel a medida que sobra mais espao entre elas, outros preferem tudo em maiscula,. O importante que voc mantenha uma forma constante, pois o MPLAB faz diferenciao entre minscula e maiscula. Se o leitor nomear uma rotina como UmSegundo e em alguma parte fizer a chamada call Umsegundo ir gerar um erro, j que o caractere S diferente. O mesmo vale para os comandos como movwf Status, rp0, aqui ser gerado dois erros um referente ao status e outro referente a RP0 que devem ser em maisculo. Para os exemplos vou utilizar letras minsculas, o importante o leitor ter cincia das diferenas para evitar estes erros e depois gastar o tempo procurando-os. Aps digitar o programa fonte, e se tudo estiver correto ,clique no menu Project e depois em Make ou use a tecla de atalho F10 para compilar seu programa fonte e gerar o to esperado arquivo hexa. Durante o processo de compilao o leitor ver a janela de progresso, e aps o trmino da compilao ser exibida a janela OutPut com indicao visual dos passos tomados pelo compilador. Caso o arquivo de cdigo fonte contenha algum erro, na compilao este ser detectado e o processo falhara com trmino do compilador, sendo o resultado exibido na janela OutPut para leitura do usurio e correes no arquivo de cdigo fonte. Neste exemplo eu coloquei intencionalmente uma virgula

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

6_

em uma linha aleatria e mandei compilar o projeto. A sada da janela OutPut foi a seguinte: Erro do arquivo de cdigo fonte, na linha 28: , CALL milisegundos ; led aceso por um tempo Erro reportado pelo MPLAB: Error[108] C:\PROJETO\PISCA_LED\LED.ASM 28 : Illegal character (,) Halting build on first failure as requested. BUILD FAILED: Sun Ago 07 01:39:56 2006 Como se v o MPLAB reporta a linha onde encontrou o erro e ainda lhe diz porque est errado, neste caso, foi encontrado um caractere invlido na linha 28. Fazendo a correo (apagando a virgula) e compilando novamente o projeto obtivemos a mensagem: BUILD SUCCEEDED: Sun Ago 07 01:40:14 2006 Neste caso a compilao foi um sucesso. Algumas vezes o software to pequeno e simples que quase impossvel haver erro, podendo ser gravado em seguida, mas na grande maioria das vezes uma boa idia fazer simulao do funcionamento do software antes de gravar o dispositivo e colocar no PCB. Esta simulao feita no prprio MPLAB, da seguinte forma. No menu principal, clique no item Debugger depois no subitem Select Tool e finalmente em MPLAB Sim. No menu VIEW selecione as opes, File Register (Symbolic) e Special Function Register, procure organizar as janelas de modo que todas estejam visveis na tela. Para a simulao do programa conveniente, por uma questo de comodidade e velocidade, utilizar as teclas de atalho do MPLAB, as quais so aqui descritas com os seus respectivos usos, lembrando que estas opes esto dentro do menu Debugger.

www.mecatronicadegaragem.blogspot.com

6_

Renato A. Silva

F9 (RUN) faz com que o programa seje executado em velocidade normal. Voc nem ao menos o ver na tela. Normalmente esta opo usada em conjunto com a tecla F2 (Breakpoint). ANIMATE esta funo no possui tecla de atalho; faz com que o programa siga passo a passo com indicao na tela da linha que est sendo executada, e nas outras janelas abertas as indicaes das respectivas funes. F5 (HALT) faz uma parada na execuo do programa. F7 (STEP INTO) esta funo faz com o programa seje executado passo-a-passo como no ANIMATE com a diferena que a cada vez que pressionado esta tecla uma linha executada, causando sua parada na linha seguinte da prxima instruo. Observe que a linha onde est parado o cursor ainda no foi executada. F8 (STEP OVER) muito parecida com a funo STEP INTO, com a diferena~que executa a linha onde est o cursor, ou seja, a linha onde est parado o cursor j foi executada. A cada vez que esta tecla pressionada a prxima linha executada. STEP OUT executa uma sub rotina, sendo muito til no caso de rotinas demoradas como o caso do nosso exemplo. A sub rotina milisegundos chamada 4 vezes e a cada vez chama a sub rotina microeec que executa 255 subtraes. J pensou Ter que ficar teclando F7 ou F8 at sair desta sub rotina ! F6 (RESET/PROCESSOR RESET) esta funo causa um reset geral no programa posicionando o cursor na primeira linha de comando, zerando as memrias e os registradores. F2 (BREAKPOINT) sem dvida alguma umas das mais teis; esta funo causa pontos de paradas no programa. Este procedimento pode ser feito de duas formas. A forma fcil dar dois cliques bem no canto da linha onde deve ficar o ponto de parada, ser colocado um cone vermelho com um B, indicando BreakPoint. A forma mais difcil teclar F2 e na janela digitar o

-

www.mecatronicadegaragem.blogspot.com

nmero da linha em hexadecimal, onde ficar o ponto de parada. Na janela BreakPoint possvel desabilitar ou remover o breakpoint existente Algumas outras funes do MPLAB como veremos logo mais frente na medida que forem necessrias para o nosso estudo, por

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

6_

hora, aps simular o funcionamento do soft, chegou o momento de grav-lo no microcontrolador. Para isso necessrio ter em mo um gravador de microcontrolador para o modelo que estamos trabalhando.

4.2- O GravadorO gravador um dispositivo projetado em concordncia com as caractersticas do microcontrolador. Existem muitos tipos de gravadores e softwares de aplicao. Alguns so muito simples e econmicos, outros so complexos e caros. Dentre os diversos tipos o que nos tem apresentado melhor resultado o gravado JDM (http://www.jdm.homepage.dk), cujo esquema original apresentado na figura abaixo e esquema , layout de circuito impresso melhorado pode ser encontrado em nosso site em www.renato.silva.nom.br ou a critrio do leitor tambm em forma de kit montado. A programao do Pic serial, feita por uns pinos especficos, requerendo uma tenso de alimentao VDD (4,5V a 5,0V) e uma tenso de programao VPP (12,0V a 14,0V) no modo alta voltagem e 4,5V a 5,5V no modo de baixa voltagem, ambos com uma variao mnima de 0,25V. A programao escreve na memria de programa, memria de dados, localizao especial para o ID e o byte de configurao. A memria de usurio vai de 0x0000 at 0x1FFF e no modo programao o espao se estende de 0x0000 at 0x3FFF, com a

www.mecatronicadegaragem.blogspot.com

6_

Renato A. Silva

primeira metade (0x0000 a 0x1FFF) usada para o programa de usurio e a Segunda metade (0x2000 a 0x3FFF) inicia a memria de configurao. O espao da memria para configurao (0x2000 a 0x200F) fisicamente implementado mas somente estar disponvel o espao de 0x2000 a 0x2007, as outras posies esto reservadas. A posio 0x2007 poder ser fisicamente acessada pela memria do usurio. O usurio pode armazenar informao de identificao ID em quatro localizaes, de 0x2000 at 0x2003. Estas posies podem ser lidas normalmente mesmo aps a proteo de cdigo ativada.

A programao opera com um simples comando, inserido bit a bit, na cadencia do pulso de clock. Os seis primeiros bits so de comando, seguido pelos 16 bits de dados do usurio. No incio da operao levanta-se o VPP em 13V e aps um perodo mnimo de 5uS, eleva-se VDD de 2,2V para 5,5V e aps 5uS o clock comea a oscilar, fazendo com que o PIC aceite os dados a uma freqncia mxima de 10 Mhz. importante manter o pino 10(RB4) em nvel baixo, pois uma flutuao poderia fazer com que ele entrasse inadvertidamente em modo de programao em baixa voltagem. No modo de baixa voltagem temos a mesma lgica acima com a diferena que no precisamos elevar MCLR para 13V bastando elev-lo para o nvel alto e levar tambm o

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

65

PGM (RB4) no mesmo instante.

4.3.1 IC-ProgPara efetuar a gravao, faremos uso do aplicativo ic-prog encontrado em http://www.ic-prog.com/. Este aplicativo de fcil operao e grava uma quantidade considervel de chips, dependendo claro do hardware de gravao. Antes de utiliz-lo, deve-se configura-lo e caso se utilize o windows 2000 ou windows XP , deve-se instalar o drive icprog.sys, iniciando o ic-prog no menu Configuraes/Opes na aba Diversos encontramos ativar drive NT/2000/XP. Marque esta opo e reinicie o ic-prog. Posteriormente faa a configurao do hardware JDM em configuraes/hardware, conforme a figura ao lado.

4.3.2- Gravando o programaSelecione o modelo do PIC em Configurao/dispositivo/ Microchip Pic, Depois abra o arquivo pisca_led.hex, selecione o modo do clock, e os fusveis de configurao. E finalmente clique no cone de gravao. Aps o processo de gravao, o leitor ser informado sobre o sucesso da gravao.

www.mecatronicadegaragem.blogspot.com

66

Renato A. Silva

4.3.3- Erro de gravao.Se aps a verificao voc obtiver e mensagem de erro, referenciando ao endereo 0x000, porque a comunicao falhou ou no h alimentao no circuito. No entanto a mensagem pode se referenciar a outro endereo, por exemplo ao endereo 0x0007. Um dos meus PICs passou a apresentar esta mensagem na verificao. Eram alguns dados truncados na memria, bastou limpar o dispositivo e tudo voltou ao normal.

4.3.4- Arquivo HexaAlguns leitores podem estar se perguntando, o que so aqueles nmeros que vimos na tela principal do ic-prog, ou como funcionam ? Bom, primeiramente aqueles nmeros so do arquivo hexa que acabamos de compilar com o MPLAB. Esto organizados de dois em dois bytes, sendo a primeira instruo do microcontrolador, gravado em sua rom durante o processo de fabricao e o segundo byte so dados do usurio e posies de memria. Vejamos: A organizao de oito em oito bytes, como o leitor pode ver na figura acima, portanto a primeira coluna representa nmeros octais de oito em oito, assim nosso programa tem 29 bytes, indo da linha 0018(8), coluna 5(8). O primeiro byte 0000 a nossa instruo NOP, nossa Segunda instruo MOVLW 0x00 (mova literal para registrador W) e valor movido para w 0 ento fica 3000. 30 a instruo MOVLW e 00 o valor movido. Outro exemplo; A instruo GOTO LOOP: da linha 31 foi alocada pelo compilador como GOTO 0xD, onde 0xD a localizao do label LOOP na memria do microcontrolador. A funo do compilador facilitar a escrita do programa e transforma-lo em nmeros hexadecimais em conformidade com a tabela rom do microcontrolador utilizado, mais precisamente em com o set de instrues.

www.mecatronicadegaragem.blogspot.com

Programando Microcontroladores PIC

67

Desde o incio deste o leitor foi conduzido por uma breve histria do desenvolvimento dos microcontroladores, passando por funes lgica booleana, bases numricas, descrio do hardware do microcontrolador chegando a programao assembler e gravao do dispositivo. No entanto nos prximos captulos estudaremos formas de fazer tarefas mais complexas com menos esforo, fazendo uso da linguagem de programao em C e do compilador CCS PIC C Compiler , tendo este demonstrado melhor resultado entre os diversos compiladores disponveis.

www.mecatronicadegaragem.blogspot.com

68

Renato A. Silva

5 Linguagem C

5.1- Linguagem de programaoA linguagem C nasceu na Bell Labs, diviso da AT&T, a famosa companhia americana de telecomunicaes desenvolveu em seus laboratrios o sistema operacional Unix, posteriormente desenvolveu tambm a linguagem C em 1969 por Dennis Ritchie, que tambm um dos principais criadores do Unix, partir da linguagem B de Ken T