Escolar Documentos
Profissional Documentos
Cultura Documentos
ndice
Introduo................................................................................................................................1 Arquitectura PIC18. ..................................................................................................................3 O PIC18F4620........................................................................................................................ 3 Identificao e nomenclatura dos pinos. ............................................................................... 5 Estrutura interna. .................................................................................................................. 7 Configurao do oscilador. .................................................................................................... 9 Configurao do hardware. ................................................................................................. 13 Sistema de reset.................................................................................................................. 14 Ambiente de programao MPLAB IDE. ................................................................................. 17 Introduo ao sistema integrado MPLAB. ............................................................................ 17 Instalao do MPLAB. .......................................................................................................... 17 Compilador C18. ..................................................................................................................... 21 Instalao do compilador C18. ............................................................................................ 21 Especificaes do compilador C18. ...................................................................................... 23
Tipo e tamanho de variveis. ........................................................................................................ 23 Armazenamento por tipo de dados............................................................................................... 23 Armazenamento por classes - Overlay. ......................................................................................... 24 Armazenamento por qualificadores. ............................................................................................. 24 Incluir ficheiros - #INCLUDE .......................................................................................................... 25 Macros predefinidas do compilador C18. ...................................................................................... 25 A directiva #PRAGMA. .................................................................................................................. 26
Directivas do compilador C18. ............................................................................................. 27 Livrarias de funes do compilador C18. ............................................................................. 27 Primeiros passos com o MPLAB IDE. ...................................................................................... 29 Criar e configurar um projecto no MPLAB IDE. .................................................................... 29 Primeiro programa. ............................................................................................................. 32
Modificar o contedo de registos e variveis. ............................................................................... 34 Parar o programa num determinado sitio especifico Breakpoint................................................. 35 Tempo de execuo...................................................................................................................... 35
O simulador STIMULUS. ...................................................................................................... 37 O logic analyzer. .................................................................................................................. 39 Depurador/Gravador PICKIT 3. ............................................................................................ 40 Bernardino Neves - 2011 Pgina i
CET Automao, Robtica e Controlo Industrial Sistemas de MicroControladores - 2011 Integrao do PICKIT 3 com o MPLAB IDE. ........................................................................... 41 Programao em C, para microcontroladores. ....................................................................... 43 Princpios de programao. ................................................................................................. 43
Fluxogramas. ................................................................................................................................ 43 lgebra de booleana..................................................................................................................... 44 Variveis e dados.......................................................................................................................... 45 Operadores. ................................................................................................................................. 45
Operadores. ........................................................................................................................ 47
Aritmticos................................................................................................................................... 47 Relacionais. .................................................................................................................................. 47 Lgicos. ........................................................................................................................................ 48 Memoria. ..................................................................................................................................... 50 Associao de operadores. ........................................................................................................... 50
Funes. ............................................................................................................................. 61 Programao dos microcontroladores PIC18. ......................................................................... 63 Portos I/O............................................................................................................................... 69 Leitura do estado de um pino. ............................................................................................. 70 Escrita em um pino. ............................................................................................................ 70 Pgina ii
Pgina iii
ndice de figuras
Fig 1 - Arquitectura de um sistema constitudo por um P. ....................................................... 1 Fig 2 - Arquitectura de um C, com os mesmos perifricos. ...................................................... 1 Fig 3 - Pinout do microcontrolador PIC18F4620 verso DIP 40 pinos [1]. ................................... 5 Fig 4 - Diagrama de blocos da estrutura interna do microcontrolador PIC 18LF4620 [1]............. 8 Fig 5 - Implementao do oscilador de cristal. ........................................................................... 9 Fig 6 - Implementao do oscilador por fonte de relgio externo. ........................................... 10 Fig 7 - Implementao do oscilador RC. ................................................................................... 11 Fig 8 - Diagrama de blocos do mdulo de configurao do oscilador [1]. ................................. 12 Fig 9 - Reset por alimentao inicial do C............................................................................... 14 Fig 10 - Reset devido a alimentao inicial do C. .................................................................... 15 Fig 11 - Reset devido a estabilizao do oscilador. ................................................................... 15 Fig 12 - Reset gerado por queda de tenso. ............................................................................. 15 Fig 13 - Diagrama de blocos do circuito de reset [1]................................................................. 16 Fig 14 - Origem do evento de reset. ......................................................................................... 16 Fig 15 - Ficheiros descompactados. ......................................................................................... 17 Fig 16 Seleco da instalao completa. ............................................................................... 18 Fig 17 - Localizao do ficheiro de instalao. .......................................................................... 18 Fig 18 - Janela de progresso da instalao. .............................................................................. 19 Fig 19 - Localizao da instalao do compilador C18. ............................................................. 21 Fig 20 - Seleco dos componentes do compilador C18. .......................................................... 21 Fig 21 - Configurao das variveis. ......................................................................................... 22 Fig 22 - Ligao do MPLAB IDE ao compilador C18................................................................... 22 Fig 23 - Criar uma novo projecto. ............................................................................................ 29 Fig 24 - Seleco do compilador C18. ...................................................................................... 29 Fig 25 Concluso da configurao do projecto. ..................................................................... 30 Fig 26 - Pasta Source Files. ....................................................................................................... 30 Fig 27 - Janela para adicionar ficheiros ao projecto. ................................................................ 31 Fig 28 - Ambiente de trabalho. ................................................................................................ 31 Fig 29 - Localizao do icon Make............................................................................................ 32 Fig 30 - Seleccionar o simulador MPALB SIM. .......................................................................... 33 Fig 31 - Comandos do simulador MPLAB SIM. ......................................................................... 33 Fig 32 Seleco da janela File Registers e Special Function Registers. .................................... 34 Fig 33 - Inserir uma varivel para se ter acesso aos seus parmetros. ...................................... 34 Fig 34 - Janela Watch. ............................................................................................................. 35 Fig 35 - Definio da frequncia de clock, base de tempo do simulador MPLAB SIM. ............... 35 Fig 36 Exemplo, determinao do tempo de execuo. ........................................................ 36 Fig 37 - Resultado do tempo de execuo do exemplo proposto. ............................................ 36 Fig 38 - Janela de configurao do simulador Stimulus. ........................................................... 38 Fig 39 Localizao do Fire Button. ......................................................................................... 38
Pgina iv
Fig 40 Resultado da simulao Stimulus. .............................................................................. 38 Fig 41 - Seleco do canal a analisar. ....................................................................................... 39 Fig 42 - Resultado obtido pelo analisador lgico. ..................................................................... 39 Fig 43 - Depurador/Programador PICKIT 3. .............................................................................. 40 Fig 44 - Descrio dos pinos do conector ICSP. ........................................................................ 40 Fig 45 Ligao entre PICKIT 3 e o microcontrolador. ............................................................. 41 Fig 46 - Verificao da integrao do programador PICKIT 3 com o MPLAB IDE. ....................... 41 Fig 47 Fluxograma do exemplo proposto. ............................................................................. 44 Fig 48 - Ficheiro de instalao do bootloader AN1310. ............................................................ 63 Fig 49 - Primeira janela de instalao do software PC do bootloader AN1310. ......................... 64 Fig 50 - Segunda janela de instalao do software PC do bootloader AN1310.......................... 64 Fig 51 Localizao da instalao do software PC AN1310. ..................................................... 64 Fig 52 Finalizao da instalao do software PC AN1310. ..................................................... 65 Fig 53 - Fonte de alimentao. ................................................................................................ 65 Fig 54 - Microcontrolador PIC18F4620 e transceiver RS232. .................................................... 65 Fig 55 - Programao em circuito ICSP..................................................................................... 66 Fig 56 Imagem do hardware desenvolvido, o kit DevBoard PIC. ............................................ 66 Fig 57 - Localizao do bootloader PIC18. ................................................................................ 66 Fig 58 - Setup experimental para testar o hardware e o software PC. ...................................... 67 Fig 59 - Localizao do software PC AN1310. ........................................................................... 67 Fig 60 - Software PC para carregar o programa no microcontrolador....................................... 67 Fig 61 - Configurao do Baud Rate. ........................................................................................ 68 Fig 62 Comunicao entre o software PC e o microcontrolador. ........................................... 68 Fig 63 - Modelo simplificado do porto I/O [1]. ......................................................................... 69 Fig 64 - Layout do circuito do exemplo 1. ................................................................................ 71 Fig 65 - Layout do circuito do exemplo 2. ................................................................................ 72 Fig 66 - Layout do circuito do exemplo 3. ................................................................................ 75 Fig 67 - Layout do circuito do exemplo 4. ................................................................................ 77 Fig 68 - Layout do circuito do exemplo 5. ................................................................................ 78 Fig 69 - Layout do circuito do exemplo 6. ................................................................................ 79 Fig 70 - Layout do circuito do exemplo 7. ................................................................................ 80 Fig 71 - Layout do circuito do exemplo 8. ................................................................................ 82 Fig 72 - Layout do circuito do exemplo 9. ................................................................................ 83 Fig 73 - Diagrama temporal, da tcnica para maximizar um pino I/O. ...................................... 87 Fig 74 - Layout do circuito do exemplo 10. .............................................................................. 87
Pgina v
ndice de tabelas
Tabela 1 - Modos de gesto de energia. .................................................................................... 3 Tabela 2 - Memoria de programa e dados disponvel. ............................................................... 4 Tabela 3 - Perifricos internos. .................................................................................................. 4 Tabela 4 - Nomenclatura do pinout do microcontrolador. ......................................................... 7 Tabela 5 - Valor dos condensadores para os diferentes tipos de cristais. ................................. 10 Tabela 6 - Registos da palavra de configurao do microcontrolador. ..................................... 13 Tabela 7 - Tipo de variveis, o seu tamanho e limites. ............................................................. 23 Tabela 8 - Localizao das variveis em funo dos qualificadores. ......................................... 25 Tabela 9 - Tamanho dos ponteiros. ......................................................................................... 25 Tabela 10 - Directivas do compilador C18. ............................................................................... 27 Tabela 11 Livraria de funes de matemtica. ...................................................................... 28 Tabela 12 - Livrarias de funes gerais. ................................................................................... 28 Tabela 13 - Livrarias de funes de software. .......................................................................... 28 Tabela 14 - Livrarias de funes de hardware. ......................................................................... 28 Tabela 15 - Cdigo do ficheiro do exemplo. ............................................................................. 32 Tabela 16 - Cdigo do segundo exemplo proposto. ................................................................. 37 Tabela 17 Smbolos de fluxograma. ...................................................................................... 43 Tabela 18- Operadores lgicos. ............................................................................................... 44 Tabela 19 Palavras reservadas em programao em C. ......................................................... 45
Referncias
[1] Datasheet PIC18F4620 (Microchip). [2] MPLAB C18 C Compiler User Guide (Microchip). [3] MPLAB C18 C Compiler Library (Microchip). [4] AN1310, Serial Bootloader for PIC16 and PIC18 (Microchip). [5] Fbio Pereira, PIC Programao em C rica, 2007. [6] Fbio Pereira, Microcontrolador PIC18 Detalhado rica, 2010.
Pgina vi
Introduo.
Pretende-se nesta unidade de formao, denominada de Sistemas de MicroControladores, adquirir competncias para o desenvolvimento de sistemas electrnicos com microcontroladores. O microcontrolador que ser usado como base de estudo, o PIC18F4620, desenvolvido e produzido pela empresa Microchip Techonology. Trata-se de um microcontrolador para aplicaes de complexidade intermdia. Os microcontroladores tm ocupado bem o seu lugar no nosso dia-a-dia, podemos facilmente verificar que, em mdia recorremos ao uso de cerca de 10 dispositivos controlados por microcontroladores, tais como um simples relgio, o comando da TV, o circuito electrnico do nosso carro, o telemvel, etc. O nascimento do microcontrolador, surge pela necessidade de integrar no mesmo componente, o hardware necessrio, para que tenha um comportamento e performances de um micro computador, permitindo assim poupar tempo e espao na construo de novas aplicaes. Repare-se que o uso de microprocessadores ou microcontroladores, depende do fim ou aplicao a que se destina, tendo em considerao capacidade de processamento, memria, hardware disponvel e custos. As figuras 1 e 2 mostram dois sistemas, um constitudo por um microprocessador e outro por um microcontrolador equivalente em termos de perifricos.
Bus de dados
P
8085
EPROM 2532
RAM 62256
Timer 8155
USART 8251
IO 8255
Bus de controlo
IO RAM
USART
P
EPROM
Timers
PIC18
Fig 2 - Arquitectura de um C, com os mesmos perifricos.
Pgina 1
Durante a unidade de formao sero abordados os seguintes temas: Diferenas entre microprocessadores e microcontroladores; Arquitectura dos microcontroladores PIC18; Configurao dos microcontroladores PIC18; Ambiente de desenvolvimento e concepo de programas para microcontroladores PIC18; Compilador C para microcontroladores PIC18; Programao em C, o essencial para microcontroladores; Programao dos microcontroladores PIC18; Configurao e aplicao dos perifricos; Electrnica aplicada a sistemas de microcontroladores; Desenvolvimento de aplicaes com microcontroladores PIC18.
Pgina 2
Arquitectura PIC18.
O PIC18F4620.
O microcontrolador em estudo o PIC18F4620. A escolha deste microcontrolador, deve-se ao facto, do docente de ter mais experincia com esta famlia de microcontroladores. O PIC18F4620 um microcontrolador avanado de 8 bits com memria de programa flash, caracterizado pelo conversor analgico/digital de 10 bits e por utilizar a tecnologia nano watt. A verso F caracterizada por operar com tenses de alimentao na ordem dos 5V. Este microcontrolador tal como a sua famlia, tem a particularidade de ser possvel gerir os seus recursos de energia, isto , como o microcontrolador est dividido em duas partes, o processador e os controladores (perifricos internos), possvel definir por questes energticas que partes devem estar activas. Para gesto de energia possvel definir 3 estados como demonstra a tabela seguinte. Modo Executar (Run) Espera (Idle) Adormecido (Sleep) Estado do processador Activo Desactivo Desactivo Estado dos controladores Activo Activo Desactivo
Em termos de flexibilidade e estrutura do oscilador, o PIC 18F4620 permite a configurao do oscilador em quatro modos distintos de cristal, sendo possvel utilizar cristais at 25 Mhz e recorrendo ao Phase Lock Loop (PLL) possvel multiplicar por 4 a frequncia de oscilao do cristal ou do oscilador interno. A frequncia mxima de oscilao est limitada a 40 MHz incluindo com o uso do PLL, possui ainda um oscilador interno que pode operar desde 31Khz at 32Mhz. O microcontrolador tambm permite o uso de um oscilador secundrio de 32Khz, que poder ser usado para gerar um relgio em tempo real independente do oscilador principal. Sobre os perifricos internos, podemos destacar as seguintes caractersticas: Possui 36 pinos I/O distribudos por 5 portos, podendo cada pino I/O suportar uma corrente at 25 mA. Apesar de um pino I/O suportar uma corrente de 25 mA, o microcontrolador apenas suporta uma corrente total de 200 mA; Possui trs modos de interrupo externos com quatro entradas destinadas a gerar interrupo por mudana de estado; Possui um mdulo avanado de captura, comparao e modulao por largura de pulso (PWM), sendo possvel definir at 4 sadas PWM, com seleco de polaridade, programao do tempo no activo e com reinicializao e desligamento automtico; Possui um mdulo de comunicao SPI (suporta os 4 modos) e I2C; Possui um mdulo avanado de comunicao USART, que permite a comunicao segundo os protocolos RS232, RS485 e LIN/J2602, sendo possvel utilizar o protocolo RS232 com
Pgina 3
Alm das caractersticas acima mencionadas, o microcontrolador possui ainda as seguintes caractersticas: Permite a escrita de cem mil vezes na memoria flash de programa; Permite a escrita de um milho de vezes na memria EEPROM; Permite a reteno dos dados tanto na memria de programa como na memria EEPROM por um perodo de cem anos; Possui um multiplicador por hardware de 8 bits por 8 bits; Possui um temporizador WatchDog (WDT) prolongado, permitindo a configurao de 4ms ate 131s; Permite o download de programas atravs da programao em circuito (ICSP).
As tabelas seguintes mostram de um modo geral e simplificado as caractersticas do microcontrolador PIC 18F4620.
I/O 36
Canais ADC 13
CCP/PWM 1/1
SPI S
I2C S
USART 1
COMP 2
Em termos de encapsulamento, existem no mercado trs tipos distintos, a verso DIP de 40 pinos, a verso TQFP de 44 pinos e a verso QFN tambm de 44 pinos, neste documento apenas se far referncia verso DIP de 40 pinos visto que ser o encapsulamento usado no hardware proposto. No datasheet do fabricante poder encontrar o pinout das outras verses de encapsulamento.
Pgina 4
Na tabela seguinte descrimina-se detalhadamente, a identificao e funo de cada um dos pinos do microcontrolador, de modo a perceber-se melhor o significado de cada nomenclatura utilizada.
Nome do pino
Nmero do pino
Tipo de pino
I PWR I I/O I I/O I I/O I I O I/O I I I/O I O
Tipo de sinal
ST ST TTL Analgico TTL Analgico TTL Analgico Analgico Analgico TTL Analgico Analgico ST ST
Designao
MCLR VPP RE3 RA0 AN0 RA1 AN1 RA2 AN2 VrefCVref RA3 AN3 VrefRA4 T0CKI C1OUT
2 3
Reset externo quando colocado a 0. Entrada para programao (13 V). Entrada digital. Pino 0 do porto A. Entrada analgica 0. Pino 1 do porto A. Entrada analgica 1. Pino 2 do porto A. Entrada analgica 2. Tenso negativa de referncia para o ADC. Tenso de sada de referncia do comparador. Pino 3 do porto A. Entrada analgica 3. Tenso positiva de referncia para o ADC. Pino 4 do porto A. Entrada externa de relgio para o Timer0. Sada do comparador 1.
Pgina 5
10 11 12 13
ST CMOS TTL
14
15
16
17
18
19 20 21 22
23
24
25
26
27
28
Pgina 6
RD6 PSP6 P1C RD7 PSP7 P1D VSS VDD RB0 INT0 FLT0 AN12 RB1 INT1 AN10 RB2 INT2 AN8 RB3 AN9 CCP2 RB4 KBI0 AN11 RB5 KBI1 PGM RB6 KBI2 PGC RB7 KBI3 PGD
29
30 31 32
33
34
35
36
37
38
39
40
I/O I/O O I/O I/O O P P I/O I I I I/O I I I/O I I I/O I I/O I/O I I I/O I I/O I/O I I/O I/O I I/O
ST TTL ST TTL
TTL ST ST Analgico TTL Analgico ST TTL Analgico ST TTL Analgico ST TTL TTL Analgico TTL TTL ST TTL TTL ST TTL TTL ST
Pino 6 do porto D. Bit 6 de dados do porto paralelo. Sada dedicada do mdulo CCP1. Pino 7 do porto D. Bit 7 de dados do porto paralelo. Sada dedicada do mdulo CCP1. Pino de massa do microcontrolador. Pino de alimentao do microcontrolador. Pino 0 do porto B. Pino 0 de interrupo externa. Pino dedicado ao CCP1. Entrada analgica 12. Pino 1 do porto B. Pino 1 de interrupo externa. Entrada analgica 10. Pino 2 do porto B. Pino 2 de interrupo externa. Entrada analgica 8. Pino 3 do porto B. Entrada analgica 9. Entrada/Sada do mdulo CCP2. Pino 4 do porto B. Pino 0 de interrupo por mudana de estado. Entrada analgica 11. Pino 5 do porto B. Pino 1 de interrupo por mudana de estado. Pino de seleco do ICSP. Pino 6 do porto B. Pino 2 de interrupo por mudana de estado. Pino de sincronismo do ICSP. Pino 7 do porto B. Pino 3 de interrupo por mudana de estado. Pino de dados do ICSP.
Legenda: I O I/O ST TTL PWR Entrada (Input). Sada (Output). Entrada ou sada. Sinal do tipo Schmitt Trigger. Sinal do tipo TTL. Alimentao.
Estrutura interna.
Como foi descrito nas linhas acima, neste captulo pretende-se conhecer as caractersticas do microcontrolador. A estrutura interna d-nos uma ideia de como o microcontrolador no seu interior, o microcontrolador PIC 18F4620 foi optimizado para poder executar um conjunto de instrues em velocidade muito alta, de facto possvel obter uma velocidade de 10 MIPS (MIPS Milhes de instrues por segundo) para uma frequncia de oscilao de 40 Mhz, o que se pode considerar um bom desempenho mesmo para aplicaes exigentes.
Pgina 7
Pgina 8
A partir do diagrama de blocos da estrutura interna do microcontrolador, podemos obter todas as informaes relevantes sobre o microcontrolador. No canto superior esquerdo podemos verificar qual a estrutura e registos associados a memoria de programa FLASH. Do lado direito temos definido os PORTOS. No centro superior temos a estrutura e registos associados a memoria RAM. No centro temos a unidade lgica e aritmtica (ULA). No lado centro esquerdo temos os registos associados a configurao de hardware do microcontrolador e por fim no canto inferior esquerdo temos os perifricos disponveis no microcontrolador. Por exemplo em relao aos PORTOS, podemos verificar que existem 5 PORTOS designados de A a E, quais os seus pinos e funes associados a cada PORTO e tambm podemos verificar que o bus de dados para os PORTOS um bus de 8 bits.
Configurao do oscilador.
O microcontrolador PIC 18F4620 pode utilizar 10 tipos diferentes de osciladores, conforme a lista seguinte: LP Oscilador de cristal de baixa potncia; XT Oscilador de cristal de quartz; HS Oscilador de cristal de quartz de alta velocidade; HSPLL - Oscilador de cristal de quartz de alta velocidade com multiplicador de frequncia; RC Oscilador formado pelo conjunto resistncia e condensador, com sada de relgio no pino RA6; RCIO - Oscilador de formado pelo conjunto resistncia e condensador; INTIO1 Oscilador interno com sada de relgio no pino RA6; INTIO2 Oscilador interno; EC Fonte de relgio externo com sada de relgio no pino RA6; ECIO Fonte de relgio externo.
O tipo de oscilador usado deve ser de acordo com a aplicao que se pretende. Por exemplo uma aplicao simples, como o controlo automtico de um porto, o oscilador interno responde bem as necessidades pretendidas, mas se for necessria uma base de tempo mais precisa a uma grande velocidade o mais correcto escolher um cristal de quartz de alta velocidade. Para aplicaes cuja base de tempo indispensvel, podemos colocar externamente um relgio de tempo real (RTC). Para implementar um oscilador de cristal, basta ligar os terminais do cristal aos pinos OSC1 e OSC2 juntamente com um par de condensadores conforme a figura seguinte.
Pgina 9
Tipo de oscilador LP XT
HS
Valor de C em pF 30 15 15 15 15 15 15
Os osciladores EC e ECIO requerem uma fonte de relgio externo ligado no pino OSC1. Reparese que no modo EC obtemos uma fonte de relgio no pino OSC2, cuja frequncia um quarto do da fonte. Este pino OSC2 pode ser usado para sincronizar perifricos externos. A figura 6 mostra a ligao tpica da fonte de relgio ao microcontrolador.
Clock
OSC1 / CLKI
Clock / 4
OSC2 / CLKO
O oscilador RC usado para aplicaes em que a base de tempo no relevante, sendo a sua implementao feita a partir de um circuito simples constitudo por uma resistncia e um condensador. Neste oscilador a frequncia de oscilao depende da tenso de alimentao, dos valores da resistncia, do condensador, e da temperatura de funcionamento. Pode acontecer tambm que para os mesmos componentes, dois dispositivos diferentes tenham frequncias de oscilao diferentes. Esta situao acontece devido s variaes de fabrico dos componentes, quer do microcontrolador ou da resistncia e do condensador.
Pgina 10
Tambm neste tipo de oscilador possvel obter uma sada de relgio, cuja frequncia um quarto da frequncia gerada pelo oscilador RC. A figura 7 mostra o circuito tpico para a implementao do oscilador RC.
VCC
R OSC1 C
Clock / 4
OSC2
Os valores recomendados para a resistncia e o condensador so e a frequncia de oscilao pode ser calculada pela expresso f = 1 / RC.
O uso do multiplicador de frequncia apenas pode ser usado quando o tipo de oscilador de cristal de alta velocidade ou ento com o oscilador interno. Com esta opo possvel utilizar um cristal de frequncia mais baixo e colocar o microcontrolador a funcionar a uma frequncia muito mais alta, repare que a frequncia mxima permitida pelo microcontrolador de 40 Mhz, por essa razo quando pensar em utilizar esta opo, o cristal de alta velocidade no deve ultrapassar os 10 Mhz. Um exemplo tpico pode ser a necessidade de utilizar uma fonte de relgio proveniente do microcontrolador, para sincronismo de perifricos externos. Nesse caso para no limitar a frequncia de oscilao do microcontrolador podemos usar o multiplicador de frequncia para obter uma maior frequncia de oscilao no microcontrolador e uma frequncia mais baixa para o sincronismo. Uma das vantagens que o microcontrolador escolhido nos apresenta, o facto de incorporar um oscilador interno, com capacidade de gerar uma frequncia de oscilao at aos 32 Mhz. O gerador de relgio interno, pode ser uma ideia interessante quando se pretende reduzir custos com cristais ou outras fontes relgio externas. Existem duas fontes de relgio do oscilador interno, a primeira uma fonte relgio de 8 Mhz com capacidade de gerar frequncias de 31 Khz at 4 Mhz, a segunda uma fonte de relgio proveniente de um oscilador RC interno configurado para gerar uma frequncia de 31Khz. Apesar do oscilador interno ser um pormenor a considerar, no nos podemos esquecer da influncia da temperatura na frequncia gerada. O prprio microcontrolador incorpora um registo o OSCTUNE onde uma possvel funo calibrar a frequncia de oscilao em funo da temperatura. Esta calibrao no automtica, sendo necessrio criar um programa e inserir um sensor de temperatura no nosso hardware para ser possvel calibrar a frequncia de oscilao em funo da temperatura.
Pgina 11
Pelo diagrama de blocos, podemos verificar no canto superior esquerdo os pinos das fontes externas de relgio, tanto do oscilador principal como do oscilador secundrio, no centro superior podemos verificar o multiplicador de frequncia e o seu registo associado. Repare que no diagrama de blocos possvel verificar que tipos de oscilador permitido usar com o multiplicador de frequncia. Na parte inferior podemos visualizar os componentes do oscilador interno e o seu registo de configurao, outra informao que podemos obter pela anlise do diagrama de blocos os registos associados ao controlo da configurao do oscilador. Repare que possvel internamente, pela manipulao de registos de configurao do sistema do oscilador, alterar a frequncia de clock a meio de um programa de acordo com as especificaes da aplicao, mas esta possibilidade apenas possvel a quando do uso do oscilador interno.
Os registos associados ao controlo da configurao oscilador so: OSCCON Registo de controlo do oscilador; OSCTUNE Registo de calibrao do oscilador.
Pgina 12
Configurao do hardware.
Os microcontroladores PIC, possuem uma posio de memria, situada aps o final da memria de programa, que serve para armazenar as configuraes de hardware interno do microcontrolador. Nesta zona encontram-se registos, cuja funo configurar o hardware de acordo com a aplicao pretendida. A tabela 6, mostra os registos e a sua funo. As diferentes famlias de microcontroladores PIC, possuem distintas palavras de configurao, isto , para cada microcontrolador, convm consultar o seu respectivo datasheet para confirmar os registos e funes, para posteriormente serem configurados.
Endereo 0x300001 0x300002 0x300003 0x300005 0x300006 0x300008 0x300009 0x30000A 0x30000B 0x30000C 0x30000D 0x3FFFFE 0x3FFFFF
Nome CONFIG1H CONFIG2L CONFIG2H CONFIG3H CONFIG4L CONFIG5L CONFIG5H CONFIG6L CONFIG6H CONFIG7L CONFIG7H DEVID1 DEVID3
Funo Configurao do oscilador. Configuraes de reset e alimentao. Configurao do Watchdog (WDT) Configurao da funo de pinos IO. Configurao da programao por ICSP. Proteco de dados na memria FLASH. Proteco de dados na memria EEPROM. Proteco de escrita na memria FLASH. Proteco de escrita na memria EEPROM. Proteco de dados. Proteco de dados. Identificao do dispositivo. Identificao do dispositivo.
CONFIG1H
0 Seleco do oscilador Activa a monitorizao do relogio Activa a transio do oscilador interno para externo
CONFIG2L
0 Habilita o reset por PWRT Habilita o reset por BOR Seleco da tenso de referencia para BOR
CONFIG2H
CONFIG3H
0 Selecciona o CCP2 no pino RC1 ou RB3 Selecciona o PortoB como IO ou ADC Configurao do oscilador do Timer1 Habilita o pino 1 como MCLR
Pgina 13
CONFIG4L
0 Reset causado pela Stack Habilita a alimentao por ICSP Habilita a instruo extensa Habilita a programao por ICSP, pinos RB6 e RB7 dedicados ao ICSP
CONFIG5L
CONFIG5H
CONFIG6L
CONFIG6H
0 Habilita a proteco de escrita na palavra de configurao Habilita a proteco de escrita na EEPROM Habilita a proteco de escrita no cdigo BOOT
CONFIG7L
CONFIG7H
Sistema de reset.
O sistema de reset do microcontrolador PIC, responsvel por iniciar a CPU e perifricos, aps um dos seguintes eventos: Alimentao inicial do C (POR), um circuito detecta a subida de tenso de alimentao e mantm o reset at esse valor atingir o valor nominal;
VCCn
VCC
RESET
Pgina 14
Temporizador de inicializao (PWRT), um circuito mantm o reset durante um perodo de tempo, cerca de 66ms aps a alimentao inicial do C, para activar o PWRT necessrio activar o bit PWRT da palavra de configurao, registo CONFIG2L;
VCCn
VCC
RESET
TPWRT
Arranque do oscilador (OST), um determinado tempo anexo ao tempo total de reset do C, para a estabilizao do oscilador externo.
VCCn
VCC
RESET
TPWRT
TOST
Queda de alimentao (BOR), quando o circuito detecta um valor abaixo de um determinado valor de referncia, especificado pelos bits BORV0 e BORV1, no registo CONFIG2L, gera um reset ao C.
VCC
Vref
RESET
Pgina 15
Reset provocado pelo watchdog (WDT). O watchdog um temporizador, cuja funo gerar um reset, para que o programa no entre num ciclo infinito e bloqueie o sistema. A figura seguinte mostra, o diagrama de blocos do circuito de reset.
Pelo diagrama de blocos, podemos verificar que, alm dos eventos acima referidos, possvel tambm por software atravs da instruo RESET, gerar reset ao C. Repare ainda que, ocorre um reset, quando ocorre um overflow da pilha de desvio de programa (Stack Pointer). A verificao da origem do reset, pode ser efectuada atravs do registo RCON, pois a origem do evento apaga a sua respectiva flag no registo, devendo o utilizador voltar a colocar a 1 por software.
RCON
0 Reset por queda de tenso Reset causado pela inicializao Reset por WDT Reset causado pela instruo RESET
Pgina 16
Instalao do MPLAB.
Para instalar o MPLAB IDE, necessrio descarregar atravs da internet, na pgina da Microchip (www.microchip.com) o software de desenvolvimento MPLAB IDE. Ao entrar na pagina Web da Microchip, na sua pagina principal encontra-se um link com o nome de MPLAB IDE. Nessa pgina a Microchip faz uma apresentao do MPLAB IDE e no final possvel descarregar o software. Aps descarregar o software MPLAB IDE, passamos etapa seguinte que a instalao. Numa primeira fase necessrio descompactar o ficheiro recebido, e aps este passos encontramos os ficheiros que se mostra na figura 15.
Para instalar a aplicao necessrio executar o ficheiro SETUP.exe, nas trs janelas seguintes dever seleccionar o boto NEXT. A primeira janela uma janela de boas vindas, a segunda a aceitao dos termos da licena de instalao e a terceira a seleco por defeito de instalao completa, como mostra a figura 16.
Pgina 17
Aps a seleco de instalao completa, chega o momento de indicar o local onde se deve instalar o software MPLAB IDE, pode aceitar a sugesto por defeito ou ento seleccionar outra directoria para a instalao, no final deve pressionar o boto NEXT, para executar a instalao.
Pgina 18
No final da instalao ir aparecer uma janela a perguntar se pretende instalar o software HITECH Software, fica ao vosso critrio a sua instalao. No final da instalao necessrio reiniciar o computador para finalizar a instalao.
Pgina 19
Pgina 20
Compilador C18.
Instalao do compilador C18.
Neste momento, j tem instalado o MPLAB IDE. O prximo passo instalar o compilador C18 da Microchip, que ir permitir compilar os programas desenvolvidos em linguagem C. Existe uma verso para estudantes do compilador C18, o qual deve descarregar da pagina Web da Microchip, que s permite a optimizao de cdigo at um limite de 30 dias, e neste caso para os programas propostos a optimizao de cdigo no ser um factor relevante. A instalao do compilador C18 requer alguma ateno, para o efeito detalha-se de seguida todos os passos requeridos na instalao. Numa primeira fase devesse seleccionar o directrio onde deve ficar o compilador, devendo-se aceitar a sugesto que aparece na janela, porque mais tarde ser necessrio referenciar alguns ficheiros desse directrio e assim torna-se mais simples.
Na prxima janela, a figura 20 aparecem os componentes que se pretende instalar, devendo-se instalar todos os componentes, como mostra a figura seguinte.
Pgina 21
Na prxima janela, a figura 21 deve seleccionar os trs primeiros itens da configurao das variveis de ambiente.
A janela seguinte, a figura 22 diz respeito a ligao do MPLAB IDE ao compilador C18, devendo seleccionar todos os itens.
Nas prximas janelas que visualizar durante a instalao pressione o boto NEXT at concluir a instalao. Aps a instalao do compilador C18, j se encontra com as ferramentas necessrias para o desenvolvimento de programas para os microcontroladores da Microchip. Mas ainda necessria a integrao do compilador com o MPLAB IDE.
Pgina 22
Quanto ao tipo de armazenamento de dados, o compilador C18 permite trs tipos diferentes de armazenamento de dados: Armazenamento por tipo de dados; Armazenamento por classes; Armazenamento por qualificadores. De seguida detalha-se pormenores referentes a estes trs tipos.
Pgina 23
Neste exemplo, se o compilador ao compilar o programa detectar que no executa estas duas funes em simultneo, a classe de armazenamento por sobreposio aloca a mesma posio de memria para as duas variveis definidas. Outros tipos de armazenamento por classes so: Auto Define a varivel como local, por defeito todas as variveis so locais; Extern Define variveis externas ao programa; Register Indica ao compilador que a varivel um registo do CPU; Static Define uma varivel que ocupa uma posio permanente na memoria.
Pgina 24
A tabela seguinte mostra a localizao das variveis em funo dos qualificadores. Qualificador far near rom Em qualquer lugar na memria de programa. Em memria de programas inferiores a 64KBytes. ram Em qualquer lugar na memria de dados. No acesso memria.
Em variveis tipo ponteiros, os mesmos podem apontar tanto para posies de memria ram ou rom. O tamanho do ponteiro depende do tipo de varivel para qual aponta, isto se apontar para memoria de dados tem o tamanho de 16 bits, se apontar para memria de programa ter 24 bits. Por defeito quando se define uma varivel tipo ponteiro esta aponta para memria de dados, se quisermos apontar para memria de programa temo de colocar o qualificador rom. Tipo de ponteiro Memria de dados near Memria de programa far Memria de programa Exemplo char *a; rom near char *a; rom near char *a; Tamanho 16 bits 16 bits 24 bits
Pgina 25
A directiva #PRAGMA.
Esta directiva serve para indicar ao compilador C18 que um determinado cdigo se encontra alocado numa especifica posio de memoria, essas seces de memoria tanto podem ser de dados como de programa. Existem dois tipos de seces dependendo do tipo de memria.
Memria de programa: code contem instrues de execuo. romdata contem variveis e constantes.
Memria de dados: udata contem variveis estticas no inicializadas. idata contem variveis estticas inicializadas.
Exemplo:
A primeira linha de cdigo faz o compilador desviar o programa para o endereo 0x08, a segunda linha de cdigo faz o compilador voltar a posio de endereo de memria de programa onde estava antes do desvio.
Pgina 26
#define
#if
#elif #endif
#error
#undef
Pgina 27
Nome math.h
Descrio Classificao do tipo de caracteres. Converso de dados. Manipulao de memria e strings. Funes para gerar atrasos. Funes de reset. Funes de output de caracteres.
Tabela 12 - Livrarias de funes gerais.
Descrio Funes de controlo de LCD Funes de controlo do controlador CAN2510. Funes de controlo e comunicaes por I2C. Funes de controlo e comunicaes por UART. Funes de controlo e comunicaes por SPI.
Tabela 13 - Livrarias de funes de software.
Nome adc.h capture.h i2c.h portb.h mwire.h pwm.h spi timers.h usart.h
Descrio Funes de suporte ao perifrico ADC. Funes de suporte ao perifrico captura. Funes de suporte ao perifrico I2C. Funes de suporte ao perifrico PORTB. Funes de suporte ao perifrico Microwire. Funes de suporte ao perifrico PWM. Funes de suporte ao perifrico SPI Funes de suporte ao perifrico TIMERS Funes de suporte ao perifrico UART
Pgina 28
O Project Wizard ajuda-nos a criar e a configurar um novo projecto, seleccione seguinte aps a janela de boas vindas e seleccione o microcontrolador PIC18F4620 que ser o microcontrolador, que iremos usar em todos os exemplos, repare que em futuros projectos pode escolher o microcontrolador que desejar. Aps seleccionar o microcontrolador chega o momento de seleccionar o compilador C18, para a nossa linguagem de programao, neste caso seleccionamos o Microchip C18 ToolSuite, como mostra a figura 24.
Pgina 29
Se por acaso, quando chega a esta janela e no aparece o compilador C18, ou porque no foi instalado correctamente ou o MPLAB IDE no o encontra, nesse caso deve indicar a localizao atravs do boto Browse , tendo em ateno que necessrio indicar a localizao dos quatro executveis MPASM, MPLINK, MPLAB C18 e o MPLIB. O passo seguinte criar e escolher uma localizao para o ficheiro do novo projecto, vamos escolher o nome de Exemplo1 para o nosso projecto, no final seleccione o boto seguinte, a prxima janela pergunta se temos ficheiros para adicionar ao nosso projecto, como no temos passamos para a janela seguinte que nos indica a concluso da configurao do nosso projecto, indicando os parmetros do projecto (Figura 25).
Por fim seleccionamos o boto Concluir e teremos o nosso primeiro projecto criado, de seguida necessario inserir o ficheiro para editarmos o cdigo em linguagem C. Para o efeito crie um novo ficheiro em New File. Para gravar o ficheiro seleccione a pgina fazendo um click sobre a mesma e de seguida no menu File seleccione a opo Save As , escolha a localizao do projecto e um nome para o ficheiro e no se esquea de o terminar com o .C. Agora que tem o ficheiro gravado necessrio inseri-lo no projecto, deve seleccionar a pasta Source Files com o boto direito do rato e seleccionar o item Add Files, procure a pasta que contem o projecto e seleccione o ficheiro *.C, as figuras 26 e 27 mostram os passos a seguir.
Pgina 30
O MPLAB IDE permite guardar o ltimo ambiente de trabalho, para o efeito quando fecha o aplicativo MPLAB IDE recebe uma mensagem a perguntar se pretende guardar o ambiente de trabalho, o qual deve responder que sim. A figura 8 mostra o ambiente de trabalho pretendido, repare que conforme o desenrolar do desenvolvimento do projecto, mais janelas tero de ser adicionadas ao nosso ambiente de trabalho.
Pgina 31
Primeiro programa.
J criamos um projecto, agora vamos criar um pequeno programa com o objectivo de mostrar como deve ser o corpo do cdigo no editor de texto antes de ser compilado. Pretende-se tambm dar a conhecer as ferramentas de simulao que o MPLAB disponibiliza, e ainda a manipulao de registos e a simulao de sinais nos pinos do microcontrolador. Abra o projecto do exemplo anterior e copie o cdigo que se encontra na tabela 15, para o editor de texto.
#include <p18f4620.h> //Declarao de definies #define SaidaTRIS #define SaidaIO //Declarao de variaveis int i=0; void main (void) { SaidaTRIS = 0; SaidaIO = 0; while(1) { SaidaIO ^= 1; i++; } }
(TRISBbits.TRISB7) (LATBbits.LATB7)
Depois de escrito o programa necessrio compilar, para o fazer basta pressionar a tecla de acesso rpido F10 ou no icon MAKE, como mostra a figura 29.
Ao compilar verificamos que no existem erros, caso existissem os mesmos apareciam na janela OUTPUT, chega o momento de testar o nosso primeiro programa, para isso devemos activar o simulador. O simulador encontra-se no menu Debugger -> Select tool -> 5 MPLAB SIM , como mostra a figura 30.
Pgina 32
Com o simulador activado, j podemos testar o nosso primeiro programa, mas antes disso convm explicar como funciona o simulador MPLAB SIM, j deve ter verificado que quando activou o simulador, que apareceram no ambiente de trabalho uns novos icons, so os botes de controlo do simulador, a figura 31 mostra o significado de cada um deles.
Coloca breakpoints no programa. Faz reset ao programa. Executa ate ao fim da funo. Executa o contedo da funo. Executa passo a passo o programa. Inicia a simulao no modo animado do programa. Pausa da simulao do programa. Inicia a simulao do programa.
O que o programa exemplo faz mudar o estado do pino 7 do porto B e incrementar o contedo da varivel i em cada ciclo do while, o mesmo pode ser verificado quando se pressiona o icon de simulao no modo animado. Abra a janela File Registers e Special Function Registers, no menu View e seleccione o endereo 0xF8A da janela Special Function Registers e o endereo 0x084 da janela File Registers. No modo de simulao animado possvel verificar o estado do bit 7 do porto B a comutar de estado e o incremento da varivel i em cada ciclo do while, ver figura 34.
Pgina 33
Fig 33 - Inserir uma varivel para se ter acesso aos seus parmetros.
Repare que a janela Watch tem dois botes de adio de registo, o Add SFR para adicionar registos especiais e o boto Add Symbol para adicionar variveis, a janela 34 mostra os dados que pretendemos observar.
Pgina 34
Tempo de execuo.
s vezes necessrio saber o tempo exacto que demora umas linhas de cdigo a correr, o simulador permite atravs da janela StopWatch determinar esse tempo de modo exacto, antes de utilizarmos a janela StopWatch necessrio definir a frequncia de clock do microcontrolador que servir de base de tempo para o simulador, o mesmo pode ser definido na janela Settings cujo caminho Debugger -> Settings no item Osc/Trace.
Agora que j temos definido a base de tempo para o simulador, podemos verificar o tempo que demora a executar um determinado conjunto de linhas de cdigo. Como exemplo vamos verificar o tempo que demora a executar 25 ciclos de while no nosso programa. Abra a janela StopWatch, cujo caminho Debugger -> StopWatch e reinicie o contador pressionando o boto Zero.
Pgina 35
Este exemplo no permite determinar o tempo exacto, pois seria necessrio colocar dentro do while cdigo que verificasse o contedo da varivel i em cada ciclo, mas no entanto podemos obter uma boa aproximao do tempo de execuo. Para executar o nosso exemplo coloque um breakpoint como mostra a figura e simule no modo contnuo, quando o simulador parar no breakpoint, reinicie o simulador no modo animado e espere at que o contedo da varivel i seja igual a 25 decimal. Nesse momento faa pausa no simulador e verifique o tempo que demorou a executar os 25 ciclos de while na janela StopWatch. A figura 37 mostra o resultado do tempo obtido.
Pgina 36
O simulador STIMULUS.
Outra ferramenta que o MPLAB IDE nos disponibiliza para simulao o simulador STIMULUS, trata-se de um simulador que permite gerar estmulos em pinos do microcontrolador, isto , geramos um estmulo num pino do microcontrolador e verificamos o efeito no nosso programa. Para verificar esta funcionalidade precisamos de um novo exemplo, nomeadamente, vamos desenvolver um programa que leia o estado do pino 7 do porto B, se for zero incrementa uma varivel, se for um incrementa outra varivel. A tabela 16 mostra o cdigo do nosso segundo exemplo.
#include <p18f4620.h>
Criamos um novo projecto com o nome de Exemplo2 seguindo os passos em cima descritos para o exemplo 1, colocamos o cdigo da tabela acima no editor de texto e compilamos o nosso segundo exemplo. Neste momento s falta configurar o simulador Stimulus. Para o efeito aceda ao simulador pelo caminho Debugger -> Stimulus -> New Workbook, na janela Stimulus no separador Asynch seleccione na coluna Pin/SFR o pino RB7, como mostra a figura 38 e selecciona o pino como um lgico Set High.
Pgina 37
Salvamos o nosso ficheiro de simulao na pasta do projecto, e j podemos testar esta nova funcionalidade. Coloque um breakpoint na linha de cdigo SaidaTRIS = 1;, execute a simulao no modo contnuo, quando o simulador parar no breakpoint, nesta altura j possvel verificar que o pino 7 do porto B se encontra no estado lgico um. Reinicie o simulador no modo animado e pode verificar que o programa executa as instrues indicadas para quando o estado lgico um, isto , incrementa o contedo da varivel b, para verificar, abra a janela Watch e insira as variveis a e b para as poder monitorizar. Para mudar o estado do pino RB7 coloque em pausa o simulador e seleccione o pino como zero lgico Set low, click no fire button que se localiza no lado esquerdo da caixa de texto que indica RB7 e grave o ficheiro, neste momento o pino RB7 esta ser estimulado com o zero lgico, volte a reiniciar a simulao animada e verifique que agora o programa executa as instrues indicadas para quando o estado lgico zero, as figuras seguintes mostram a localizao do fire button e o resultado da simulao.
Esta simulao podia ser feita de um modo contnuo se a seleco do estado do pino na coluna action fosse Toggle, nesse caso basta pressionar o fire button que o estado do pino comutava de estado.
Pgina 38
O logic analyzer.
Esta ferramenta de simulao permite analisar o estado dos pinos do microcontrolador em funo do tempo, para testar esta funcionalidade vamos voltar ao nosso primeiro programa, guarde o projecto do exemplo 2 e volte a abrir o projecto do exemplo 1. Volte a colocar um breakpoint na linha de cdigo SaidaTRIS = 0; e simule no modo contnuo, quando o simulador parar no breakpoint, seleccione o logic analyser atravs do caminho View -> Simulator Logic Analyser, aps pressionar o boto channel seleccione o canal RB7 como mostra a figura seguinte.
Pressione o boto OK, e neste momento j tem o analisador lgico configurado, reinicie o simulador no modo animado e verifique o estado do pino 7 do porto B em funo do tempo, a figura seguinte mostra o resultado.
Pgina 39
Depurador/Gravador PICKIT 3.
O PICKIT 3 um simples depurador e programador de microcontroladores da Microchip, tratase de uma ferramenta de baixo custo, baseado na programao serie em circuito (ICSP), isto , permite a gravao do microcontrolador inserido no seu prprio circuito. O depurador (Debugger) permite executar o cdigo como um dispositivo real, porque usa um dispositivo de emulao de circuito, todos os recursos disponveis de um determinado microcontrolador esto acessveis de forma interactiva e pode ser definida e modificada pela interface MPLAB IDE. O Depurador/Programador PICKIT 3 tem como caractersticas principais, a execuo de instrues em tempo real, permitir que o microcontrolador trabalhe frequncia mxima e fornecer alimentao ao circuito que se pretende programar ou testar. A figura seguinte mostra o Depurador/Programador PICKIT 3.
Pgina 40
O mesmo procedimento deve ser feito para activar o modo depurador, repare que para activar o modo depurador necessrio desactivar o programador.
Pgina 41
Pgina 42
Fluxogramas.
Os fluxogramas so ferramentas que nos ajudam a codificar um programa, so elementos grficos utilizados para estabelecer a sequncia de operaes necessrias para a execuo de uma tarefa. A tabela seguinte mostra os smbolos mais utilizados na construo de fluxogramas.
Inicio ou terminao
Processo
Dados
Tomada de deciso
Pgina 43
Agora que j se conhecem os smbolos para construir um fluxograma, o passo seguinte construir um simples exemplo de aplicao com fluxogramas, o exemplo consiste em somar dois nmeros e verificar se o resultado positivo, se sim activa uma sada, caso contrario activa outra sada.
Inicio
Carrega A
Carrega B
Soma A + B
Resultado positivo ?
Activa sada 1
Activa sada 2
Fim
lgebra de booleana.
A lgebra booleana um ramo da matemtica, que tem como funo a resoluo de problemas lgicos, baseado em regras e conceitos lgicos simples, proposies e operadores lgicos relacionais. Uma proposio uma afirmao que pode ser classificada como sendo verdadeira ou falsa, duas ou mais proposies podem ser relacionadas com o uso de operadores lgicos E, OU e NO. A tabela seguinte mostra a tabela de verdade para os diferentes operadores lgicos: A 0 0 1 1 B 0 1 0 1 E 0 0 0 1 A 0 0 1 1 B 0 1 0 1 OU 0 1 1 1
A 0 1
NO 1 0
Pgina 44
Variveis e dados.
Uma varivel uma representao simblica para elementos pertencentes a um conjunto, as variveis so armazenadas na memria do microcontrolador e pode assumir qualquer valor dentro dos valores possveis, repare que os valores possveis esto definidos nas especificaes do compilador. As variveis so classificadas segundo o tipo de contedo que armazena, podendo ser numricas, caracteres, alfanumricas e lgicas.
Operadores.
Os operadores so elementos, para relacionar ou modificar dados ou variveis, podemos classificar os operadores em cinco categorias: Matemticos. Relacionais. Lgicos. Lgicos bit a bit. Memoria.
Introduo a linguagem C.
Palavras reservadas.
A linguagem C possui um conjunto de palavras reservadas ou comandos para os quais j existe interpretao prvia pelo compilador, estas palavras no podem ser usadas, a tabela seguinte mostra as palavras reservadas. Auto Continue Enum If Short Switch Volatile Break Default Extern Int Signed Typedef While Case Do Float Long Sizeof Union Char Double For Register Static Unsigned Const Else Goto Return Struck Void
Identificadores.
Um identificador o nome dado s variveis, funes e outros elementos da linguagem C, pode ser composto por caracteres e letras, o nico carcter permitido na construo de identificadores o sublinhado _, alem disso um identificador s pode ser iniciado por uma letra ou sublinhado, iniciar com um nmero torna invalido o identificador.
Pgina 45
Exemplo:
unsigned char aux = 0x41; unsigned int aux1 = 0x1234; unsigned int aux2; aux2 = 0x4321; O cdigo acima descrito, declara trs variveis, uma do tipo char e duas do tipo inteiro, reparese que as variveis podem ou no ser inicializadas.
Declarao de constantes.
As constantes so valores fixos e que no podem ser alterados pelo programa, normalmente usado para definir valores fixos. Exemplo: #define FREQ_CRISTAL unsigned long Clock; Clock = FREQ_CRISTAL / 4; O cdigo acima descrito, define uma constante cujo valor 20000000, que corresponde a frequncia do oscilador, esta constante pode ser utilizado para calcular a frequncia de instrues do C. (20000000) //20Mhz
Pgina 46
Operadores.
Aritmticos.
Os operadores aritmticos so utilizados para efectuarem determinadas operaes matemticas em relao a um ou mais dados, as linhas seguintes mostram alguns dos operadores disponveis na linguagem C para operaes aritmticas. a = 7; b = 2; Operador de adio. c = a + b; Operador de subtraco. c = a b; Operador de multiplicao. c = a * b; Operador de diviso. c = a / b; Na diviso existe o operador resto %, que utilizado para retornar o resto de uma operao de diviso inteira. c = a / b; c = a % b; c = 7 / 2 = 3 (Resultado para uma diviso inteira). c = 7 % 2 = 1 (Resto da diviso inteira).
Operador incremento e decremento. a++; (Incrementa o contedo da varivel a uma unidade). a -- ; (Decrementa o contedo da varivel a uma unidade). b = a++; b = ++ a; (O valor de a armazenado em b, e de seguida o valor de a incrementado). (O valor de a incrementado, e de seguida o valor de a armazenado em b).
Relacionais.
Os operadores relacionais so usados para testes condicionais, para determinar a relao existente entre dados, as linhas seguintes mostram os operadores relacionais e a sua aco. Operador > >= < Aco Maior que Maior ou igual Menor que Operador <= == != Aco Menor ou igual a Igual a Diferente de
Pgina 47
Lgicos.
Os operadores lgicos so utilizados para realizar conjunes, disjunes ou negaes entre elementos num teste condicional, dos operadores lgicos apenas podem resultar um de dois valores, verdadeiro ou falso. Operador && || ! x = 10; If (x > 5 && x < 20) { y= x; } Dentro dos operadores lgicos, ainda existem os operadores lgicos bit a bit, que so utilizados para realizar operaes entre elementos ou variveis, o resultado de uma operao lgico bit a bit, pode resultar em um valor do mesmo tamanho dos elementos operados. Operador & | ^ ~ >> << Aco AND OR XOR NOT Deslocamento a direita Deslocamento a esquerda Aco AND OR NOT
Operador AND (&) AND lgico entre dois nmeros. x1 = 100; x2 = X1 & 20; Decimal Binrio 100 01100100 AND 15 00001111 Resultado 4 00000100 Desligar o bit0 de um porto sem interferir com os outros bits. PORTB = PORTB & b11111110; Que equivalente a: PORTB &= b11111110;
Pgina 48
Operador OR (I) OR lgico entre dois nmeros. x1 = 100; x2 = X1 I 20; Decimal 100 OR 00001111 Resultado 111 01101111 Activar o bit0 de um porto sem interferir com os outros bits. PORTB = PORTB & b00000001; Que equivalente a: PORTB |= b00000001; 15 Binrio 01100100
Operador NOT (~) NOT lgico de um nmero. x1 = 100; x2 = ~x1; Decimal Binrio 100 01100100 Resultado da operao NOT 155 10011011 Operadores de deslocamento << e >> x1 = 100; x2 = x1 << 4; x3 = x1 >> 4; Varivel x2 x3 Decimal 100 100 Binrio 01100100 01100100 Deslocamento << 4 >> 4 Resultado 01000000 00000110
Pgina 49
Memoria.
Os operadores de memria, chamados de operadores de ponteiros, permitem o acesso directo a qualquer endereo de memria do sistema, existem dois tipos de operadores, que so tambm complementares. O operador &, que retorna o endereo de memoria do seu operando. O operador *, que retorna o contedo da posio de memoria endereada, pelo operando que o segue. Exemplo: unsigned int *endereo, x, y; x = 5; endereco = &x; y = *endereco; Neste exemplo podemos verificar, que o endereo da varivel x foi copiado para a varivel endereo, que por sua vez na linha de cdigo seguinte, copiou o seu contedo para a varivel y, o resultado y = 5.
Associao de operadores.
A linguagem C, permite a associao de operadores, permitindo assim reduzir cdigo, as linhas seguintes mostram a forma expandida e a reduzida. Em termos de operaes de atribuio temos, no caso da forma expandida: varivel = varivel (operando) valor (ou varivel) A forma reduzida reduz o comando a seguinte forma: varivel (operando) = valor (ou varivel) Forma expandida x=x+y x=x-y x=x*y x=x/y x=x%y x=x&y x=x|y x = x ^y x = x << y x = x >> y Forma reduzida x += y x -= y x *= y x /= y x %= y x &= y x |= y x ^= y x <<= y x >>= y
Pgina 50
Declaraes de controlo.
As declaraes de controlo, so ferramentas importantes nas linguagens de programao, pois permitem testar condies e executar um cdigo em funo do resultado do teste da condio, tambm permite a repetio de comandos enquanto uma condio se verificar verdadeira.
Comando IF.
O comando IF, utilizado para executar um comando ou um bloco de comandos se uma determinada condio for verdadeira. Normalmente acompanhada pelo comando ELSE, que tem a funo de executar outro comando ou bloco de comandos caso a condio no seja verdadeira. A forma geral : IF (condio) { Comando1; Comando2; Comando3; } ELSE { Comando3; Comando4; Comando5; } Exemplo: int x = 5; if ( x == 5) { Led0 = 1; } else { Led0 = 0; } O comando IF, no necessita de operador relacional ou lgico, porque apenas testa se a condio verdadeira ou falsa, em termos prticos se zero ou diferente de zero. int x = 5; if ( x) Led0 = 1; Como o valor de x diferente de zero executa o comando Led0 = 1.
Pgina 51
Comando SWITCH.
O comando SWITCH, utilizado para comparaes sucessivas, em termos prticos este comando uma espcie de comando IF mas para mltiplas comparaes, sendo possvel executar este comando com comandos IF. int x = 5; switch (x) { case 1: Comando 1; break; . . case 5: Comando 5; break; . . case n: Comando n; break; default: Comando m; break; } No comando SWITCH o valor da varivel testada com a constante especificada pela clusula case, no caso da varivel e a constante terem o mesmo valor, os comandos da clusula so executados, caso no exista correspondncia entre a varivel e as constantes, ento os comandos especificados pela clusula default sero executados, repare que possvel utilizar o comando SWITCH sem recorrer a clusula default, veja o exemplo seguinte. A clusula break possui a funo de terminar a sequncia de comandos de uma clusula case. switch (x) { case 0: Led0 = 0; break; case 1: Led0 = 1; break; }
Pgina 52
Comando FOR.
O comando FOR um dos comandos mais utilizados em estruturas de repetio, a forma geral em linguagem C a seguinte: for ( inicializao ; condio ; incremento ) { comando; } O que o comando FOR faz , inicializar uma varivel e executa tantas vezes um comando at que a condio seja verdadeira, o incremento serve para incrementar a varivel. unsigned char a; unsigned char b = 0; for ( a = 0; a < 10 ; a++) { b++; } Dentro de um ciclo for possvel utilizar a clusula break, que tem a funo de quebrar o ciclo FOR, repare ainda que possvel utilizar mais que uma varivel de controlo dentro do ciclo for, exemplo seguinte mostra como quebrar um ciclo for e o uso de vrias varveis de controlo do ciclo FOR. unsigned char a, b ; unsigned char c = 0 ; for ( a = 0 , b = 0 ; a < 10 ; a++ , b ++) { if ( Led0 == 1 ) { break; } c++; }
Comando WHILE.
O comando WHILE, tem a funo de executar o comando associado tantas vezes at que a condio seja verdadeira ou tenha o valor lgico um. Tambm no comando WHILE possvel quebrar o ciclo usando a clusula break. while ( condio ) { comando; }
Pgina 53
Comando DO-WHILE.
A diferena entre este comando e o comando WHILE, que o comando WHILE verifica a condio no inicio do ciclo e o comando DO WHILE verifica a condio no fim do ciclo. Tal como no comando WHILE possvel utilizar a clusula break para quebrar o ciclo. A forma geral e a seguinte: do { comando; } while ( condio );
Comando GOTO.
Por ltimo temos o comando GOTO, este comando tem a funo de desvio incondicional do programa, apesar de ser um comando pouco usado em linguagem C, as vezes utilizado para aumentar a velocidade e eficincia do programa, repare que o comando GOTO tem a mesma funo que a instruo GOTO, disponvel no conjunto de instrues dos microcontroladores PIC. unsigned char a = 0;
loop: a++; if ( a < 10 ) { goto loop; } Pgina 54 Bernardino Neves 2011 Programao em C para microcontroladores
Pgina 55
Matrizes de dados.
Uma matriz de dados um conjunto de dados homogneo referenciado por um identificador nico, entende-se por dados homogneos variveis ou dados do mesmo tipo, assim uma matriz um conjunto de variveis do mesmo tipo e referenciadas pelo mesmo identificador. A declarao de uma matriz em linguagem C feita utilizando os colchetes [ ], em que o seu contedo o tamanho ou dimenso da matriz, repare que existem matriz de uma nica dimenso e matrizes de varias dimenses. unsigned char a [5]; Esta declarao cria uma matriz do tipo char sem sinal, de dimenso 5, isto , uma tabela de 5 elementos, em que cada elemento indexado por um ndice, iniciado pelo ndice zero. Identificador a[ 0 ] a[ 1 ] a[ 2 ] a[ 3 ] a[ 4 ] Exemplo: unsigned char a [5]; unsigned char b; for ( b = 0; b < 5; b++) { a[b] = b; } O exemplo acima descrito inicializa a matriz, fazendo corresponder o seu contedo ao seu ndice, o resultado final : a[0] = 0 a[1] = 4 a[2] = 4 a[3] = 4 a[4] = 4 No entanto possvel, iniciar o contedo da matriz na declarao da mesma, usando a declarao seguinte: unsigned char a [] = { 2 , 4 , 6 , 8 , 10 }; Para as matrizes de vrias dimenses, o conceito similar ao de uma nica dimenso, podemos ver as matrizes multidimensionais como a associao de vrias matrizes unidimensionais. unsigned char a [2] [3]; Endereo 0x0A00 0x0A01 0x0A02 0x0A03 0x0A04 Contedo 2 4 6 8 10
Pgina 56
A declarao em cima descrita, cria uma matriz multidimensional de duas linhas e 3 colunas, a representao grfica para essa matriz : a [ 0 ][ 0 ] a [ 1 ][ 0 ] Exemplo: unsigned char a [2] [3]; unsigned char b; unsigned char c; unsigned char d = 0; for ( b = 0; b < 2; b++) { for ( c = 0; c < 3; c++) { a[b] [c] = d++; } } O resultado final : a [ 0 ][ 0 ] 0 a [ 1 ][ 0 ] 3 a [ 0 ][ 1] 1 a [ 1 ][ 1 ] 4 a [ 0 ][ 2 ] 2 a [ 1 ][ 2 ] 5 a [ 0 ][ 1] a [ 1 ][ 1 ] a [ 0 ][ 2 ] a [ 1 ][ 2 ]
Para matrizes com mais de duas dimenses, o procedimento igual ao da matriz com duas dimenses, vejamos o seguinte exemplo, uma matriz de trs dimenses. unsigned char a [2] [3] [2]; a[0][0][0] = 1; a[0][0][1] = 2; a[0][1][0] = 3; a[0][1][1] = 4; a[0][2][0] = 5; a[0][2][1] = 6; a[1][0][0] = 7; a[1][0][1] = 8; a[1][1][0] = 9; a[1][1][1] = 10; a[1][2][0] = 11; a[1][2][1] = 12;
Pgina 57
Existe uma relao entre as matrizes e os ponteiros, a simples referencia ao nome da matriz, sem qualquer especificao de ndice, retorna o endereo do primeiro elemento da matriz, outro aspecto que os ponteiros podem ser indexados como as matrizes, vejamos o seguinte exemplo: unsigned char *ponteiro, matriz[5]; ponteiro = matriz; matriz[0] = 50; ponteiro[1] = 60; No exemplo em cima descrito, podemos verificar que o ponteiro aponta para o endereo do primeiro elemento da matriz, o primeiro elemento da matriz foi carregado com o valor 50 e o segundo elemento com o valor 60. Existe ainda um tipo de dado especial, que se enquadra dentro das matrizes, que so as STRING de caracteres, trata-se de uma matriz unidimensional de caracteres, com caractersticas que a diferem das matrizes normais, por exemplo o nmero total da matriz deve ser sempre 1 carcter maior que a quantidade de caracteres a ser armazenada na matriz, visto que as strings de caracteres so terminadas por um carcter nulo. Exemplo: char palavra*11+ = Exemplo;
Estruturas.
Uma estrutura um agrupamento de variveis individuais, referenciadas por um nome comum, para criar uma estrutura necessrio passar por duas etapas, a primeira definida pela estrutura de dados qual se atribui um identificador, a segunda etapa criar as varveis de estrutura, vejamos o exemplo seguinte. struct Tempo { int Horas; int Minutos; int Segundos; }; struct Tempo Horario; No exemplo em cima descrito definimos como identificador da estrutura o nome Tempo e como variveis da estrutura as variveis inteiras Hora, Minutos e Segundos. No final criada uma nova varivel do tipo Tempo, com o nome de Horario. A forma geral de acesso a um elemento de uma estrutura do exemplo acima descrito : Horario.Hora = 0;
Pgina 58
A linguagem C tambm permite a criao de ponteiros para as estruturas de dados, uma das principais aplicaes deste tipo de ponteiro a passagem de estruturas por referncia na chamada de funes. Para declarar um ponteiro para uma estrutura, vamos usar como exemplo o exemplo anterior, criando assim um ponteiro para a varivel de estrutura Tempo. void main (void) { struct Tempo { int Horas; int Minutos; int Segundos; }; struct Tempo Horario; struct Tempo *Ponteiro; while (1) { Horario.Horas = 17; Horario.Minutos = 20; Horario.Segundos = 53; Ponteiro = &Horario; (*Ponteiro).Horas = 18; (*Ponteiro).Minutos = 15; (*Ponteiro).Segundos = 23; } } Pelo exemplo em cima descrito, podemos verificar que temos duas variveis de estrutura, das quais uma definida por ponteiros, isto , temos um ponteiro que aponta para uma varivel de estrutura, ao correr este programa no modo simulao podemos verificar que o ponteiro aponta para o varivel de estrutura Horario, visto que o ponteiro carregado com o valor do endereo da estrutura Horario, que seguidamente carregando essa varivel com outros valores distintos. Outro conceito interessante, ainda no campo das estruturas, o acesso a bits individuais numa varivel. Na verdade podemos dizer que os campos de bits so uma extenso das estruturas de dados, uma vez que apenas se podem definir dentro de uma estrutura de dados, vejamos o seguinte exemplo: struct Estado { int Flag1 : 1; int Flag2 : 1; int Flag3 : 1; }Flag; //Ciclo infinito
Pgina 59
Unies.
Uma unio um elemento que permite que uma posio de memria RAM seja compartilhada por diversos tipos de variveis, o formato geral muito parecido com o das estruturas de dados, vejamos o seguinte exemplo: union { Teste int variavel_1; unsigned int variavel_2; struct Tempo Horario; struct Estado Flag; char variavel_3; long variavel_4; }
Pgina 60
Funes.
A linguagem C, permite modularizar uma sequncia de comandos, para que possamos executala sempre que necessrio, sem a necessidade de repetir em termos de cdigo esses comandos. O formato geral de uma funo me linguagem C : Tipo_da_funo Nome_da_Funo (Parematros _da_Funo) { Comando_1; Comando_2; Comando_n; } O tipo da funo, usado para especificar o tipo de dado que a funo vai devolver, o nome da funo o identificador utilizado para especificar o nome para o qual ser conhecida a funo pelo programa, os parmetros da funo so utilizados para passar o contedo de variveis para dentro da funo, para que a funo os possa utilizar para efectuar procedimentos. Em regra, na elaborao do programa, a incluso de funes faz-se no decorrer do desenvolvimento do programa, nesse sentido as funes devem ser criadas no fim do programa, adoptando este principio necessrio no inicio do programa informar o compilador que existem funes no fim do programa, esta informao indicada pelo prottipo da funo, isto , o prottipo de uma funo uma declarao previa com o intuito de informar o compilador o formato da declarao da funo, incluindo o tipo de dado de retorno e os tipos e quantidades de parmetros, normalmente so declarados no inicio do programa, sempre antes do programa fazer referencia a funo. Exemplo: unsigned char Soma (unsigned char b, unsigned char c); void main (void) { unsigned char a; a = Soma (3,2); } unsigned char Soma (unsigned char b, unsigned char c) { unsigned char soma; soma = b + c; return soma; }
Pgina 61
Pgina 62
Para usar o bootloader em questo necessrio ter presente os seguintes requisitos: Ter uma porta serie ou um conversor USB/RS232, no computador. Hardware de desenvolvimento. A ferramenta de programao para carregar o bootloader no C. Instalao do software PC AN1310.exe.
A primeira etapa instalar o software PC microchip_serial_bootloader_an1310.exe. A instalao do software requer uma ligao ao servidor da Microchip.
Pgina 63
Na segunda janela desactive o item Install Babylon Toolbar , e clique em seguida em seguinte.
Pressione o boto seguinte ate a janela que indica localizao da instalao, mude a localizao ou deixe a localizao por defeito.
Pgina 64
Aps a instalao do software PC AN1310, chega a altura de o testar, mas antes de o fazer necessrio conhecer o hardware de desenvolvimento, como hardware de desenvolvimento foi desenvolvido um circuito com o microcontrolador PIC18F4620, que permita gravao dos programas desenvolvidos por RS232, as figuras seguintes mostram os circuitos implementados.
Pgina 65
A segunda etapa gravar no microcontrolador o seu respectivo bootloader, o mesmo pode ser encontrado na pasta que foi instalado pelo software de instalao.
Aps gravar o bootloader, atravs de um programador, j nos encontramos, com tudo o que necessrio para testar todas as ferramentas, vamos comear por testar o software PC AN1310, a figura seguinte mostra o setup experimental para um primeiro teste, que consiste em ligar o software PC ao hardware proposto.
Pgina 66
DevBoarb PIC
RS232
Na terceira etapa, ligue o interruptor do kit Devboard PIC, para alimentar o kit e execute o software PC AN1310, que se encontra na pasta que foi instalado pelo software de instalao.
Aps executar os passos anteriores com sucesso, chega a altura de configurar as comunicao por RS232, apesar de o bootloader instalado no microcontrolador, reconhecer automaticamente o baud rate, o mesmo poder ser configurado no software PC, atravs do item Settings, como mostra as figuras seguintes, o qual poderemos deixar nos 19200 bps e seleccionar a porta COM respectiva.
Pgina 67
Por ltimo, para testar o software PC pressione o boto bootloader mode, como resposta possvel visualizar o mapa de memria do microcontrolador e o microcontrolador utilizado.
Pgina 68
Portos I/O.
Os portos I/O, so perifricos que nos permitem comunicar com o mundo exterior, podem ser configurados como entradas ou como sadas, quando configurado como entradas o nvel lgico presente num determinado pino pode ser lido pelo programa, quando configurado como sada, podemos alterar o nvel lgico de um determinado pino atravs do nosso programa. Durante a execuo de um programa podemos alterar o sentido dos dados nos pinos de acordo com as necessidades, isto , num determinado momento o pino pode estar configurado como entrada e no instante seguinte pode ser configurado como sada. O microcontrolador em estudo, possui 5 portos I/O, que se encontram multiplexados com outros perifricos disponveis pelo microcontrolador. Cada pino do microcontrolador apenas pode ter uma nica funo, para o mesmo instante de tempo, ou seja, ou funciona como pino I/O ou tem a funo associada a um determinado perifrico. O controlo dos portos I/O feito essencialmente atravs de 3 registos: Registo TRISx Defini a direco dos dados no porto x, se o bit for 0 o pino esta configurado como sada, se for 1 o bit esta configurado como entrada; Registo PORTx Registo para leitura do estado lgico dos pinos associados ao porto x; Registo LATx Registo para escrita no porto x. A figura 63 mostra o modelo simplificado de uma porta I/O do microcontrolador PIC18F4620.
Um ponto importante a salientar que ambos os registos TRISx, PORTx e LATx, so registos de 8 bits, e que a posio de cada bit corresponde a posio de cada pino do respectivo porto. Por exemplo o bit 0 do registo TRISD, configura a direco dos dados do pino 0 do porto D, e a escrita e leitura nesse pino feito a partir do bit 0 do registo PORTD para leitura do estado ou o bit 0 do registo LATD para mudana do estado lgico do pino 0 do porto D.
Pgina 69
Escrita em um pino.
A escrita em um pino, depende tambm do modo como foi configurado o registo TRISx, ou seja, para operaes de escrita em pinos I/O, o bit do registo TRISx correspondente ao pino que pretendemos escrever, deve ser configurado com o valor lgico 0. Existem dois registos que permitem a escrita de um estado lgico em um pino I/O, o registo LATx e o registo PORTx. Tal como acontece na leitura de um pino, o compilador C18 permite operaes de escrita bit a bit, para o efeito usamos as estruturas TRISxbits.TRISy, PORTxbits.Rxy e LATxbits.LATxy, em que x corresponde ao identificador do porto e y ao pino que pretendemos ler. Exemplo: Pretende-se configurar os pinos 0 e 1 do porto D como sadas. TRISDbits.TRISD0 = 0; TRISDbits.TRISD1 = 0; LATDbits.LATD0 = 1; LATDbits.LATD1 = 0; //Coloca o pino 0 do porto D com o nvel lgico 1. //Coloca o pino 1 do porto D com o nvel lgico 0.
Pgina 70
Exemplos de aplicao.
Exemplo 1 Led a piscar com frequncia igual a 1Hz.
O exemplo consiste em criar uma funo, que gera um atraso, onde o argumento o tempo em milissegundos que se pretendo do atraso, para colocar um led a piscar com uma frequncia de 1 HZ. Layout do circuito:
Led R 270
18 RC3 RC4 23
19
RD0
RD3
22
20
RD1
RD2
21
Funo Delay_ms():
void Delay_ms ( int Delay) { unsigned int aux1; for ( aux1 = 0 ; aux1 < Delay ; aux1++) { Delay1KTCYx(CLOCK); } }
A funo em cima descrita gera um atraso de 1ms vezes o numero do argumento da funo, isto , se pretendermos um atraso de 1 segundo, o argumento da funo deve ser igual a 1000. Programa:
//Incluso do microcontrolador a utilizar #include <p18cxxx.h> //Definio de variaveis #define FREQ_CRISTAL #define CLOCK #define Pino //Prototipos de funes do programa void Delay_ms ( int a); //Programa principal void main (void) { TRISD &= 0xFE; while (1) { Delay_ms(500); Pino = ~Pino; } }
//Configura pino RD0 como sada //Ciclo infinito //Gera um delay de 500ms por polling //Comuta o estado do pino RD0
Pgina 71
Led 0
R 270
19 RD0 RD3 22
R 270 R 270
20 RD1 RD2 21
Led 4
Led 1
R 270
Led 3
Led 2
Funo Inicia_Hardware():
void Inicia_Hardware (void) { TRISD &= 0xF0; TRISC &= 0xEF;
//Configura pino RD0, RD1, RD2 e RD3 como saida //Configura pino RC4 como saida //No interfere com os outros pinos //Inicia o Led0 a zero. //Inicia o Led1 a zero. //Inicia o Led2 a zero. //Inicia o Led3 a zero. //Inicia o Led4 a zero.
Programa:
//Incluso do microcontrolador a utilizar #include <p18cxxx.h> //Definio de variveis #define FREQ_CRISTAL #define CLOCK #define LED0 #define LED1 #define LED2 #define LED3 #define LED4 //Prototipos de funes do programa void Inicia_Hardware (void); void Delay_ms ( int a);
Pgina 72
//Programa principal void main (void) { unsigned char aux1; Inicia_Hardware(); while (1) { //Primeira sequncia for ( aux1 = 0 ; aux1 < 4 ; aux1++) { if( aux1 == 0) { Delay_ms(100); LED0 = ~LED0; } else { Delay_ms(100); LED0 = ~LED0; LED4 = ~LED4; } Delay_ms(100); LED1 = ~LED1; LED0 = ~LED0; Delay_ms(100); LED2 = ~LED2; LED1 = ~LED1; Delay_ms(100); LED3 = ~LED3; LED2 = ~LED2; Delay_ms(100); LED4 = ~LED4; LED3 = ~LED3; } //Segunda sequencia LED4 = ~LED4; for ( aux1 = 0 ; aux1 < 4 ; aux1++) { if( aux1 == 0) { Delay_ms(100); LED4 = ~LED4; } else { Delay_ms(100); LED4 = ~LED4; LED0 = ~LED0; } Delay_ms(100); LED3 = ~LED3; LED4 = ~LED4; Delay_ms(100); LED2 = ~LED2; LED3 = ~LED3; Delay_ms(100); LED1 = ~LED1; LED2 = ~LED2;
//Ciclo infinito
Pgina 73
Pgina 74
Delay_ms(100); LED4 = ~LED4; LED3 = ~LED3; Delay_ms(100); LED3 = ~LED3; LED4 = ~LED4; Delay_ms(100); LED2 = ~LED2; LED3 = ~LED3; Delay_ms(100); LED1 = ~LED1; LED2 = ~LED2; } LED1 = ~LED1; } } //Fim do ciclo infinito //Fim do programa principal
Layout do circuito:
18 RC3 RC4 23
Led
R 270
19
RD0
RD3
22
20
RD1
RD2
21
Funo Inicia_Hardware():
void Inicia_Hardware (void) { TRISD &= 0xFD; LED0 = 0; }
Programa:
//Incluso do microcontrolador a utilizar #include <p18cxxx.h> //Definio de variveis #define FREQ_CRISTAL #define CLOCK #define LED0 //Prottipos de funes do programa void Inicia_Hardware (void); void Delay_ms ( int a);
Pgina 75
Pgina 76
R 10K
RB0
33
R 470
19
RD0
Led 1
R 270
20 RD1
Funo Inicia_Hardware():
void Inicia_Hardware (void) { TRISD &= 0xFD; TRISB |= 0x01; LED0 = 0; }
//Configura pino RD1 como sada //Configura Pino RB0 como entrada
Programa:
//Incluso do microcontrolador a utilizar #include <p18cxxx.h> //Definio de variveis #define FREQ_CRISTAL #define CLOCK #define LED0 #define IN0 //Prototipos de funes do programa void Inicia_Hardware (void); //Programa principal void main (void) { Inicia_Hardware(); while (1) { if ( IN0 == 0) { LED0 = 1; }
//Ciclo infinito
Pgina 77
R 10K
RB0
33
R 470
19
RD0
Led 1
R 270
20 RD1
Funo Inicia_Hardware():
void Inicia_Hardware (void) { TRISD &= 0xFD; TRISB |= 0x01; LED0 = 0; }
//Configura pino RD1 como sada //Configura Pino RB0 como entrada
Programa:
//Incluso do microcontrolador a utilizar #include <p18cxxx.h> //Definio de variveis #define FREQ_CRISTAL #define CLOCK #define LED0 #define IN0 //Prototipos de funes do programa void Inicia_Hardware (void);
Pgina 78
//Programa principal void main (void) { unsigned char aux1=0; Inicia_Hardware(); while (1) { if ( IN0 == 0) { while(IN0 == 0); LED0 = ~LED0; } } } //Fim do ciclo infinito //Fim do programa principal //Ciclo infinito
R 10K IN0
RB1 34
VCC
RB0
33
R 470
19
RD0
Led 1
R 270
20 RD1
Funo Inicia_Hardware():
void Inicia_Hardware (void) { TRISD &= 0xFD; TRISB |= 0x03; LED0 = 0; }
//Configura pino RD1 como sada //Configura Pino RB0 como entrada
Pgina 79
//Ciclo infinito
//Desactiva a saida
R 10K
RB0
33
R 470
19
RD0
Led 1
R 270
20 RD1
Pgina 80
Funo Inicia_Hardware():
void Inicia_Hardware (void) { TRISD &= 0xFD; TRISB |= 0x01; LED0 = 0; }
//Configura pino RD1 como sada //Configura Pino RB0 como entrada
Programa:
//Incluso do microcontrolador a utilizar #include <p18cxxx.h> //Definio de variveis #define FREQ_CRISTAL #define CLOCK #define LED0 #define IN0 //Prototipos de funes do programa void Inicia_Hardware (void); void Delay_ms ( int a); //Programa principal void main (void) { Inicia_Hardware(); while (1) { if ( IN0 == 0 ) { LED0 = 1; while(IN0 == 0); Delay_ms(5000); LED0 = 0; } } } //Ciclo infinito
//Activa a sada //Aguarda que o boto deixe de ser pressionado //Aguarda de 5 segundos //Desactiva a sada //Fim do ciclo infinito //Fim do programa principal
Pgina 81
R 10K IN0
RB1 34
VCC
RB0
33
R 470
OUT0
R 270
19 RD0
R 270
20 RD1 RD2 21
R 270
OUT2 OUT1
Funo Inicia_Hardware():
void Inicia_Hardware (void) { TRISD &= 0xF8; TRISB |= 0x03; OUT0 = 0; OUT1 = 0; OUT2 = 0; }
//Configura pino RD0, RD1 e RD2 como sadas //Configura pino RB0 e RB1 como entradas //Inicializa as sadas a zero
Programa: //Incluso do microcontrolador a utilizar #include <p18cxxx.h> //Definio de variveis #define FREQ_CRISTAL #define CLOCK #define OUT0 #define OUT1 #define OUT2 #define IN0 #define IN1
Pgina 82
//Prototipos de funes do programa void Inicia_Hardware (void); void Delay_ms ( int a); //Programa principal void main (void) { Inicia_Hardware(); while (1) { if ( IN0 == 0 ) { OUT0 = 1; OUT2 = 1; Delay_ms(5000); OUT2 = 0; OUT1 = 1; while(IN1 == 0); OUT0 = 0; OUT1 = 0; OUT2 = 0; } } } //Fim do ciclo infinito //Fim do programa principal
//Ciclo infinito //Verifica se o boto de arranque est pressionado //Activa a configurao estrela //Aguarda de 5 segundos //Comuta para a configurao tringulo
R 10K IN0
RB0 33
R 470
SEG A
R 270
17 RC2
SEG B
R 270
18 Rc3 RC4 21
R 270 R 270
19 RD0 RD3 21
SEG G
SEG F
SEG D
R 270
SEG E
Pgina 83
Funo Inicia_Hardware():
void Inicia_Hardware (void) { TRISC &= 0xE3; TRISD &= 0xF0; TRISB |= 0x01; SegA = 0; SegB = 0; SegC = 0; SegD = 0; SegE = 0; SegF = 0; SegG = 0; }
//RC2, RC3 e RC4 como sadas //RD0, RD1, RD2 e RD3 como sadas //Configura Pino RB0 como entrada //Inicializa as sadas a zero
Funo Escreve_Digito():
void Escreve_Digito( unsigned char a) { switch (a) { case 0: SegA = 1; SegB = 1; SegC = 1; SegD = 1; SegE = 1; SegF = 1; SegG = 0; break; case 1: SegA = 0; SegB = 1; SegC = 1; SegD = 0; SegE = 0; SegF = 0; SegG = 0; break; case 2: SegA = 1; SegB = 1; SegC = 0; SegD = 1; SegE = 1; SegF = 0; SegG = 1; break; case 3: SegA = 1; SegB = 1; SegC = 1; SegD = 1; SegE = 0; SegF = 0; SegG = 1; break;
Pgina 84
case 4: SegA = 0; SegB = 1; SegC = 1; SegD = 0; SegE = 0; SegF = 1; SegG = 1; break; case 5: SegA = 1; SegB = 0; SegC = 1; SegD = 1; SegE = 0; SegF = 1; SegG = 1; break; case 6: SegA = 1; SegB = 0; SegC = 1; SegD = 1; SegE = 1; SegF = 1; SegG = 1; break; case 7: SegA = 1; SegB = 1; SegC = 1; SegD = 0; SegE = 0; SegF = 0; SegG = 0; break; case 8: SegA = 1; SegB = 1; SegC = 1; SegD = 1; SegE = 1; SegF = 1; SegG = 1; break; case 9: SegA = 1; SegB = 1; SegC = 1; SegD = 1; SegE = 0; SegF = 1; SegG = 1; break; default: break; } }
Pgina 85
(20000000) (5) (PORTCbits.RC2) (PORTCbits.RC3) (PORTDbits.RD0) (PORTDbits.RD1) (PORTDbits.RD2) (PORTDbits.RD3) (PORTCbits.RC4) (PORTBbits.RB0)
Pgina 86
Sada
Entrada
Sada
Entrada
VCC Led desligado GND VCC Led ligado GND Led ligado Led desligado
O tempo dedicado a entrada deve ser de modo a que o efeito de intermitncia seja minimizado.
Para utilizar esta tcnica, podemos recorrer a uma base de tempo de 20ms, onde 19ms so dedicados a sada e 1ms so dedicados a entrada. No exemplo o boto IN0 liga o led e o boto IN1 desliga o led.
Layout do circuito:
VCC
R 10K IN1
RB1 34
VCC
R 470
R 10K IN0
RB0
33
R 10K
R 330
Led
Funo Inicia_Hardware():
void Inicia_Hardware (void) { TRISB |= 0x02; OUT0 = 0; }
Pgina 87
//Prototipos de funes do programa void Inicia_Hardware (void); void Delay_ms ( int a); //Programa principal void main (void) { unsigned char aux = 0; Inicia_Hardware(); while (1) { if ( IN1 == 0) { aux = 0; OUT0 = 0; } DIR = 1; if (IN0 == 0) { aux = 1; } DIR = 0; if( aux == 1) { OUT0 = 1; Delay_ms(19); } } } //Configura RB0 como sada //Se IN0 foi pressionado //Liga o led e aguarda 19ms. //Ciclo infinito //Verifica se o boto IN1 foi pressionado
//Desliga o Led
Pgina 88