Académique Documents
Professionnel Documents
Culture Documents
Monografia apresentada como requisito parcial para obteno do diploma de Bacharel em Engenharia da Computao pela Escola Politcnica de Pernambuco Universidade de Pernambuco.
Dedico este trabalho a minha famlia, em especial a meus pais que em todo tempo me apoiaram e me incentivaram para a buscas desta conquista.
Agradecimentos
Agradeo primeiramente a Deus, pois ele o centro da minha vida e tudo que sou, isto , minha educao, meu entendimento, meu modo de pensar, minha vida. Tudo devo a Ele. Nada faria sem o apoio do meu Deus todo poderoso. Agradeo com grande orgulho a minha famlia, pois ela tem se dedicado me ajudando a conquistar essa vitoria. Em todos os momentos pude contar com o apoio, a disciplina e os conselhos que me fizeram vencer. Em especial quero agradecer a meus pais, Ftima e Leal, pois eles so a grande parte das minhas vitorias. Queria agradecer a minha companheira fiel, Raquel, pois sempre tem me apoiado, apesar das dificuldades e sempre esteve ao meu lado para me levantar nos momentos em que no conseguia mais caminhar. Queria agradecer os momentos de compreenso e de abdicao, pois eles so expressos hoje como momentos de sabedoria. Agradeo tambm a sua famlia, que por laos de sangue sua, mas na pratica minha famlia a qual sou de mesmo modo grato. Presto meus agradecimentos a meus amigos de turma, companheiros em momentos de desespero e trabalho rduo. Tambm a meus professores, que promoveram a orientao necessria para concluir esta vitoria hoje. Estes no s transmitiram o conhecimento, mas tambm lies para a vida. Agradeo em especial a meu orientador, Sergio Campello pela pacincia e companheirismo, no s nestes momentos finais, mas tambm em todos esses 5 anos. Um forte abrao e um grande obrigado !!
Resumo
A cada dia, com o crescimento de tecnologia voltada a sistemas embarcados, o uso microcontroladores tem se tornado mais freqente. Este tipo de componente apresenta inmeras vantagens como baixo consumo de energia, programao via linguagem de alto e baixo nvel, entre outras. H sempre uma necessidade de comunicao entre sistemas embarcados e computadores, sejam para diagnostico, monitoramento ou transferncia de dados armazenados. Assim necessrio sempre um modo de comunicao simples e disponvel em vrios tipos de equipamento. proposto por este trabalho o desenvolvimento de um sistema de comunicao USB com microcontroladores. Esse sistema projetado para fornecer comunicao em projetos desenvolvidos, em desenvolvimento ou em planejamento, pois pode ser adicionado como um mdulo a outros sistemas. J esto presentes no sistema todas as configuraes necessrias para fornecer comunicao USB. proposto tambm por este trabalho o desenvolvimento de uma biblioteca de funes para comunicao USB que proporciona facilidade de configurao, abstrao do funcionamento em baixo nvel e instrues de uso no desenvolvimento de um sistema personalizado ou de outras funcionalidades caso seja necessrio. O desenvolvimento feito em linguagem de programao de alto nvel.
Abstract
Each day, with the embedded systems technologies growing, the use of microcontrollers has been more common. This kind of component has a lot of advantages, like small energy consumption, high or low level of programming, and others. There is always the necessity of communications between computers and embedded systems, for diagnosis, monitoring or data transfers. Thus, is always necessary a simple communication way avaliable for at a sort of equipments. This work purposes na USB communication system with microcontrollers development. This system is designed for giving communications in projects in development, developed or in planning, because it can be added as a module with another systems. There is already inside the system all the necessary configurations for giving USB communication. This work also purposes a library of functions for USB communication, providing configuration facilites, better level of low level
programming abstraction, instructions of use for custom system development or another funcionalities, if necessary. All the development in this work is made using high-level programming language.
ii
Sumrio
Captulo 1 .........................................................................................................8 Introduo.........................................................................................................8 Captulo 2 .......................................................................................................10 Microcontroladores .........................................................................................10 2.1 Principais Componentes ..................................................................11 Memria.......................................................................................11 ALU..............................................................................................11 Temporizadores e contadores .....................................................11 Interfaces de entrada e sada ......................................................11 Interrupes.................................................................................12
Captulo 3 .......................................................................................................13 Universal Serial Bus (USB).............................................................................13 3.1 3.2 3.3 Conectores.......................................................................................14 Identificao do Dispositivo..............................................................15 Tipos de Fluxo de Dados .................................................................16 Transferncia de Controle ...........................................................16 Transferncia de Massa ..............................................................16 Transferncia de Interrupo.......................................................17 Transferncia Isossncrona..........................................................17
Descritores .......................................................................................18
3.5 Classes de dispositivos .........................................................................19 3.5.1 3.5.2 3.5.3 Human Interface Device (HID) .....................................................19 Mass Storage Device (MSC) .......................................................20 Communications Device Class (CDC) .........................................20 iii
3.5.4 Outros.............................................................................................20 Captulo 4 .......................................................................................................22 Sistema de Comunicao USB com Microcontrolador ...................................22 4.1 Ferramentas usadas ........................................................................22 Linguagem C para microcontroladores ........................................22 Ferramenta Computacional de Simulao...................................24 Envio e Recepo de Dados no Computador..............................25
Microcontrolador PIC 18F4550 ........................................................25 Biblioteca de funes .......................................................................26 Comunicao USB...........................................................................28 Descritores USB ..........................................................................28 Bits de configurao ....................................................................32 Configurao de clock .................................................................35 Alimentao do Circuito ...............................................................38 Circuito de Gravao ...................................................................39 Programa Principal ......................................................................40 Simulao ....................................................................................45 Circuito Eltrico............................................................................47 Instalao e Funcionamento........................................................49
Captulo 5 .......................................................................................................53 Concluso e Trabalhos Futuros......................................................................53 Bibliografia ......................................................................................................55 Apndices .......................................................................................................56 Arquivo usb_serial_TCC.h ..........................................................................56 Arquivo usb_biblioteca.h .............................................................................59 Arquivo usb_desc_TCC.h ...........................................................................64 iv
ndice de Figuras
Figura 1. Comparativo entre as formas de comunicao em relao velocidade. ................................................................................................................14 Figura 2. Conectores USB. .............................................................................14 Figura 3. Configurao de hardware Full Speed Device.................................15 Figura 4. Configurao de hardware Low Speed Device................................16 Figura 5. Tipos de fluxos de dados da comunicao USB..............................18 Figura 6. Hierarquia de descritores USB ........................................................19 Figura 7. Distribuies e respectivas famlias do compilador CCS.................24 Figura 8. Diagrama do clock para o oscilador primrio, adaptada e extrada de . .................................................................................................................................36 Figura 9. Esquema de alimentao do circuito ...............................................39 Figura 10. Gravador e esquema de gravao ICD2 .......................................40 Figura 11. Circuito de simulao no Proteus ..................................................46 Figura 12. Desenho do circuito impresso........................................................48 Figura 13. Face dos componentes do circuito construdo...............................48 Figura 14. Face das soldas e trilhas do circuito construdo ............................49 Figura 15. Reconhecimento no computador do SCUSB (Sistema de Comunicao USB)...................................................................................................50 Figura 16. Configurao da conexo do terminal no computador ..................51 Figura 17. Abrir porta de comunicao no programa terminal ........................51 Figura 18. Resposta obtida pelo envio do comando Instrues .....................52 Figura 19. Resposta obtida pelo envio do comando Ler EEPROM ................52 Figura 20. Resposta obtida pelo envio do comando Gravar na EEPROM......52 Figura 21. Resposta obtida pelo envio do comando Mostrar Rotina ..............52
ndice de Tabelas
Tabela 1. Pinagem dos conectores USB. .......................................................15 Tabela 2. Tipos de dispositivos.......................................................................21 Tabela 3. Descritor de dispositivo...................................................................29 Tabela 4. Descritor de configurao ...............................................................30 Tabela 5. Descritor de interface de controle ...................................................30 Tabela 6. Descritor da interface de transmisso de dados do tipo CDC ........31 Tabela 7. Descritor de endpoint 0...................................................................31 Tabela 8. Descritor de endpoint 1...................................................................31 Tabela 9. Descritor de endpoint 2...................................................................32 Tabela 10. Configurao da freqncia de clock............................................37 Tabela 11. Diretivas de compilao................................................................40 Tabela 12. Bits de configurao do programa principal..................................42
vi
vii
Captulo 1 Introduo
Captulo 1 Introduo
H uma tendncia nos dias atuais para a utilizao da comunicao USB devido a sua gama de vantagens em relao a outros tipos de comunicao, como por exemplo, possuir configurao fcil por parte do usurio, ter um baixo custo de desenvolvimento, ter disponvel vasta documentao e suporte, entre outras. Neste trabalho foram observadas essas vantagens tornando a comunicao USB em microcontroladores como alvo principal. A comunicao USB proporciona uma conexo padro para diversos tipos de dispositivos tornando muito fcil a instalao deste projeto em qualquer computador. Esse tipo de comunicao tambm proporciona a rpida utilizao aps a instalao, caracterstica chamada de plug and play. O foco inicial era obter um melhoramento do Sistema de Deteco ptica de Descargas Parciais em Cadeias de Isoladores em Linhas de Transmisso de Alta Tenso [1], incluindo a transmisso USB para comunicao direta com um computador. Esse melhoramento seria realizado na central de processamento desse sistema que usa o microcontrolador PIC 16F877A [2] e deveria ser adaptada para o uso do PIC 18F4550 [3] migrando todas as funes definidas anteriormente, contudo a ampliao deste trabalho para uso em diversos sistemas se tornou em foco principal, tornando-o assim mais abrangente. Neste trabalho foi proposto esse tipo de comunicao pela razo de ampla compatibilidade com diversas plataformas e sistemas operacionais. O Windows, por exemplo, o suporta desde a verso 98. Sistemas operacionais Linux e Mac tambm so compatveis. Atualmente, possvel conectar dispositivos USB em vrios outros aparelhos eletrnicos. Alm de que os dispositivos USB podem ser conectados e desconectados a qualquer momento. Em um computador, por exemplo, no necessrio reinici-lo ou deslig-lo para conectar ou desconectar. A interface de comunicao USB tem a caracterstica de fornecer tenso para alimentao eltrica 8
Captulo 1 Introduo
dos dispositivos conectados atravs dela. Por exemplo, um celular conectado em um computador atravs de conexo USB no necessita de nenhuma alimentao externa, no entanto possvel o carregamento de sua bateria. O sistema desenvolvido neste trabalho usa a alimentao que fornecida pela conexo USB. A manipulao dos dispositivos com comunicao USB intuitiva, rpida e de simples configurao para o usurio, contudo o seu desenvolvimento necessita de vrios mdulos de configurao, esses descritos neste trabalho em detalhes. Com o uso de microcontroladores esse tipo de comunicao necessita tambm de descritores (trazem informaes sobre o dispositivo), biblioteca de funes, entre outros. Uma nova biblioteca foi desenvolvida, tambm descrita neste trabalho, para tornar mais simples a implementao de futuros projetos, seja nesse sistema, seja em qualquer outro sistema que use microcontroladores da Microchip [4] e programao em linguagem C. A carncia de portas de comunicao paralela em novos dispositivos provocou o desincentivo ao desenvolvimento desse tipo de comunicao nos sistemas embarcados em geral. Esse outro motivo para o desenvolvimento deste trabalho com comunicao USB para microcontroladores.
Captulo 2 Microcontroladores
Captulo 2 Microcontroladores
Microcontrolador um circuito integrado composto por um microprocessador e dispositivos perifricos essenciais para o seu funcionamento como: memria de programa e de dados; e tambm perifricos acessrios como: interfaces de entrada e sada de dados. Os microcontroladores tambm so equipados com diversos circuitos eletrnicos tais como: conversor analgico digital, temporizadores, comparadores, interfaces de comunicao, geradores de pulsos, entre outros. So muito populares devido ao seu baixo custo. Isso vem tornando os microcontroladores como solues de viabilidade de vrios projetos que tem como prioridade o baixo consumo de energia. Por serem programveis podem ser utilizados nas mais diversas aplicaes em sistemas embarcados, como celulares, eletrodomsticos, equipamentos de automao industrial, relgios, alarmes, brinquedos e outros, pois podem ser desenvolvidos para aplicaes especificas. Uma grande parte de componentes eletrnicos hoje composta por
microcontroladores. A capacidade de processamento e de armazenamento varia entre os microcontroladores definindo desta forma famlias de processadores com funes semelhantes. Existem famlias que so de linhas compactas, isto , possuem poucas funes, ocupam menos espao, consomem menos energia. Esses so usados para executar operaes mais simples que no necessitem de muitos recursos. Outros so compostos por maior capacidade de armazenamento de dados, palavras de bits maiores, diversas funcionalidades e podem ser usados para a execuo de atividades mais complexas, e em algumas ocasies substituindo computadores. Alm de terem baixo custo como vantagem ainda consomem pouca energia, so portteis, eliminam a necessidade de muitos componentes externos, podem ser reconfigurados com facilidade e necessitam de pouco tempo para o
desenvolvimento. 10
Captulo 2 Microcontroladores
2.1.1 Memria
A memria um componente essencial em um microcontrolador e dividida em dois tipos: memria de programa (Flash) e memria de dados (RAM Random Access Memory e EEPROM - Electrically-Erasable Programmable Read-Only Memory). A memria de programa onde esto armazenadas as tarefas que o microcontrolador deve executar. Nessa os programas podem modificar
configuraes, manipular os dispositivos, efetuar comunicao de entrada e sada, executar instrues aritmticas, entre outros. A memria de dados usada para armazenar resultados e dados que sero usados pelo microcontrolador. Ambas as memrias tem tamanho bem limitado se comparado com outros dispositivos.
2.1.2 ALU
A ALU (Arithmetic Logic Unit) um modulo do microcontrolador que trabalha com operaes lgicas de comparao como maior, menor, igual; operaes booleanas como and, or, xor; operaes aritmticas como adio, subtrao, incrementao, multiplicao e diviso. considerada a central de processamento.
Captulo 2 Microcontroladores
USB por exemplo. Podem receber informaes de mouses, teclados, sensores e enviar informaes para display, atuadores, entre outros.
2.1.5 Interrupes
Este o componente que controla os pedidos de interrupo. Vrios so os dispositivos que esto inclusos dentro de um microcontrolador e a sua maioria dispara pedidos de interrupo o qual pode ser usado para a execuo de rotinas especificas.
12
13
Figura 1. Comparativo
3.1 Conectores
Existem vrios tipos de conectores, contudo todos seguem o mesmo padro de fabricao. A Figura 2 mostra a diversidade dos conectores e as diferenas fsicas entre eles. Os diversos tipos tm a funo de evitar conexes perigosas, isto , que possam danificar algum dispositivo, como por exemplo, encadeamentos com dispositivos no permitidos ou concatenao de cabos. Os conectores mini foram criados para dispositivos menores como telefones celulares, PDAs, maquinas fotogrficas, etc.
Figura 2. Conectores
USB.
14
Cada conector possui quatro contatos funcionais. Dois para alimentao e dois para dados diferenciais e seguem as conexes indicadas na Tabela 1.
Tabela 1.
Contato Sinal
1 2 3 4 Vcc (5V) DD+ Terra
Figura 3. Configurao
J os dispositivos LS-USB (Low Speed), que transmitem com taxa de 1,5 Mbps, tm um resistor pull-up de 1.5k ligado linha D-, como ilustrado na Figura 4 [6]. Alguns dispositivos possuem esse resistor projetado internamente no chip.
Figura 4. Configurao
para a transmisso de arquivos, pois prov forte controle de erros, assim como a transferncia de controle. Os dispositivos de armazenamento como pen drivers, cartes de memria, impressoras, scanners entre outros usam este tipo de transferncia.
17
Figura 5. Tipos
3.4 Descritores
Todos os dispositivos USB tm uma hierarquia de descritores que informam ao host o que compe o dispositivo e suas caractersticas de funcionamento, como: nmero de srie do produto, identificao do fabricante, tipo do dispositivo (impressora, scanner, modem, mouse, etc.), nmero de configuraes, nmero de endpoint (local fsico onde ser armazenado o fluxo de dados), tipo de transferncia, tipo de interface, entre outros. possvel visualizar a hierarquia dos descritores analisando a Figura 6.
18
Figura 6.
O primeiro nvel da hierarquia de descritores o descritor de dispositivo. Nele informado o tipo de dispositivo, a classe, nome do produto, fabricante, entre outros. Abaixo na hierarquia existem os descritores de configurao. Nele informado se o dispositivo tem alimentao prpria ou no, nmero de interfaces, entre outros. Existe, seguindo a hierarquia, o descritor de interface que informa os parmetros que identificam a relao entre o dispositivo e o endpoint. O descritor de endpoint tem por funo informar o host sobre uma via de comunicao especfica, visto que podemos configurar o dispositivo para possuir mais de um via [6] [7].
19
Geralmente a implementao destes dispositivos no necessita de muito trabalho, pois os protocolos de comunicao j so disponveis prontos e j esto implementados nos sistemas operacionais.
3.5.4 Outros
No h apenas estas classes de dispositivos. Pode-se implementar com o protocolo USB diversos tipos de dispositivos. Na Tabela 2 podemos visualizar diversas formas j determinadas.
20
Tabela 2. Tipos
de dispositivos
21
Tambm possvel verificar a vasta quantidade de documentao a respeito da programao nesta linguagem. Com C possvel o desenvolvimento de biblioteca de propsito especfico, a qual foi desenvolvida neste projeto e ser descrita em sees posteriores. A explorao de rotinas de baixo nvel possvel em C, pois existe suporte a programao em assembly dentro de seus programas. Deste modo pode-se desfrutar de todas as vantagens da implementao em alto nvel e tambm fazer uso das vantagens da implementao em baixo nvel explorando rotinas que podem no ser otimizadas atravs da programao em alto nvel. No caso de projetos com microcontroladores disponibilizado geralmente rotinas (bibliotecas de funes) em C pelos seus fabricantes, pois a linguagem geralmente utilizada para programao em microcontroladores pelas diversas vantagens informadas at este momento. Tambm possvel a programao diretamente em assembly, contudo uma abordagem que exige muito mais experincia e trabalho. O CCS C Compiler um compilador de linguagem C usado neste projeto para o desenvolvimento das rotinas para os microcontroladores [8]. O CCS prov completa estrutura lgica para a programao e tem baixo custo de implementao. O CCS composto por operadores que foram empacotados em bibliotecas que so especficos para os microcontroladores PICs, bem como acesso aos recursos de hardware com C. O compilador usado para gerar o cdigo fonte em C e assembly em linguagem de mquina. Possui interface para facilitar a implementao do sistema assim como fornece exemplos, drivers e funes em forma de bibliotecas. O CCS foi concebido para dar suporte a todas as famlias dos microcontroladores PICs da Microchip. Na Figura 7 podemos verificar as distribuies e as respectivas famlias.
23
Figura 7. Distribuies
No desenvolvimento deste trabalho foi usado o compilador com suporte ao PIC18, j que este projeto est baseado no microcontrolador PIC18F4550 [3] como veremos nas prximas sees. Tambm foi necessrio o suporte a comunicao USB que essencial para este desenvolvimento.
adaptao com as plataformas utilizadas. O uso do Proteus foi necessrio para a verificao da confeco do circuito e corrigir erros de programao.
25
13 Conversores analgico-digitais de 10 bits; Memria de programa Flash com 32 Kbytes; Memria de dados EEPROM 256 Bytes; Memria RAM 2 Kbytes; Freqncia de operao at 48 MHz; Portas bidirecionais de entrada e sada: A, B, C, D e E; 4 Timers; 1 Mdulo Capture/Compare/PWM; 2 Comparadores; 1 Streaming Parallel Port (SPP).
26
As funes nativas so: usb_enumerated(): Verifica se o dispositivo est pronto para a comunicao; usb_detach(): Desconecta o dispositivo. Deve ser usada antes de sua remoo fsica do computador; usb_attach(): Re-conecta o dispositivo, deve ser usada para reconect-lo quando o dispositivo foi desconectado, mas ainda no
removido literalmente; usb_cdc_putc(char c): Envia um caracter via USB; usb_cdc_kbhit(): Verifica se existe algum dado no buffer de recepo; usb_cdc_getc(): Recebe um caracter. Deve-se usar o usb_cdc_kbhit() descrito anteriormente para verificar se existem dados; get_float_usb(): Recebe um numero ponto flutuante; get_long_usb(): Recebe um numero inteiro longo; get_int_usb(): Recebe um inteiro; get_string_usb(char *s, int max): Recebe uma string; gethex_usb(): Recebe um hexadecimal.
Maiores informaes sobre estas funes nativas podem ser encontradas na documentao do compilador CCS compiler na pasta de instalao \...\PICC\Drivers nos arquivos USB.c, pic18_usb.h e usb_cdc.h. As funes extras necessrias que foram implementadas e esto includas nesta biblioteca com a inteno de completar as funes nativas existentes so: usb_cdc_putString(char *p): Envia uma string; usb_cdc_putEEPROM (int posicaoI, int tamanho): Envia um bloco da memria de dados; usb_cdc_putFLASH (char posicaoI, char tamanho): Envia um bloco da memria de programa; usb_cdc_conectar(): Inicializa e configura o dispositivo USB. 27
Tambm
est
presente
nesta
biblioteca
instrues
respeito
do
desenvolvimento de sistemas. As instrues so duas: a incluso de um descritor CDC diferente e a criao de um novo arquivo descritor USB. O nome da biblioteca foi determinado como usb_biblioteca.h. Existem dois arquivos que envolvem os descritores USB: usb_desc_cdc.h e usb_cdc.h, ambos se encontram na pasta "\...\PICC\Drivers". O primeiro a implementao dos descritores USB. A criao de um novo arquivo descritor USB necessria caso se deseje efetuar alguma modificao no descritor original para a criao de um descritor personalizado ou mais especifico. Devem ser feitas as modificaes e salv-las na mesma pasta onde se encontra o projeto mudando o nome do arquivo. O segundo arquivo o usb_cdc.h. Esse arquivo indica qual o arquivo que implementa o descritor usado no sistema. Caso seja criado um novo arquivo de descritor deve ser modificada a referncia dentro deste arquivo.
28
Tabela 3. Descritor
de dispositivo Descrio
Tamanho em bytes do descritor Tipo de descritor Verso USB utilizada Classe do dispositivo Sub Classe do dispositivo Protocolo utilizado Tamanho max. do pacote Id do fabricante Id do produto Verso do produto Informaes do produto Informaes do produto N de Serie do produto N de configuraes disponveis
N
0 1 2 4 5 6 7 8 10 12 14 15 16 17
Campo
bLength bDescriptorType bcdUSB bDeviceClass bDeviceSubClass bDeviceProtocol bMaxPacketSize0 idVendor idProduct bcdDevice iManufacturer iProduct iSerialNumber
TAM. Valor
1 1 2 1 1 1 1 2 2 2 1 1 1 USB_DESC_DEVICE_LEN 01h 0110h 02h 00h 00h USB_MAX_EP0_PACKET_LENGTH 0461h 0033h 0100h 01h 02h 00h USB_NUM_CONFIGURATIONS
bNumConfigurations 1
Cada dispositivo USB possui apenas um descritor de dispositivo que contm informaes gerais. Estes parmetros so os primeiros a serem coletados quando o dispositivo USB conectado [6]. A definio da classe e subclasse da interface segue os valores da Tabela 2 que definem o tipo de dispositivo USB. O parmetro neste descritor que pode sofrer alteraes quando implementado em outros sistemas, o parmetro bcdUSB. Esse campo configura a verso USB utilizada. Neste caso est configurado como verso 1.1, no entanto pode tambm assumir o valor outras verses como a verso 2.0 (0200h). Foi tambm implementado o descritor de configurao. No caso deste sistema s foi disponibilizado uma configurao, portanto outras configuraes podem ser definidas, sendo utilizada uma por vez. Geralmente existe apenas uma configurao por dispositivo USB. Podem-se observar os valores atribudos ao descritor de configurao na Tabela 4. O Remote Wakeup uma funo que desativa o dispositivo USB enquanto no utilizado. Neste projeto no utilizamos esta funcionalidade e conseqentemente foi desativada.
29
Tabela 4. Descritor
de configurao Descrio
N
0 1 2 4 5 6 7
Campo
bLength bDescriptorType wTotalLength bNumInterfaces bConfigurationValue iConfiguration bmAttributes 4..0: Reserved 5: Remote Wakeup 6: Self Powered 7: Reserved bMaxPower
Tam.
1 1 2 1 1 1 1
Valor
Tamanho em bytes do USB_DESC_CONFIG_LEN descritor de configurao USB_DESC_CONFIG_TYPE Tipo de configurao Tamanho de todas as USB_TOTAL_CONFIG_LEN configuraes 02h N de interfaces 01h Id da configurao ndice do descritor de string da configurao 01h C0h Definio de vrios atributos ...00000 Suporte a Remote Wakeup ..0..... .1...... Alimentao do circuito 1....... Maxima corrente requerida 32h (maximum milliamperes/2)
No descritor de configurao devem ser observados dois parmetros para o desenvolvimento de outros projetos: o tipo de alimentao do circuito e a corrente mxima requerida, respectivamente os campos Self Power e bMaxPower [6]. No descritor de interface atribuda a classe da interface de transmisso. Na configurao de dispositivos USB possvel atribuir vrias interfaces de comunicao de classes diferentes. A definio da classe da interface segue os valores da Tabela 2. Neste sistema foi implementado duas interfaces: uma de controle e outra de transmisso de dados do tipo CDC. Podem-se analisar os atributos destas interfaces na Tabela 5 e na Tabela 6.
Tabela 5. Descritor
N
0 1 2 3 4 5 6 7 8
Campo
bLength bDescriptorType bInterfaceNumber bAlternateSetting bNumEndpoints bInterfaceClass bInterfaceSubClass bInterfaceProtocol iInterface
TAM. Valor
1 1 1 1 1 1 1 1 1 USB_DESC_INTERFACE_LEN USB_DESC_INTERFACE_TYPE 02h 00h 01h 02h 02h 01h 00h
30
Tabela 6.
N
0 1 2 3 4 5 6 7 8
Campo
bLength bDescriptorType bInterfaceNumber bAlternateSetting bNumEndpoints bInterfaceClass bInterfaceSubClass bInterfaceProtocol iInterface
Descrio
Tamanho do descritor Tipo de descritor Id da interface Configurao alternativa Numero de endpoits Classe da interface Sub classe Protocolo utilizado ndice do descritor de string
Os descritores de endpoints definem o tipo de transferncia de dados suportada pelo endpoint (controle, massa, interrupo e isossncrona), a direo dos dados, o tamanho mximo do pacote de dados. H neste trabalho trs endpoints como se pode observar nos parmetros dos descritores de interface. Um endpoint usado para a transferncia dos dados de controle, outras duas so usadas para o envio e recebimento dos dados gerados pelo sistema. Nas Tabela 7, Tabela 8 e Tabela 9 respectivamente esto exibidos os valores utilizados na implementao.
Tabela 7. Descritor
de endpoint 0 Descrio
Tamanho da descrio Tipo de descritor Endereo Tipo de transferncia (Interrupo) Tamanho do pacote Intervalo temporal (ms)
N
0 1 2 3
Campo
bLength bDescriptorType bEndpointAddress bmAttributes 1..0: Transfer Type 7..2: Reserved 4 wMaxPacketSize 6 bInterval
Tam. Valor
1 1 1 1 USB_DESC_ENDPOINT_LEN USB_DESC_ENDPOINT_TYPE USB_CDC_COMM_IN_ENDPOINT 03h ......11 000000.. 2 USB_CDC_COMM_IN_SIZE 1 250
Tabela 8. Descritor
de endpoint 1 Descrio
Tamanho da descrio Tipo de descritor Endereo Tipo de transferncia (Interrupo) Tamanho do pacote Intervalo temporal (ms)
N
0 1 2 3
Campo
bLength bDescriptorType bEndpointAddress bmAttributes 1..0: Transfer Type 7..2: Reserved 4 wMaxPacketSize 6 bInterval
TAM. Valor
1 1 1 1 USB_DESC_ENDPOINT_LEN USB_DESC_ENDPOINT_TYPE USB_CDC_DATA_OUT_ENDPOINT 02h ......10 000000.. 2 USB_CDC_DATA_OUT_SIZE 1 250
31
Tabela 9. Descritor
de endpoint 2 Descrio
Tamanho da descrio Tipo de descritor Endereo Tipo de transferncia (Interrupo) Tamanho do pacote Intervalo temporal (ms)
N
0 1 2 3
Campo
bLength bDescriptorType bEndpointAddress bmAttributes 1..0: Transfer Type 7..2: Reserved 4 wMaxPacketSize 6 bInterval
TAM. Valor
USB_DESC_ENDPOINT_LEN USB_DESC_ENDPOINT_TYPE USB_CDC_DATA_IN_ENDPOINT 02h ......10 000000.. 2 USB_CDC_DATA_IN_SIZE 1 250 1 1 1 1
Alguns bits so o Code-Protect bit (CPn), o Write-Protect bit (WRTn) e o External Block Table Read bit (EBTRn). O CPn responsvel pela leitura ou escrita na memria por dispositivos externos. O WRTn responsvel pela permisso de escrita em blocos de memria do microcontrolador, seja o pedido de manipulao proveniente de dispositivo externo ou do prprio microcontrolador, e o EBTRn responsvel pela leitura de blocos de memria por dispositivos externos. No utilizado neste trabalho nenhuma destas funes de proteo, contudo em trabalhos futuros pode existir esta necessidade. O Brown-out Reset monitora a alimentao do microcontrolador comparandoa com um valor de tenso de referencia previamente configurada. Caso a tenso de alimentao seja menor do que a de referencia o microcontrolador re-inicializa o sistema a fim de evitar mau funcionamento. Os valores de referncia disponveis esto entre os bits de habilitao do Brown-out via software (BROWNOUT_SW), o de desativao (NOBROWNOUT), o de ativao (BROWNOUT) e os de valores de tenso de referncia de 2.0V (BORV20), 2.8V (BORV28), 4.3V (BORV43) e 4.6V (BORV46). A alimentao padro para os microcontroladores de 5V. O Brown-out Reset configurado neste projeto como desativado. A alimentao do circuito segura, a respeito da variao, pois o baixo consumo do projeto no ocasionar perdas prejudiciais fonte de energia, a qual ser especificada nos prximos tpicos. possvel nos trabalhos futuros a possibilidade do seu uso. O Power up timer uma funcionalidade que torna o dispositivo com uma maior margem de segurana a respeito do seu correto funcionamento. Aps um estado de re-inicializao, seja aps ser ligado, seja aps algum evento de Brownout Reset, causado um atraso no seu efetivo funcionamento. Isso se destina a aguardar que a tenso de alimentao atinja um nvel aceitvel e estvel e que a gerao de clock se torne bem definida. Os bits para a ativao e desativao so respectivamente PUT, NOPUT. No projeto aconselhvel a ativao desta funo, j que ela garante que no existir um mau funcionamento no incio da operao do dispositivo. Por existir a transmisso de dados em alta velocidade, foi apropriado o uso desta funo para evitar a ocorrncia de erros e problemas inesperados. Nesse microcontrolador h outra funcionalidade que tambm configurada por bits de configurao. Ela chamada de Co de Guarda (Watchdog Timer 33
WDT). Ela funciona garantindo o funcionamento normal do sistema contra possveis acontecimentos inesperados pela execuo do programa como, por exemplo, travamentos. configurada uma constante de tempo em um contador o qual produz uma re-inicializao do programa (reset) caso no seja zerado. Este contador, em operao normal, deve ser zerado pelo programa antes de seu estouro. Caso seja zerado indica que houve um mau funcionamento e provoca a re-inicializao. O nome dado a esse contador Contador de Watchdog. Esse contador usa um circuito contador independente do contador do ncleo do microcontrolador. Os valores possveis para a configurao so os bits: WDT1, WDT2, WDT4, WDT8, WDT16, WDT32, WDT64, WDT128, WDT256, WDT512, WDT1024, WDT2048, WDT4096, WDT8192, WDT16384, WDT32768. Estes bits representam valores de escalas de tempo entre 4ms e 131.072 s (2.18 minutos). Os bits NOWDT e WDT desativam e ativam esta funo respectivamente. O sistema implementado promove a transferncia de dados no crticos e a incluso de um boto de re-inicializao externo, portanto no necessria a ativao desta funo. definido no programa o bit de configurao NOWDT configurando a desativao desta funo. A re-inicializao do dispositivo possvel atravs de diversas
funcionalidades. Vrios bits configuram possveis ocorrncias, contudo existe a possibilidade de provocar no microcontrolador uma re-inicializao via meios externos. O pino MCLR o pino especfico para o uso desta funo e pode ser configurado como provocador de re-inicializao. A re-inicializao ocorre quando o pino MCLR alimentado com nvel lgico zero. Os bits que configuram esta funo so MCLR (para habilitar) e NOMCLR (para desabilitar). Foi definido um boto externo para provocar a re-inicializao do sistema, a fim de corrigir qualquer mau funcionamento que venha a se desenvolver durante sua operao. Est caracterstica de pino de re-inicializao foi definida com o bit MCLR no cdigo do programa definindo como ativada a funo. Existem os bits que permite a depurao do programa no circuito. A configurao desta funo atribuda aos bits NODEBUG (no permite a depurao) e DEBUG (permite a depurao). Neste sistema no foi permitida a depurao, j que no necessrio o uso deste tipo de funcionalidade.
34
A gravao do programa no microcontrolador feita por um gravador especfico fornecido pelos fabricantes. No caso dos microcontroladores da famlia PIC da microchip fornecido ao pino MCLR uma tenso de 13V indicando que o microcontrolador est em modo de gravao. Nem todos os sistemas que fazem gravao no prprio circuito podem suportar a recepo dessa tenso. Para resolver este problema existe a funo Low-Voltage ICSP Programming (LVP) que permite a gravao no microcontrolador com baixa tenso. Esta funo configurada pelos bits de configurao NOLVP e LVP. Na ativao a indicao que o microcontrolador est em modo de gravao a atribuio de valor lgico alto no pino PGM no microcontrolador. Note que como o PGM geralmente compartilhado com uma porta, est fica inutilizada se a LVP estiver habilitada. O ICSP significa "In Circuit Serial Programming", ou seja, programao serial no circuito. Neste sistema usado o bit de configurao NOLVP pois mesmo que a gravao do PIC seja no prprio circuito do sistema, h um isolamento do circuito de gravao e de comunicao USB. O bit de configurao VREGEN ativa o uso do Vusb. O Vusb uma entrada no microcontrolador que funciona como alimentao dos resistores pull-up para a deteco da velocidade da transmisso USB, isto , detecta se o dispositivo opera em Full Speed Device ou em Low Speed Device. A no ativao desta funo provoca uma necessidade de alimentao externa deste pino por uma tenso de 3,3V. Ele funciona tambm como regulador interno de tenso para o dispositivo USB. O bit que desabilita esta funcionalidade o NOVREGEN.
do microcontrolador e do circuito USB. Tambm existem os bits de configurao USBDIV e NOUSBDIV que so projetados para configurar qual o clock do dispositivo USB integrado com o microcontrolador. Ambos os bits so usados para definir como ser feito o clculo da frequncia de operao no microcontrolador, tornando adaptvel a cada aplicao. Os bits configuram os blocos internos do microcontrolador conforme a Figura 8.
Figura 8. Diagrama
A respeito do circuito do gerador de frequncia o microcontrolador divide os cristais osciladores em dois tipos possveis, os cristais XT (de 200 kHz a 4 MHz) e os HS de alta velocidade (de 4MHz a 20 MHz). Os bits para a configurao da frequncia so: XT (oscilador a cristal), XTPLL (oscilador a cristal com PLL habilitado), HS (oscilador a cristal de alta velocidade), HSPLL (oscilador a cristal de alta velocidade com PLL habilitado), EC (gerador de clock externo), ECIO (gerador de clock externo com sada no RA6), ECPLL (gerador de clock externo com PLL habilitado), ECPIO (gerador de clock externo com PLL habilitado e sada no RA6), entre outros.
36
Os valores possveis para os escalares PLL so divididos em dois tipos: pr escalares e ps escalares. Os valores de pr escalares so chamados de PLLDIV e so PLL1, PLL2, PLL3, PLL4, PLL5, PLL6, PLL10 e PLL12. Os valores de ps escalares so chamados de CPUDIV e so CPUDIV1, CPUDIV2, CPUDIV3 e CPUDIV4. No programa principal a configurao da frequncia de operao algo que deve ser observado com bastante cautela. No circuito o cristal opera em uma freqncia de 20MHz. H no PIC18F4550 uma grande variao de possibilidades de clock de operao. O dispositivo USB deve ser configurado para operar com 6 MHz, caso esteja configurado para transmisso Low Speed, ou 48MHz, caso esteja configurado para transmisso Full Speed, o qual foi o caso implementado neste sistema. Os bits de configurao do oscilador foram definidos como HSPLL (oscilador a cristal de alta velocidade com PLL habilitado). As possibilidades de configurao desses bits para um oscilador de 20MHz seguem a Tabela 10.
Tabela 10. Configurao
Modo de clock
CPUDIV
20 MHz
5 (100)
None (00) HS, EC, ECIO 2 (01) 3 (10) 4 (11) 2 (00) HSPLL, ECPLL, ECPIO 3 (01) 4 (10) 6 (11)
Os valores de configurao atribudos, isto , usados neste sistema, so os bits USBDIV, PLL5, CPUDIV1. Isso significa que usado o modulo PLL pr escalar com a configurao PPL5. Conforme a Figura 8 o clculo com o valor de freqncia de entrada 20 MHz divido por 5 gerando uma frequncia de 4 MHz. Este valor o adequado para o mdulo de gerao de 96 MHz. Este sinal encaminhado para dois mdulos diferentes. O primeiro mdulo controlado pelo USBDIV, o qual divide o sinal por 2 gerando uma freqncia de 48 MHz para o mdulo USB. O outro 37
controlado pela PLL ps escalar. Este valor recebido pelo mdulo PLL ps escalar dividido por 2, conforme CPUDIV1 e enviado para o ncleo do microcontrolador. Como foi observado o ncleo do microcontrolador e o perifrico USB, ambos trabalham com a freqncia de 48 MHz.
38
Figura 9. Esquema
de alimentao do circuito
A alimentao do Vbarramento fornecido pelo pino de alimentao USB. Um capacitor de 100uF ligado entre a alimentao e o terra para que seja mantida uma estabilidade na tenso. De mesmo modo feita a conexo do Vusb e o valor do capacitor neste caso de 470nF. O Vss o pino terra do microcontrolador. Deve-se mencionar a existncia do pino sensitivo. Este pino serve para monitoramento interno do microcontrolador a fim de detectar alguma conexo do circuito em uma porta USB. No sistema desenvolvido no existe necessidade da implementao do uso deste pino, pois a evidncia de uma conexo o seu funcionamento. Este pino somente implementado nos casos de alimentao do circuito via fonte externa ou alimentao hibrida.
com o microcontrolador a ser gravado. Cada microcontrolador tem uma configurao especifica no soquete de gravao.
Figura 10.
Neste trabalho foi adicionado ao sistema de comunicao USB um circuito semelhante ao soquete de gravao. A implementao desse circuito traz a facilidade de gravao do programa no microcontrolador sem a necessidade da retirada do mesmo do circuito. A seleo do modo de operao do sistema feita atravs de uma chave seletora presente no circuito. S deve ser usada uma das duas opes na execuo, isto , ou modo de operao de gravao ou execuo de comunicao USB.
de compilao
Diretiva
#define #include #fuses #use delay
Descrio
Definio de constantes de cadeia de caracteres Incluir arquivos de cdigos fontes Define os bits de configurao Informa ao compilador o valor da freqncia em Hz
A diretiva #define apropriada para fornecer um rotulo a um valor ou cadeia de caracteres que sero substitudos pelos respectivos valores no momento da 40
compilao. Ideal para a definio de constantes ou oferecer nomes a cadeia de caracteres ou valores. Sua principal vantagem que no necessria a alterao do valor em todas as ocorrncias, apenas sua alterao necessria em um ponto do cdigo. Existe na implementao do sistema a definio dos comandos que podem ser enviados durante a execuo. A definio segue o cdigo abaixo.
#define INSTRUCOES 00 #define LEITURA 01 #define GRAVACAO 02 #define ROTINA 03 #define DESCONECTAR 04
A diretiva #use delay informa ao compilador qual o clock de operao da CPU do microcontrolador e os valores so informados em Hz. A operao deste sistema baseada em uma freqncia de 48 MHz. No programa definido conforme cdigo abaixo.
#use delay(clock=48000000)
A diretiva #include indica arquivos com cdigos de programao extras. Esses arquivos de cdigo fonte so adicionados ao programa principal no momento da compilao. Evitam a repetio de um determinado cdigo em vrios arquivos. Funes especiais podem ser definidas em arquivos separados e adicionados em vrios programas sem a necessidade de reescrev-los. No programa desenvolvido foi usado est diretiva para a incluso de dois arquivos, so eles: 18F4550.h e usb_biblioteca.h. As incluso definida conforme descrito abaixo.
#include <18F4550.h> #include <usb_biblioteca.h>
O arquivo 18F4550.h fornecido pelo fabricante e contm informaes e funes aplicadas ao PIC 18F4550. Nesse arquivo so definidas funes de manipulao de temporizadores, entrada e sada de dados, configurao, comparadores, conversores analgico-digitais, interrupes, entre outras. um arquivo essencial para o uso desse microcontrolador. O arquivo usb_biblioteca.h o arquivo desenvolvido neste trabalho que contem funes de comunicao USB. Esse arquivo promove transferncia de 41
dados do tipo de dispositivo USB CDC. Ele inclui com a diretiva #include, o arquivo usb_cdc.c que contm mais funes para esse tipo de comunicao. O arquivo usb_cdc.h um arquivo de suporte do compilador CCS. No arquivo USB_cdc.c includo o arquivo de descritores, o USB_desc_TCC. O arquivo usb_desc_TCC.h contm a implementao dos descritores USB. Os descritores deste sistema foram detalhados nas sees anteriores. Este arquivo contem s informaes que descrevem detalhadamente o dispositivo USB implementado. A diretiva #fuses informa ao compilador os bits de configurao adicionados ao programa na compilao e, conseqentemente, na gravao. Estes bits so especficos de cada microcontrolador, apesar de alguns serem iguais em alguns tipos de microcontroladores. Esses bits so chamados pelo compilador CCS de fusveis de configurao. Os bits de configurao usados podem ser visualizados na Tabela 12 incluindo uma breve descrio do significado. Maiores detalhes sobre esses parmetros foram expressos em sees anteriores.
Tabela 12. Bits
O programa oferece cinco opes, so elas: Instrues, Ler EEPROM, Gravar na EEPROM, Mostrar a Rotina e Desconectar dispositivo. O comando Instrues fornece todas as opes que o usurio poder escolher. O comando enviado ao microcontrolador ser em hexadecimal e seu valor 42
00. Nessa opo o microcontrolador enviar uma string armazenada na sua memria com todas as opes possveis que podem ser enviadas. Este comando usa a funo usb_cdc_putString() presente na biblioteca para enviar a mensagem com as instrues conforme cdigo em C abaixo:
char mensagem1[] = {" \nSistema de Comunicao USB com Microcontrolador TCC - 2009.1 - DSC / POLI / UPE Aluno: Leonardo Santos Orientador: Sergio Campello
Opes: 00 -> Instrues 01 -> Ler EEPROM 02 -> Gravar na EEPROM 03 -> Mostrar Rotina 04 -> Desconectar\n"};
O comando Ler EEPROM mostra o contedo armazenado na memria do microcontrolador da posio 00 at a 2F. Os valores so organizados por linha e coluna. Onde na primeira linha so mostrados os valores da memria das posies 00 at a 0F, na prxima linha sero mostrados os valores das posies 10 at 1F, e assim sucessivamente at a ultima posio. Esses valores foram organizados dessa forma para facilitar a visualizao das alteraes dos valores com o comando Gravar na EEPROM. O comando representado no microcontrolador como o valor em hexadecimal 01. A chamada para a execuo deste comando usa a funo usb_cdc_putEEPROM() desenvolvida na biblioteca de funes para transmitir dados da memria do microcontrolador para o computador. O comando Gravar na EEPROM usado para alterao da memria de dados. Com ele o usurio pode transmitir valores para serem armazenados na memria do microcontrolador. Ao executar esse comando o programa solicitar uma posio de memria e em seguida um valor em hexadecimal. Cada posio de memria pode armazenar dois bytes, caso seja fornecido um valor que no possa 43
ser gravado nesta quantidade de bytes, o valor ser truncado. A sua representao no microcontrolador o hexadecimal 02. Os valores so recebidos com o uso da funo gethex_usb() descrita na biblioteca. O comando Mostrar Rotina informa o nmero do Contador de Rotinas. O Contador de Rotinas uma varivel inteira longa que incrementada enquanto o dispositivo est em funcionamento. Ela foi criada com a inteno de simular um trabalho qualquer que o microcontrolador ficar executando durante seu
funcionamento. Este contador pode ser substitudo por qualquer rotina continua em trabalhos futuros. A representao desse comando o hexadecimal 03 no microcontrolador. O comando Desconectar prepara o dispositivo para ser efetivamente desconectado do computador. Ele encerra a comunicao e o funcionamento do programa principal. Ao executar este comando o dispositivo pode ser removido com segurana do computador. O valor hexadecimal que representa este comando 04 no microcontrolador. A desconexo feita pela funo usb_detach() descrita na biblioteca. Existe um fluxo no programa que mostra uma mensagem ao usurio caso ele fornea algum comando no definido. O microcontrolador informa ao usurio a mensagem Digite um valor vlido! conforme o trecho de cdigo abaixo. Este fluxo funciona como filtro para no serem inseridos valores que provoquem um funcionamento no esperado.
char mensagem6[] = {"\n\nDigite um valor vlido !\n"}; usb_cdc_putString(mensagem6);
O desenvolvimento do programa segue alguns passos. Inicialmente h uma definio das variveis de uso no programa,em seguida h a inicializao do dispositivo USB atravs da funo usb_cdc_conectar(),. Esta funo est definida na biblioteca criada neste trabalho e descrita em sees anteriores. A seguir, o programa entra em um loop onde verifica se o dispositivo USB est devidamente configurado. Ainda neste loop executado o incremento do Contador de Rotinas. H uma verificao a cada loop se existe algum dado enviado ao microcontrolador, caso isso acontea, indica que foi enviada algum comando, esto o programa recebe 44
esse dado e verifica que comando foi acionado e executa a devida tarefa. O comando que encerra a execuo do programa o de Desconectar.
4.4.7 Simulao
A simulao um bom tipo de anlise do funcionamento do dispositivo, pois possvel a verificao da implementao de forma virtual. O aplicativo usado foi o Proteus 7.4 com o mdulo virtual USB. O circuito dividido em seis partes, so elas: a gravao com o ICD2, o circuito selecionador de funo, o circuito oscilador, as luzes informativas, o circuito de re-inicializao e a comunicao USB. A interligao entre o computador e o gravador ICD2 feita pela comunicao USB ou por porta RS-232. A conexo entre o gravador e o circuito de gravao realizada atravs do conector RJ-12. Este circuito de gravao foi includo no sistema, no existindo assim a necessidade da retirada do microprocessador do circuito para a gravao. Esse desenvolvimento proporciona todas as caractersticas do circuito original de gravao como, por exemplo, a depurao em tempo real. A simulao de gravao com o ICD2 no possvel porque o Proteus no tem suporte j que uma comunicao entre o gravador e o sistema. Contudo foi includa no circuito de simulao para visualizao dos componentes presentes e sua interligao com o circuito completo. A falta dos conectores na documentao suporte do Proteus foi suprida com a incluso de pinos de entrada simples, que representam o conector RJ-12 usado na comunicao com o gravador ICD2. Podem-se observar todas as conexes entre este mdulo e o microcontrolador na Figura 11.
45
de simulao no Proteus
O circuito pode ser executado operando com duas funes. A primeira como sistema de comunicao USB e a outra como circuito de gravao. O Circuito Selecionador funciona como um seletor para definir de que modo o circuito ser executado. nessa parte do circuito que controlada a alimentao, que depende do modo de operao do mesmo. Est chave tem duas posies, USB e ICD2. Podem ser observadas suas conexes na Figura 11. O circuito oscilador o responsvel por gerar o clock de entrada no circuito. O circuito usa um cristal de 20 MHz e dois capacitores cermicos de 15pF. O microcontrolador internamente configura o clock conforme descrito em sees anteriores. Este circuito est presente na simulao para verificar sua integrao com todo circuito, pois a sua simulao no possvel. A definio da freqncia informada diretamente no Proteus. As luzes informativas so para monitorao do funcionamento do circuito. Esto presentes trs luzes indicadoras dos estados do circuito, so elas: circuito em execuo, USB ativado e gravao ativada. A luz que indica quando o dispositivo est em funcionamento verifica se o sistema est em operao em algum dos dois modos. A luz de USB ativada indica quando o sistema est sendo executado como 46
comunicao USB. A luz de gravao ativada indica quando o circuito de gravao est sendo executado. A distino destes tipos de operao dada pela alimentao, portanto no recomendada a operao de ambos os circuitos ao mesmo tempo, sendo possvel a danificao do sistema. O circuito de re-inicializao responsvel por provocar uma re-inicializao do sistema completo por meio externo. Caso exista um mau funcionamento do circuito existe esta opo de restaurao. Existe no circuito a presena de dois capacitores no inclusos em nenhum dos mdulos definidos anteriormente. O primeiro se encontra entre uma ligao do Vdd com o Vss do circuito. Esse funciona como um filtro para a retirada dos rudos de alta freqncia da alimentao do circuito. O segundo se encontra entre uma ligao do Vusb e o Vss. Esse uma recomendao do fabricante do dispositivo para manter a estabilidade do circuito USB interno do microcontrolador.
47
Figura 12.
O circuito construdo pode ser visualizado na Figura 13 e na Figura 14. Seu funcionamento e instalao so detalhados nas sees posteriores.
Figura 14.
49
A seguir interrogado quanto ao driver de instalao. O driver um arquivo fornecido pela instalao do CCS C Compiler que se encontra na pasta de instalao \...\PICC\Drivers e so os arquivos cdc9Xpt1.inf, cdc9Xpt2.inf,
cdc_NTXP.inf e cdc_NTXPVista.inf, respectivamente para os sistemas operacionais Windowns 9xpt1, 9xpt2, NT/XP e Vista. No termino da instalao possvel fazer a comunicao USB com o sistema. Ao conectar o dispositivo e concluir a instalao adicionada uma nova porta serial ao computador. O programa utilizado o Advanced Serial Port Terminal. Neste programa possvel abrir um fluxo de comunicao. No Advanced Serial Port Terminal deve-se criar uma nova seo, escolhendo a porta, a taxa e demais configuraes. Os parmetros seguem os representados na Figura 16. A nica mudana ser a porta, pois depende da porta em que foi instalado o sistema. Nesse exemplo a porta usada foi a COM21. Configurada a conexo, deve-se abrir a porta de comunicao para iniciar o fluxo de dados conforme Figura 17. O microcontrolador no momento da configurao j est executando o Contador de Rotinas e aguarda o recebimento de algum comando.
50
Os comandos so os valores 00, 01, 02, 03, 04 que representam respectivamente Instrues, Ler EEPROM, Gravar na EEPROM, Mostrar Rotina, Desconectar. A resposta dos comandos Instrues, Ler EEPROM, Gravar na EEPROM, e Mostrar Rotina podem ser observados respectivamente na Figura 18, Figura 19, Figura 20 e Figura 21.
51
Figura 18.
Figura 19.
Figura 20.
52
sistemas de uso especficos. No inicio deste trabalho foi observada a aplicao deste projeto no sistema de deteco ptica de descargas parciais em cadeias de isoladores de transmisso de alta tenso [1], contudo a generalizao para alcanar varias aplicaes se tornou um ponto forte. O tipo de dispositivo USB CDC obteve um timo desempenho em relao fcil instalao e facilidade de comunicao, contudo o desenvolvimento de comunicao USB usando outros tipos de dispositivos como mass storage device pode ser tambm tratado em trabalhos futuros como forma de aprimorar ou comparar as vantagens e desvantagens desses outros tipos de comunicao em relao ao que foi desenvolvido.
54
Bibliografia
Bibliografia
[1] S. C. Oliveira, Sistema de Deteco ptica de Descargas Parciais em Cadeias de Isoladores de Transmisso de Alta Tenso. 119 f. Tese de Doutorado, Depto. de Engenharia Eltrica da Universidade Federal de Pernambuco, Recife PE, Brasil, 2008. [2] Data Sheet do microcontrolador PIC16F87A disponvel em
http://ww1.microchip.com/downloads/en/DeviceDoc/39632b.pdf. Acessado em 08/06/2009 [4] Microchip Technology Inc, disponvel em http://www.microchip.com. Acessado em 08/06/2009. [5] STALLINGS, William. Arquitetura e Organizao de Computadores 5a Edio. So Paulo: Prentice Hall, 2002. [6] [7] USB.Org, disponvel em http://www.usb.org/. Acessado em 08/06/2009. Ibrahim, Dagan. Advanced PIC microcontroller Projects in C: from USB to RTOS with the PIC18F series, Newnes, 2008. [8] CCS, Inc. Home, disponvel em http://www.ccsinfo.com/. Acessado em 08/06/2009. [9] Serial Port Terminal Test and debug drial port devices with advanced serial port terminal, disponvel em http://www.eltima.com/products/serial-port-terminal. Acessado em 08/06/2009.
55
Apndices
Apndices
Arquivo usb_serial_TCC.h
// Inclue a biblioteca basica do PIC 18F4550 #include <18F4550.h> // Atribui os Bits de configurao e define o clock do nucleo do microcontrolador #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGE N,MCLR,PUT #use delay(clock=48000000) // Inclue a biblioteca de funes #include <usb_biblioteca.h> #define INSTRUCOES 00 #define LEITURA 01 #define GRAVACAO 02 #define ROTINA 03 #define DESCONECTAR 04 void main() { // Declarao de variaveis int address, value, opcao; unsigned long int cont = 0; // Inicializa, configura e enumera o dispositivo USB usb_cdc_conectar(); do { if (usb_enumerated()) // Verifica se o dispositivo est pronto 56
Apndices
{ // Simula uma rotina de um processo qualquer usual de microcontrolador cont++; // Verifica se existe caracter para recepo if(usb_cdc_kbhit()) { // Recebe um hexadecimal opcao = gethex_usb(); // As opes so 00, 01, 02, 03 e 04 switch (opcao) { case INSTRUCOES: { char mensagem1[] = {" \nSistema de Comunicao USB com Microcontrolador TCC - 2009.1 - DSC / POLI / UPE Aluno: Leonardo Santos Orientador: Sergio Campello Opes: 00 -> Instrues 01 -> Ler EEPROM 02 -> Gravar na EEPROM 03 -> Mostrar Rotina 04 -> Desconectar\n"}; // Envia uma string para o computador usb_cdc_putString(mensagem1); break; } case LEITURA: { char mensagem2[] = {"\n\nConteudo da EEPROM:\n"}; usb_cdc_putString(mensagem2); printf(usb_cdc_putc, " | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f"); 57
Apndices
printf(usb_cdc_putc, "\n0| "); // Envia um bloco da memoria de dados do microcontrolador usb_cdc_putEEPROM (0x00, 15); printf(usb_cdc_putc, "\n1| "); usb_cdc_putEEPROM (0x10, 15); printf(usb_cdc_putc, "\n2| "); usb_cdc_putEEPROM (0x20, 15); printf(usb_cdc_putc, "\n"); break; } case GRAVACAO: { char mensagem3[] = {"\n\nGravando Valores na Memoria"}; char mensagem4[] = {"\nPosio de Memoria: "}; char mensagem5[] = {"\nNovo Valor: "}; usb_cdc_putString(mensagem3); usb_cdc_putString(mensagem4); address = gethex_usb(); usb_cdc_putString(mensagem5); value = gethex_usb(); // Grava na memoria do microcontrolador write_eeprom( address, value ); printf(usb_cdc_putc, "\n"); break; } case ROTINA: { printf(usb_cdc_putc, "\n\nRotina %lu", cont); printf(usb_cdc_putc, "\n"); break; } case DESCONECTAR: { // Desconecta o dispositivo 58
Apndices
usb_detach(); break; } default: { char mensagem6[] = {"\n\nDigite um valor valido !\n"}; usb_cdc_putString(mensagem6); break; } } } } } while (TRUE); }
Arquivo usb_biblioteca.h
/* ************** usb_biblioteca.h ************** Esta uma biblioteca para transmisso de dados atravs do protocolo de USB de comunicao. Contm funes bsicas de transmisso e recepo de dados. implementada para simular uma PORTA COM VIRTUAL. Modelo do microprocessador: PIC 18F4550 Compilador: CCS 4.057 TCC 2009.1 - DSC / UPE Aluno: Leonardo de S Leal Santos Orientador: Sergio Campello ** Instrues ** 59
Apndices
* Incluso de um descritor CDC diferente A incluso de descritores feita no arquivo usb_cdc.h que est localizado na pasta "\...\PICC\Drivers", a deve-se trocar o arquivo usb_desc_cdc.h pelo nome do novo descritor caso deseje troc-lo. * Criao de um novo arquivo descritor usb Caso deseje efetuar alguma modificao no descritor, o mesmo se encontra na pasta "\...\PICC\Drivers" com o nome usb_desc_cdc.h. Faa as modificaes e salve na mesma pasta onde se encontra o projeto, no esquecendo de adicion-lo nos arquivos de configurao. */ #include <usb_cdc.h> /* ** usb_cdc_putString ** Envia uma string char *p -> ponteiro que represente a string obs: A string deve estar declarada para ser enviada, por exemplo: char temp[] = {"valor da string"}; usb_cdc_putString(temp); H uma forma alternativa para o envio de string e com ela no necessrio a declarao da string anteriormente. printf(usb_cdc_putc, "valor da string"); */ void usb_cdc_putString(char *p) { char i = 0; while (*(p+i) != '\0') { usb_cdc_putc(*(p+i)); 60
Apndices
i ++; } } /* ** usb_cdc_putEEPROM ** Envia um bloco da memria de dados int posicaoI -> Posio inicial do bloco de memria int tamanho -> Comprimento do bloco de memria Obs: Pode enviar os valores em hex ou em caracteres ASCII (cdigo comentado)*/ void usb_cdc_putEEPROM (int posicaoI, int tamanho) { int i; for(i=0; i<=tamanho; i++) { printf(usb_cdc_putc, "%2x ", read_eeprom(i + posicaoI) ); //usb_cdc_putc(read_eeprom(i + posicaoI)); } } /* ** usb_cdc_putFLASH ** Envia um bloco da memria de programa int posicaoI -> Posio inicial do bloco de memria int tamanho -> Comprimento do bloco de memria Obs: Pode enviar os valores em hex ou em caracteres ASCII (cdigo comentado)*/ void usb_cdc_putFLASH (char posicaoI, char tamanho) { char i; int16 dado; for(i=0; i<=tamanho; i++) { dado = read_program_eeprom(i + posicaoI); 61
Apndices
usb_cdc_putc(dado); } } /* ** usb_cdc_conectar ** Inicializa, configura e enumera o dispositivo USB Obs: Deve ser usado quando for conectado o dispositivo USB no computador para efetuar a transmisso void usb_cdc_conectar() { // usb_cdc_init(); usb_init_cs();// no trava na configurao e necessrio chamar usb_task usb_init(); usb_task(); while(!usb_cdc_connected()) {} } /* ***** Funes nativas ***** */
** usb_enumerated() ** Verifica se o dispositivo est pronto para a comunicao Retorna True ou False Obs: Maiores informaes sobre estas funes e mais funes esto no arquivo usb.c em \...\PICC\Drivers
** usb_detach() ** Desconecta o dispositivo, usado antes de sua remoo fsica do computador ** usb_attach() ** Re-conecta o dispositivo, usado para re-conect-lo quando o dispositivo foi desconectado mas ainda no removido literalmente 62
Apndices
Obs: Maiores informaes sobre estas funes e mais funes esto no arquivo pic18_usb.h em \...\PICC\Drivers
** usb_cdc_putc(char c) ** Envia um caracter para a transmisso ** usb_cdc_kbhit() ** Verifica se existe algum dado no buffer de recepo Retorna True ou False ** usb_cdc_getc() ** Recebe um caracter do buffer de recepo, deve-se usar o usb_cdc_kbhit() anteriormente para verificar se existe dados ** get_float_usb() ** Recebe um numero ponto flutuante ** get_long_usb() ** Recebe um numero longo ** get_int_usb() ** Recebe um inteiro ** get_string_usb(char *s, int max) ** Recebe uma String ** gethex_usb() ** Recebe um Hexadecimal obs: Maiores informaes sobre estas funes e mais funes esto no arquivo usb_cdc.h em \...\PICC\Drivers */
63
Apndices
Arquivo usb_desc_TCC.h
#IFNDEF __USB_DESCRIPTORS__ #DEFINE __USB_DESCRIPTORS__ #include <usb.h> #DEFINE USB_TOTAL_CONFIG_LEN //config+interface+class+endpoint+endpoint (2 endpoints) const char USB_CONFIG_DESC[] = { //Descritor de configurao 1 USB_DESC_CONFIG_LEN, //length of descriptor size USB_DESC_CONFIG_TYPE, (CONFIGURATION 0x02) ==1 //constant ==0 CONFIGURATION 67
USB_TOTAL_CONFIG_LEN,0, //size of all data returned for this config ==2,3 2, //number of interfaces this device supports 0x01, //identifier for this configuration. configurations) ==5 ==4 (IF we had more than one ==6
0xC0, // significa = (11000000) -> bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't), bits 0-4 unused and bit7=1 ==7 0x32, //maximum bus power required (maximum milliamperes/2) 100mA) ==8 //Descritor de interface 0 (comm class interface) USB_DESC_INTERFACE_LEN, //length of descriptor =10 0x00, //number defining this interface (IF we had more than one interface) ==11 0x00, //alternate setting ==12 1, //number of endpoints ==13 64 =9 (0x32 =
Apndices
0x02, //class code, 02 = Comm Interface Class 0x02, //subclass code, 2 = Abstract 0x01, //protocol code, 1 = v.25ter ==15 ==16
==14
0x00, //index of string descriptor for interface //class descriptor [functional header] 5, //length of descriptor ==18 ==19 0x24, //dscriptor type (0x24 == ) 0x10,0x01, //
==17
//class descriptor [acm header] 4, //length of descriptor ==23 ==24 0x24, //dscriptor type (0x24 == ) 2, //sub type (2=ACM) ==25 2, //capabilities ==26 //we support Set_Line_Coding, Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State. //class descriptor [union header] 5, //length of descriptor 6, //sub type (6=union) ==27 ==28 ==29 0x24, //dscriptor type (0x24 == )
0, //master intf ==30 //The interface number of the Communication or Dat a Cl ass interface, designated as the masteror controlling interface for the union. 1, //save intf0 in the union. * ==31 //Interface number of first slave or associated interface
//class descriptor [call mgmt header] 5, //length of descriptor ==32 ==33 0x24, //dscriptor type (0x24 == ) 1, //sub type (1=call mgmt) ==34 0, //capabilities 1, //data interface //endpoint descriptor 65 ==35 //device does not handle call management itself ==36 //interface number of data class interface
Apndices
==37
USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (ENDPOINT 0x05) USB_CDC_COMM_IN_ENDPOINT | 0x80, //endpoint number and direction 0x03, //transfer type supported (0x03 is interrupt) USB_CDC_COMM_IN_SIZE,0x00, ==41,42 //maximum ==40 packet size supported
250, //polling interval, in ms. (cant be smaller than 10) //Descritor de interface 1 (data class interface) USB_DESC_INTERFACE_LEN, //length of descriptor =45
==43
=44
USB_DESC_INTERFACE_TYPE, //constant INTERFACE (INTERFACE 0x04) 0x01, //number defining this interface (IF we had more than one interface) ==46 0x00, //alternate setting ==47 ==49 2, //number of endpoints ==48 0x0A, //class code, 0A = Data Interface Class 0x00, //subclass code 0x00, //protocol code ==50 ==51 ==52
==60
USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (ENDPOINT 0x05) USB_CDC_DATA_OUT_ENDPOINT, //endpoint number and direction (0x02 = EP2 OUT) ==62 0x02, //transfer type supported (0x02 is bulk) ==63 // make8(USB_CDC_DATA_OUT_SIZE,0),make8(USB_CDC_DATA_OUT_SIZE,1), //maximum packet size supported ==64, 65 USB_CDC_DATA_OUT_SIZE & 0xFF, (USB_CDC_DATA_OUT_SIZE >> 8) & 0xFF, //maximum packet size supported ==64, 65 250, //polling interval, in ms. (cant be smaller than 10) //endpoint descriptor 66 ==66
Apndices
==53
USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (ENDPOINT 0x05) USB_CDC_DATA_IN_ENDPOINT | 0x80, //endpoint number and direction (0x82 = EP2 IN) ==55 0x02, //transfer type supported (0x02 is bulk) ==56 // make8(USB_CDC_DATA_IN_SIZE,0),make8(USB_CDC_DATA_IN_SIZE,1), //maximum packet size supported ==57, 58 USB_CDC_DATA_IN_SIZE & 0xFF, (USB_CDC_DATA_IN_SIZE >> 8) & 0xFF, //maximum packet size supported ==64, 65 250, //polling interval, in ms. (cant be smaller than 10) }; #define USB_MAX_NUM_INTERFACES 2 const char USB_NUM_INTERFACES[USB_NUM_CONFIGURATIONS]={2}; const int16 USB_CLASS_DESCRIPTORS[USB_NUM_CONFIGURATIONS][USB_MAX_NUM_I NTERFACES][4]= { //config 1 //interface 0 //class 1-4 18,23,27,32, //interface 1 //no classes for this interface 0xFFFF,0xFFFF,0xFFFF,0xFFFF }; #if (sizeof(USB_CONFIG_DESC) != USB_TOTAL_CONFIG_LEN) #error USB_TOTAL_CONFIG_LEN not defined correctly #endif // Descritor de Dispositivo const char USB_DEVICE_DESC[USB_DESC_DEVICE_LEN] ={ USB_DESC_DEVICE_LEN, //the length of this report ==0 67 ==59
Apndices
0x01, //the constant DEVICE (DEVICE 0x01) ==1 0x10,0x01, //usb version in bcd ==2,3 0x02, //class code. 0x02=Communication Device Class ==4 0x00, //subclass code ==5 0x00, //protocol code ==6 USB_MAX_EP0_PACKET_LENGTH, //max packet size for endpoint 0. (SLOW SPEED SPECIFIES 8) ==7 0x61,0x04, //vendor id (0x04D8 is Microchip, or is it 0x0461 ??) ==8,9 0x33,0x00, //product id ==10,11 0x00,0x01, //device release number ==12,13 0x01, //index of string description of manufacturer. therefore we point to string_1 array (see below) ==14 0x02, //index of string descriptor of the product ==15 0x00, //index of string descriptor of serial number ==16 USB_NUM_CONFIGURATIONS //number of possible configurations ==17 }; //the offset of the starting location of each string. offset[0] is the start of string 0, offset[1] is the start of string 1, etc. char USB_STRING_DESC_OFFSET[]={0,4,12}; char const USB_STRING_DESC[]={ //string 0 4, //length of string index USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING) 0x09,0x04, //Microsoft Defined for US-English //string 1 8, //length of string index USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING) 'T',0, 'C',0, 'C',0, //string 2 50, //length of string index USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING) 68
Apndices
'T',0, 'C',0, 'C',0, ' ',0, '-',0, ' ',0, 'L',0, 'E',0, 'O',0, ' ',0, 'S',0, 'A',0, 'N',0, 'T',0, 'O',0, 'S',0, ' ',0, '-',0, ' ',0, 'S',0, 'C',0, 'U',0, 'S',0, 'B',0 }; #ENDIF
69