230
Bem vindo ao Curso USB - Universal Serial Bus É com imensa alegria e satisfação que venho através deste cur a todos um pouco da minha experiência com algumas pesquisas, estudos sobre o barramento USB. Espero que todos gostem e tir proveito das informações aqui contidas, para que possam aplic novos projetos, acrescentando uma tecnologia de ponta, mundia utilizada por diversos fabricantes em milhares de dispositivo computadores, mouses, impressoras, scanners, câmeras digitais celulares, relógios, aparelhos de som, placas de interfaces, Players MP3, gravadores/leitores de CD-ROM/DVD, memórias port outros. Parece até moda, mas na verdade, os produtos com inte tornaram as vidas dos técnicos, usuários e consumidores de el mais fáceis. Onde antes, o usuário que deseja-se acrescentar scanner ao computador, era necessário abrir o gabinete, espet um de seus slots, jampear, configurar endereços de DMA, IRQs, tudo, ao rodar o software especifico, receber uma mensagem de sistema operacional, indicando conflitos entre dispositivos. "pluga-se" a extremidade de um cabo USB, na traseira ou diant gabinete, sem ser preciso nenhum tipo de configuração. Pronto apto a trabalhar. No sistema USB a tecnologia Plug-and-Play funciona na sua pode conectar o dispositivo ao Hub e o sistema reconhece e ca drivers relacionados ao novo dispositivo, sem auxílio do usuá conectar e remover dispositivos sem ser preciso reiniciar o c Swap), ou mesmo o sistema operacional. Nas primeiras aulas iremos conhecer o sistema USB de um mo para nos capacitar a compreender as futuras aulas que tratarã programação e desenvolvimento de circuitos usando os chipset Optamos em utilizar os chipset da FTDI, por serem fáceis d eficientes; muito compactos (7, 2mm); uso opcional de uma mem personalizar o novo produto; bastante difundidos no mercado m DLLs gratuitos para vários sistemas operacionais e sem pagame Royalties; facilidades para criar conversores RS232, RS422 e Iremos também ter a oportunidade de programar um micro con em C, fazendo comunicação com a porta Serial para controle de aquisição de dados. Segue abaixo alguns produtos USB disponíveis atualmente no me

Bem Vindo Ao Curso USB

Embed Size (px)

Citation preview

Bem vindo ao Curso USB - Universal Serial Bus

com imensa alegria e satisfao que venho atravs deste curso, acrescentar a todos um pouco da minha experincia com algumas pesquisas, testes e estudos sobre o barramento USB. Espero que todos gostem e tirem o mximo proveito das informaes aqui contidas, para que possam aplic-las nos seu novos projetos, acrescentando uma tecnologia de ponta, mundialmente utilizada por diversos fabricantes em milhares de dispositivos como: computadores, mouses, impressoras, scanners, cmeras digitais, modems, celulares, relgios, aparelhos de som, placas de interfaces, Finger Scanners, Players MP3, gravadores/leitores de CD-ROM/DVD, memrias portteis, entre outros. Parece at moda, mas na verdade, os produtos com interfaces USB tornaram as vidas dos tcnicos, usurios e consumidores de eletrnicos muito mais fceis. Onde antes, o usurio que deseja-se acrescentar por exemplo, um scanner ao computador, era necessrio abrir o gabinete, espetar uma placa em um de seus slots, jampear, configurar endereos de DMA, IRQs, e no final de tudo, ao rodar o software especifico, receber uma mensagem de erro do sistema operacional, indicando conflitos entre dispositivos. Agora simplesmente "pluga-se" a extremidade de um cabo USB, na traseira ou dianteira externa do gabinete, sem ser preciso nenhum tipo de configurao. Pronto, o scanner est apto a trabalhar. No sistema USB a tecnologia Plug-and-Play funciona na sua integra; voc pode conectar o dispositivo ao Hub e o sistema reconhece e carrega os device drivers relacionados ao novo dispositivo, sem auxlio do usurio. Podemos conectar e remover dispositivos sem ser preciso reiniciar o computador (HotSwap), ou mesmo o sistema operacional. Nas primeiras aulas iremos conhecer o sistema USB de um modo geral, para nos capacitar a compreender as futuras aulas que trataro da criao, programao e desenvolvimento de circuitos usando os chipset da FTDI. Optamos em utilizar os chipset da FTDI, por serem fceis de utilizar; eficientes; muito compactos (7, 2mm); uso opcional de uma memria flash para personalizar o novo produto; bastante difundidos no mercado mundial; drivers e DLLs gratuitos para vrios sistemas operacionais e sem pagamento de Royalties; facilidades para criar conversores RS232, RS422 e RS485. Iremos tambm ter a oportunidade de programar um micro controlador PIC em C, fazendo comunicao com a porta Serial para controle de dispositivos e aquisio de dados. Segue abaixo alguns produtos USB disponveis atualmente no mercado:

Figura 1 - Auto Rdio MP3

Figuras 2, 3 e 4 - Memrias Flash

Figura 5 - Relgio com suporte USB

Figura 6 - Pen drive

Figura 7- Leitor/gravador de memory card

Figura 8 - Impressora

Figura 9 - Multi-acessrios

Figura 10 - Mouse

Figura 11- Cmera

Introduo ao Barramento USBO USB (Universal Serial Bus) surgiu em 1995 com uma parceria entre vrias companhias de alta tecnologia (Compaq, Hewlett-Packard, Intel, Lucent, Microsoft, NEC e Philips). Uma das primeiras verses foi a 1.0 com velocidade de 1,5Mbs (Low-speed), logo em seguida foi concebida a 1.1 com velocidades que vai de 1,5Mbps a 12Mbps. Essa verso conhecida com Full-speed. No final de 2000 foi lanada a verso 2.0 (high-speed), compatvel com as verses anteriores, mas com alguns aperfeioamentos que vo desde a topologia, velocidade de trafego de dados, chegando ao extremo de 480Mbps, equivalente a cerca de 60MBps (60 milhes de Bytes por segundos). As primeiras verses do bus USB utilizavam/utilizam os Controladores Host UHCI (Universal Host Controller Interface) e OHCI (Open Host Controller Interface). O USB 2.0 utiliza o Controlador Host EHCI (Enhanced Host Controller Interface). O barramento USB permite a conexo mxima de at 127 dispositivos em uma nica porta. Para isso ser possvel utiliz-se de HUBs conectados em cascata. Normalmente cada HUB USB dispe de 4 a 8 portas onde podem ser plugados mais HUBs ou dispositivos. Os Hubs so componentes muito importantes na topologia de uma Rede USB. Eles fornecem novos canais fsicos para que se possam inserir novos dispositivos mesma.

Figura 12 - Mostra um Hub de 7 portas, sua fonte de alimentao e um cabo para conectar ao Host/controlador

Os Hubs costumam ser ligados Rede eltrica para alimentar seus circuitos e ao mesmo tempo fornecer correntes suficientes para alimentar dispositivos conectados s suas portas. Alguns Hubs no tem fontes externa, estes so parasitas, alimentam-se da prpria corrente do barramento USB. Esses Hubs no so uma boa escolha se voc pretende "plugar" dispositivos que tambm se alimentam atravs do barramento. Hubs sem fonte de alimentao chegam a ter 4 portas Downstream fornecendo cada uma 100mA. J Hubs com fontes de alimentao podem fornecer por porta, 500mA. Se um dispositivo tentar consumir mais corrente do que o Hub pode fornecer atravs de uma de suas portas, o mesmo permanecer conectado fisicamente ao barramento, mas no poder se comunicar.Figura 13 - Ilustrao de um Hub e suas portas: primria e secundrias

Veja na figura acima, que a porta principal do Hub chamada de Upstream, utilizada para conect-lo ao Host (placa controladora/PC). As demais portas secundrias so chamadas de Downstream, e servem para conectar outros Hubs ou dispositivos (conhecidos tambm como funo). So atravs dos Hubs que o Host/controlador tem o poder de detectar se um dispositivo (funo) foi inserido ou removido do sistema, como tambm saber se o mesmo funcionar em baixa ou alta velocidade. Hubs tambm fornecem energia atravs de suas portas Downstream a dispositivos que se alimentam do prprio Bus USB.Figura 14 - Topologia USB (Tier star)

Num sistema USB existe apenas um HOST, os demais componentes so os Hubs e os dispositivos (funo). Na figura acima temos 5 fileiras contando a partir do Host. Na especificao da norma USB 1.1 fala-se que podemos enfileirar at 4 dispositivos/Hub aps o Root Hub, como mostra a figura acima (Hub1, Hub2, Hub4 e Node). J na verso USB 2.0 possvel enfileirar at 6 dispositivos/Hub sem contar o Root Hub. sempre bom seguir essas regras quando for criar uma rede de dispositivos USB. Tambm importante saber que o comprimento do cabo USB de 5m, portanto, a distncia mxima entre um Hub e um dispositivo/funo fica limitada a essa medida.

Figura 15 - Topologia fsica

A figura acima um padro da norma USB e mostra o esquema da topologia fsica. No topo temos o Controlador Host (HC), mais abaixo o Root Hub, ou Hub Raiz. atravs das portas do Hub Raiz que conectamos Hub e dispositivos, formando uma Rede USB. Observe na figura acima que a combinao de um Hub e, um ou mais dispositivos, chamada de Compound Device (dispositivo composto).

Figura 16 - Arquitetura tpica de um sistema USB

Veja na figura acima, que temos somente um Host (hospedeiro), alguns Hub e vrios dispositivos/funes pendurados ao sistema, em forma de uma rvore. Isso somente um exemplo de como agregar ao sistema USB, vrios dispositivos distintos. Dispositivos como: impressoras, udio/vdeo, modem ADSL e WebCam, consomem muita banda do sistema. Se voc tiver esses equipamentos "plugados" e funcionando simultaneamente em um Hub, observar uma queda na performance do sistema; e quanto mais dispositivos forem sendo conectados, mais devagar ser o trafego de dados em todo o sistema. Esta perda de performance fica bem evidente numa controladora OHCI/UHCI (USB 1.1 - 12Mbps mx.). J numa controladora EHCI (USB 2.0 - 480Mbps) a queda de performance imperceptvel, isso porque a largura de banda da verso 2.0 incomparavelmente maior que a da verso USB 1.1.

Figura 17 - Dispositivos com Hub incluso

Na configurao acima, vemos dispositivos conectados ao teclado e tambm ao monitor, isso possvel porque alguns fabricantes incluem em seus dispositivos, mini-hub, com uma ou mais portas downstream, tornando bastante prtica a conexo de webcams, joystick e mouses ao computador. O hub/funo do monitor tem sua prpria fonte de alimentao, dessa forma pode fornecer mais corrente para dispositivos conectados s suas portas. J o hub/funo do teclado alimentado pelo prprio Bus USB, fornecendo pouca corrente s suas portas downstream. Nesse caso, o dispositivo conectado no pode consumir mais que 100mA da porta.

Introdcuo ao Universal Serial Bus (USB) CONTROLADOR HOSTO host USB se comunica com os dispositivos atravs do seu controlador (chipset e outros componentes). O controlador host pode ser encontrado na prpria estrutura base da placa-me do computador, ou pode ser adicionada num dos slots do barramento PCI. Na maioria das placas controladoras USB PCI, alm das portas externas, h uma interna, que permite instalar perifricos USB dentro do gabinete do computador, se isso for preciso. responsabilidade do Host:

Detectar a incluso e remoo de dispositivos; Gerenciar o fluxo de controle de dados entre os dispositivos conectados; Fornecer alimentao (tenso e corrente) aos dispositivos conectados;

Monitorar os sinais do bus USB.

Figura 1 - Placa controladora USB 2.0 - 5 portas

Como j foi mencionado na aula anterior, o padro USB foi desenvolvido por um consrcio de empresas de tecnologia de ponta, destacando-se entre elas: Compaq, Hewlett-Packard, Intel, Lucent, Microsoft, NEC e Philips. No foi fcil essas empresas chegarem a um acordo plausvel sobre a abordagem do controlador. Opinies foram divididas e terminou formando-se dois grupos diferentes: UHCI - (Universal Host Controller Interface). Defendido e apoiado pela Intel, onde uma parte do funcionamento do protocolo deveria ser processado no software (driver), tornando o hardware do Controlador mais simples. OHCI - (Open Host Controller Interface). Algumas empresas como a Compaq e a Microsoft, concordavam e defendiam que a maior parte do processamento deveria ser executado pelo hardware do Controlador, simplificando o driver (controlador lgico). Esse desacordo entre as empresas gerou incompatibilidade no padro USB. EHCI - (Enhanced Host Controller Interface). Surgiu para unir o que de melhor tem os dois modelos anteriores; como aumento significativo na velocidade de comunicao (largura de banda) chegando ao extremo de 480Mbps, onde o driver (software) e o hardware, trabalham dividindo o servio para que dispositivos de udio e vdeo possam funcionar simultaneamente em alta velocidade. Portanto, UHCI, OHCI, EHCI so modelos de controladores USB compostos de software bsico (driver) e hardware. Um circuito Controlador consiste de duas partes: o Driver de Controle do

Host (HCD) que um software bsico (driver fornecido pelo fabricante), e um Controlador Host (circuito que processa eletronicamente os sinais do barramento USB). Controladores Host UHCI e OHCI esto associados verso USB 1.1. J o controlador EHCI est associado verso USB 2.0. O bus USB 2.0 tambm compatvel com UHCI e OHCI. Sendo assim, o EHCI agora um padro USB universal.Figura 2 - Detalhes da placa controladora

no Host onde o driver (software) do controlador executado, dividindo o processamento. Na figura abaixo d para se ter uma idia geral do sistema USB, desde a aplicao ou programa do cliente, ao driver do cliente; driver do sistema operacional; driver do controlador; a placa do controlador (hardware) e, por fim, o dispositivo USB do cliente, conectado a uma das portas USB do Root Hub. Tanto a camada de software como a de hardware, est acomodada num nico Host (hospedeiro). Este hospedeiro tem que ser um computador (PC), mas j existem dispositivos portteis com caractersticas e poder de Host. Ou seja, podendo acomodar camada de software e hardware como se fosse um PC. Essa tecnologia atualmente nova e se chama OTG (On-The-Go) e trataremos do assunto em aulas futuras.

Figura 3 - Viso geral do sistema USB, camadas de software e hardware

Para entendermos melhor a ilustrao grfica acima, vamos partir da Aplicao do Cliente (programa EXE). Imagine que o usurio a partir da sua Aplicao Cliente, deseje enviar um comando para ligar um rel, no dispositivo USB (placa de controle desenvolvida pelo usurio), mostrada na ltima camada de hardware (retngulo azul). Observe os passos abaixo para entender melhor: 1 - A aplicao do cliente chama uma rotina da API passando-lhe parmetros de controle; 2 - A API por suas vez chama o Driver do Cliente. Ou seja, o software bsico do fabricante do Dispositivo USB. Este driver na maioria das vezes acompanha o protudo adquirido pelo usurio; instalado no sistema operacional tornando-se parte do mesmo. Por exemplo, quando compramos uma mquina digital, vem com ela um CD-ROM, contendo os drivers e a aplicao para visualizar fotos; 3 - O Driver USB (USBD) um software bsico que j vem agregado ao sistema operacional, ele quem garante ao Sistema Operacional suporte USB. Verses mais antigas do Windows 95 e do Linux no do suporte ao USB, porque no agregam esses drivers em seus Kernel. Esse driver interpreta e traduz comandos do Driver do Cliente e envia-os para o Driver do Controlador Host; 4 - O Driver do Controlador Host (HCD) fornecido pelo fabricante da placa do Controlador Host (HC). O HDC trabalha de forma direta com o HC, processando a parte lgica do sistema USB;

5 - O Controlador Host (HC) ou placa controladora, onde contm o chipset, Root Hub e demas componentes auxiliares, a parte fsica do sistema USB onde so conectados os dispositivos. O HC controla e detecta a incluso e remoo de dispositivos. Todos os sinais eletrnicos interpretados pelo HC so enviados para o HCD, que por sua vez envia comandos para o USBD. 6 - Por ltimo, temos o Dispositivo do Cliente, conectado ao Root Hob do HC. Um dos nossos objetivos com esse curso, criar a Aplicao (programa EXE) e desenvolver o dispositivo (produto final), utilizando como base o chipset FT232BM da FTDI. A API e os Drivers do Cliente so fornecidos pela prpria FTDI sem nenhum pagamento de royalties. Ou seja, podemos desenvolver um novo produto USB, vender a um cliente e os drivers seguirem junto.

Estrutura eltricas do USBTipos de conectores H duas sries de conectores USB: Srie "A": -Conector Tipo "A" Fmea, encontrado no Host (PC), ou em portas Downstream de Hub; -Conector Tipo "A" Macho, encontrado em um dos extremos do cabo USB, onde deve ser conectado ao Host/Root raiz, ou em portas Downstream de Hub. Srie "B": -Conector Tipo "B" Fmea, encontrado no dispositivo/funo do cliente. Exemplos: impressoras, mquinas digitais, modem ADSL, etc; -Conector Tipo "B" Macho, encontrado em um dos extremos do cabo USB, onde deve ser conectado a um dispositivo/funo. Veja abaixo na ilustrao da Figura 4, os tipos de conectores da srie "A" e "B".

Figura 4 - Cabos e conectores

Mecanicamente os conectores USB foram projetados de forma a no permitir encaixes errados por parte do usurio. S h uma possibilidade de conect-los: a correta! Tipo "A" macho com Tipo "A" fmea e, Tipo "B" macho com Tipo "B" fmea. Qualquer outra combinao impossvel de unir-los

Figura 5 - Conector Tipo "A" (Fmea Host)

Figura 6 - Conector Tipo "B" (Fmea Disp.)

Na Figura 5 acima temos o conector receptculo Tipo "A", encontrado no Host e nas portas Downstream de Hub. Observem que a identificao dos pinos comea a partir da esquerda para a direita. J na Figura 6 exibida uma figura do conector receptculo Tipo "B", encontrado em dispositivos/funes do cliente. A numerao dos pinos comea da direita para a esquerda na parte superior, e continua na parte inferior da esquerda para a direita. Vero mais adiante, que os conectores do cabo tem a numerao invertida.

Figura 7 - Pinagem do conector Tipo "A" (Fmea Host)

Figura 8 - Pinagem do conector Tipo "B" (Fmea Disp.)

Observem bem as figuras acima, elas mostram as partes inferiores dos conectores e a identificao dos pinos. Essas identificaes sero muito importantes quando forem criar uma placa de circuito impresso, ou mesmo uslos no proto-board para criar prottipos de circuitos.

Figura 9 - Pinagem dos conectores Tipo "A" e "B" Machos do cabo USB

Veja agora, que nos conectores dos cabos, a identificao dos pinos so diferentes. Observem tambm que os dois extremos do cabo dispem de Tipos "B" macho.

Estrutura eltrica e sinais do cabo USB

O cabo USB composto por 4 fios e uma malha para eliminao de rudos simples. Desses, 2 so fios que transportam energia para alimentar dispositivos. Essa energia fornecida pela controladora e gerenciada pelo Driver do Controlador Host. O Cabo USB usa cores padro para os fios, sendo assim, o fio de cor vermelha chamado Vbus (5v), ou seja, o fio positivo de fornecimento de energia. O fio de cor o GND (0v). Este o pino negativo de energia do Bus. O bus USB pode fornecer no mximo 5 Volt de tenso e 500mA de corrente eltrica, isso para cada porta do Root Hub do host. A quantidade de corrente que seu dispositivo ir precisar para funcionar pode ser configurada via software. Nos circuitos que iremos criar usando o chipset da FTDI, a configurao de consumo de corrente ser armazenada numa memria Flash tipo 95C56. Os outros dois fios D+(dado+) e D-(dado-) so usados pelo sistema USB para transferncia de dados entre o Host, hub e dispositivos. Todos os sinais de dados trafegam apenas por esses dois fios usando a codificao NRZI (No Return to Zero Inverted). Ou seja, o bit 1 codificado atravs de uma transio ocorrendo da maior voltagem para a menor, ou tambm o inverso, da menor para a maior. J o bit 0 codificado sem haver transio. Durante o intervalo de um bit a voltagem constante.

Figura 10 - Exemplo de codificao de bits em NRZI

S por curiosidade sobre a codificao NRZI, o grfico acima mostra como um sinal digital comum codificado em NRZI. Na NRZI a transio s ocorre quando o bit tem o valor 1. Quando o bit tem o valor 0 no ocorre transio para sua codificao.Figura 11 - Interior do cabo

Figura 12 - Foto de um cabo USB, nomes e numerao dos fios

As duas figuras acima mostram as cores dos fios, associadas aos nmeros dos pinos dos conectores, tanto do Tipo "A" como do Tipo "B".Figura 13 - Organizao interna dos fios

Figura 14 - Par de fios D+ e D- entrelaados

Observem nas duas figuras acima, que o par de fios D+ e D- esto entrelaados, o objetivo minimizar interferncias.

Configurao de alta e baixa velocidade de comunicaoFigura 15 - Configurao de alta velocidade entre o dispositivo e o Host

Na figura acima temos uma configurao fsica entre o Host e o dispositivo. Observem no dispositivo o resistor de Pull-up de 1k5 ohm ligado desde o sinal D+ a uma tenso de 3,3V. Esta tenso pode ser conseguida atravs de um regulador de tenso ligado ao Vbus e ao GND do bus USB. Este resistor pullup muito importante, e serve para avisar ao controlador Host que um novo dispositivo foi conectado ao bus USB e tambm informar que o dispositivo ir se comunicar com o Host em alta velocidade. Para dispositivos que se comunicam em baixa velocidade, como: mouses e teclados, o resistor de pullup deve ser conectado ao sinal D-, em vez do D+. Para que o controlador host possa detectar a presena de um dispositivo, necessrio que a tenso que circula entre o resistor de 1k5 at o D+ ou D- (alta ou baixa velocidade), persista por mais que 2,5 microssegundos. J a desconexo de um dispositivo detectada pela ausncia da tenso que circula pelo resistor pull-up, por mais que 2,5 microssegundos. Esta configurao a base para o funcionamento do sistema plug-andplay do bus USB.

Tipos de interfacesH dois tipos de interfaceamento em que um dispositivo USB pode trabalhar: Bus-powered e Self-powered. No Bus-powered o dispositivo alimentado pelo prprio Bus USB atravs dos pinos Vbus e Gnd podendo fornecer no mximo 500mA direto de uma Porta do Root Hub (host) ou de uma Porta de um Hub comum que tenha sua prpria fonte de alimentao. Se o Hub no tiver uma fonte de alimentao, os dispositivos conectados a ele s podero consumir cada um, no mximo 100mA do Bus USB. J o tipo selfpowered no consome energia do Bus USB, mas deve ser alimentado com uma fonte externa para que o circuito possa funcionar. Para que um dispositivo USB trabalhe no modo Bus-powered ou Selfpowered, necessrio que o desenvolvedor configure o circuito eletricamente para que possa trabalhar da maneira desejada. Dispositivos configurados para trabalhar no modo Bus-powered devem consumir no mximo 100mA, podendo retirar essa corrente diretamente da porta do Root hub, ou de qualquer tipo de Hub. Dispositivos Bus-powered que consomem 500mA devem ser conectados somente no Root Hub ou na porta de

um Hub que disponha de sua prpria fonte de alimentao. Dispositivos Bus-powered so resetados/desligados involuntariamente quando o computador ligado ou desligado. J dispositivos eletricamente configurados como Self-powered mantm o circuito ligado mesmo que o computador seja resetado/desligado, isso porque so alimentados atravs de uma fonte externa. Esses tipos de interfaceamento devem ser levados em considerao quando criarem circuitos crticos, como alarmes, controles de abrir e fechar portas, portes e quaisquer outros dispositivos que, em hipteses nenhuma, devem ser acionados involuntariamente. Para esses tipos de dispositivos a Self-powered a ideal. Veja nas figuras abaixo exemplos de interfaceamento de dispositivos USB:Figura 1 - Dispositivo Bus-powered

Veja na Figura 1 que o dispositivo conectado direto em uma das portas do Root hub (PC-host). Como aprendemos em aulas anteriores, uma porta do Root Hub pode fornecer no mximo 500mA. Portanto, esse tipo de interfaceamento de dispositivo pode consumir at 500mA. Nesse tipo de interfaceamento temos a vantagem de no necessitarmos de fonte externa, mas temos a desvantagem do dispositivo ser desligado quando o PC for desligado.Figura 2 - Dispositivo Self-powered

Na configurao mostrada no esquema acima, temos um dispositivo alimentado como uma fonte externa, no necessitando da energia do Bus USB. Nesta configurao o dispositivo poder consumir quanto de corrente a fonte drenar.

Este tipo de configurao a ideal para dispositivos que no podem ser desligados aps o corte da energia do PC.Figura 3 - Dispositivo conectado a um Hub Bus-powered

Veja que na figura acima o dispositivo est ligado a um Hub Bus-powered, nesta configurao cada porta do hub fornece no mximo 100mA. Assim, o dispositivo s poder extrair 100mA da porta. Dos 500mA fornecidos por uma porta do Root hub, 100mA so para alimentar seu prprio circuito.Figura 4 - Dispositivo conectado a um Hub Self-powered

Na figura acima temos um dispositivo hub do tipo Self-powered (alimentado atravs de uma fonte externa). Nesse tipo de configurao o hub poder ter mais que 5 portas, e fornecer em cada uma a corrente mxima. Portanto, cada dispositivo conectado ao hub poder extrair indiretamente corrente do Bus USB.

Interfaces Bus e Self Powered As figuras 5 e 6 abaixo mostram os esquemas eltricos genricos para se criar dispositivos alimentados pelo prprio cabo USB (Bus-powered) ou por uma fonte externa (Self-powered). Esses esquemas sero usados em todos os nossos projetos aqui nesse curso. Em aulas posteriores irei explicar a funo de cada pino do shipset FT232BM. a partir de uma dessas configuraes eltricas que iremos acrescentar um microcontrolador para criarmos produtos USB especficos e com vrios recursos.

Figura 5 - Interface para dispositivos Bus-powered

No esquema acima, o objetivo da ferrite de eliminar interferncias eletromagnticas geradas pelo computador. Os capacitores so usados como desacopladores. Atravs do resistor R4 de 1,5K que o Host USB detecta se um dispositivo

foi conectado ou desconectado do sistema. O LED TX acende quando enviamos dados do dispositivo para o computador. J o LED RX acende quando o dispositivo recebe dados do computador. A memria 93C46 opcional e seu objetivo personalizar o novo produto criado. Pode ser usado o mesmo modelo com terminaes: 56 ou 66. Observe tambm que a energia para alimentar o circuito fornecida atravs do pino 1 (Vbus) do conector USB. Todos os terminais VCC-USB no circuito devem ser ligados entre siTabela 1 - Lista de componentes (Bus-powered) Resistores Capacitores Diversos R1: 27 Ohm C1: 10nF 1 Cristal 6 Mhz 1 Memria Flash 93C46 ou 56 R2: 27 Ohm C2: 10uF eletroltico ou 66 R3: 470 Ohm C3: 100nF 1 Chipset FT232BM R4: 1,5K C4: 100nF 1 Conector tipo "B" fmea PCI R5: 220 Ohm C5: 100nF 1 Ferrite (*) 1 Cabo USB (padro R6: 220 Ohm C6: 100nF impressora) R7: 2,2K C7: 33nF R8: 10K C8: 27pF C9: 27pF

Figura 6 Ferrite

Figura 7- Ferrite com uma volta de fio

O objetivo da ferrite no terminal VBus de eliminar quaisquer interferncias eletromagnticas geradas pelos componentes do computador como: fonte de alimentao, processador, cristais etc. A ferrite pode ser semelhante as das figuras acima, com uma volta de fio duro, tipo cabo de Rede, telefone ou outro. A ferrite pode ter as seguintes caracteristicas: NBT 4,5/2,6/6,7.

Figura 8 - Interface Self-powered

A diferena no esquema acima em relao ao do Bus-powered, no acrscimo dos resistores R5 de 4,7K e R8 10K; na eliminao da ferrite e do capacitor de 10nF; e a ligao do pino 14 (PWRCTL) do FT232BM, que agora conectado ao +5V da fonte de alimentao externa.

Tabela 2 - Lista de componentes (Self-powered) Resistores Capacitores Diversos R1: 27 Ohm C1: 10uF eletroltico 1 Cristal 6 Mhz 1 Memria Flash 93C46 ou 56 R2: 27 Ohm C2: 100nF ou 66 R3: 470 Ohm C3: 100nF 1 Chipset FT232BM R4: 1,5K C4: 100nF 1 Conector tipo "B" fmea PCI 1 Cabo USB (padro R5: 4,7K C5: 100nF impressora) R6: 220 Ohm C6: 33nF R7: 220 Ohm C7: 27pF R8: 10K C8: 27pF R9: 2,2K R10: 10K

Protocolo USBO protocolo uma das partes mais importantes do funcionamento do sistema USB, atravs dele que um ou mais dispositivos conversam e trocam informaes com o Host. No Host a pilha do protocolo est disponvel em forma de drivers de arquivos .sys, dll, drv, exe, etc. J no dispositivo o protocolo pode ser encontrado dentro de um microcontrolador especfico, como por exemplo um PIC que disponha de uma certa quantidade de memria. Nesse caso, o protocolo escrito com base na norma USB, em uma linguagem especfica com: C ou Assembler; depois compilado e gravado na memria do microcontrolador atravs de um gravador de PIC. Esta umas das maneiras mais complexas, trabalhosa e no muito produtiva. H microcontroladores PIC como o 18F2450 e 18F4450 que internamente j dispe do protocolo, tornando assim mais fcil o desenvolvimento de aplicaes. Uma outra maneira atravs de um chipset que carrega dentro de si toda a funcionalidade do protocolo USB, livrando o microcontrolador de todo o trabalho pesado. Diferente da Porta Serial ou Paralela onde simplesmente atravs dos sinais eltricos dos pinos e um programa bsico possvel se comunicar com um dispositivo. No USB isso s possvel se o dispositivo carregar o protocolo USB num chipset ou mesmo dentro de um microcontrolador. Assim, conclumos que o combustvel do sistema USB seu protocolo, sem ele, no h troca de informao entre os dispositivos. Nessa aula irei trazer a nosso conhecimento alguns pontos importantes do protocolo USB para nos ajudar a compreender algumas caractersticas de funcionamento dos dispositivos que iremos criar. Tambm iremos usar alguns softwares disponveis no mercado (free) para visualizar o protocolo. O protocolo USB tem vrios recursos como: CRC (Cyclic Redundancy Check), deteco e correo de erros, deteco de conexo e remoo de dispositivos, controle de fluxo de dados assegurando transmisses isossncronas (trafego contnuo de dados), disponibilidade assegurada de largura de banda, entre outros. 4 tipos de transferncias de dados USB

Controle: As transferncias de controle so utilizadas pelo Host para configurar um dispositivo e requisitar informaes sobre o seu estado. Essas transferncias so usadas principalmente pelo sistema USB para configurar dispositivos durante a primeira conexo. Interrupo: Esse tipo de transferncia utilizado por dispositivos que usam pouca banda do sistema USB, mais comumente usada por dispositivos como: mouses, teclados, joysticks ou outros que precisam enviar e receber dados de maneira no freqente, mas com certos limites de latncia. Nesse caso o dispositivo quem requisita dados do host. Isossncrona: Chamada tambm de transferncia de correntes em tempo real (Stream real-time transfers). Tipo de transferncia composta somente de dados, ideal para dispositivos que no necessitam checar se os dados chegaram corretamente ao destino. No tem deteco de erro e nem utiliza CRC. Esse tipo de transferncia mais utilizada por dispositivos de vdeos, udios e outros que precisam de uma velocidade constante de transmisso, no importando a perda de dados por erro ocasionais. As transferncias isossncronas tm prioridades em termos de largura de banda. Bulk: Transferncias de grandes volumes de dados como: aquisio de dados de dispositivos tipo scanners, impressoras, discos de memrias flash, modems ADSL. Nesse tipo de transferncia h deteco e correo de erros, confirmao e recuperao de pacotes de dados corrompidos. A largura de banda para esse tipo de transferncia pode variar se houver outras atividades concorrentes sendo executadas no barramento USB. Esse tipo de transmisso garante a segurana no trfego de dados, mas no garante velocidade constante em que os mesmos so transmitidos. Toda as transmisses de dados no sistema USB so baseadas no envio de pacotes. O Host quem inicia todas as transaes, o primeiro pacote gerado o Token para descrever o que seguir no prximo pacote e, se a transao de dados uma escrita ou leitura. O prximo pacote geralmente um pacote Data que leva a carga til de dados, seguido por um pacote de Handshake, que informa se houve sucesso na negociao da transao. Cada transao USB consiste dos seguintes pacotes mostrados na figura abaixo:

Figura 1 - Pacotes de dados de transferncia

Descrio dos campos dos pacotes

SYNC - Todos os pacotes tem que comear com um campo de sync. Este campo tem um tamanho de 8 bits para velocidades baixas e, 32 bits para altas velocidades. utilizado para sincronizar o relgio (clock) do transmissor com o do receptor. PID - Representa Pacote ID (identificao). Este campo tem um tamanho de 8 bits, usado para identificar o tipo de pacote que ser enviado.Figura 2 - Descrio dos bits do campo PID

Os bits (PID0 a PID1) indicam o tipo de pacote que pode ser: Token, Data, Handshake e Special. Os bits (PID2 e PID3) acrescentam mais informaes sobre o tipo de pacote. Os bits (PID#0 a PID#3) so usados para checagem dos dados (clculo para verificao e preveno de erros).Tabela 1 - Tipos de PID

Tipo de PID

Nome do PID OUT IN SOF SETUP

DescrioEndereo + nmero do Endpoint. Transao do Host para o Dispositivo. Endereo + nmero do Endpoint. Transao do Dispositivo para o Host. incio e o nmero do Frame. Endereo + nmero do Endpoint. Transao de configurao para controle do Pipe. Direo do Host

Token

DATA0 DATA1 Data DATA2 MDATA ACK NAK Handshake STALL NYET PRE ERR Special SPLIT PING

para o Dispositivo. Pacote de dados impar. Pacote da dados par. Pacote da dados para tansao em alta-velocidade (high-speed) Isossncrona. Pacote da dados para tansao em alta-velocidade (high-speed) Isossncrona. Reconhecimento. O pacote foi recebido corretamente. Informa que o dispositivo temporariamente no pode enviar ou receber dados. O dispositivo encontra-se em um estado que requer interveno do Host. O receptor no responde. Prembulo para indicar low speed. Utilizado somente em modo High speed. Erro em transao split. Para transao split em High speed. Verificao de Busy aps um NYET.

ADDR - Este campo define o endereo de destino do dispositivo ao qual o pacote de dados ser enviado. Tem um tamanho de 7 bits, podendo enderear no mximo at 127 dispositivos distintos, conectados no bus USB. ENDP - Este campo conhecido como Endpoint e tem o tamanho de 4 bits, permitindo 16 possveis Endpoints diferentes. O Endpoint de nmero 0 (zero) usado pelo Host para se comunicar com todos os dispositivos conectados ao bus USB, para configur-los ou obter informaes. DATA - So os dados propriamente dito para transferncia. Este campo pode armazenar at 1024 bytes. CRC - (Cyclic Redundancy Check). O objetivo deste campo armazenar o resultado de um clculo em nvel de bits executado em alguns campos do pacote, para garantir a segurana dos dados transmitidos. Ou seja, se os dados se alterarem durante a transmisso, o receptor poder comparar o valor deste campo, calculando o CRC do pacote recebido e correo do erro se houver. O campo PID no agregado a esse clculo porque tem seu prprio recurso de correo de erros. Para os pacotes Token esse campo tem o tamanho de 5 bits (CRC5), e para pacotes de Dados, tem tamanho de 16 bits (CRC16). EOP - Este campo indica o fim de qualquer pacote. Ele representado com um simples zero (0) por aproximadamente 2 a 3 bits de tempo.

Pacote Token - Indica o incio de uma transao USB.

H 4 tipos de comandos Token: Out - Informa ao dispositivo que o Host deseja enviar informaes; In - Informa ao dispositivo que o Host deseja ler informaes; Setup - Usado para iniciar transferncias de controle; SOF - Indica o incio e o nmero do Frame.Figura 2 - Representao grfica de um pacote SOF

Os Pacotes SOF (Incio de Frame) consiste em um nmero de 11 bits e so enviados pelo Host entre 1ms a +/- 500ns num Bus Full speed, ou entre 125us a +/- 0,0625us num Bus High speed. Esse pacote consiste de um PID que indica um pacote do tipo SOF, e o campo Frame Number que referencia o nmero do Frame (quadro). Pacote de Dados - Contm a carga til de dados a ser transportado. Existem 4 tipos de pacotes de dados capaz de transmitir at 1024 bytes. Esses pacotes so conhecidos como:

DATA0 DATA1 DATA2 MDATA

DATA 0 e DATA 1 so utilizados nos modos low speed e full speed; DATA 2 e MDATA so utilizados somente no modo de alta velocidade (High Speed). Pacote Handshake - Usado para reconhecer transaes e prover meios de correo de erros. Como mostrado na Figura 1, o handshake composto somente por um campo de informao vlida (PID). Os comandos PID de handshake so: ACK, NACK, STALL ou NYET.

Protocolo USB Endpoints e Pipes (interface lgica)Endpoint (ponto final de um dispositivo) - rea de memria (Buffer) reservada no Dispositivo para armazenar os dados que trafegam em um tubo (pipe). Um dispositivo USB pode ter no mximo 16 Endpoins na verso 2.0 do USB. O Endpoint 0 (zero) reservado para o Host obter informaes sobre cada dispositivo conectado ao Bus USB. Atravs deste Endpoint, o Host pode enviar comandos de controle em baixa velocidade para obter informaes descritivas sobre o dispositivo, como: nmero de srie, fabricante, classe, subclasse, verso do Bus USB, nome do produto, tipo do protocolo, nmeros de Endpoints, interfaces, velocidade, tipo de transferncia, entre outras. Aps a

aquisio de todas estas informaes sobre o dispositivo, o Host estabelece realmente uma comunicao USB.Figura 1 - Tipos de Endpoints

Pipe (tubo) - uma associao entre um Endpoint no dispositivo e um software no Host. Pipe no algo fsico, uma via de comunicao virtual que s existe em nvel de software. Quando um dispositivo USB se conecta ao sistema, o Host cria uma configurao para se comunicao com o dispositivo. Um Pipe pode ser descrito tambm como uma via de comunicao unidirecional ou bidirecional, onde podem existir Endpoints de entrada(In) e sada (Out). Os Pipes passam a existir quando um dispositivo configurado pelo Host. Enquanto um dispositivo estiver sendo alimentado e conectado ao controlador Host, sempre existir um Pipe de controle padro (Control Default) para que esse dispositivo possa fornecer acesso as configuraes, como, informaes de controle e estado do mesmo.

Figura 2 - Ilustrao de um Pipe entre o Host e o dispositivo

Figura 3 - Interface lgica entre o Host e os diversos dispositivos USB atravs dos Pipes e Endpoints

H dois tipos de Pipes:

Stream (corrente de dados) - uma via de comunicao unidirecional entre um softwares no Host e um Endpoint que pode ser dos tipos: Interrupo, Isossncrono ou Bulk. Se um dispositivo precisar transferir de forma bidirecional um dos tipos de Endpoint citados acima, o sistema deve estabelecer dois Pipes: um definido com Endipoint de sada(Out), e outro com Endpoint de entrada(In).

Figura 4 - Pipe Stream Out

Figura 5 -Pipe Stream In

Mensagem ou controle - uma via de comunicao bidirecional entre um softwares no Host e dois Endpoints de Controle (control) em um dispositivo USB. Ou seja, um tubo com dois Endipoints: um de entrada (In) e outro de sada (Out) que tem uma estrutura de dados bem

definida. atravs de um Pipe deste que o Host usa o Endpoint 0, para obter os descritivos dos dispositivos para configur-los no sistema USB.Figura 6 - Pepe de Mensagem ou Controle

DescritoresTodos os dispositivos USB tm uma hierarquia de descritores que informam ao Host o que o dispositivo , ou seja, sua "personalidade", 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, tipo de transferncia, tipo de interface, etc.Animao - Envio dos descritores pelo dispositivo

Figura 7 - Janela do Gerenciador de Dispositivos do Windows

No windows, para executar o Gerenciador de Dispositivos, acesse o Painel de Controle; d duplo clique no cone Sistema; Clique na guia Hardware e depois no boto Gerenciador de Dispositivos. O programa Usbready.exe (de uso livre) criado pela Intel para testar se um computador oferece suporte USB; pode-se fazer seu download clicando aqui.Figura 8 - Janela do programa USBready para checar a existncia do sistema USB no PC

Descritores de Dispositivos - Informam ao Host de uma forma geral, caractersticas sobre o dispositivo. Um dispositivo USB s pode ter um Descritor de Dispositivo. Estas informaes so muito importantes para o Host saber qual a verso do USB, o dispositivo suporta. Um dos

descritores so: identificao do fabricante, nmero de srie, ID do Vendedor e produto, classe e subclasse do dispositivo.

Para visualizar os descritores de um dispositivo USB, faa download do programa USB Monitor da HHD Softwares em: http://www.hhdsoftware.com/download.html. A Microsoft tambm disponibiliza um utilitrio free (de uso livre), chamado Usbview.exe para visualizar os descritores. Clique aqui para fazer download.Figura 9 - Tela inicial do programa USB Monitor

Um dos inconvenientes do programa USB Monitor, que ele no faz a atualizao dos dados automaticamente. Se for conectar um novo dispositivo, preciso fechar o programa e execut-lo novamente, para que os novos dados sejam exibidos na janela.

Figura 10 - Tela inicial do programa USBview da Microsoft

Para que o programa USBview exiba todos os descritores dos dispositivos conectados ao Bus USB, clique no Menu Options, e marque todos os itens, conforme mostra a figura abaixo:Figura 11 - Menu Options do USBview

Figura 12 - Exibio do Descritor de Dispositivo atravs do software USB Monitor

No Descritor de Dispositivo mostrado na figura acima, observe os campos principais:USB Version: 2.0 (dispositivo compatvel com a verso 2.0 do USB) Vendor: 0x0500 (cdigo do vendedor do produto ou dispositivo) Product ID: 0x2000 (identificao do produto ou dispositivo) Product Version : 0x0400 (verso do produto ou dispositivo) Manufacturer: 0x0409 "ROGERCOM" (fabricante do produto ou dispositivo) Product: 0x0409 "Sensor de Temperatura" (nome do produto ou dispositivo) SerialNumber: 0x0409 "RCNPMGL5" (nmero de srie do produto ou dispositivo)

Os dados acima so gravados na memria opcional Flash 93C46 para personalizar o produto (dispositivo). O campo SerialNumber gerado automaticamente por um algoritmo, atravs do programa gravador de memria Flash. So atravs dos campos acima que o driver USB do Sistema Operacional carrega os drivers USB do dispositivo corretamente, aps a leitura de um arquivo .INF. Em aulas futuras iremos entender todo o processo de configurao do arquivo .INF.

Descritores de Configurao - Contm informaes sobre as capacidades e funcionalidades do dispositivo, como tipo de alimentao de energia (Bus-powered ou Self-powered), mxima corrente consumida pelo dispositivo, entre outras. Veja na figura abaixo, algumas informaes sobre o Descritor de configurao de um dispositivo:

Figura 13 - Exibio do Descritor de Configurao atravs do software USB Monitor

Veja no campo Attributes da figura acima, o tipo de alimentao do dispositivo: Bus Powered, e no campo Max Power, a corrente mxima extrada do Bus USB pelo dispositivo: 400mA.

Descritores de Interface - Contm informaes sobre o nmero de Endpoint que suporta, o protocolo utilizado e, algumas strings de texto especificando o nome do produto. Veja mais detalhes na figura abaixo:

Figura 14 - Exibio do Descritor de Interface atravs do software USB Monitor

Descritores de Endpoint - O sistema sempre assume que o Endpoint 0 (zero) um endpoint de controle e, configurado antes de qualquer descritor. Fora o Endpoint 0, cada endpoint deve ser configurado e consiste no nmero do Endpoint, direo da comunicao (In, Out) e tamanho do pacote de dados a transmitir. A figura abaixo mostra um descritivo de 2 Endpoint: um de entrada (Input) e outro de sada (Output), do tipo Bulk (alto volume de dados).

Figura 15 - Exibio do Descritor de Endpoint atravs do software USB Monitor

Veja na figura acima os endereos de Endpoint In/Out, o tipo de transferncia e o tamanho mximo do pacote de dados. Esses descritores so de um dispositivo que trabalha no modo Full-speed.

Descritores de Classe - Determinam a classe do dispositivo. No sistema USB cada dispositivo identificado como sendo de uma classe. Veja abaixo na Tabela 1: Smbolo Classe 1 2 Descrio udio Dispositivos de comunicao. Dispositivos de Interfaces humanas: Mouse, Teclados, Joysticks, leitor cdigo de barras, etc. Imagem: Scanner, cmera. Impressoras.

Tabela 1 - Classe de dispositivos USB

3

6 7

8

Amazenamento de massa: Floppy disk driver, CD-ROM, DVD, ATAPI, SCSI, memria flash. Hub. Interface de Dados. Chip/Smart card. Vendor-Specific: dispositivos que no entram em qualquer outra classe. Interface Serial RS232, Rede ponto-a-ponto, etc.

9 10 11

255

Processo de enumeraoNo sistema USB o processo de enumerao se refere conexo, deteco, leitura dos descritivos dos dispositivos e desconexo. uma atividade ininterrupta. Isso tudo gerenciado em tempo real pelo controlador Host e o software do sistema. Do ponto de vista do usurio do computador, o processo de enumerao transparente, desde que se tenha antes instalado no sistema operacional, os drives do fabricante do dispositivo. Aps isso, o carregamento dos drives quando um dispositivo conectado, automtico. Segue abaixo uma seqncia de passos que ocorrem no processo de enumerao:Figura 16 - Conexo do dispositivo

Figura 17 - Conexo do dispositivo ao Host

1 O dispositivo conectado ao host; 2 O controlador host detecta o dispositivo atravs de seu sinal eltrico; 3 O host provoca uma interrupo de reset para que o dispositivo reinicie, limpando as variveis e registros para que se possa iniciar a enumerao; 4 Um host define um canal (Pipe) de comunicao com o dispositivo; 5 O host habilita e configura o Endpoit 0 (In/Out) para aceitar transaes do tipo Setup; 6 O host atribuiu um nico endereo ao Dispositivo; 7 O host requisita os descritores do dispositivo, interpreta-os, e carrega o device driver (software) apropriado que ir interagir com a aplicao do cliente. Pronto, aps todos os passos descritos acima terem sido efetuados, estabelecida a fase de gerenciamento do dispositivo e das comunicaes de dados. Aps isso, o dispositivo estar apto a exercer sua funo para ao qual foi criado.

Conhecendo o chipset FT232BM

O chipset FT232BM uma soluo ideal para construir dispositivos que se comuniquem com o computador atravs do Bus USB, com velocidade de at 3Mbps atravs de sinais TTL: RS422 e RS485 e no mximo 1Mbs para comunicao atravs de drivers RS232. Ele pertence a uma segunda gerao do popular componente USB UART da FTDI (FT8U232AM). compatvel com controladores Host USB verses 1.1 e 2.0. A FTDI - Future Technology Devices International Ltd., fabricante do FT232BM, disponibiliza no seu site http://www.ftdichip.com/FTDrivers.htm, os drivres de controle, livres de pagamento de royalties, para os sistemas operacionais Windows 98/Me/200/XP/CE.NET, Linux e Mac OS-X/9/8. A FTDI tambm disponibiliza outros chipset, como o FT245BM que disponibiliza os dados USB em paralelo, (em 1 byte) atravs de 8 pinos de entrada e sada (bits D0 a D7), para propsitos gerais, e mais 4 pinos de controle (RD#, WR, TXE# e RXF#). O FT245BM pode ser usado sem a necessidade de um microcontrolador para controlar dispositivos diretamente atravs de interfaces simples, com: rels, motores, conversores ADC, entre outros.

Principais caractersticas:Um nico chip manipula tanto transferncias USB como Serial. Interface para Modem com total suporte aos sinais de Handshake. A UART suporta 7 e 8 bits de dados; 1/2 stop bits e paridade par/impar/marca/espao e nenhuma. Taxa de transferncia entre 300 a 3M Baud (TTL). Taxa de transferncia entre 300 a 1M Baud (RS232). Taxa de transferncia entre 300 a 3M Baud (RS422/RS485). Timeout ajustvel para o buffer RX. Compatvel com bus USB 1.1 e 2.0. Tenso de alimentao entre 4,35V a 5,25V. Regulador integrado de 3.3v para Entrada/Sada USB. Compatvel com os controladores Host: UHCI/OHCI/EHCI. Suporte a uma memria EEPROM externa opcional para personalizar o produto, onde pode ser armazenado os descritores do mesmo como: VID, PID, e nmero de srie. Encapsulado em tamanho miniatura 32-LD LQFP. EEPROM pode ser programada na prpria placa via USB. Suporte para alimentar dispositivos diretamente no Bus USB atravs do pino PWREN#. Modos de transferncias USB Bulk e Isossncrono.

Suporte para os recursos USB (suspend/resume) atravs dos pinos SLEEP# e RI#.Figura 1 - Diagrama interno do FT232BM

Na figura acima temos uma viso geral em blocos do chipset FT323BM, onde podemos ver a clula do regulador de tenso que fornece 3.3v no pino 3v3OUT do chipset; a clula (USB transeiver) que trata diretamente os sinais D+ e D- atravs do meio fsico (cabo) , o USB DPL que trata da codificao NRZI; o multiplicador de sinal de clock, que a partir de uma freqncia de 6Mhz gera 48Mhz; a Interface Serial avanada (SIE); o UART que disponibiliza os

dados seriais para comunicao externa (RS232/RS422/RS485); clula EEPROM que gerencia uma memria externa 93C56, 93C66 ou 93C46 opcional para personalizar o produto USB; clula para controle dos Buffers FIFO; o USB Protocol Engine, que trata da pilha de dados do protocolo USB em baixo nvel, como Pipes, Endpoints, etc.Figura 2 - Pinagem do FT232BM

Tabela 1 - Descrio dos pinos do FT232BM Pino Nome Tipo Descrio EESK 1 Sada Sinal de Clock para a EEPROM. Conexo de dados direta com a EEDATA Entrada/Sada 2 EEPROM. VCC 3 Alimentao Tenso de alimentao (+4,4V a +5,25V). Atravs deste pino podemos realizar um RESET# Entrada 4 reset a partir do exterior. Se no for usado, deve ser conectado ao VCC. Sada do gerador interno de Reset. Este RSTOUT# Sada 5 pino no afetado no caso de um reset no Bus USB. Sada do regulador LDO (Low Drop Out) de 3,3V. Este pino deve ser conectado a um capacitor cermico de 33nF. Uma 3V3OUT Sada 6 pequena quantidade de corrente (DCE), usando como exemplo o caracter "A". Bit de Paridade O bit de paridade utilizado numa transmisso serial assncrona, como uma soluo primria em nvel de hardware para detectar a ocorrncia de erros na transmisso de dados. A cada byte enviado, o receptor verifica se os bits do mesmo no foram modificados. O hardware receptor verifica isso somando todos os bits "1" que h no byte, mais o valor do bit de paridade. O resultado dessa soma dever ser Par ou mpar. Se a paridade na configurao do DTE e DCE foi definida, por exemplo, como PAR, a soma dos bits "1" do dado, mais o valor do bit de paridade recebido tem que ser PAR para um dado correto. Se por acaso o resultado der mpar, isso indica que o dado recebido sofreu alguma modificao em algum momento da transmisso, ou seja, houve um erro. Se a transmisso no for usar bit de paridade, isso deve ser avisado na configurao do DTE e DCE. Os tipos de paridades que podem ser usadas para configurar os terminais so: Nenhuma, mpar, Par, Marca ou Espao. As paridades Marca e Espao no so mais usadas, e ainda constam nas configuraes para manter compatibilidade com os antigos sistemas de transmisso serial.Figura 11 - Exemplo 1 - paridade PAR

A figura acima demonstra o uso da paridade PAR. Temos um dado de 8 bits 00110100 (com um total de 3 bits "1", resultando em um nmero mpar). Para que a soma dos bits de dado+paridade seja Par, o circuito transmissor adiciona o valor "1" ao bit de paridade. Assim, a soma dos bits de dados+paridade fica igual a 4 (PAR). Aps isso, o transmissor envia o Frame ao receptor. Por sua vez, ao receber o Frame, o receptor verifica se a soma dos bits de dado+paridade um resultado tambm PAR, confirmando o sucesso. Caso contrrio, detectado um erro de transmisso. A demonstrao abaixo segue o mesmo princpio da anterior, para adicionar o bit de paridade pelo transmossor e a verificao pelo receptor, levando em conta tambm a paridade PAR. A diferena abaixo que a soma dos bits do dado j um resultado Par. Nesse caso, o hardware do transmissor adiciona um valor "0" ao bit de paridade, para que o resultado da soma dos bits dado+paridade seja um resultado PAR.

Figura 12 - Exemplo 2 - paridade PAR

Interface RS232 O padro RS232 foi criado em 1962 para conectar diretamente dois dispositivos. Foi padronizado pela Associao de Indstria de Eletrnica (EIA). Originalmente era usado para conectar dispositivos de teletipo que utilizavam o cdigo ASCII para transmitir dados de forma assncrona. As letras "RS" quer dizer Recomended Standard (padro recomendado) e 232, a verso. O padro RS232 foi criado com o objetivo de definir as caractersticas eltricas, temporizao, mecnicas e funes dos sinais da interface serial, para conectar dispositivos ponto-a-ponto. Com o passar dos anos o padro evoluiu e teve a terceira reviso em 1969 (RS-232C) verso "C". EIA-232D e EIA-232E foram atualizadas respectivamente em 1987 e 1991. Por volta de 1984 o nico padro de comunicao serial em computadores pessoais IBM-PC era o RS232C. Mais tarde surgiram o irDA (Infra-vermelho), USB entre outros. Sinais eltricos O grfico abaixo mostra as tenses eltricas para representar os sinais lgicos usados no padro RS232. Observe que h uma regio de transio do sinal onde a tenso utilizada para representar o "0" e o "1" lgico. Veja tambm que o "0" lgico associado a faixa de tenso positiva e o "1" a faixa de tenso negativa.

Figura 13 - Sinal eltrico do padro RS232

As tenses mximas que a interface RS232 suporta 25v. Um Espao ou zero (0) lgico, representado por tenses positivas, entre +3v a +25v. Uma Marca ou o um (1) lgico, representado por tenses entre -3v -25v. J a faixa de tenses entre -3v e +3v conhecida como uma regio de transio, sendo considerada indefinida. Ou seja, esta regio no representa nenhum estado lgico vlido no padro RS232. Algumas interfaces RS232 nos computadores atuais fornecem -12v e +12v, mas suportam mnimas de -25v e mximas de +25v.

Conectores Existem atualmente vrios tipos de conectores seriais, como o RJ45, parafusado, plug, etc. Essa diversidade porque muitos fabricantes de dispositivos e equipamentos de comunicao serial criam seus prprios conectores, seja por questes de designer ou dimenses fsicas, por no ter espao para comportar um conector padro RS232. Mas o padro RS232 define somente os tipos macho e fmea dos conectores DB9 e DB25. Aqui iremos tratar dos dois como sendo do tipo Macho. Os do tipo furinho so fmeas. Tanto o conector macho como o fmea tem seus pinos numerados. Cada pino tem um significado e esse significado est associado a um perifrico Modem.

Veja abaixo as caractersticas do conector DB9:Figura 1 - Conector DB9 Macho

Tabela 1 - Significado e sentido dos sinais dos pinos do DB9 Macho DB9 - No. Sentido Sinal Descrio Pino (DTE) Pino 3 TXD Sada=> Transmit Data Pino 2 RXD Request To Send Pino 8 CTS 12 e 149 e 7 (Power Up Timer). Temporizador de power up ligado; NOPUT ---> (No Power Up Timer). Temporizador de power up desligado; WDT ---> (Watch Dog Timer) habilitado. O programa resetado se por algum motivo, travar; NOWDT ---> (No Watch Dog Timer) desabilitado. Se travar, o programa no resetado; BROWNOUT ---> Reset por queda de tenso habilitado. Sempre que a alimentao cai a um valor mnimo; NOBROWNOUT ---> Reset por queda de tenso desabilitado. O PIC no resetado; LVP ---> Programao em baixa tenso habilitada; NOLVP ---> Programao em baixa tenso desabilitada; PROTECT ---> Protege todo o cdigo do programa contra leitura; NOPROTECT ---> Desabilita a proteo do cdigo do programa contra leitura. Obs.: Nem todos os modelos de PIC aceitam todas as constantes de fusveis.

#use rs232(BAUD=9600, PARITY=N, BITS=8, XMIT=pin_c6, RCV=pin_c7) Configura os parmetros da comunicao serial. BAUD ---> Velocidade da transmisso (depende da freqncia do cristal). PARITY ---> Paridade (N=nenhuma, E=par, O=mpar); BITS ---> Bits de dados (5, 6, 7, 8 ou 9); XMIT ---> Especifica o pino que ir transmitir os dados ( no 16F877 o pin_c6 fixo usando o USART); RCV ---> Especifica o pino que ir receber os dados ( no 16F877 o pin_c7 fixo usando o USART); Obs.: possvel escolher outros pinos para XMIT e RCV, porm, todo o processo de transmisso e recepo de dados ficar por conta do software.

Definindo a direo dos pinos de I/O No PIC, os pinos de I/O podem ser definidos tanto como entradas como sadas, sendo assim, atravs de um nico pino, podemos envia ou receber um sinal, para isso, preciso definir a direo do pino atravs da funo set_tris_X(). No nosso exemplo abaixo estamos usando a porta D. Se desejarmos definir todos os pinos da porta D como entradas, usamos a funo set_tris_d(0b11111111). Para definirmos todos os pinos da porta D como sadas, usamos set_tris_d(0b00000000) com todos os bits zeros. Os bits esto associados aos pinos (RD7 a RD0) da direita para a esquerda, ou seja, bit mais significativo igual a RD7, e menos significativo igual a RD0.

Figura 3 - Direo dos pinos da porta D

Exemplos de circuitos e programao usando o PIC16F877 Para assimilarmos mais conhecimentos sobre o PIC 16F877, vamos praticar atravs do desenvolvimento de pequenos circuitos, para ligar/desligar LEDs e l botes. Isso suficiente para quem nunca programou um microcontrolador, para levar adiante um estudo mais abrangente e preciso sobre o assunto. Um bom conhecimento da linguagem C ou do Assembler de suma importncia para o desenvolvimento de projetos eficientes e seguros. Mas tudo precisa de um comeo. Aproveite, pois o comeo agora.Figura 4 - Circuito para piscar um LED

O circuito acima esquematiza a configurao bsica para fazer o PIC 16F877 funcionar eletricamente. Os capacitores C1 e C2 podem assumir valores entre 15 a 33pF e so usados em paralelo com o cristal de 4Mhz para estabiliz-lo. O pino 1 ligado ao +5v da fonte de alimentao atravs do resistor de 1K usado para resetar o PIC. O LED1 conectado ao pino 21 (RD2) ser controlado pelo programa mostrado no Fonte 1 logo abaixo: Dowload do Fonte 1.

Fonte 1 CCS Compiler - faz o LED da figura 4 piscar (uso de loop while() e delay_ms()) #include #use delay(clock=4000000) #fuses XT, PUT, NOWDT, NOBROWNOUT, NOLVP void main(void) { set_tris_d(0b00000000); //Todos os pinos da porta 'D' como sadas. while( true ) //Loop infinito. { output_high(pin_d2); delay_ms(1000); output_low(pin_d2); delay_ms(1000); } }

//Liga LED. //espera 1 segundo. //Desliga LED. //espera 1 segundo.

O programa Fonte 1 acima deve ser compilado e gravado no PIC 16F877 para controlar o circuito da Figura 4, fazendo com que o LED1 pisque em intervalos de 1 segundo. A funo set_tris_d(0b00000000); define todos os pinos da porta D como sadas. A funo output_high(pin_d2) liga o LED1, e output_low(pin_d2) desliga-o. Delay_ms(1000) mantm o LED1 aceso ou apagado por 1 segundo. While() entra num loop infinito para manter o programa em execuo. Dowload do Fonte 2.Fonte 2 - CCS Compiler - faz o LED da figura 4 piscar (uso do Timer0) #include #use delay(clock=4000000) #fuses XT, PUT, NOWDT, NOBROWNOUT, NOLVP #int_timer0 void MeuTimerPiscaLED() { static boolean PiscaLed; //para piscar o led. static int contador; //para contar o tempo de 1 segundo. set_timer0(131-get_timer0()); contador++; if(contador == 125) //Se contou 125 (1 segundo). { contador=0; //zera contagem. PiscaLed = !PiscaLed; //Inverte bit; output_bit(pin_d0, PiscaLed); //Liga/desliga LED. } } //---------------------------------------------------------------------//Programa principal. //---------------------------------------------------------------------void main(void) { set_tris_d(0b00000000); //Todos os pinos da porta 'D' como sadas. setup_timer_0(RTCC_INTERNAL | RTCC_DIV_64); //Define prescaler.

set_timer0(131); //Inicializa timer0 com 0 valor 131. enable_interrupts( global|int_timer0 ); //Habilita interrupes. while( true ) //Loop infinito - aguarda interrupo acontecer. { //Aqui pode ser executado o fluxo normal do programa //independente do Timer0. } }

O programa Fonte 2 acima faz o mesmo que o programa Fonte 1. A diferena que este usa o Timer0, para fazer o LED1 piscar independente do fluxo normal no corpo do programa principal main(). Ou seja, como se dois programas estivessem sendo executados ao mesmo tempo. Quanto mais veloz for o cristal usado, melhor ser a performance da execuo das instrues pelo PIC. Os parmetros das funes setup_timer_0() e set_timer0() definem o prescaler e o valor que inicializa o Timer0. Os parmetros da funo enable_interrupts() habilitam o sistema de interrupo geral e a interrupo do Timer0.Figura 5 - Circuito para l o estado de um boto e acender um LED

O circuito acima usa dois pinos do PIC: o pino 27 (RD4) conectado ao boto (interruptor K) e ligado a um resistor pull-up para manter a estabilidade do sinal de entrada no pino. O pino 21 (RD2) usado para controlar o acendimento do LED1. Para comprovar o funcionamento do circuito, o boto (interruptor K) dever ser pressionado para que o LED1 acenda e, solto para que o mesmo se apague. Dowload do Fonte 3.Fonte 3 - CCS Compiler - Programa para gravar o PIC e controlar o circuito da Figura 5

#include #use delay(clock=4000000) #fuses XT, PUT, NOWDT, NOBROWNOUT, NOLVP //--------------------------------------------------------------------------//Programa Principal. //--------------------------------------------------------------------------void main(void) { boolean TravaPress = true; //Inicia varivel para controle do boto. set_tris_d(0b00010000); //somente o pino d4 da porta 'D' como entrada. while( true ) //Loop infinito. { if( input(pin_d4) == 0) //Se leu '0' (zero) o boto foi pressionado. { if(TravaPress == true) //Para executar o cdigo abaixo uma nica vez. { TravaPress = false; //Nega a condio acima. output_high(pin_d2); //Liga LED. delay_ms(15); //bounce - retardo para eliminar rudo ao pressionar boto. } }else{ //Se o boto foi solto. if(TravaPress == false) //Para executar o cdigo abaixo uma nica vez. { TravaPress = true; //Nega a condio acima. output_high(pin_d2); //Desliga LED. delay_ms(15); //bounce - retardo para eliminar rudo ao pressionar boto. } } } }

O programa acima deve ser compilado para gravar o PIC 16F877 e controlar o circuito da Figura 5. O funcionamento simples: quando o boto (interruptor K) mantido pressionado, o LED1 permanece aceso. Quando o interruptor solto o LED1 apagado. J o programa funciona assim: enquanto input(pin_d4) retorna o valor '0' (boto pressionado) a varivel TravaPress se torna false, e a funo output_high(pin_d2) liga o LED1. Mesmo que o boto permanea pressionado as funes dentro do corpo do if(TravaPress == true){ } no so mais processadas. Quando o boto (interruptor K) for solto, a funo input(pin_d4) retornar um valor '1' fazendo com que as instrues dentro do corpo { } do 'else' sejam processadas, executando a funo output_low(pin_d2) desligando o LED1.

Figura 6 - Conectando o PIC 16F877 na porta RS232 do PC

O circuito acima conectado porta RS232 do computador por meio do driver Max232. O LED1 ligado ou desligado atravs do computador. O boto (interruptor K) usado para enviar uma string atravs da RS232 quando o mesmo pressionado ou solto.

Figura 7 - Conectando o PIC 16F877 no Bus USB atravs do FT232BM

O circuito da Figura 7 acima funciona da mesma forma que o circuito da Figura 6, com a nica diferena de que este acima funciona conectado ao Bus USB, atravs do circuito Bus powered da Aula 3 - Figura 5, que usa o chip FT232BM. Dowload do Fonte 4.Fonte 4 - CCS Compiler - Programa para controlar os circuitos das Figuras 6 e 7. #include #use delay(clock=4000000) #fuses XT, PUT, NOWDT, NOBROWNOUT, NOLVP #use rs232(BAUD=9600, parity=N, BITS=8, XMIT=pin_c6, RCV=pin_c7) //--------------------------------------------------------------------------//Interrupo de recebimento de caracter pela UART. //--------------------------------------------------------------------------#int_rda void Serial_Detecta_Car() { char ch; ch = getc(); //Pega o caracter no registrador da UART. if( ch == 'l' ) //Se recebeu o caracter L. { output_high(pin_d1); //Liga LED. } if( ch == 'd' ) //Se recebeu o caracter D. { output_low(pin_d1); //Desliga LED. } } //---------------------------------------------------------------------------

//Programa Principal. //--------------------------------------------------------------------------void main(void) { boolean TravaPress = true; //Inicia varivel para controle do boto. enable_interrupts(int_rda); //Habilita interrupo de recebimento. enable_interrupts(GLOBAL); //Habilita registrador de interrupo. set_tris_d(0b00000100); //somente o pino 2 da porta 'D' como entrada. while( true ) //Loop infinito. { if( input(pin_d2) == 0) //Se leu '0' (zero) o boto foi pressionado. { if(TravaPress == true) //Para executar o cdigo abaixo uma nica vez. { TravaPress = false; //Nega a condio acima. printf("Boto pressionado.\r\n"); //Envia para a porta rs232. delay_ms(15); //bounce - retardo para eliminar rudo ao pressionar boto. } }else{ //Se o boto foi solto. if(TravaPress == false) //Para executar o cdigo abaixo uma nica vez. { TravaPress = true; //Nega a condio acima. printf("Boto solto.\r\n"); //Envia para a porta rs232. delay_ms(15); //bounce - retardo para eliminar rudo ao pressionar boto. } } } }

O programa acima funciona de forma semelhante ao do Fonte 3, mas com algumas diferenas: o LED1 aceso quando o caracter 'l'-ligado for enviado pelo computador, tanto pela RS232 como pelo Bus USB. Esse LED apagado quando for enviado o caracter 'd'-desligado. A leitura desses caracteres feita pela funo getc() que l um caracter atravs do buffer do USART do PIC 16F877. Quando o boto (interruptor K) for pressionado, a string "Boto pressionado.\r\n" enviada ao computador atravs do USART, pela funo printf(). Quando for solto, enviada a string "Boto solto.\r\n". Aps a compilao, use o programa Fonte 4 para gravar o PIC16F877 nos circuitos da Figura 6 e da Figura 7. Na prxima aula iremos usar o MPLAB da Microchip , o compilador da CCS e uma placa para gravar o PIC 16F877. Instalando o CCS C Compiler (verso Trial Evaluation 30 dias)

Nesta aula iremos aprender a gravar um programa escrito na linguagem C, dentro de um microcontrolador PIC16F877 para que o mesmo possa controlar nossos circuitos. Mas para isso necessrio termos em mos as ferramentas necessrias para que possamos executar esta tarefa. Uma dessas ferramentas o compilador, que converte o cdigo escrito na linguagem C, num cdigo de mquina (seqncia lgica de endereos de memria e instrues internas prprias do microcontrolador). Para essa tarefa iremos usar o compilador C da CCS (demo), onde podemos us-lo por 30 dias gratuitamente (funciona somente com os PICs: 16F877, PIC16C544 e 18F458 com no mximo 2K de cdigo de programa). A verso completa trabalha com muitos modelos de PIC, e explora toda a sua capacidade de memria. possvel editar o cdigo fonte e compilar usando o ambiente IDE do prprio compilador, s no h um recurso para a gravao do PIC. Iremos usar o ambiente MPLAB IDE da Microchip para editar o cdigo fonte e gravar o PIC. O MPLAB chama automaticamente o compilador PCW da CSS para compilar o cdigo, desde que configuremos o mesmo adequadamente. Dessa forma s precisamos de um nico ambiente para: editar, compilar e gravar o PIC, tornando mais fcil a tarefa de se programar um PIC. Veja na figura abaixo o processo para se gravar o PIC16F877:Figura 1 - Processo de edio, compilao e gravao do PIC 16F877

No MPLAB, aps a edio do cdigo fonte, o processo de compilao e gravao automtico. Aps alguns clique do mouse, o PIC estar gravado e pronto para ser inserido em nosso circuito. Aps o processo de compilao gerado um arquivo com o mesmo nome do arquivo fonte, mas com a extenso (.HEX) (arquivo compilado, prprio para ser gravado no PIC pelo dispositivo gravador).Figura 2 - Cdigo Fonte (.C) Figura 3 - Cdigo compilado (.HEX)

#include #use delay(clock=4000000) #fuses XT, PUT, NOWDT, NOBROWNOUT, NOLVP void main(void) { set_tris_d(0b00000000); //Todos sadas. while( true ) //Loop infinito. { output_high(pin_d2); //Liga LED. delay_ms(1000); //espera 1 segundo. output_low(pin_d2); //Desliga LED. delay_ms(1000); //espera 1 segundo. } }

:1000000000308A00192800002230840000080319FB:1000100018280130F800F701F70B0C28F80B0B2813 :100020004A30F700F70B122800000000800B092867 :10003000003484011F30830583161F149F141F157D :100040009F11003088000811831208150430A100A8 :10005000FA30A2000420A10B28288316081183126D :1000600008110430A100FA30A2000420A10B3328AB :0600700083162328630043 :02400E00313F40 :00000001FF ;PIC16F877

Siga os passos abaixo para fazer download e instalar o compilador PCWH da CCS 1 - Acesse o site da CCS em: www.ccsinfo.com; 2 - No menu da pgina da CCS selecione o item Compiler Information e depois clique no item Free Demo; 3 - Aps a abertura da pgina, preencha seu nome no campo Your Name, depois clique no boto Download Demo. Salve o arquivo demoupd.exe em seu disco rgido; 4 - Aps o download, d duplo clique no arquivo demoupd.exe para abrir o programa de instalao. Siga as instrues nas telas do programa instalador. Obs.: O compilador instalado na pasta: \Arquivos de programas\PICC

Figura 4 - Tela do compilador PCW C da CCS

Para agregar o compilador PCW ao MPLAB, siga os prximos passo... Obs.: Para que o MPLAB (verso 6 ou superior) consiga identificar o compilador PCW, necessrio instalar um Plug-in (programa de recurso auxiliar) no seu computador.

Siga os passos abaixo para fazer download e instalar o Plug-In

1 - Acesse novamente o site da CCS em: www.ccsinfo.com; 2 - No menu da pgina da CCS selecione o item Customer Download e depois clique no item MPLAB 6.x Plugin-In; 3 - Aps a abertura da pgina, v at a seo MPLAB Plug-In e clique no link MPLAB Plug-in. Salve o arquivo mplab-ccs-plugin-install.exe em seu disco rgido; 4 - Aps o download, d duplo clique no arquivo mplab-ccs-plugin-install.exe para abrir o programa de instalao. Siga as instrues nas telas do programa instalador. Siga os passos abaixo para fazer download e instalar o MPLAB IDE Obs.: antes de instalar uma nova verso do ambiente MPLAB, remova do sistema quaisquer verses antigas do mesmo.

1 - Acesse o site da Microchip em: www.microchip.com; aps a abertura da pgina, clique no menu Products e depois no submenu Development; 2 - Na pgina da Microchip, clique no link: MPLAB IDE e faa download da verso completa MPLAB IDE v7.21 ou superior; 4 - Aps o download, d duplo clique no arquivo MP721_full.zip para abrir o programa de instalao. Siga as instrues nas telas do programa instalador at concluir.Figura 5 - Tela inicial do programa de instalao do MPLAB Tools

Para continuar a instalao clica-se no boto Next >...

Criando um novo projeto no MPLAB IDE para o microcontrolador PIC16F877 Como exemplo de um novo projeto, faa download do Fonte1.zip (Aula 15). Aps o download, faa a descompactao do mesmo:

Figura 6 - Pasta Fonte1 aps descompactao

1 - No Windows, clique em: Iniciar-->Programas-->Microchip-->MPLAB IDE v7.21--> MPLAB IDE. Ao abrir o ambiente MPLAB, siga os prximos passos: 2 - Clique no menu Project do MPLAB v7.21;Figura 7 - Ambiente MPLAB

Aps clicar no menu Project ser exibida a tela abaixo:

Figura 8 - Tela inicial do Wizard para instalar o MPLAB

Clique no boto Avanar > para passar para o prximo passo... 3 - No campo Device da prxima tela, selecione o modelo do PIC a ser usado no projeto. No nosso caso selecione o PIC16F877;Figura 9 - Seleo do modelo de PIC

Clique no boto Avanar > para passar para o prximo passo...

4 - No campo Active Toolsuite da tela abaixo, selecione CCS C Compiler for PIC12/14/16/18. No campo Toolsuite Contents selecione CCS C Compiler (ccsc.exe]. J no campo Location, clique no boto Browse... para localizar a pasta PICC, selecionado em seguida o programa Ccsc.exe;Figura 10 - Seleo do compilador da CCS

preciso que o Plug-In tenha sido instalado para que aparea o nome do compilador CCS nos campos 1 e 2. Depois clique no boto Avanar > para passar para o prximo passo... 5 - Na prxima tela clique no boto Browse...

Figura 11 - Seleo da pasta onde sero gravados os arquivos do projeto

Aps clicar no boto Browse... ser exibida a tela abaixo para localizar a pasta onde ser gravado o novo projeto. No nosso caso iremos selecionar a pasta Fonte1, aquela que foi criada anteriormente quando descompactamos o arquivo Fonte1.zip.Figura 12 - Procurando a pasta

Clique no boto OK e depois no boto Avanar > para passar para o prximo passo...

6 - Na prxima tela, selecione o arquivo Fonte1.c na pasta Fonte1. Depois clique no boto Add >> para adicionar o arquivo fonte ao novo projeto;Figura 13 - Adicionando um arquivo fonte ao projeto

Clique no boto Avanar > para passar para o prximo passo...

Figura 14 - Tela de concluso da criao do projeto

Clique no boto Concluir para finalizar a criao do projeto.Figura 15 - Janela do MPLAB mostrando os arquivos do projeto e o editor de cdigo fonte

A partir de agora o compilador PCW da CCS est agregado ao ambiente MPLAB, sendo possvel compilar e gerar o arquivo Fonte1.hex. Na prxima aula iremos configurar o MPLAB para usar o gravador McFlash da Mosaico conectado porta serial para gravar o PIC 16F877.

Obs.: Lembre-se de salvar o projeto clicando no menu File-->Save All, para aproveit-lo na prxima aula. Continua na prxima aula...

Testando os circuitos da Aula 15Agora que aprendemos a usar as ferramentas bsicas para trabalhar com o PIC16F877, poderemos testar os exemplos da Aula 15. Para facilitar nossos testes iremos usar o programa RcomSerial. A verso desse programa, disponvel aqui para download, suporta velocidades de at 921.600 pbs. Essa velocidade ser configurada quando formos testar os conversores RS485 e interfaces USBUSB (laplink PC-PC). Nesta aula, o programa RComSerial ser usado simplesmente para testar os exemplos. Nas aulas seguintes iremos desenvolver programas especficos para cada projeto. Para testar os circuitos das Figuras 6 e 7 da Aula 15, siga os passos abaixo: 1 - Compile o cdigo Fonte 4 da Aula 15 e grave-o no PIC16F877; 2 - Conecte um dos circuitos das Figuras 6 ou 7 da Aula 15 ao computador; 3 - Faa download do RComSerial clicando aqui;

4 - Aps o download, descompacte o arquivo RComSerial.zip e rode o programa RComSerial.exe, configurando-o conforme detalhes na Figura 1. Obs.: Se o driver VCP ainda no foi instalado, ou no saiba qual a Porta COMx deve ser configurada no RComSerial, retorne a Aula 8 para obter informaes.

Figura 1 - Tela do RComSerial.exe para testar os circuitos das Figuas 6 e 7 / Aula 15

Aps ter configurado o RComSerial conforme a Figura 1 acima, clique no boto "Abrir Porta". Na janela "TX-Enviar Mensagem:" digite a letra 'l' para ligar o LED1 do circuito, e 'd' para deslig-lo. No circuito, pressione o Interruptor K para enviar a mensagem "Boto pressionado." caixa "RX-Recebe Mensagem:" do RComSerial. Ao soltar o Interruptor K, enviada a mensagem "Boto solto.".

Projetos Prticos - ConversoresAtravs de uma interface bus-powered ou self-powered baseadas no chipset USB FT232BM, possvel fazer vrios tipos de interfaceamento. O objetivo do chipset FT232BM converter sinais USB em Serial (TTL). Se desejarmos criar um conversor USBRS232 para conectar dois PCs ou outro aparelho, temos que criar um circuito usando um componente driver, que converta os sinais seriais (TTL), em RS232. Da mesma forma que possvel converter os sinais seriais TTL em RS232, possvel tambm converter em RS485, RS422, etc. Vamos agora analisar alguns conversores RS232 e RS485:

Conversores RS232O circuito da Figura 2 abaixo usa um driver MAX213CAI ou SP213EHCA para converter os sinais seriais TTL do FT232BM em sinais seriais padro RS232. A diferena entre os dois est na velocidade. O SP213EHCA permite velocidades de at 500k baud, enquanto que o MAX213CAI suporta no mximo 115.200 baud. Os dois so compatveis pino a pino. Se a velocidade no for um fator importante para o projeto, o MAX213CAI uma alternativa mais em conta. Observe que esses drivers disponibilizam todos os sinais de Handshaking (RTS, CTS, DTR, DSR, DCD e RI), necessrios para se projetar circuitos de Modem ou RF modem, entre outros.Figura 2 - Conversor USBRS232 (Full) usando o MAX213CAI ou SP213EHCA

Se o objetivo no for o de criar circuitos de Modem que utilizam todos os sinais de handshaking, possvel usar um simples MAX232 para converter os sinais TTL, em sinais padro RS232. O MAX232 pode operar numa velocidade de at 115.200 baud. Ele dispe de dois sinais de handshaking (RTS e CTS), usados por algumas interfaces seriais para controle de fluxo por hardware.

Figura 3 - Conversor USBRS232 (Parcial) usando o MAX232

Conversores RS485Interfaces USB e RS232 no foram projetadas para transmitir dados a longas distncias. O padro RS232 estabelece um cabo em torno de 15m de distncia entre dois pontos. Quanto maior for a distncia e a velocidade, mais suscetvel a erros fica a transmisso. A distncia de um cabo USB no pode passar dos 5m, distncias maiores tornam o sistema invivel. Para solucionar esse problema poderemos usar drivers RS485 para transmitir dados a uma distncia de at 1200m. O Padro RS485 estabelece apenas caractersticas eltricas. Usa somente 2 fios; trabalha em modo half-duplex; multiponto (at 32 ns) e, voltagem diferencial. A velocidade numa linha RS485 pode chegar at 10Mbps dependendo do driver utilizado. um padro largamente usado em automao industrial por ser imune a rudos. A implementao do protocolo de comunicao fica por conta do usurio, o padro RS485 no especifica um. Sendo assim, uma interface RS485 de um fabricante pode no "conversar" com a de um outro. A no ser que elas implementem o mesmo protocolo.Figura 4 - Circuito RS485

O esquema acima mostra um circuito RS485 ponto-a-ponto para transmisso de dados a uma distncia de at 1200m usando dois drivers MAX485. O CI MAX485 suporta at 2,5Mbps de velocidade. O pino 2 do MAX485 usando para habilitar a recepo de dados, j o pino 3 usado para habilitar a transmisso. Quando aplicado um sinal em nvel lgico baixo (0) ao pino 2 (habilita receptor), a linha RX fica preparada para receber dados. Quando um sinal em nvel lgico alto (1) aplicado ao pino 3 (habilita transmissor), dados podem ser transmitidos pela linha TX. Como o padro RS485 half-duplex (transmisso e recepo no ocorrem simultaneamente), comum conectar o pino 2 com o pino 3 transformando-os em um nico pino (te-transmite enable). Quando for aplicado nvel lgico 1 a linha (te), o transmissor (pino 3) habilita a linha TX, e o receptor (pino 2) desabilita a linha RX. No fim do cabo mais distante do circuito mestre, deve ser colocado um resistor de terminao de 120 ohm, em paralelo com as duas linhas de dados TX/RX.Figura 5 - Interface RS485 entre dois circuitos FT232BM

O circuito acima um conversor USB/TTLRS485TTL/USB para se transmitir dados entre dois Host USB (PC-PC). O FT232BM usa o pino 16TXDEN para habilitar a transmisso, sendo transparente para o software. Ou seja, quando nosso programa transmite dados via FT232BM, este habilita (pe em nvel alto 1) a linha (te) automaticamente, habilitando a transmisso no CI RS485. Assim que for finalizada a transmisso dos dados, o FT232BM pe o pino 16-TXDEN em nvel lgico 0, fazendo com que o MAX485 fique preparado para receber dados (linha "te" em nvel 0). Para testar o circuito acima usando um nico computador, faa assim: conecte dois circuitos FT232BM e depois instale seus driveres VCP. Rode duas cpias do RComSerial.exe e configure as duas com a mesma velocidade (460.800 baud). As portas tem que ser diferentes (veja no Gerenciador de Dispositivos do Windows, quais esto disponveis aps a instalao dos drivers VCP).Figura 6 - Cpia (1) do programa RComSerial Figura 7 - Cpia (2) do programa RComSerial

Figura 8 - Interface RS485 entre o FT232BM e um PIC16F877-20/P

O esquema acima usa o padro RS485 para transmitir dados a longas distncias entre um circuito baseado no chipset FT232BM e um microcontrolador PIC16F877-20/P. O PIC 16F877-20/P pode ser configurado para trabalhar com um driver do tipo MAX485 como se fosse uma comunicao RS232. Para isso preciso especificar um parmetro a mais na funo #use rs232(). Esse parmetro o ENABLE, usado para definir um pino para habilitar a transmisso numa linha RS485. Veja abaixo como us-lo na funo: #use delay(clock=20000000) //20Mhz. #use rs232(BAUD=256000, parity=N, BITS=8, XMIT=pin_c6, RCV=pin_c7, ENABLE=pin_c5) Obs. Usando um cristal de 20Mhz com o PIC16F877-20/P, possvel estabelecer uma transmisso RS485 numa velocidade de at 256.000 bps. Para testar o circuito da Figura 8, siga os passos abaixo:

1 - Confeccione o circuito da Figura 8 (bus-porwered ou self-powered), substituindo o PIC16F877-20/P que consta no circuito B, pelo circuito da figura abaixo, conectando-o linha RS485 do mesmo circuito B:Figura 9 - Esquema detalhado da configurao do PIC16F77-20/P do circuito B da Figura 8

2 - Compile e grave no PIC16F877-20/P, o programa abaixo: Dowload do Programa 1.Programa 1 - Cdigo para gravar o PIC16F877-20/P #include #use delay(clock=20000000) //20Mhz. #fuses HS, PUT, NOWDT, NOBROWNOUT, NOLVP #use rs232(BAUD=256000, parity=N, BITS=8, XMIT=pin_c6, RCV=pin_c7, ENABLE=PIN_c5) //Comunicao RS485. //--------------------------------------------------------------------------//Interrupo de recebimento de caracter pela UART. //--------------------------------------------------------------------------#int_rda void Serial_Detecta_Car() { char ch; ch = getc(); //Pega o caracter no registrador da UART. if( ch == 'l' ) //Se recebeu o caracter L. { output_high(pin_d1); //Liga LED. } if( ch == 'd' ) //Se recebeu o caracter D. { output_low(pin_d1); //Desliga LED. }

} //--------------------------------------------------------------------------//Programa Principal. //--------------------------------------------------------------------------void main(void) { boolean TravaPress = true; //Inicia varivel para controle do boto. enable_interrupts(int_rda); //Habilita interrupo de recebimento. enable_interrupts(GLOBAL); //Habilita registrador de interrupo. set_tris_d(0b00000100); //somente o pino 2 da porta 'D' como entrada. while( true ) //Loop infinito. { if( input(pin_d2) == 0) //Se leu '0' (zero) o boto foi pressionado. { if(TravaPress == true) //Para executar o cdigo abaixo uma nica vez. { TravaPress = false; //Nega a condio acima. printf("Boto pressionado.\r\n"); //Transmite via rs485. printf("Teste de transmisso RS485.\r\n"); printf("Curso USB/Serial ROGERCOM.\r\n"); printf("www.rogercom.com.\r\n\r\n"); delay_ms(15); //bounce - retardo para eliminar rudo ao pressionar boto. } }else{ //Se o boto foi solto. if(TravaPress == false) //Para executar o cdigo abaixo uma nica vez. { TravaPress = true; //Nega a condio acima. printf("Boto solto.\r\n"); //Transmite via rs485. printf("Transmisso USBRS485\r\n"); printf("Microcontrolador PIC16F877-20/P.\r\n"); printf("FT232BM.\r\n\r\n"); delay_ms(15); //bounce - retardo para eliminar rudo ao pressionar boto. } } } }

3 - Rode o RComSerial em seu computador e configure-o assim: Porta: COM4 (verifique no Gerenciador de Dispositivos do Windows qual foi a porta criada pelo driver VCP); Velocidade: 256000 baud; Paridade: Nenhuma; Bits de dados: 8. Bits de parada: 1. 4 - Depois de configurado o RComSerial, clique no boto "Abrir Porta" para estabelecer comunicao;

5 - Para transmitir dados para o RComSerial, pressione e solte o Interruptor K no circuito.

Projetos Prticos - Interfaces foto-acopladasAs vezes preciso isolar eletricamente dois circuitos, seja para protege-los ou mesmo eliminar rudos. Se voc for projetar algum circuito para controle de dispositivos via Rede telefnica, preciso isol-lo, pois os circuitos de altas freqncias do computador geram um grande zumbido na Rede, inviabilizando projetos do tipo URA (Unidade de Resposta Audvel). Nas prximas figuras so mostradas 3 interfaces foto-acopladas usando o acoplador ptico 6N136. Este CI permite comutaes de at 1Mbps de velocidade. Os circuitos mostrados abaixo esto limitados a uma velocidade mxima de 128.000 bps. possvel tambm combinar estes circuitos numa linha RS485.Figura 10 - Circuito TX/RX foto-acoplado

O circuito acima pode ser usado para isolar eletricamente qualquer interface (USB/232TTL, RS232, RS485, entre outras) de uma maneira simples. possvel tambm adicionar mais CIs 6N136 para permitir mais linhas como as de handshaking da interface RS232 (RTS, CTS, DTR, DSR, DCD e RI). Os terminais de "Entrada" do circuito acima so usados para conectar uma linha TX, e os terminais de "Sada" para conectar uma linha RX. Lembre-se que o circuito acima est limitado a uma velocidade mxima de 128.000 bps.

Figura 11 - Interface TX/RX foto-acoplada entre um circuito FT232BM e um PIC16F877

Figura 12 - Interface TX/RX foto-acoplada entre dois circuitos FT232BM

A partir da prxima aula comearemos a desenvolver alguns projetos prticos para assimilarmos os ensinamentos passados no curso.

Programando atravs das funes da dll FTD2XXEssa aula explora muita das funes da dll FTD2xx para acesso direto ao Bus USB. A partir de suas funes possvel saber se um dispositivo FT232BM est conectado ao bus USB; quantos esto; obter os descritores, como: nome do fabricante, identificao do fabricante, nmero serial; enviar e receber dados; gravar, l e apagar a EEPROM para personalizar o dispositivo. H tambm um conjunto de funes usadas para manipular a rea de memria EEPROM do usurio (espao restante da EEPROM usado pelo usurio para

gravar algumas configuraes do seu circuito, se desejar). A funo FT_EE_UASize( ) retorna o tamanho em bytes do espao livre do usurio. As funes que manipulam a rea livre do usurio no interferem nos dados armazenados no restante da EEPROM. Quanto menos caracteres escrever na descrio do produto, maior ser a rea livre do usurio. H funes que abrem o dispositivo pelo seu nmero (0 para o primeiro conectado, 1 para o segundo...), pelo Local ID, pela Descrio do Produto ou pelo Nmero Serial do mesmo. H tambm funes para fazer o FT232BM trabalhar de forma paralela (8 pinos de I/O) no modo Bit Bang. Dessa forma possvel controlar at 8 entradas ou sadas sem a necessidade de usar um microcontrolador. A velocidade das entradas/sadas pode ser configurada para trabalhar em alta velocidade. A FTD2xx.DLL disponibiliza um conjunto de funes para se trabalhar com o FT232BM, compatveis com quelas da API do Windows que d acesso Porta Serial, mas prprias para controlar o FT232BM. Estas funes usam o pr-fixo FT_W32 e esto detalhadas na guia de programao da FTDI: D2XXPG30.pdf. Observao: Para fazer os exemplos dessa aula necessrio ter montado um dispositivo FT232BM configurado como Bus-powered ou Self-powered; Se em seu computador esto instalados os drivers VCP, remova-os atravs do Adicionar ou remover programas do Painel de Controle do Windows; Baixe do site da FTDI os drivers FTD2xx mais atuais que encontrar, ou clique aqui para baixar a partir do curso. Conecte o dispositivo FT232BM numa Porta USB livre do PC. Siga normalmente o processo de instalao.

Os exemplos esto escritos em C++Builder e Deplhi. C++Builder: Para compilar todos os exemplos em C++ usamos a biblioteca FTD2xx.LIB e o arquivo cabealho FTD2xx.H. Se seu compilador C++ indicar uma incompatibilidade, use o programa implib.exe que acompanha seu compilador para criar uma FTD2xx.LIB a partir da FTD2xx.DLL; assim: C:\Implib.exe FTD2xx.LIB FTD2xx.DLL O comando acima cria o arquivo FTD2xx.LIB usado para compilar os exemplos em C++ Delphi: Em Delphi s precisamos adicionar o arquivo FTD2xxUnit.pas para compilar os exemplos. No se preocupem, pois em cada pasta dos exemplos esto as bibliotecas necessrias para a compilao.

Segue abaixo a descrio de cada funo usada em nossos exemplos:

Funes Clssicas da FT2DXXFT_ListDevices( )Obtm informaes atualmente relativa aos dispositivos conectados. Esta funo devolve o nmero de dispositivos conectados, a descrio, o nmero serial e o ID local dos dispositivos conectados. FT_STATUS FT_ListDevices(PVOID pvArg1, PVOID pvArg2, DWORD dwFlags) Parmetros: pvArg1 - O significado depende de dwFlags. pvArg2 - O significado depende de dwFlags. dwFlags - Determina o formato da informao retornada. Retorna: Um valor FT_OK se teve sucesso. Qualquer outro valor retornado indica que a funo no teve xito. Em sua forma mais simples, pode ser usado para devolver o nmero de dispositivos conectados atualmente. Se a constante de bit FT_LIST_NUMBER_ONLY fixada em dwFlags, o parmetro pvArg1 interpretado como um ponteiro do tipo DWORD para armazenar o nmero de dispositivos atualmente conectados. Pode ser usada para retornar informao do dispositivo. Se bit FT_OPEN_BY_SERIAL_NUMBER setado em dwFlags, ser retornado uma string como o Nmero de Srie; se bit FT_OPEN_BY_DESCRIPTION setado em dwFlags, ser retornado uma string com a Descrio do Produto; se FT_OPEN_BY_LOCATION setado em dwFlags, o Local ID ser retornado; se nenhum destes bits for setados em dwFlags, por padro, ser retornado o nmero de Srie do Dispositivo. Pode ser usada para retornar informao string para um nico dispositivo. Se FT_LIST_BY_INDEX e FT_OPEN_BY_SERIAL_NUMBER ou FT_OPEN_BY_DESCRIPTION so setados em dwFlags, o parmetro pvArg1 interpretado como o ndice do dispositivo, e o parmetro pvArg2 interpretado como um ponteiro para um buffer que contm uma string apropriada. ndices so iniciados em 0, e o cdigo de erro FT_DEVICE_NOT_FOUND devolvido para um ndice invlido. Pode ser usada para retornar informao string de todos dispositivos conectados. Se FT_LIST_ALL e FT_OPEN_BY_SERIAL_NUMBER ou FT_OPEN_BY_DESCRIPTION so setados em dwFlags, o parmetro pvArg1 interpretado como um ponteiro para uma array de ponteiros de buffers para conter a string apropriada e, o parmetro pvArg2 interpretado como um ponteiro para uma varivel do tipo DWORD, onde armazenado o nmero de dispositivos atualmente conectados. Note que para pvArg1, a ltima entrada na ordem de ponteiros para array dever ser um ponteiro NULL. O local ID de um dispositivo devolvido se FT_LIST_BY_INDEX e FT_OPEN_BY_LOCATION so setados em dwFlags. Neste caso o parmetro pvArg1 interpretado como o ndice do dispositivo, e o parmetro pvArg2 interpretado como um ponteiro para uma varivel de tipo DWORD para conter o local ID. ndices so baseados em zero, e o cdigo de erro FT_DEVICE_NOT_FOUND retornado para um ndice invlido. So retornados os Local ID de todos os dispositivos conectados se FT_LIST_ALL e FT_OPEN_BY_LOCATION so setados em dwFlags. Neste caso, o parmetro pvArg1 interpretado como um ponteiro para a um array de variveis do tipo DWORD para conter os Local ID, e o parmetro pvArg2 interpretado como um ponteiro para uma varivel DWORD para armazenar o nmero de dispositivos atualmente conectados.

FT_Open() - Exemplos 1, 2, 3e4 Delphi C++

FT_Open( )Abre um dispositivo e retorna um identificador (handle) para ser usado pela maioria das funes. FT_STATUS FT_Open(int iDevice, FT_HANDLE *ftHandle) Parmetros: iDevice - Zero (0) para abrir o primeiro dispositivo plugado, um (1) para o segundo e, para mais, siga a seqncia numrica. ftHandle - Ponteiro para uma varivel de tipo FT_HANDLE onde a Handle ser armazenado. Este handle deve ser usado pelas funes para ter acesso ao dispositivo. Retorna: Um valor FT_OK se teve sucesso. Qualquer outro valor retornado indica que a funo no teve xito. FT_Open() - Exemplo 1 Delphi C++

FT_OpenEx( )Abre um dispositivo e retorna um identificador (handle) para ser usado pela maioria das funes. FT_STATUS FT_OpenEx(PVOID pvArg1, DWORD dwFlags, FT_HANDLE *ftHandle) Parmetros: pvArg1 - O significando depende de dwFlags, mas regularmente ser interpretado como um ponteiro a uma string terminada em NULL. dwFlags - FT_OPEN_BY_SERIAL_NUMBER, FT_OPEN_BY_DESCRIPTION ou FT_OPEN_BY_LOCATION. ftHandle - Ponteiro para uma varivel de tipo FT_HANDLE onde a Handle ser armazenado. Este handle deve ser usado pelas funes para ter acesso ao dispositivo. O significado de pvArg1 depende de dwFlags: se dwFlags setado em FT_OPEN_BY_SERIAL_NUMBER, pvArg1 interpretado com