apostila de microcontroladores pic e perifericos

Upload: marcelo-c-oliveira

Post on 17-Oct-2015

99 views

Category:

Documents


12 download

TRANSCRIPT

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    1/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIF RICOSwww.tinyurl.com/SanUSB

    APOSTILA DE

    MICROCONTROLADORES

    PIC E PERIFRICOS

    Sandro Juc

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    2/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    2

    1. INTRODUO

    Um microcontrolador um sistema computacional completo, no qual esto includos

    internamente uma CPU (Central Processor Unit), memrias RAM (dados), flash (programa) e

    E2PROM, pinos de I/O (Input/Output), alm de outros perifricos internos, tais como,

    osciladores, canal USB, interface serial assncrona USART, mdulos de temporizao e

    conversores A/D, entre outros, integrados em um mesmo componente (chip).

    O microcontrolador PIC (Periferal Interface Controler), da Microchip Technology Inc.

    (empresa de grande porte, em Arizona, nos Estados Unidos da Amrica), possui uma boa

    diversidade de recursos, capacidades de processamento, custo e flexibilidade de aplicaes.

    1.1. ASSEMBLY X LINGUAGEM C

    A principal diferena entre uma linguagem montada (como assembly) e a linguagem de

    programao C est na forma como o programa objeto (HEX) gerado. Em assembly, o processo

    usado a montagem, portanto devemos utilizar um MONTADOR (assembler), enquanto que em

    linguagem C o programa compilado. A compilao um processo mais complexo do que a

    montagem. Na montagem, uma linha de instruo traduzida para uma instruo em cdigo de

    mquina. J em uma linguagem de programao, no existem linhas de instruo, e sim estruturas

    de linguagem e expresses. Uma estrutura pode ser condicional, incondicional, de repetio, etc...

    As expresses podem envolver operandos e operadores mais complexos. Neste caso, geralmente,

    a locao dos registros de dados da RAM feita pelo prprio compilador. Por isso, existe a

    preocupao, por paret do compilador, de demonstrar, aps a compilao, o percentual de

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    3/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    3

    memria RAM ocupado, pois neste caso relevante, tendo em vista que cada varivel pode

    ocupar at 8 bytes (tipo double).

    Para edio e montagem (gerao do cdigo HEX) de um programa em assembly, os

    softwares mais utilizados so o MPASMWIN (mais simples) e o MPLAB. Para edio e

    compilao em linguagem C (gerao do cdigo HEX), o programa mais utilizado o PIC C

    Compiler CCS.

    Os microcontroladores PIC possuem apenas 35 instrues em assembly para a famlia de

    12 bits (PIC12) e 14 bits (PIC16), descritas nas tabelas abaixo, e 77 instrues para a famlia de

    16 bits (PIC18). A tabela abaixo mostra algumas instrues em assembly.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    4/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    4

    Como pode ser visto, a famlia PIC16F (14 bits com aproximadamente 35 instrues) no

    possui uma instruo em assembly que realize multiplicao ou diviso de dois operandos, o que

    curiosamente presente na linguagem assembly da famlia MCS51 (256 instrues que

    satisfazem a maioria das aplicaes industriais). Portanto, para realizar uma multiplicao,

    necessrio realizar somas sucessivas, ou seja, em vez de multiplicar uma varivel por outra,

    realizar somas de uma varivel em uma terceira rea de memria, tantas vezes quando for o valor

    da segunda varivel. (X * 5 = X + X + X + X + X).

    Mas em linguagem C possvel se utilizar o operador de multiplicao (*), de forma

    simples e prtica. Ao compilar, a linguagem gerada ir converter a multiplicao em somas

    sucessivas sem que o programador se preocupe com isso.

    1.2. VANTAGENS X DESVANTAGENS DA LINGUAGEM C PARA

    MICROCONTROLADORES

    - O compilador C ir realizar o processo de traduo, permitindo uma programao mais

    amigvel e mais fcil para desenvolvimento de aplicaes mais complexas como, por exemplo,

    uso do canal USB e aplicaes com o protocolo I2C.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    5/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    5

    - A linguagem C permite maior portabilidade, uma vez que um mesmo programa pode ser

    recompilado para um microcontrolador diferente, com o mnimo de alteraes, ao contrrio do

    ASSEMBLY, onde as instrues mudam muito entre os diversos modelos de microcontroladoresexistentes como PIC e 8051.

    - Em C para microcontroladores PIC, no necessrio se preocupar com a mudana de banco

    para acessar os registros especiais da RAM como, por exemplo, as portas de I/O e os registros

    TRIS de comando de I/O dos pinos, isto executado pelo prprio compilador atravs das

    bibliotecas.

    - possvel incluir, de forma simples e padronizada, outro arquivo em C (biblioteca) para servir

    como parte do seu programa atual como, por exemplo, incluir o arquivo LCD (#include ),

    desenvolvido por voc anteriormente.

    - O ponto fraco da compilao em C que o cdigo gerado, muitas vezes, maior do que um

    cdigo gerado por um montador (assembler), ocupando uma memria maior de programa e

    tambm uma memria maior de dados. No entanto, para a maioria das aplicaes sugeridas na

    rea de automao industrial, a linguagem C para PIC se mostra a mais adequada, tendo em vista

    que a memria de programa tem espao suficiente para estas aplicaes.

    - Outra desvantagem que o programador no forado a conhecer as caractersticas internas

    do hardware, j que o mesmo se acostuma a trabalhar em alto nvel, o que compromete a

    eficincia do programa e tambm o uso da capacidade de todos os perifricos internos do

    microcontrolador. Isso provoca, em alguns casos, o aumento do custo do sistema embarcado

    projetado com a aquisio de novos perifricos externos.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    6/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    6

    1.3 ARQUITETURAS DOS MICROCONTROLADORES

    A arquitetura de um sistema digital define quem so e como as partes que compe o sistema esto

    interligadas. As duas arquiteturas mais comuns para sistemas computacionais digitais so as

    seguintes:

    - Arquitetura de Von Neuman:A Unidade Central de Processamento interligada memria

    por um nico barramento (bus). O sistema composto por uma nica memria onde so

    armazenados dados e instrues;

    - Arquitetura de Harvard:A Unidade Central de Processamento interligada a memria de

    dados e a memria de programa por barramentos diferentes, de dados e de endereo. O PIC

    possui arquitetura Harvard com tecnologia RISC, que significa Reduced Instruction Set

    Computer (Computador com Conjunto de Instrues Reduzido). O barramento de dados de 8

    bits e o de endereo pode variar de 13 a 21 bits dependendo do modelo. Este tipo de arquitetura

    permite que, enquanto uma instruo executada, uma outra seja buscada na memria, ou seja,

    umPIPELINE (sobreposio), o que torna o processamento mais rpido.

    1.4. O CONTADOR DE PROGRAMA (PC)

    O contador de programa responsvel de indicar o endereo da memria de programa

    para que seu contedo seja transportado para a CPU para ser executado. Na famlia PIC16F elecontm normalmente 13 bits, por isso, pode enderear os 8K words de 14 bits (o PIC16F877A

    possui exatamente 8K words de 14 bits, ou seja, 14 Kbytes de memria de programa). A famlia

    18F ele possui normalmente 21 bits e capaz e enderear at 2 Megas words de 16 bits (o

    PIC18F2550 possui 16K words de 16 bits, ou seja, 32 Kbytes de memria de programa). Cada

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    7/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    7

    Word de 14 ou 16 bits pode conter um cdigo de operao (opcode) com a instruo e um byte de

    dado.

    1.5. BARRAMENTOS

    Um barramento um conjunto de fios que transportam informaes com um propsito

    comum. A CPU pode acessar trs barramentos: o de endereo, o de dados e o de controle. Como

    foi visto, cada instruo possui duas fases distintas: o ciclo de busca, quando a CPU coloca o

    contedo do PC no barramento de endereo e o contedo da posio de memria colocado no

    Registro de instruo da CPU, e o ciclo de execuo, quando a CPU executa o contedo colocado

    no registro de instruo e coloca-o na memria de dados pelo barramento de dados. Isso significa

    que quando a operao do microcontrolador iniciada ou resetada, o PC carregado com o

    endereo 0000h da memria de programa.

    As instrues de um programa so gravadas em linguagem de mquina hexadecimal na

    memria de programa flash (ROM). No incio da operao do microcontrolador, o contador de

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    8/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    8

    programa (PC) indica o endereo da primeira instruo da memria de programa, esta instruo

    carregada, atravs do barramento de dados, no Registro de Instruo da CPU.

    Um opcode (cdigo de instruo), gerado na compilao em hexadecimal, contm uma

    instruo e um operando. No processamento, a CPU compara o cdigo da instruo alocada no

    registro de instruo com o Set de Instrues do modelo fabricado e executa a funo

    correspondente. Aps o processamento, o operando dessa instruo indica para a CPU qual a

    posio da memria de dados que deve ser acessada e, atravs do barramento de controle, a

    CPU comanda a leitura ou a escrita nesta posio.

    Aps o processamento de uma instruo, o PC incrementado para indicar o endereo do

    prximo cdigo de instruo (opcode), da memria de programa, que deve ser carregado no

    registro de instruo.

    1.6. A PILHA (STACK)

    A pilha um local da RAM ( no PIC18F2550 localizada no final dos Registros de

    Funo Especial entre FFDh e FFFh) onde guardado o endereo da memria de programa antes

    de ser executado um pulo ou uma chamada de funo localizada em outra posio de memria.

    1.7. CICLO DE MQUINA

    O oscilador externo (geralmente um cristal) ou o interno (circuito RC) usado para

    fornecer um sinal de clock ao microcontrolador. O clock necessrio para que o

    microcontrolador possa executar as instrues de um programa.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    9/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    9

    Nos microcontroladores PIC, um ciclo de mquina (CM) possui quatro fases de clock que

    so Q1, Q2, Q3 e Q4. Dessa forma, para um clock externo de 4MHz, temos um ciclo de mquina

    (CM=4 x 1/F) igual a 1s.

    O Contador de Programa (PC) incrementado automaticamente na fase Q1 do ciclo de

    mquina e a instruo seguinte resgatada da memria de programa e armazenada no registro de

    instrues da CPU no ciclo Q4. Ela decoficada e executada no prximo ciclo, no intervalo de

    Q1 e Q4. Essa caracterstica de buscar a informao em um ciclo de mquina e execut-la no

    prximo, ao mesmo tempo em que outra instruo buscada, chamada de PIPELINE

    (sobreposio). Ela permite que quase todas as instrues sejam executadas em apenas um ciclo

    de mquina, gastando assim 1 s (para um clock de 4 MHz) e tornando o sistema muito mais

    rpido. As nicas exees referem-se s instrues que geram saltos no contador de programa,

    como chamadas de funes em outro local da memria de programa e os retornos dessas funes.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    10/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    10

    1.8. MATRIZ DE CONTATOS OUPROTOBOARD

    Para desenvolver os projetos e exerccos propostos nessa apostila ser necessrio a uilizao de

    uma Matriz de Contatos (ou Protoboardem ingls), mostrada na figura abaixo, que uma placa

    com diversos furos e conexes condutoras para montagem de circuitos eletrnicos. A grande

    vantagem do Protoboard na montagem de circuitos eletrnicos a facilidade de insero de

    componentes (no necessita soldagem).

    Protoboard

    Na superfcie de uma matriz de contatos h uma base de plstico em que existem centenas de

    orifcios onde so encaixados os componentes ou tambm por ligaes mediante fios. Em sua

    parte inferior so instalados contatos metlicos que interliga eletricamente os componentes

    inseridos na placa que so organizados em colunas e canais. De cada lado da placa, ao longo de

    seu comprimento, h duas colunas completas. H um espao livre no meio da placa e de cada

    lado desse espao h vrios grupos de canais horizontais (pequenas fileiras), cada um com 05

    orifcios de acordo como ilustrado na figura abaixo.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    11/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    11

    Estrutura de umaprotoboard

    Em alguns pontos do circuito necessrio limitar a intensidade da corrente eltrica. Para

    fazer isso utilizamos um componente chamado resistor. Quanto maior a resistncia, menor a

    corrente eltrica que passa num condutor.

    1.9. RESISTORES

    Os resistores geralmente so feitos de carbono. Para identificar qual a resistncia de um

    resistor especfico, comparamos ele com a seguinte tabela:

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    12/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    12

    No caso da imagem, o resistor de 2x105 5%.

    1.10. CAPACITORESCapacitor ou condensador um componente que armazena energia num campo eltrico.

    consistem em dois eletrodos ou placas que armazenam cargas opostas. Estas duas placas so

    condutoras e so separadas por um isolante ou por um dieltrico. Eles so utilizados desde

    armazenar bits nas memrias volteis dinmicas (DRAM) dos computadores, at corrigir o fator

    de potncia de indstrias fornecendo reatncia capacitiva para compensar a reatncia indutiva

    provocada por bobinas e motores eltricos de grande porte.

    A funo mais comum filtrar rudos em circuitor eltricos e estabilizar as fontes,absorvendo os picos e preenchendo os vales de tenso. Os capacitores descarregados so um

    curto e carregados abrem o circuito, por isso so utilizados tambm para isolar fontes CC.

    Os capacitores podem ser carregados e descarregados muito rapidamente, por isso so

    utilzados tambm no flash eletrnico em uma cmera fotogrfica, onde pilhas carregam o

    capacitor do flash durante vrios segundos, e ento o capacitor descarrega toda a carga no bulbo

    do flash quase que instantaneamente gerando o alto brilho. Isto pode tornar um capacitor grande e

    carregado extremamente perigoso. Eles so utilizados tambm em paralelo com motores eltricos

    para fornecer energia para que as bobinas energizadas possam vencer a inrcia quando os

    motores so ligados.

    As Unidades de Medida de capacitncia so Farad (F), Microfarad (F), Nanofarad (nF) e

    Picofarad (pF). Os capacitores mais comuns so os eletrolticos, lstrados na figura abaixo, os

    cermicos e os de polister.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    13/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    13

    A figura abaixo mostra a identificao de capacitores cermicos.

    A figura abaixo mostra a identificao de capacitores de polister.

    1.11. FONTES DE ALIMENTAO

    As fontes mais comuns em sistemas embarcados com microcontroladores so bateriasrecarregveis ou conversores CA-CC como carregadores de celulares.

    As baterias ou pilhas so dispositivos que armazenam energia qumica e a torna disponvel na

    forma de energia eltrica.

    A capacidade de armazenamento de energia de uma bateria medida atravs da

    multiplicao da corrente de descarga pelo tempo de autonomia, sendo dado em ampre-hora (1

    Ah= 3600 Coulombs). Deve-se observar que, ao contrrio das baterias primrias (no

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    14/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    14

    recarregveis), as baterias recarregveis no podem ser descarregadas at 0V pois isto leva ao

    final prematuro da vida da bateria. Na verdade elas tm um limite at onde podem ser

    descarregadas, chamado de tenso de corte. Descarregar a bateria abaixo deste limite reduz a vida

    til da bateria.As baterias ditas 12V, por exemplo, devem operar de 13,8V (tenso a plena carga), at 10,5V

    (tenso de corte), quando 100% de sua capacidade ter sido utilizada, e este o tempo que deve

    ser medido como autonomia da bateria.

    Como o comportamento das baterias no linear, isto , quando maior a corrente de descarga

    menor ser a autonomia e a capacidade, no correto falar em uma bateria de 100Ah. Deve-se

    falar, por exemplo, em uma bateria 100Ah padro de descarga 20 horas, com tenso de corte

    10,5V. Esta bateria permitir descarga de 100 / 20 = 5A durante 20 horas, quando a bateria iratingir 10,5V.

    Outro fator importante a temperatura de operao da bateria, pois sua capacidade e vida til

    dependem dela. Usualmente as informaes so fornecidas supondo T=25C ou T=20C, que a

    temperatura ideal para maximizar a vida til.

    1.12. RUDO (BOUNCING)E FILTRO (DEBOUNCING)

    Em operaes de Liga/Desliga e mudana de nvel lgico, surge um rudo (Bouncing) na

    transio que, caso uma interrupo esteja habilitada ou at mesmo um contador de evento, pode

    provocar vrias interrupes ou contagens. As formas mais comuns de filtro (Debouncing) so

    via software, programando um tempo (em torno de 100ms, dependendo da chave) aps as

    transies, de modo a eliminar o rudo antes de efetuar uma instruo, ou via hardware,

    utilizando um capacitor de filtro em paralelo com a chave.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    15/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    15

    PROTOCOLO DE COMUNICAO USB

    A USB, sigla para Universal Serial Bus, o padro de interface para perifricos externos ao

    computador provavelmente mais popular dos j criados. Um sistema USB composto por

    hardware mestre e escravo. O mestre chamado de host e o escravo denomina-se dispositivo ou

    simplesmente perifrico. Todas as transferncias USB so administradas e iniciadas pelo host.

    Mesmo que um dispositivo queira enviar dados, necessrio que o host envie comandos

    especficos para receb-los.

    A fase de preparao, conhecida como enumerao, acontece logo depois de quando o dispositivo

    USB fisicamente conectado ao computador. Nesse momento, o sistema operacional realiza

    vrios pedidos ao dispositivo para que as caractersticas de funcionamento sejam reconhecidas. O

    sistema operacional, com a obtida noo do perifrico USB, atribui-lhe um endereo e seleciona

    a configurao mais apropriada de acordo com certos critrios. Com mensagens de confirmao

    do dispositivo indicando que essas duas ltimas operaes foram corretamente aceitas, a

    enumerao finalizada e o sistema fica pronto para o uso.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    16/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    16

    Mtodos de comunicao USB

    Os mtodos mais comuns de comunicao USB, tambm utilizados pela ferramenta SanUSB,

    so:

    Human Interface Device (HID) - O dispositivo USB reconhecido automaticamente pelo

    sistema operacional windows ou linux como um Dispositivo de Interface Humana (HID), no

    sendo necessrio a instalao de driver especiais para a aplicao. Este mtodo apresenta

    velocidade de comunicao de at 64 kB/s e utilizado pelo gerenciador de gravao da

    ferramenta SanUSB no linux. Mais detalhes na video-aula disponvel em

    http://www.youtube.com/watch?v=h6Lw2qeWhlM .

    Communication Device Class (CDC) Basicamente o driver emula uma porta COM, fazendo

    com que a comunicao entre o software e o firmware seja realizada como se fosse uma porta de

    comunicao serial padro. o mtodo mais simples de comunicao bidirecional com

    velocidade de comunicao de at 115 kbps, ou seja, aproximadamente 14,4 kB/s. Mais

    detalhes em uma aplicao Windows com protocolo Modbus RTU

    http://www.youtube.com/watch?v=KUd1JkwGJNk e em uma aplicao de comunicao

    bidirecional no Linux http://www.youtube.com/watch?v=cRW99T_qa7o.

    Mass Storage Device (MSD) - Mtodo customizado para dispositivos de armazenamento em

    massa que permite alta velocidade de comunicao USB, limitado apenas pela prpria velocidade

    do barramento USB 2.0 (480 Mbps). Este mtodo utilizado por pen-drives, scanners, cmeras

    digitais. Foi utilizado juntamente com a ferramenta SanUSB para comunicao com software de

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    17/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    17

    superviso programado em Java. Mais detalhes na video-aula disponvel em

    http://www.youtube.com/watch?v=Ak9RAl2YTr4.

    Como foi visto, a comunicao USB baseada em uma central (host), onde o computadorenumera os dispositivos USB conectados a ele. Existem trs grandes classes de dispositivos

    comumente associados a USB: dispositivos de interface humana (HID), classe de dispositivos de

    comunicao (CDC) e dispositivos de armazenamento em massa (MSD). Cada uma dessas

    classes j possui um driver implementado na maioria dos sistemas operacionais. Portanto, se

    adequarmos o firmware de nosso dispositivo para ser compatvel com uma dessas classes, no

    haver necessidade de implementar um driver.

    Nos sitemas operacionais Windows e Linux, o modo mais fcil de comunicar com o PIC USB o

    CDC, por uma razo simples, os programas para PCs so baseados na comunicao via porta

    serial, o que torna o processo ainda mais simples. O mtodo CDC no Linux e o HID no

    Windows so nativos, ou seja, no necessrio instalar nenhum driver no sistema operacionalpara que o PC reconhea o dispositivo.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    18/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    18

    2. FERRAMENTA SanUSB

    O circuito de desenvolvimento SanUSB uma ferramenta composta de softwaree hardware

    bsico da famlia PIC18Fxx5x com interface USB. Esta ferramenta livre capaz de substituir:

    1- Um equipamento especfico para gravao de um programa no microcontrolador;

    2- conversor TTL - EIA/RS-232 para comunicao serial bidirecional emulado atravs do

    protocolo CDC;

    3- fonte de alimentao, j que a alimentao do PIC provm da porta USB do PC. importante salientar que cargas indutivas como motores de passo ou com corrente acima

    de 400mA devem ser alimentadas por uma fonte de alimentao externa.

    4- Conversor analgico-digital (AD) externo, tendo em vista que ele dispe internamente de10ADs de 10 bits;

    5- software de simulao, considerando que a simulao do programa e do hardwarepodem

    ser feitas de forma rpida e eficaz no prprio circuito de desenvolvimento ou com um

    protoboardauxiliar.

    Alm de todas estas vantagens, os laptopse alguns computadores atuais no apresentam mais

    interface de comunicao paralela e nem serial EIA/RS-232, somente USB.

    Como pode ser visto, esta ferramenta possibilita que a compilao, a gravao e a simulao

    real de um programa, como tambm a comunicao serial atravs da emulao de uma porta

    COM virtual, possam ser feitos de forma rpida e eficaz a partir do momento em o

    microcontrolador esteja conectado diretamente a um computador via USB.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    19/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    19

    2.1. GRAVAO COM OSanUSB

    A transferncia de programas para os microcontroladores normalmente efetuada atravs

    de um hardware de gravao especfico. Atravs desta ferramenta, possvel efetuar a descargade programas para o microcontrolador diretamente de uma porta USB de qualquer PC.

    Para que todas essas funcionalidades sejam possveis, necessrio gravar, anteriormente e

    somente uma vez, com um gravador especfico para PIC, o gerenciador de gravao pela USB

    GerenciadorWindows.hex ou GerenciadorLinux.hex disponvel na pasta completa da ferramenta:

    http://www.4shared.com/file/sIZwBP4r/100727SanUSB.html

    Para que os programas em C possam ser gravados no microcontrolador via USB,

    necessrio compil-los, ou seja, transform-los em linguagem de mquina hexadecimal. Existem

    diversos compiladores que podem ser utilizados por esta ferramenta, entre eles o SDCC, o C18, o

    Hi-Tech e o CCS. Devido didtica das funes e bibliotecas disponveis para emulao serial,

    diversos perifricos e multitasking, o compilador mais utilizado nos projetos o CCS. Uma

    verso demo funcional do compilador utilizado com bibliotecas de suporte a USB possvel

    baixar em:

    http://www.4shared.com/file/Mo6sQJs2/100511Compilador.html .

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    20/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    20

    Para instalar o CCS tambm no Linux atravs do Wine basta seguir as seguintes

    instrues da seguinte vdeo-aula: http://www.youtube.com/watch?v=5-kigedbfxg

    Caso grave o novo gerenciador de gravao pela USB GerenciadorLinux.hex, no

    esquea de colar o novo arquivo cabealho SanUSB.h dentro da pastaDriverslocalizada na pastainstalada do compilador ( C:\Arquivos de programas\PICC\Drivers ). A representao bsica do

    circuito SanUSBmontado emprotoboard mostrada a seguir:

    Note que, ao conectar o cabo USB e alimentar o microcontrolador, com o pino 1 no Gnd

    (0V), atravs do boto ou de um simples fio, Estado para Gravao via USB ( ledno pino B7

    aceso) e que, aps o resetcom o pino 1 no Vcc (+5V atravs do resistor fixo de 2K2 sem o jump)

    Estado para Operao do programa aplicativo (firmware) que foi compilado.

    O cabo USB apresenta normalmente quatro fios, que so conectados ao circuito do

    microcontrolador nos pontos mostrados na figura acima, onde normalmente, o fio Vcc (+5V) docabo USB vermelho, o Gnd (Vusb-) marron ou preto, o D+ azul ou verde e o D- amarelo

    ou branco. Note que a fonte de alimentao do microcontrolador nos pinos 19 e 20 e dos

    barramentos vermelho (+5V) e azul (Gnd) do circuito provem da prpria porta USB do

    computador. Para ligar o cabo USB no circuito possvel cort-lo e conect-lo direto no

    protoboard, com fios rgidos soldados, como tambm possvel conectar sem cort-lo, em um

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    21/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    21

    protoboardou numa placa de circuito impresso, utilizando um conector USB fmea. O diodo de

    proteo colocado no pino 20 entre o Vcc da USB e a alimentao do microcontrolador serve

    para proteger contra corrente reversa caso a tenso da porta USB esteja polarizada de forma

    inversa.A figura abaixo mostra a ferramenta SanUSB montada em protoboard seguindo o

    circuito anterior e a posio de cada terminal no conector USB a ser ligado no PC. Cada terminal

    conectado diretamente nos pinos do microcontrolador pelos quatro fios correspondentes do

    cado USB.

    importante salientar que, para o perfeito funcionamento da gravao via USB, o circuito

    desta ferramenta deve conter um capacitor de filtro entre 0,1uf e 1uF na alimentao que vem da

    USB, ou seja, colocado entre os pinos 20 (+5V) e 19 (Gnd).

    Caso o sistema microcontrolado seja embarcado como, por exemplo, um rob, um sistema

    de aquisio de dados ou um controle de acesso, ele necessita de uma fonte de alimentao

    externa, que pode ser uma bateria comum de 9V ou um carregador de celular. A figura abaixo

    mostra o PCB, disponvel nos Arquivos do Grupo SanUSB, e o circuito para esta ferramenta com

    entrada para fonte de alimentao externa.

    Para quem deseja obter o sistema pronto para um aprendizado mais rpido, possvel

    tambm encomendar placas de circuito impresso da ferramenta SanUSB, como a foto da placa

    abaixo, entrando em contato com o grupo SanUSB atravs do e-mail:

    [email protected] .

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    22/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    22

    Se preferir confeccionar a placa, basta seguir o circuito abaixo:

    Para obter vrios programas-fonte e vdeos deste sistema livre de gravao, comunicao

    e alimentao via USB, basta se cadastrar no grupo de acesso livre www.tinyurl.com/SanUSB e

    clicar no item Arquivos.

    Durante a programao do microcontrolador basta inserir, no inicio do programa em C, a

    biblioteca cabealho SanUSB (#include ) contida dentro da pasta

    SanUSB_User\Exemplos_SanUSB e que voc j adicionou dentro daDriverslocalizada na pasta

    instalada do compilador ( C:\Arquivos de programas\PICC\Drivers ). Essa biblioteca contminstrues do PIC18F2550 para o sistema operacional, configuraes de fusveis e habilitao do

    sistemaDual Clock, ou seja, oscilador RC interno de 4 MHz para CPU e cristal oscilador externo

    de 20 MHz para gerar a frequncia de 48MHz da comunicao USB, atravs de prescaler

    multiplicador de freqncia.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    23/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    23

    Como a freqncia do oscilador interno de 4 MHz, cada incremento dos temporizadores

    corresponde a um microssegundo. O programa exemplo1 abaixo comuta umledconectado no pino

    B7 a cada 0,5 segundo.

    #include

    void main(){clock_int_4MHz();//Funo necessria para habilitar o dual clock (48MHz para USB e 4MHz para CPU)

    while (1){output_toggle(pin_B7); // comuta Led na funo principaldelay_ms(500);}

    }

    O programa pisca3 abaixo pisca trs ledsconectados nos pinos B5, B6 e B7.

    #include

    main(){clock_int_4MHz();//Funo necessria para habilitar o dual clock (48MHz para USB e 4MHz para CPU)

    while (1){output_high(pin_B5); // Pisca Led na funo principaldelay_ms(500);

    output_low(pin_B5);output_high(pin_B6);delay_ms(500);output_low(pin_B6);output_high(pin_B7);delay_ms(500);output_low(pin_B7);}

    }

    Os arquivos compilados .hex assim como os firmwares esto disponveis na pasta

    100727SanUSB.

    GRAVANDO O MICROCONTROLADOR VIA USB NO WINDOWS

    Para executar a gravao com a ferramenta SanUSB, importante seguir os seguintes

    passos:

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    24/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    24

    1. Copie, para um diretrio raiz C ou D, a pasta SanUSB obtida do grupo

    www.tinyurl.com/SanUSB.

    2. Grave no microcontrolador, somente uma vez, com um gravador especfico para PIC, o novogerenciador de gravao pela USB GerenciadorWin.hex disponvel na pasta SanUSB.

    3. Pressione o boto ou conecte oJumpde gravao do pino 1 do circuito SanUSB no Gnd para a

    transferncia de programa do PC para o microcontrolador.

    4. Conecte o cabo USB entre o PIC e o PC. Se o circuito SanUSB estiver correto acender o led

    do pino B7.

    Se for o Windows 7, v em propriedades do sistema -> Configuraes avanadas do sistema ->

    Hardware -> Gerenciador de dispositivos e clique com boto direito no driver USB do

    microcontrolador e atualizar Driver, apontando para a pasta DriverWindows7SanUSB. Aps a

    instalao no Windows 7, clique com o boto direito sobre o cone de gravao SanUSB ,

    selecione Propriedades, Compatibilidade e escolher Windows Vista (Service Pack 1).

    Se for o Windows XP, o windows ir perguntar, somente a primeira vez, onde est oDriverde

    instalao, ento escolha a opo Instalar de uma lista ou local especifico (avanado). ApsAvanar, escolha a opo Incluir este local na pesquisa e selecione a pasta

    DriverWinXPSanUSB, onde est o driver sanusb_device. Durante a instalao, o Windows abrir

    uma janela sobre a instalao, selecione a opo continuar assim mesmo e o Driver ser

    instalado.

    5. Abra o aplicativo SanUSB . Se estiver conectado corretamente, o ledconectado no pino

    B7 acende e aparecer a seguinte tela:

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    25/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    25

    6. Clique em 1. Gravar novo programae escolha o programa .hexque deseja gravar, como porexemplo, o programa compilado pisca.hexda pasta Exemplos_SanUSB. Este programa pisca 3

    ledsconectados nos pinos B5, B6 e B7;

    7. Aps a gravao do programa, retire o jumpdo pino de gravao e clique em Reset. Pronto o

    programa estar em operao.

    Para programar novamente, basta colocar o jumpde gravao, retire o jumpde alimentao,

    coloque-o novamente e repita os passos anteriores a partir do passo 4. Se a nova programao nofuncionar, retire o conector USB do computador e repita os passos anteriores a partir do passo 3.

    SanUSB CDC Emulao de Comunicao Serial no Windows

    Neste tpico mostrado um mtodo de comunicao serial bidirecional atravs do canal

    USB do PIC18F2550. Uma das formas mais simples, atravs do protocolo Communications

    Devices Class (CDC), que emula uma porta COM RS-232 virtual, atravs do canal USB 2.0.

    Dessa forma, possvel se comunicar com caracteres ASCII via USB atravs de qualquer

    software monitor serial RS-232 como o HyperTerminal, o SIOW do CCS Compiler ou o

    ambiente de programao Delphi. O driver CDC instalado no PC e o programa aplicativo

    gravado no PIC, com a biblioteca CDC (#include ), so os responsveis por esta

    emulao da porta RS-232 virtual atravs da USB.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    26/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    26

    A biblioteca CDC para o programa.c do microcontrolador est dentro da pasta de

    exemplos, a qual deve estar na mesma pasta onde est o programa.c a ser compilado para a

    emulao da comunicao serial RS-232. Alm disso, o programa.c deve inserir a biblioteca

    usb_san_cdc.h, como mostra a o exemplo de leitura e escrita em um buffer da EEPROM internado microcontrolador. As funes CDC mais utilizadas contidas na biblioteca usb_san_cdc.h para

    comunicao com a COM virtual so:

    usb_cdc_putc() o microcontrolador envia caracteres ASCII emulados via USB.

    Ex.: printf(usb_cdc_putc, "\r\nEndereco para escrever: ");

    usb_cdc_getc() retm um caractere ASCII emulado pela USB.

    Ex.: dado = usb_cdc_getc(); //retm um caractere na varivel dado

    gethex_usb() retm um nmero hexadecimal digitado no teclado.

    Ex.: valor = gethex_usb();//retm um nmero hexadecimal na varivel valor

    usb_cdc_kbhit( ) Avisa com TRUE (1) se acabou de chegar um novo caractere no

    buffer de recepo USB do PIC.

    Ex.: if (usb_cdc_kbhit(1)) {dado = usb_cdc_getc();}

    O exemplo abaixo mostra a leitura e escrita em um buffer da EEPROM interna do

    microcontrolador com emulao da serial atravs da USB:

    #include

    #include // Biblioteca para comunicao serial

    BYTE i, j, endereco, valor;boolean led;

    main() {clock_int_4MHz();

    usb_cdc_init();// Inicializa o protocolo CDCusb_init(); // Inicializa o protocolo USB

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    27/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    27

    usb_task(); // Une o perifrico com a usb do PC

    output_high(pin_b7); // Sinaliza comunicao USB Ok

    while (1) {printf(usb_cdc_putc, "\r\n\nEEPROM:\r\n");// Display contm os primeiros 64 bytes em hex

    for(i=0; i Hardware -> Gerenciador de dispositivos e clique com

    boto direito no driver CDC do microcontrolador e atualizar Driver, apontando para a pasta

    DriverCDCXPseven32e64.

    No Windows,aps a gravao de um programa que utilize comunicao serial CDC no

    microcontrolador pelo SanUSB e resetar o microcontrolador, o sistema vai pedir a instalao dodriver CDC (se for a primeira vez).

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    28/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    28

    Escolha a opo Instalar de uma lista ou local especifico (avanado). Aps Avanar,

    selecione a opo Incluir este local na pesquisae selecione a pasta DriverSanWinCDC, onde est

    o driver CDC.

    Aps Avanar, clique em Continuar assim mesmo.

    Aguarde enquanto o Driver CDC instalado no Windows.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    29/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    29

    Clique em Concluirpara terminar a instalao.

    V em painel de controle -> sistema -> Hardware -> Gerenciador de dispositivos ->Portas (COM & LPT) e confira qual a porta COM virtual instalada.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    30/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    30

    Abrindo qualquer programa monitor de porta serial RS-232, como o SIOW do CCS,

    direcionando para a COM virtual instalada (COM3,COM4,COM5,etc.) em configuration > set

    port optionsentraremos em contato com o PIC.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    31/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    31

    CLOCK DO SISTEMA

    Devido incompatibilidade entre as freqncias necessrias para a gravao e emulao

    serial via USB e a freqncia padro utilizada pela CPU, temporizadores e interface I2C, esta

    ferramenta adota o princpioDual Clock, ou seja, utiliza duas fontes de clock, uma para o canal

    USB de 48MHz, proveniente do cristal oscilador externo de 20MHz multiplicada por um

    prescalerinterno, e outra para o CPU de 4 MHz, proveniente do oscilador RC interno de 4 MHz,

    como ilustrado na figura abaixo.

    Esse princpio permite que um dado digitado no teclado do computador, trafegue para o

    microcontrolador em 48 MHz via USB, depois para o relgio RTC ou para a memria EEPROM

    em 4 MHz via I2

    C e vice-versa, como mostra o programa exemplo abaixo.

    A interrupo do canal USB do PIC j utilizada no protocolo CDC. Dessa forma, para

    utilizar uma funo que necessite de atendimento imediato quando um caractere for digitado

    necessrio inserir a condio if (usb_cdc_kbhit(1)) {dado=usb_cdc_getc();}no lao infinito da

    funo principal do programa para verificar, de forma constante, se chegou um novo byte

    enviado pelo PC. Este comando tambm evita que o programa fique parado no usb_cdc_getc (que

    fica esperando um caractere para prosseguir o programa). Veja o programa abaixo, que pisca um

    led na funo principal (pino B6) e comanda o estado se outro led (pino B7) pelo teclado de um

    PC via USB:

    #include #include // Biblioteca para comunicao serial virtual

    BYTE comando;

    main() {

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    32/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    32

    clock_int_4MHz();//Funo necessria para habilitar o dual clock (48MHz para USB e 4MHz para CPU)usb_cdc_init(); // Inicializa o protocolo CDCusb_init(); // Inicializa o protocolo USBusb_task(); // Une o perifrico com USB do PC

    while (TRUE){if (usb_cdc_kbhit(1)) //avisa se chegou dados do PC{ //verifica se tem um novo byte no buffer de recepo, depois o kbhit zerado para prximo bytecomando=usb_cdc_getc(); //se chegou, retm o caractere e compara com 'L' ou 'D' em ASCII

    if (comando=='L') {output_high(pin_b7); printf(usb_cdc_putc, "\r\nLed Ligado!\r\n");}if (comando=='D') {output_low(pin_b7); printf(usb_cdc_putc, "\r\nLed Desigado!\r\n");}}output_high(pin_B6); // Pisca Led na funo principaldelay_ms(500);output_low(pin_B6);delay_ms(500);} }

    Aps gravar o programa, lembre de direcionar o monitor serial SIOW ou Hyperterminalpara a COM virtual instalada (COM3,COM4,COM5,etc.) em configuration > set port options.

    GRAVANDO O MICROCONTROLADOR VIA USB NO LINUX

    Esta aplicao a forma mais simples e direta de gravao, pois com apenas dois cliques

    no instalador automtico.deb SanUSB possvel utiliz-lo em qualquer mquina com Linux

    (Ubuntu 10.04, equivalente ou posterior). Depois de instalado, o aplicativo localizado em

    Aplicativos -> acessrios. O instalador.deb est disponvel em:

    http://www.4shared.com/file/3mhWZS5g/sanusb.html

    A figura abaixo mostra a interface grfica desenvolvida para gravao direta de

    microcontroladores via USB:

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    33/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    33

    Neste aplicativo est disponvel botes para Abrir o programa em hexadecimal

    compilado, para Gravar o programa hexadecimal no microcontrolador via USB e para Resetar o

    microcontrolador no intuito de coloc-lo em operao.

    GRAVAO PELO TERMINAL DO LINUX

    Outra possibilidade de gravar via USB de forma manual atravs de linhas de comando

    utilizando o terminal do Linux. Inicialmente, necessrio baixar a biblioteca de desenvolvimento

    libhid, a partir da linha de comando:

    #sudo apt-get install libhid-dev

    Para iniciar a gravao com linhas de comando importante seguir os seguintes passos:

    1. Mova a pasta de arquivos 100727SanUSB obtida do grupo www.tinyurl.com/SanUSB

    para um

    diretrio do Linux como, por exemplo, a pasta pessoal.

    2. Grave no microcontrolador, somente uma vez, com um gravador especfico para PIC, o

    gerenciador de gravao pela USB GerenciadorLinux.hex disponvel na pasta SanUSB.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    34/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    34

    3. Pelo Terminal do Linux acesse a pasta de arquivos SanUSB utilizando alguns comandos

    bsicos descritos abaixo:

    cd dir-> entra no diretrio dir;cd dir1/dir2/dir3-> acessa o sub-diretrio dir3;

    cd ..-> sai do diretrio atual;

    cd-> retorna diretrio padro home;

    ls-> lista os arquivos de um diretrio;

    pwd-> mostra o diretrio atual;

    find /home -name sanusb-> procura no diretrio home o arquivo sanusb.

    Para gravar no Linux necessrio estar logadocom permisso para acessar a porta USB como,

    por exemplo, super-usurio (sudo su). A figura abaixo mostra o telado processo de acesso pasta

    e tambm do processo de gravao do programa exemplo1.hex:

    4. Aps entrar na pasta SanUSB, acesse o contedo do executvelsanusb, digitando:

    . / sanusb-h

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    35/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    35

    5. Coloque o circuito SanUSB em modo de gravao (pino 1 ligado ao Gnd (0V) atravs de boto

    ou fio) e conecte o cabo USB do circuito no PC. Se o circuito SanUSB estiver correto, acender

    o leddo pino B7.

    6. Para gravar no microcontrolador, o firmware desejado, como o exemplo1.hex, deve estar no

    mesmo diretrio do arquivo sanusb, ento para a gravao via USB, digita-se:

    . / sanusb -w exemplo1.hex

    7. Depois de gravar, remova o boto oujumpde gravao, ento reset digitando:

    . / sanusb r

    Para gravar no microcontrolador, possvel tambm, de forma mais simples aps remover ojump

    de gravao, digitar na mesma linha os comandos w (gravar) e r (resetar):

    . / sanusb -w exemplo1.hex r

    Para programar novamente, basta colocar o jump de gravao no pino 1, desconecte e conecte o

    cabo USB de alimentao, e repita os passos anteriores a partir do passo 6. Se o microcontrolador

    no for reconecido, feche o terminal, conecte o microcontrolador em outra porta USB, abra umnovo terminal se logandocomo super-usurio (sudo su) e repita os passos anteriores a partir do

    passo 4.

    SanUSB CDC Emulao de Comunicao Serial Linux

    Neste tpico mostrado um mtodo de comunicao serial bidirecional atravs do canal

    USB do PIC18F2550. Uma das formas mais simples, atravs do protocolo Communications

    Devices Class (CDC), que padro no Linux e que emula uma porta COM RS-232 virtual com omicrocontrolador, atravs do canal USB. Dessa forma, possvel se comunicar com caracteres

    ASCII via USB atravs de qualquer software monitor serial RS-232 como o Cutecom, o minicom

    ou outros aplicativos com interface serial programados em Java. O driver CDC padro no Linux e

    o programa aplicativo gravado no PIC com a biblioteca CDC (#include ), so os

    responsveis por esta emulao da porta RS-232 virtual atravs da USB.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    36/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    36

    A biblioteca CDC para o programa.c do microcontrolador est dentro da pasta de

    exemplos, a qual deve estar na mesma pasta onde est o programa.c a ser compilado para a

    emulao da comunicao serial RS-232. Alm disso, o programa.c deve inserir a biblioteca

    usb_san_cdc.h, como mostra a o exemplo de leitura e escrita em um buffer da EEPROM internado microcontrolador. As funes CDC mais utilizadas contidas na biblioteca usb_san_cdc.h para

    comunicao com a COM virtual so:

    usb_cdc_putc() o microcontrolador envia caracteres ASCII emulados via USB.

    Ex.: printf(usb_cdc_putc, "\r\nEndereco para escrever: ");

    usb_cdc_getc() retm um caractere ASCII emulado pela USB.

    Ex.: dado = usb_cdc_getc(); //retm um caractere na varivel dado

    gethex_usb() retm um nmero hexadecimal digitado no teclado.

    Ex.: valor = gethex_usb();//retm um nmero hexadecimal na varivel valor

    usb_cdc_kbhit( ) Avisa com TRUE (1) se acabou de chegar um novo caractere no

    buffer de recepo USB do PIC.

    Ex.: if (usb_cdc_kbhit(1)) {dado = usb_cdc_getc();}

    Veja o programa abaixo compilado no CCS, instalado no Linux atravs do Wine, que

    pisca um led na funo principal (pino B6) e comanda o estado se outro led (pino B7) pelo

    teclado de um PC via USB atravs do protocolo CDC:

    #include #include // Biblioteca para comunicao serial virtual via USB

    BYTE comando;

    main() {clock_int_4MHz();//Funo necessria para habilitar o dual clock (48MHz para USB e 4MHz para CPU)usb_cdc_init(); // Inicializa o protocolo CDCusb_init(); // Inicializa o protocolo USB

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    37/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    37

    usb_task(); // Une o perifrico com USB do PC

    while (TRUE){if (usb_cdc_kbhit(1)) //avisa se chegou dados do PC

    { //verifica se tem um novo byte no buffer de recepo, depois o kbhit zerado para prximo bytecomando=usb_cdc_getc(); //se chegou, retm o caractere e compara com 'L' ou 'D' em ASCII

    if (comando=='L') {output_high(pin_b7); printf(usb_cdc_putc, "\r\nLed Ligado!\r\n");}if (comando=='D') {output_low(pin_b7); printf(usb_cdc_putc, "\r\nLed Desigado!\r\n");}}output_high(pin_B6); // Pisca Led na funo principaldelay_ms(500);output_low(pin_B6);delay_ms(500);} }

    Este firmware realiza a comunicao serial virtual com o protocolo CDC inserido no firmware do

    microcontrolador atravs da biblioteca usb_san_cdc.h. Este protocolo padro no sistema

    operacional Linux.

    Aps gravar o firmware via USB com o executvel linux sanusb, instale o software de

    comunicao serial CuteCom.deb disponvel nesta pasta.

    Verifique a porta serial virtual criada digitando dmesgno terminal. Abra o Cutecom, digitando

    cutecom no terminal e direcione a porta virtual criada em Device do Cutecom, geralmente a porta

    ttyACM0 ou ttyACM1. Mais informaes podem ser obtidas no video:

    http://www.youtube.com/watch?v=cRW99T_qa7o .

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    38/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    38

    3. CONVERSOR ANALGICO-DIGITAL (AD)

    O objetivo do conversor analgico-digital (AD) converter um sinal analgico,

    geralmente de 0 a 5V, em equivalentes digitais. Como pode ser visto, algumas configuraes

    permitem ainda que os pinos A3 e A2 sejam usados como referncia externa positiva e negativa,

    fazendo com que uma leitura seja feita em uma faixa de tenso mais restrita como, por exemplo,

    de 1 a 3 Volts.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    39/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    39

    Em C, o conversor AD pode ser ajustado para resoluo de 8 bits (#device adc=8

    armazenando o resultado somente no registro ADRESH) ou 10 bits (#device adc=10).

    Para um conversor A/D com resoluo de 10 bits e tenso de referncia padro de 5V, o

    valor de cada bit ser igual a 5/(210 - 1) = 4,8876 mV, ou seja, para um resultado igual a 100

    (decimal), teremos uma tenso de 100* 4,8876 mV = 0,48876 V. Note que a tenso de referncia

    padro (Vref) depende da tenso de alimentao do PIC que normalmente 5V. Se a tenso de

    alimentao for 4V, logo a tenso de referncia (Vref) tambm ser 4V.

    Para um conversor A/D com resoluo de 10 bits e tenso de referncia de 5V, o valor de

    cada bit ser igual a 5/(28

    - 1) = 19,6078 mV, ou seja, para um resultado igual a 100 (decimal),

    necessrio uma tenso de 100 * 19,6078 mV = 1,96078 V, quatro vezes maior.

    comum se utilizar o conversor AD com sensores de temperatura (como o LM35),

    luminosidade (como LDRs), presso (STRAIN-GAGE), tenso, corrente, humidade, etc..

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    40/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    40

    Para utilizar este perifrico interno, basta:

    setup_adc_ports (AN0_TO_AN2); //(Seleo dos pinos analgicos 18F2550)

    setup_adc(ADC_CLOCK_INTERNAL ); //(selecionar o clock interno)

    Veja a nomenclatura dos canais analgicos de cada modelo, dentro da biblioteca do CCS

    na pastaDevice. Depois, no lao infinito, basta selecionar o canal para leitura, esperar um tempo

    para a seleo fsica e ento ler o canal AD.

    set_adc_channel(0); //Seleciona qual canal vai converter

    delay_ms (10); // aguarda 10ms

    valor = read_adc(); // efetua a leitura da converso A/D e guarda na varivel valor

    3.1. AJUSTE DE RESOLUO DO SENSOR E DO CONVERSOR AD DE 8 BITS

    O ajuste da resoluo do conversor AD se d aproximando a tenso de fundo de escala dosensor (VFS) tenso de referencia do conversor (VREF). Para isso existem duas tcnicas de ajuste

    porHardware:

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    41/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    41

    Para este tpico utilizado como exemplo de ajuste da resoluo do conversor AD, o sensor

    de temperatura LM35 que fornece uma sada de tenso linear e proporcional com uma resoluo

    de 10mV a cada C. A preciso nominal de 0,5C a 25C.

    3.2. AJUSTE DA TENSO DE FUNDO DE ESCALA COM AMPOP

    Para conversores AD de 8 bits e VREFde 5V, a resoluo mxima de 19,6mV (R= VREF/ (2n-

    1). Dessa forma, como a Resoluo do sensor 10mV/C (RS), necessrio aplicar um ajuste de

    resoluo com um ganho na tenso de fundo de escala do sensor para que cada grau possa ser

    percebido pelo conversor do microcontrolador. A forma mais comum de ganho a utilizao de

    amplificadores operacionais no inversores. Veja mais detalhes no material de apoio no final

    dessa apostila. A tenso de fundo de escala (VFS) est relacionada Temperatura Mxima

    desejada de medio (TMAX), onde VFS= RS(10mV/C)* TMAXe o Ganho (G) de aproximao

    da tenso de fundo de escala (VFS) tenso de referencia (VREF) dado por G = VREF / VFS, ou

    seja, para uma Temperatura Mxima desejada de 100C, o ganho deve ser aproximadamente 5.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    42/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    42

    A aproximao da tenso de fundo de escala (VFS) tenso de referencia (VREF) para

    diminuir a relevncia de rudos em determinadas faixas de temperatura. Por exemplo, 100Capresenta uma tenso de fundo de escala de apenas 1Volt (100C *10mV/C) para uma VREF de

    5V do conversor AD. O circuito abaixo mostra um exemplo de uso de amplificador para

    melhorar a resoluo do conversor.

    Circuito2: Temperatura mxima desejada de 125C e Ganho de 4 (1+3/1)

    Neste exemplo, a tenso de fundo de escala (VFS) foi aumentada, em uma faixa de 0 a 100C

    para 4 Volts (Ganho de 4). Dessa forma, na tenso de referncia de 5V, o conversor mede 125C.

    Como neste caso o conversor AD de 10 bits, ento, ele percebe uma variao de temperatura a

    cada 0,12C (125C /1023).

    3.3. AJUSTE DA TENSO DE REFERNCIA COM POTENCIMETRO

    Outra forma mais simplesde ajuste por Hardware (aumento da resoluo do conversor

    AD) a aproximao da tenso de referencia (VREF) tenso de fundo de escala (VFS) atravs da

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    43/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    43

    diminuio da tenso de referncia (VREF) com o uso de um potencimetro (divisor de tenso).

    Por exemplo, um conversor AD de 8 bits com uma tenso de referncia de 2,55, apresenta uma

    resoluo de 10mV por bit (2,55/(2

    8

    -1)), ou seja, a mesma sensibilidade do sensor LM35 de10mV/C . Percebe variao a cada C.

    3.4. CONVERSOR AD DE 10 BITS

    Para conversores de 10 bits, com maior resoluo (4,89 mV), o ajuste (escalonamento) realizado geralmente por software, em linguagem C, que possui um elevado desempenho em

    operaes aritmticas.

    OBS.:O ganho de tenso do circuito 3 poderia ser simulado por software com os comandos:

    Int32 valorsensor= read_adc();

    Int32 VFS = 4* Valorsensor;

    A frmula utilizada pelo programa no PIC para converter o valor de tenso fornecido pelo sensor

    em uma temperatura :

    ANALGICO DIGITAL

    5V -> 1023

    T(C)* 10mV/C -> (int32)read_adc()

    T (C) = 500 * (int32)read_adc()/1023

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    44/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    44

    onde (int32)read_adc() o valor digital obtido a partir da temperatura (T(C)) analgica medida.

    Esta varivel configurada com 32 bits (int32), porque ela recebe os valores dos clculos

    intermedirios e pode estourar se tiver menor nmero de bits, pois uma varivel de 16 bits ssuporta valores de at 65.535. A tenso de referncia do conversor 5V e como o conversor

    possui 10 bits de resoluo, ele pode medir 1023 variaes.

    OBTENO DE UM VOLTMETRO ATRAVS DO CONVERSOR AD COM A

    VARIAO DE UM POTENCIMETRO

    #include //Leitura de tenso em mV com variao de um potencimetro#include // Biblioteca para comunicao serial virtual

    int32 tensao;

    main() {clock_int_4MHz();

    usb_cdc_init(); // Inicializa o protocolo CDCusb_init(); // Inicializa o protocolo USBusb_task(); // Une o perifrico com a usb do PC

    setup_adc_ports(AN0); //Habilita entrada analgica - A0setup_adc(ADC_CLOCK_INTERNAL);

    while(1){ //ANALGICO DIGITAL(10 bits)set_adc_channel(0); // 5000 mV 1023delay_ms(10); // tensao read_adc()tensao= (5000*(int32)read_adc())/1023;

    printf (usb_cdc_putc,"\r\nA tensao e' = %lu C\r\n",tensao); // Imprime pela serial virtual

    output_high(pin_b7);delay_ms(500);output_low(pin_b7);delay_ms(500); }}

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    45/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    45

    LEITURA DE TEMPERATURA COM O LM35 ATRAVS DO CONVERSOR AD

    #include

    #include // Biblioteca para comunicao serial virtual

    int16 temperatura;

    main() {clock_int_4MHz();usb_cdc_init(); // Inicializa o protocolo CDCusb_init(); // Inicializa o protocolo USBusb_task(); // Une o perifrico com a USB do PC

    setup_adc_ports(AN0); //Habilita entrada analgica - A0setup_adc(ADC_CLOCK_INTERNAL);

    while(1){set_adc_channel(0);delay_ms(10);temperatura=430*read_adc()/1023; //Vref = 4,3V devido queda no diodo, ento (430*temp)

    printf (usb_cdc_putc,"\r\nTemperatura do LM35 = %lu C\r\n",temperatura);

    output_high(pin_b7); // Pisca Led em operao normaldelay_ms(500);output_low(pin_b7);delay_ms(500); }}

    4. INSTRUES LGICAS E ARITMTICAS

    Os operadores lgicos descritos abaixo adotam o padro ANSI C, ou seja, podem ser

    utilizados por qualquer compilador em linguagem C direcionado microcontroladores.

    4.1. INSTRUES LGICAS PARA TESTES CONDICIONAIS DE NMEROS

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    46/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    46

    Nesse caso, os operadores so utilizados para realizar operaes de testes condionais

    geralmente entre nmeros inteiros.

    OPERADOR COMANDO

    && Operao E (AND)

    ll Operao OU (OR)

    ! Operao NO (NO)

    Exemplos:

    if (segundodec==05 && (minutodec==00|| minutodec==30)) {flagwrite=1;}//Analisando um relgio para setar a flagwrite

    if (x>0 &&x

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    47/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    47

    importante salientar que emulao a reproduo via software das funes de um

    determinado sistema real. Atravs do circuito SanUSB, possvel emular as portas lgicas fsicas

    e as diversas combinaes das mesmas com apenas uma funo booleana no programa.

    OPERA O EXPRESS O BOOLEANA

    LITERAL

    EXPRESS O BOOLEANA EM C

    Operao E (AND) S= A . B S= A & B

    Operao OU (OR) S= A + B S= A l B

    Operao NO (NO) S= S= !A

    OU exclusivo (XOR) S= A B S= A ^ B

    O circuito abaixo mostra as possveis entradas booleanas nos pinos B1, B2 e B3 e a sada do

    circuito lgico booleano expressa de forma real atravs do LED no pino B7.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    48/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    48

    importante salientar que atravs das operaes bsicas E, OU, NO e OU-Exclusivo

    possvel construir outras operaes como NAND, NOR e Coincidncia, que o inverso do OU-

    Exclusivo. Isto realizado transformando a expresso booleana literal em uma expresso

    booleana em C e apresentando o resultado em um LED de sada.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    49/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    49

    Exemplo 1: Elabore um programa para emular uma porta lgica OU-Exclusivo atravs do

    microcontrolador.

    #include // Emulao de circuitos lgicos booleanos (OU-Exclusivo)short int A, B, saida, ledpisca;

    main(){clock_int_4MHz();

    while (TRUE){A=input(pin_b1); //entrada com pull-down externo (resistor conectado ao Terra)B=input(pin_b2); //entrada com pull-down externo (resistor conectado ao Terra)

    saida = A^B; //saida igual ao resultado do OU-Exclusivo obtida pelas entradas dos pinos A e Boutput_bit(pin_b7,saida); //O pino_b7 mostra o resultado do circuito lgico booleano alocado em saida

    ledpisca=!ledpisca; // ledpisca igual ao inverso de ledpiscaoutput_bit(pin_b0,ledpisca); // b0 recebe o valor de ledpiscadelay_ms(500);}}

    Exemplo 2: Elabore um programa e a tabela verdade para emular uma o circuito lgico

    booleano abaixo.

    O programa para emular de forma real esse circuito mostrado abaixo:

    #include // Emulao de circuitos lgicos booleanosshort int A, B, C, saida, ledpisca;

    main(){clock_int_4MHz();

    while (TRUE){A=input(pin_b1); //entrada com pull-down externo (resistor conectado ao Terra)

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    50/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    50

    B=input(pin_b2); //entrada com pull-down externo (resistor conectado ao Terra)C=input(pin_b3); //entrada com pull-down externo (resistor conectado ao Terra)

    saida = !(!A & B) & !C; //saida do circuito booleano obtida pelas entradas dos pinos b1, b2 e b3output_bit(pin_b7,saida); //O pino_b7 mostra o resultado do circuito lgico booleano

    ledpisca=!ledpisca; // ledpisca igual ao inverso de ledpiscaoutput_bit(pin_b0,ledpisca); // b0 recebe o valor de ledpiscadelay_ms(500);}}

    Note que para emular qualquer outro circuito booleano com trs entradas, basta modificar

    apenas a funo de converso em negrito (saida = !(!A & B) & !C).A tabela verdade desse circuito

    booleano mostarada abaixo:

    ENTRADAS SAIDAA B C S0 0 0 10 0 1 00 1 0 00 1 1 01 0 0 11 0 1 01 1 0 1

    1 1 1 0

    Exemplo 3: Elabore um programa e a tabela verdade para emular uma o circuito lgico

    booleano abaixo.

    S= (A & B) | !C | !(C & D)

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    51/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    51

    #include // Emulao de circuitos lgicos booleanosshort int A, B, C, D, saida, ledpisca;

    main(){clock_int_4MHz();

    while (TRUE){A=input(pin_b1); //entrada com pull-down externo (resistor conectado ao Terra)B=input(pin_b2); //entrada com pull-down externo (resistor conectado ao Terra)C=input(pin_b3); //entrada com pull-down externo (resistor conectado ao Terra)D=input(pin_b3); //entrada com pull-down externo (resistor conectado ao Terra)

    saida= (A & B) | !C | !(C & D);output_bit(pin_b7,saida); //O pino_b7 mostra o resultado do circuito lgico booleano

    ledpisca=!ledpisca; // ledpisca igual ao inverso de ledpiscaoutput_bit(pin_b0,ledpisca); // b0 recebe o valor de ledpisca

    delay_ms(500);}}

    A tabela verdade deste circuito lgico mostrada abaixo:

    ENTRADAS SAIDAA B C D S0 0 0 0 10 0 0 1 1

    0 0 1 0 10 0 1 1 00 1 0 0 10 1 0 1 10 1 1 0 10 1 1 1 01 0 0 0 11 0 0 1 11 0 1 0 11 0 1 1 01 1 0 0 1

    1 1 0 1 11 1 1 0 11 1 1 1 1

    A tabela verdade pode ser facilmente comprovada de forma real montando o circuito proposto.

    4.3. EMULAO DE DECODIFICADOR PARA DISPLAY DE 7 SEGMENTOS

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    52/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    52

    Antes de comentar sobre os decodificadores, vamos definir o que um display de sete

    segmentos. O display de sete segmentos, formado por sete leds. Quando necessita-se acender o

    nmero 0, liga-se os leds correspondentes ao digito 0, por exemplo, os segmentos a, b, c, d,e, f. Na figura abaixo, mostrado um display de sete-segmentos e a respectivos pinos. No lado

    direito, os dois tipos de displays, anodo comum e catodo comum. No esquea que no anodo

    comum o led liga com Gnd e no catodo comum o led liga com Vcc.

    Como os segmentos so leds, ento necessrio limitar a corrente, para isso devemos usar

    um resistor em cada segmento, pois se no sero queimados. Normalmente se utilizam resistores

    entre 220 e 560 ohms para uma fonte de 5Volts. Uma dica, se for usar um display, teste antes

    cada segmentos, para ter certeza que no est usando um display com algum segmento queimado.

    Os decodificadores, inverso dos codificadores, tem a funo de converter um cdigo

    desconhecido de linguagem de mquina, como o binrio de entrada mostrado neste exemplo,

    em um cdigo compreensvel, como o cdigo decimal ou um desenho em um display de 7

    segmentos. Os decodificadores fixos podem ser construdos com portas lgicas reais ou

    emulados, ou seja, reproduzidos via software, como o caso proposto.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    53/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    53

    Os decodificadores de displays de 7 segmentos, como o 9317 (anodo comum) e o 9307

    (catodo comum), recebem 4 bits de entrada para a decodificao do nmero a ser desenhado

    pelos segmentos dos displays.

    CI - 9317Entradas Sadas Desenho

    /LT /RBI A0 A1 A2 A3 a b c d e f g pontoL X X X X X L L L L L L L H testeH L L L L L H H H H H H H L apagaH H L L L L L L L L L L H H 0H X H L L L H L L H H H H H 1H X L H L L L L H L L H L H 2H X H H L L L L L L H H L H 3H X L L H L H L L H H L L H 4H X H L H L L H L L H L L H 5H X L H H L L H L L L L L H 6H X H H H L L L L H H H H H 7H X L L L H L L L L L L L H 8H X H L L H L L L L H L L H 9

    Para a emulao, ou seja, reproduo via software, de decodificadores de displays de sete

    segmentos, os pinos do microcontrolador devem apresentar os seguintes valores mostrados na

    tabela abaixo:

    TABELA (Anodo comum zero no pino acende segmento)NMERODYSPLAY

    B6 B5 B4 B3 B2 B1 B0 Porta BHexadecimalg f e d c b a

    0 1 0 0 0 0 0 0 0x401 1 1 1 1 0 0 1 0x792 0 1 0 0 1 0 0 0x243 0 1 1 0 0 0 0 0x304 0 0 1 1 0 0 1 0x195 0 0 1 0 0 1 0 0x126 0 0 0 0 0 1 0 0x027 1 1 1 1 0 0 0 0x788 0 0 0 0 0 0 0 0x009 0 0 1 0 0 0 0 0x10

    Abaixo mostrado um programa exemplo para contar de 0 a 9 com um display de sete segmentosanodo comum. Dependendo dos display anodo ou catodo comum, como tambm dos pinos domicrocontrolador ligados ao displays, possvel utilizar o mesmo programa abaixo, alterandoapenas os valores dos elementos da matriz setseg[10].

    #include #byte port_b = 0xf81//Atribuio do nome portb para o registro da porta B localizado na posio 0xf81 da memria de dados

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    54/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    54

    int setseg[10] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //Vetor com 10 elementos que desenham de 0 a 9int i; //ndice i (ponteiro)

    void main (){

    clock_int_4MHz();set_tris_b(0b00000000);// Define os pinos da porta B como sada

    while(1){

    for (i=0;i

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    55/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    55

    Os segmentos ascendem com zero no pino do microcontrolador (anodo comum). Note que

    como so somente quatro letras s necessrio duas entradas (Xe Y) para a decodificao.

    Aps a definio de cada segmento do display para representar os caracteres da palavra,

    feita a simplicao de cada segmento atravs dos diagramas de Karnaugh abaixo para a

    construo da funo de emulao do decodificador fixo.

    a /Y Y b /Y Y c /Y Y d /Y Y

    /X 0 1 /X 1 1 /X 0 1 /X 0 0

    X 1 0 X 1 0 X 0 1 X 0 1

    e /Y Y f /Y Y g /Y Y

    /X 1 0 /X 0 0 /X 0 0

    X 0 0 X 1 0 X 0 0

    O programa abaixo mostra as funes de emulao do decodificador fixo para a palavra StoPobtidas dos diagramas de Karnaugh.

    #include // Emulao de decodificador para display de 7 segmentos - palavra StoPshort int X, Y; //Entradasshort int a, b, c, d, e, f, g; //sadas

    void decodificador(short int X, short int Y) //Funo auxiliar do decodificador fixo para StoP{

    a=X ^ Y; output_bit(pin_b0,a); //Anodo comumb=!X | !Y; output_bit(pin_b1,b);c=Y; output_bit(pin_b2,c);d=X & Y; output_bit(pin_b3,d);e=!X & !Y; output_bit(pin_b4,e);f=X & !Y; output_bit(pin_b5,f);g=0 ; output_bit(pin_b6,g);

    }

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    56/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    56

    main(){clock_int_4MHz();while (1){

    decodificador(0,0); // Insere as entradas X=0 e Y=0 no decodiicador fixo Sada letra Sdelay_ms(1000);

    decodificador(0,1); // Sada letra tdelay_ms(1000);

    decodificador(1,0); // Sada letra odelay_ms(1000);

    decodificador(1,1); // Sada letra Pdelay_ms(1000);

    }}

    Exemplo 2: Construa um decodificador emulado para escrever, letra por letra no mesmo display

    de 7 segmentos, a cada segundo, a palavra USb2. Como o display anodo comum (+5V noanodo do display), os segmentos ascendem com zero no pino do microcontrolador.

    Aps a definio de cada segmento do display para representar os caracteres da palavra,

    feita a simplicao de cada segmento atravs dos diagramas de Karnaugh abaixo para a

    construo da funo de emulao do decodificador fixo.

    a /Y Y b /Y Y c /Y Y d /Y Y

    /X 1 0 /X 0 1 /X 0 0 /X 0 0

    X 1 0 X 1 0 X 0 1 X 0 0

    e /Y Y f /Y Y g /Y Y

    /X 0 1 /X 0 0 /X 1 0

    X 0 0 X 0 1 X 0 0

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    57/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    57

    O programa abaixo mostra as funes de emulao do decodificador fixo para a palavra USb2obtidas dos diagramas de Karnaugh.

    #include // Emulao de decodificador para display de 7 segmentos - palavra Usb2

    short int X, Y; //Entradasshort int a, b, c, d, e, f, g; //sadas

    void decodificador(short int X, short int Y) //Funo auxiliar do decodificador fixo para USb2{a=!Y; output_bit(pin_b0,a); //Anodo comumb=X^Y; output_bit(pin_b1,b);c=X&Y; output_bit(pin_b2,c);d=0; output_bit(pin_b3,d);e=!X&Y; output_bit(pin_b4,e);f=X&Y; output_bit(pin_b5,f);g=!X&!Y; output_bit(pin_b6,g);}main(){clock_int_4MHz();

    while (1){

    decodificador(0,0); // Insere as entradas X=0 e Y=0 no decodiicador fixo Sada letra Sdelay_ms(1000);

    decodificador(0,1); // Sada letra tdelay_ms(1000);

    decodificador(1,0); // Sada letra odelay_ms(1000);

    decodificador(1,1); // Sada letra Pdelay_ms(1000);

    }}

    4.4. MULTIPLEXAO COM DISPLAYS DE 7 SEGMENTOS

    Como a economia de consumo e de componentes so sempre fatores importantes a serem

    considerados em projetos de sistemas digitais, uma tcnica bastante utilizada a multiplexao

    de displays. Esta tcnica permite que um s decodificador de displays como o 9317 (anodo

    comum), o 9307 (catodo comum) ou apenas sete pinos de um microcontrolador, que emulam as

    sadas do decodificador, possam controlar uma srie de displays em paralelo.

    Estes so ciclicamente acesos e apagados numa freqncia acima de 20Hz de tal forma

    que, para o olho humano, todos os displays estejam acesos permanentemente. Para isso, so

    colocados transistores de corte que atuam em sequncia sobre cada terminal comum dos displays

    em paralelo.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    58/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    58

    O programa abaixo mostra um exemplo para contar de 0 a 99 multiplexando dois displays de setesegmentos anodo comum.

    #include #byte port_b = 0xf81//Atribuio do nome portb para o registro da porta B localizado na posio 0xf81 da memria de dados

    int setseg[10] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //Vetor com 10 elementos que desenham de 0 a 9int i, z, dezena, unidade; //ndice dezena,unidade (ponteiro)

    void main (){clock_int_4MHz();set_tris_b(0b00000000);// Define os pinos da porta B como sada

    while(1){

    for (i=0;i

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    59/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    59

    port_b = setseg[unidade]; //A porta B recebe o desenho do nmero das unidades apontado pela varivel unidadedelay_ms(10);

    }}}

    }

    5. INTERRUPES

    As interrupes so causadas atravs de eventos assncronos (podem ocorrer a qualquer

    momento) causando um desvio no processamento. Este desvio tem como destino um endereo

    para tratamento da interrupo. Uma boa analogia para melhor entendermos o conceito de

    interrupo a seguinte: voc est trabalhando digitando uma carta no computador quando o seu

    telefone toca. Neste momento voc, interrompe o que est fazendo, para atender ao telefone e

    verificar o que a pessoa do outro lado da linha est precisando. Terminada a conversa, voc

    coloca o telefone no gancho novamente e retoma o seu trabalho do ponto onde havia parado.

    Observe que no precisamos verificar a todo instante, se existe ou no algum na linha, pois

    somente quando o ramal chamado, o telefone toca avisando que existe algum querendo falar

    com voc.

    Aps do atendimento das interrupes, o microcontrolador retorna exatamente ao ponto

    onde parou no programa antes de atend-la. As interrupes mais comuns na famlia PIC18F so:

    - pela interrupo externa 0 (Pino B0) -> enable_interrupts(int_ext);

    - pela interrupo externa 1 (Pino B1) -> enable_interrupts(int_ext1);

    - pela interrupo externa 2 (Pino B2) -> enable_interrupts(int_ext2);

    - pelo contador/temporizador 0 -> enable_interrupts(int_timer0);

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    60/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    60

    - pelo contador/temporizador 1 -> enable_interrupts(int_timer1);

    - pelo contador/temporizador 2 -> enable_interrupts(int_timer2);

    - pelo canal de comunicao serial -> enable_interrupts(int_rda); //serial

    As interrupes do PIC so vetorizadas, ou seja, tm endereos de incio da interrupo

    fixos para a rotina de tratamento. No PIC18F2550 o endereo de tratamento 0x08. No

    programa em C basta escrever a funo de tratamento da interrupo aps #, e o compilador far

    o direcionamento do cdico automaticamente para essa posio.

    5.1. INTERRUPES EXTERNAS

    O modelo PIC18F2550 possui trs interrupes externas, habilitadas nos pinos B0 (ext) ,

    B1 (ext1) e B2 (ext2), que atuam (modo default) quando os pinos so aterrados. Quandos

    atuados o processamento desviado para #int_ext, #int_ext1 ou #int_ext2, respectivamente,

    para que a interrupo possa ser tratada por uma funo especfica, que no caso do exemplo

    void bot_ext().

    Dentro da funo principal deve-se habilitar o disjuntor geral das interrupes,

    enable_interrupts(global); e depois a interrupo especfica, por exemplo

    enable_interrupts(int_ext); como mostra o exemplo com aplicao de interrupo externa e

    tambm interruo do temporizador 1.

    #include

    BYTE comando;

    short int led;int x;

    #int_timer1

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    61/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    61

    void trata_t1 (){

    led = !led; // inverte o led - pisca a cada 0,5 seg.output_bit (pin_b7,led);set_timer1(3036 + get_timer1());

    }

    #int_extvoid bot_ext(){

    for(x=0;x valid

    interrupts.

    Quando for utilizada alguma interrupo externa, necessrio inserir um resistor depull-

    upexterno de 1K a 10K para elevar o nvel lgico do pino quando o mesmo for liberado evitando

    outra interrupo, pois o processador entende tristate e nveis intermedirios de tenso como

    nvel lgico baixo.

    5.2 INTERRUPO DOS TEMPORIZADORES

    O microcontrolador PIC 18F2550 tem quatro temporizadores, que so os timers 0, 1, 2 e

    3. O timer 0 tem 16 bits, ou seja, pode contar at 65535s (216) e um prescaler (divisor de

    freqncia ou multiplicador de tempo) de at 256 (RTCC_DIV_256). Os timers 1 e 3 so

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    62/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    62

    idnticos com 16 bits e um prescaler de at 8 (RTCC_DIV_8). Por sua vez, O timer2 possui 8

    bits e um prescaler de at 16 (RTCC_DIV_16).

    Os timers incrementam at estourar, quando estouram, processamento desviado para

    #int_timer, para que a interrupo possa ser tratada por uma funo especfica, que no caso do

    exemplo void trata_t0 () e void trata_t1 ().

    O programa a seguir pisca um led em b5 na funo principal main(), outro pela

    interrupo do timer 1 em b6 e um terceiro led em b7 pela interrupo do timer0.

    #include

    short int led0, led1;int vart1=2, vart3=4; // multiplicador de tempo

    #int_timer0void trata_t0 () //Funo de taratamento, o Timer0 configurado com o nome RTCC{

    led0 = !led0; // inverte o led a cada 4 seg pois tem prescaler igual a 64 (RTCC_DIV_64)output_bit (pin_b7,led0);set_timer0(3036 + get_timer0()); // get_timer() carrega o timer compensando o tempo gasto no tratamento da interrupo

    }

    #int_timer1//O timer 1 e o timer 3 so idnticos, s basta modificar 1 por 3 na configuraovoid trata_t1 (){

    --vart1;if(vart1==0){led1 = !led1; // inverte o led - pisca a cada 1 seg (vart1=2 x 0,5 seg)output_bit (pin_b6,led1);vart1=2; // necessita de multiplicador de tempo, pois o prescaler mximo 8 (T1_DIV_BY_8)set_timer1(3036 + get_timer1()); // get_timer() carrega o timer compensando o tempo gasto no tratamento da interrupo}

    }

    main(){

    clock_int_4MHz();enable_interrupts (global); // Possibilita todas interrupcoesenable_interrupts (int_timer0); // Habilita interrupcao do timer 0enable_interrupts (int_timer1); // Habilita interrupcao do timer 1

    setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_64);// configura o prescaler do timer 0 em 64, tem prescaler at 256set_timer0(3036); // Conta 62.500us x 64 para estourar= 4 seg

    setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8);// configura o prescaler do timer 1 em 8 x 62500us = 0,5 segset_timer1(3036); // Conta 62.500us x 8 para estourar= 0,5 seg

    while (1){ //Funo principal pisca led em a5

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    63/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    63

    output_high(pin_b5);delay_ms(500);output_low(pin_b5);delay_ms(500);

    }}

    5.3 MULTIPLEXAO POR INTERRUPO DE TEMPORIZADORES

    O programa abaixo mostra uma multiplexao de displays de 7 segmentos por interrupo dos

    temporizadores 0 e 1. O timer 0 incrmena a varivel a ser multiplexada pelos displays e o timer 1

    multiplexa a porta B dgitos de dezenas e dgitos de unidades at 99.

    #include

    #byte port_b = 0xf81//Atribuio do nome portb para o registro da porta B localizado na posio 0xf81int setseg[10] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //Vetor com 10 elementos

    int flag=0;int i=0, z, dezena, unidade; //ndice dezena,unidade (ponteiro)

    //******************************************#int_timer0void trata_t0 () //O Timer0 configurado com o nome RTCC{if(i99) {i=0;}set_timer0(3036 + get_timer0()); // get_timer() carrega o timer compensando o tempo gasto na interrupo}//*********************************************

    #int_timer1//O timer 1 e o timer 3 so idnticos, s basta modificar 1 por 3 na configuraovoid trata_t1 (){dezena=i/10; //dezena recebe o nmero inteiro da diviso por 10unidade=i%10; //unidade recebe o resto da diviso por 10

    switch(flag){case 0: {

    output_high(pin_a0); //pin_a0 aciona transistor do comum das dezenasoutput_low(pin_a1); //pin_a3 aciona transistor do comum das unidades

    port_b = setseg[dezena]; //A porta B recebe o desenho do nmero das dezenas apontado pela varivel dezenaflag=1; break;}

    case 1: {output_high(pin_a1); //selecionei a unidadeoutput_low(pin_a0);

    port_b = setseg[unidade]; //A porta B recebe o desenho do nmero das unidades apontado pela varivel unidadeflag=0; break;}

    }

    set_timer1(55536 + get_timer1());}

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    64/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    64

    main(){clock_int_4MHz();set_tris_b(0b00000000);// Define os pinos da porta B como sada

    enable_interrupts (global);// Possibilita todas interrupcoes

    enable_interrupts (int_timer0);// Habilita interrupcao do timer 0enable_interrupts (int_timer1); // Habilita interrupcao do timer 1

    setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_8);// configura o prescaler do timer 0 em 64, prescaler at 256set_timer0(3036); // Conta 62.500us x 8 para estourar= 0,5 seg

    setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_1);set_timer1(55536); // Conta 10000 us (10ms) para estourar

    while (1){ //Funo principaloutput_high(pin_a5);delay_ms(300);output_low(pin_a5);delay_ms(300);

    }}

    6. COMUNICAO SERIAL EIA/RS-232

    A comunicao serial teve incio com a inveno do telgrafo. Depois teve um grande

    desenvolvimento com a inveno do Teletype (teletipo) pelo Francs Jean Maurice mile

    Baudot, em 1871, da o nome Baud Rate. Baudot, alm de criar toda a mecnica e eltrica do

    Teletype, criou tambm uma tabela de cdigos (Cdigo de Baudot) com letras, nmeros, e

    smbolos para a transferncia serial assncrona digital de informaes. Da surgiu o Padro de

    comunicao RS-232, que significaPadro Recomendadoverso 232.

    Na transmisso dos caracteres atravs da linha telegrfica, o sinal de Marca era

    representado pela presena de corrente eltrica, e o Espao pela ausncia desta corrente. Para que

    o Teletype conseguisse distinguir o incio e o final de um caractere, o mesmo era precedido com

    um sinal Espao (start bit) e finalizado com um sinal de Marca (stop bit). Entenda que o estado

    da linha ociosa (sem transmisso de dados) era o sinal de Marca (presena de corrente eltrica).

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    65/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    65

    Foi baseado nesse sistema que o padro de transmisso RS-232 evoluiu e se tornou um padro

    muito utilizado nos computadores e equipamentos digitais.

    Algumas interfaces EIA/RS-232 nos computadores atuais fornecem aproximadamente -

    10v e +10v, mas suportam mnimas de -25v e mximas de +25v.

    A Comunicao serial feita pela transmisso de bits em seqncia. um modo de

    comunicao muito recomendado para transmisso de dados a longa distncia. Nesse caso, a

    comunicao serial apresenta um menor custo pelo nmero reduzido de fios e conseqentemente

    menor velocidade em relao comunicao paralela.

    Para a transmisso de dados por distncias maiores e com pouca interferncia pode-se

    utilizar uma interface com outros padres como o EIA/RS-232 e o EIA/RS-485. A comunicao

    serial pode ser sncrona ou assncrona. Na primeira, alm dos bits de dados so enviados tambm

    bits de sincronismo, ou seja, o receptor fica em constante sincronismo com o Transmissor. Na

    comunicao assncrona, que o modo mais utilizado de comunicao entre sistemas de controle

    e automao por no necessitar de sincronismo, existe um bit que indica o incio da transmisso,

    chamado destart bit (nvel lgico baixo)e um bit que indica o final da transmisso chamado de

    stop bit (nvel lgico alto). Nessa transmisso, o Receptor em sincronismo com o Transmissor

    apenas no incio da transmisso de dados. Deve-se considerar que o transmissor e o receptor

    devem estar na mesma velocidade de transmisso.

    Quando o canal serial est em repouso, o sinal correspondente no canal tem um nvel

    lgico 1. Um pacote de dados sempre comea com um nvel lgico 0 (start bit) para sinalizar

    ao receptor que um transmisso foi iniciada. O start bit inicializa um temporizador interno no

    receptor avisando que a transmisso. Seguido do start bit, 8 bits de dados de mensagem so

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    66/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    66

    enviados com a velocidade de transmisso pr-programada no emissor e no receptor. O pacote

    concludo com os bits de paridade e de parada (stop bit).

    O bit de paridade usado como nono bit com o propsito de deteco de erro. Nessaconveno, quando o nmero total de dgitos 1 , o valor do bit de paridade 1 e quando for

    mpar 0.

    A interrupo do canal serial utilizada quando se espera receber um dado em

    tempo aleatrio enquanto se executa outro programa. Quando o dado chega, o start bit (nvel

    lgico baixo) aciona a interrupo, previamente habilitada, onde a recepo da comunicao

    serial executada. Caso o canal serial seja utilizado somente para transmissode dados, no

    necessrio habilitar a interrupo serial.

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    67/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    67

    6.1. CDIGO ASCII

    Um dos formatos mais utilizados em comunicao serial, como no padro EIA/RS-232, o

    ASCII (American Standard Code for Information Interchange). Este formato utiliza sete bits de

    cada byte (valor mximo 0x7F) e o oitavo bit de paridade que pode ou no ser utilizado.

    Se o nmero de 1s for par, o bit de paridade X7 zero e, se for mpar, X7 um.

    A Tabela de Caracteres ASCII mostrada abaixo:

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    68/276

    APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

    68

    6.2. INTERFACE USART DO MICROCONTROLADOR

    A interface serial USART (transmissor-receptor universal sncrono e assncrono) dos

    microcontroladores pode ser sncrona ou assncrona, sendo esta ltima a mais utilizada para

    comunicao com o mundo externo utilizando o padro EIA/RS-232, onde cada byte serial

    precedido por um start-bit de nvel lgico baixo e encerrado por um stop-bit de nvel lgico alto.

    Os conectores utilizados so o DB9 e o DB25, como mostra a figura abaixo:

    www.mecatronicadegaragem.blogspot.com

  • 5/27/2018 Apostila de Microcontroladores PIC e Perifericos

    69/276

    APOSTILA DE MICROCONTROLADORES PIC E PEF