Você está na página 1de 62

www.mecatronicadegaragem.blogspot.

com

KARLA LUCIANA MORAES FREITAS RODRIGO TAVARES CONDUR

CONTROLADOR DE RELS UTILIZANDO A PORTA UNIVERSAL SERIAL BUS - USB

BELM 2006

www.mecatronicadegaragem.blogspot.com

UNIVERSIDADE DA AMAZNIA UNAMA CCET CENTRO DE CINCIAS EXATAS E TECNOLGICAS BACHARELADO EM CINCIA DA COMPUTAO

KARLA LUCIANA MORAES FREITAS RODRIGO TAVARES CONDUR

CONTROLADOR DE RELS UTILIZANDO A PORTA UNIVERSAL SERIAL BUS - USB

Trabalho de Concluso de Curso apresentado ao Centro de Cincias Exatas e Tecnolgicas, da Universidade da Amaznia, como requisito parcial para obteno do grau de Bacharel em Cincia da Computao, sob a orientao do Prof. MSc. Edson do Socorro Cardoso da Silva.

BELM 2006

www.mecatronicadegaragem.blogspot.com

UNIVERSIDADE DA AMAZNIA - UNAMA CCET CENTRO DE CINCIAS EXATAS E TECNOLGICAS BACHARELADO EM CINCIA DA COMPUTAO

KARLA LUCIANA MORAES FREITAS RODRIGO TAVARES CONDUR

CONTROLADOR DE RELS UTILIZANDO A PORTA UNIVERSAL SERIAL BUS - USB

Dissertao apresentada para obteno parcial do grau de Bacharel em Cincia da Computao

Banca Examinadora: _______________________________________ _______________________________________ _______________________________________

BELM 2006

www.mecatronicadegaragem.blogspot.com

Dedico este projeto a Deus e a meus pais, que me deram fora e coragem para enfrentar as dificuldades e fraquezas por quais passei. Karla Luciana Moraes Freitas

Dedico esse projeto a todos meus amigos, familiares, ao meu orientador, banda Midrase e principalmente ao meu pai e minha me que me aturaram todos esses anos em prol de um futuro decente para mim. Rodrigo Tavares Condur

www.mecatronicadegaragem.blogspot.com

AGRADECIMENTO

Primeiramente a Deus, por me dar fora, coragem e sabedoria; aos meus pais, por patrocinarem toda minha graduao e estarem sempre ao meu lado dando-me foras para prosseguir, principalmente no momento em que minhas foras j no existiam mais e s persistia a vontade de desistir; aos meus amigos particulares e da graduao, por termos divido nestes anos de graduao nossas tristezas, alegrias, angstias, certezas, dvidas e vitrias; e claro ao meu Orientador MS. Prof Edson do Socorro Cardoso da Silva, que foi a pessoa fundamental neste projeto. Karla Luciana Moraes Freitas

Agradeo a toda minha famlia pelo apoio, nesta estrada percorrida com muita luta; a meus amigos, minha banda e minha namorada. Rodrigo Tavares Condur

www.mecatronicadegaragem.blogspot.com

Uma cerveja antes do almoo muito bom para ficar pensando melhor.
Chico Science

www.mecatronicadegaragem.blogspot.com

RESUMO

O presente trabalho descreve o desenvolvimento de um sistema controlador de rels, utilizando o barramento USB, onde atravs de um aplicativo em um micro-computador possvel fornecer (ou cortar) corrente a um dispositivo eltrico qualquer, como exemplo uma lmpada de 12 V, atravs de um rel. Para que a comunicao atravs do barramento seja executada, necessrio um chipset (FT232BM) que interprete os sinais gerados pelo software e entregue strings de comando a um microcontrolador (PIC 16F877) que far a verificao do status do rel para ativar ou desativar o presente dispositivo eltrico.

Palavras-chave: Programao C, Barramento USB, Chipset, PIC, Rel.

www.mecatronicadegaragem.blogspot.com

ABSTRACT

The present work describes the development of a controlling relays system, using the universal serial bus - USB, where through a microcomputer application it is possible give (or cut) current to some electric device, for example a 12 V lamp, through a relay. So that this communication through this bus it is necessary a chipset (FT232BM) to interprets the signals generated by software and it give command strings to a microcontroller (PIC 16F877) that will make the verification of relays status to set or not the present electric device.

Key Words: C Programming, Universal Serial Bus, Chipset, PIC, Relay.

www.mecatronicadegaragem.blogspot.com

LISTA DE SIGLAS

CPU

- Central Processor Unit

EEPROM - Erasable Programmable Read-only Memory EPP FIFO FTDI LDO NZRI USB - Enhanced Parallel Port -First In / First Out - Future Technology Devices Ltd. - Low Drop Out - No Returne to Zero Inverted - Universal Serial Bus

www.mecatronicadegaragem.blogspot.com

LISTAS DE FIGURAS

Figura 1 Figura 2 Figura 3 Figura 4 Figura 5 Figura 6 Figura 7 Figura 8 Figura 9 Figura 10 Figura 11 Figura 12 Figura 13 Figura 14 Figura 15 Figura 16 Figura 17 Figura 18 Figura 19 Figura 20 Figura 21 Figura 22 Figura 23 Figura 24 Figura 25

Tipagem do cabo USB................................................................................. 18 Conector fmea srie A............................................................................ 18 Conector macho srie A........................................................................... 18 Conector fmea srie B............................................................................ 18 Conector macho srie B........................................................................... 18 Circuito eltrico genrico Bus-Powered...................................................... 20 Circuito eltrico genrico Self-Powered...................................................... 21 Pacotes de comunicao do Protocolo USB................................................ 23 Endpoint Out................................................................................................ 25 Endpoint In................................................................................................... 25 Pipe de mensagem e Controle...................................................................... 26 Chipset FT232BM....................................................................................... 29 Viso interna dos blocos do chipset FT232BM.......................................... 30 Pinagem do chipset FT232BM.................................................................... 31 Pinagem da memria 93C46........................................................................ 34 Circuito eltrico da memria 93C46 ligada ao chipset FT232BM............. 35 Configurao da interface Bus-Powered..................................................... 36 Configurao da interface Self-Powered..................................................... 36 PIC 16F877.................................................................................................. 38 Pinagem do PIC 16F877.............................................................................. 38 Tela de software controlador de rels.......................................................... 47 Arquivos necessrios para instalao do dispositivo................................... 58 Processo de edio, compilao e gravao do PIC 16F877....................... 59 Chipset FT232BM juntamente com um receptor USB srie B............... 60 Circuito do dispositivo controlador de rels............................................... 60

www.mecatronicadegaragem.blogspot.com

LISTA DE TABELAS Tabela 1 Tabela 2 Tabela 3 - Classe dos dispositivos..................................................................... 27 - Descrio da pinagem do Chipset FT232BM........................................... 31 - Descrio da pinagem da memria EEPROM.......................................... 34

www.mecatronicadegaragem.blogspot.com

LISTA DE CDIGOS
Cdigo 1 Cdigo 2 - Cdigo-fonte da programao do PIC...................................................... 40 - Software controlador de rel..................................................................... 47

www.mecatronicadegaragem.blogspot.com

SUMRIO

1 2 2.1 2.2 2.3 2.3.1 2.3.1.1 2.3.1.2

INTRODUO............................................................................................. 15 BARRAMENTO USB (UNIVERSAL SERIAL BUS).............................. 16 INTRODUO AO USB............................................................................... 16 ESTRUTURA ELTRICA DA USB............................................................ 17 PROTOCOLO USB........................................................................................ 22 Endpoints, Pipes, Descritores...................................................................... 24 Endpoints........................................................................................................ 24 Pipes................................................................................................................ 24

2.3.1.2.1 Stream.............................................................................................................. 25 2.3.1.2.2 Mensagens e controle...................................................................................... 25 2.3.1.3 2.4 3 3.1 3.2 3.3 Descritores....................................................................................................... 26 FUNCIONAMENTO DO PROJETO COM A USB...................................... 28 CHIPSET FT232BM..................................................................................... 29 PRINCIPAIS CARACTERSTICAS............................................................. 29 CONFIGURAO DA MEMRIA EEPROM............................................. 34 CONFIGURAO DAS INTERFACES BUS-POWERED E SELFPOWERED..................................................................................................... 35 4 4.1 4.2 4.2.1 4.3 MICROCONTROLADOR PIC 16F877. 37 CARACTERSTICAS DO PIC 16F877 37 PINAGEM.. 38 Definio da direo dos pinos de I / O....................................................... 39 PROGRAMAO DO MICROCONTROLADOR PIC............................... 39

www.mecatronicadegaragem.blogspot.com

5 5.1 5.2

DRIVER DO SOFTWARE CONTROLADOR DE RELS................... 45 FUNES DO FTD2XX.............................................................................. 45 LINGUAGEM DE PROGRAMAO APLICADA NO SOFTWARE CONTROLADOR DE RELS....................................................................... 46

6 6.1 6.2 6.3 7 8

DESENVOLVIMENTO PRTICO DO PROJETO................................. 57 INSTALAO DOS ARQUIVOS FTD2XX................................................ 57 DETALHAMENTO DA PROGRAMAO DO PIC 16F877..................... 58 CIRCUITO E FUNCIONAMENTO DO DISPOSITIVO.............................. 59 CONCLUSO............................................................................................... 61 REFERNCIAS BIBLIOGRFICAS....................................................... 62

www.mecatronicadegaragem.blogspot.com

1. INTRODUO

O objetivo deste trabalho criar um software capaz de interagir com um dispositivo eltrico, com intuito de cortar ou fornecer corrente eltrica a um dispositivo por meio de um rel, utilizando uma porta USB convencional de um microcomputador. Para que o objetivo seja atingido, foi necessrio desenvolver um software em C/C++ que utiliza bibliotecas da dll FTD2xx, os quais possuem suas prprias funes descritas no site do fabricante do chipset utilizado para comunicao USB, no caso deste projeto, o chipset FT232BM. O chip aps comunicao estabelecida enviar uma string que ser comparada em um microcontrolador, PIC 16F877, que por sua vez enviar a um driver que deve ativar ou no o fornecimento de corrente o dispositivo eltrico escolhido pelo usurio no software controlador de rels. Um sistema controlador de rels deste modelo pode alcanar grandes propores chegando podendo at utilizar tecnologia sem fio, controlando todo ou parte de uma residncia, empresa ou indstria, proporcionando a diminuio nos gastos em energia eltrica, j que atravs de um computador, pode-se controlar vrios dispositivos, de forma a se monitorar o tempo timo que cada dispositivo ficar ligado.

www.mecatronicadegaragem.blogspot.com

2 BARRAMENTO USB (Universal Serial Bus)

O barramento USB o dispositivo de hardware que ser usado para interligar a placa controladora de rels CPU, que portar um software gerenciador de estados nos atuadores interligados placa.

2.1 INTRODUO AO USB

Quando o assunto tecnologia de ponta na rea de eletrnicos, atualmente o barramento USB estar em destaque. Este tipo de tecnologia est presente em muitos dispositivos disponveis no mercado como: aparelhos de som, relgios, scanners, MP3 players, impressoras, webcams, entre outros. possvel at se dizer que algo indispensvel para tcnicos, programadores e webdesigners, j que sem seus pendrivers seria muito inconveniente transportar seus projetos e utilidades atravs de CDs ou outros dispositivos de armazenamento de dados. A tecnologia de Universal Serial Bus chega a substituir outras tecnologias com menor praticidade como o barramento paralelo e serial. Nesses barramentos, um dispositivo tinha que ser conectado CPU, em seqncia instalar o driver atravs de um software de instalao especfico, terminando em um provvel conflito com o sistema. No mbito USB, o dispositivo seria imediatamente localizado pelo sistema operacional (dependendo da verso do Sistema Operacional) e instalado sem maiores preocupaes e com desempenho muito maior que os outros dois barramento, facilitando a remoo, adio e movimentao de dispositivos atravs de sua tecnologia plug-and-play. A popularidade do barramento USB tambm sua velocidade: USB verso 1.1 (lowspeed) varia entre 1,5 Mbits/s e 12 Mbits/s e USB verso 2.0 (high-speed) alcana at 480

www.mecatronicadegaragem.blogspot.com

Mbits/s, velocidade esta trinta vezes superior ao barramento paralelo, o qual funciona 16 Mbits/s na sua forma ECP (Enhanced Capabilities Port) e 80 Mbits/s na sua forma IEEE 1284 (ECP + EPP Enhanced Parallel Port). Se comparado ao barramento serial que funciona no mximo a velocidade de 115 Mbits/s, a verso USB 4.0 quatro vezes mais veloz.

2.2 ESTRUTURA ELTRICA DO USB Os dispositivos USB possuem um formato universal, que segue duas sries de conectores USB: a srie A e a srie B. Os conectores da srie A tm um formato retangular e achatado possuindo um tipo fmea e um tipo macho, conforme a ilustrao da Figura 1. Os conectores do tipo macho so aqueles encontrados numa das extremidades de um cabo USB e devem ser conectados ao Root Hub (porta principal da USB localizada no computador) ou em portas downstream de um Hub (dispositivo que tem como finalidade aumentar o nmero de portas). Os conectores tipo fmea so os localizados na Root Hub e nas portas downstream de um Hub, onde recebem o conector macho. Os conectores da srie B tm um formato quadrado com um achatado nas pontas superiores, possuindo tambm um tipo fmea e um tipo macho, conforme a ilustrao da Figura 1. Os conectores tipo macho so aqueles encontrados em uma das extremidades de um cabo USB e devem ser conectados a um dispositivo. Os conectores do tipo fmea so aqueles encontrados em dispositivos como impressoras, scanners, mquinas digitais, entre outros onde recebem o conector tipo B macho. Os conectores, tanto da srie A quanto da srie B, possuem formas nicas de conexo, sendo impossvel conect-los de forma diferente ou em sries diferentes.

www.mecatronicadegaragem.blogspot.com

Figura 1: Tipagem do cabo USB. importante entender a pinagem da porta USB e da extremidade do cabo. O conector receptor da srie A, encontrado no Root Hub (Host) e na Downstream do Hub, como dito anteriormente, recebe uma identificao nos pinos, identificando-os por nmeros, comeando da esquerda para direita, do pino um ao pino quatro conforme a ilustrao da Figura 2. J o conector macho da mesma sria recebe uma identificao tambm numrica, porm comeando da direita para esquerda, conforme a ilustrao da Figura 3. O conector receptor da srie B, encontrados em impressoras, recebe uma identificao por nmeros em seus pinos, que comea da direita para esquerda na parte superior e continuando da esquerda para direita na parte inferior, indo do nmero um ao quatro, conforme a ilustrao da Figura 4. J o conector macho da mesma srie recebe identificao semelhante, s que na parte superior numera-se da esquerda para direita e na parte inferior da direita para esquerda conforme a ilustrao da Figura 5.

Figura 2: Conector fmea srie A.

Figura 3: Conector macho srie A.

Figura 4: Conector fmea srie B.

Figura 5: Conector macho srie B.

www.mecatronicadegaragem.blogspot.com

Assim, o cabo USB possui 4 fios, haja vista que dois so para transferncia de dados e os restantes para transporte de energia. O fio Vbus (cor vermelha) possui 5 V, sendo o fio positivo, enquanto que GND (cor preta) possui 0 V, fechando o circuito de corrente com o Vbus. Os fios D+ (cor verde) e D- (cor branca) so responsveis pela transferncia de dados usando a codificao NRZI - No Return to Zero Inverted. Eles estaro entrelaados, com o intuito de minimizar interferncias. O controlador Host encontrado na placa USB ou mesmo na placa me, responsvel pela deteco de dispositivos, controle de fluxo, alimentao e monitoramento, possui em sua configurao fsica um resistor de Pull-up de 1500 responsvel pela deteo de dispositivos. Este resistor estar ligado ao sinal D+ ou D-, havendo uma tenso circulando entre eles definindo se funcionar em alta ou baixa velocidade, e caso no haja tenso no resistor pull-up por mais de 2,5 microssegundos o controlador Host interpretar a desconexo do dispositivo, assim como este tempo necessrio para a deteco. por meio desse sistema de verificao de tenso que a tecnologia plug-and-play funciona. O dispositivo USB pode trabalhar com duas formas de interface: Bus-powered e Selfpowered. de suma importncia entender como funciona a distribuio de energia pelo barramento USB antes de entender sua interface. O computador fornece a cada porta a corrente de 500 mA, igualmente a um hub que possua fonte prpria de energia. Hubs que no possuem fonte prpria recebem do Root Hub (porta USB encontrado no computador) 500 mA, que sero distribudos em suas portas, utilizando 100 mA para seu perfeito funcionamento. O dispositivo Bus-powered uma forma de dispositivo USB que tem certa independncia em se tratando de energia, logo no precisar de fonte de alimentao, pois alimentado pelo prprio Host do computador, ou mesmo por uma porta Downstream de Hub. Esses dispositivos so geralmente configurados para receber 100 mA, j que podero ser

www.mecatronicadegaragem.blogspot.com

alimentados por Downstream com apenas essa quantidade de corrente. Em casos onde um dispositivo Bus-powered consuma mais de 100 mA, seu funcionamento s ocorrer caso o dispositivo esteja ligado no computador ou em Hub com fonte de energia. Dispositivos Buspowered tem suas vantagens e desvantagens. Como vantagens citamos: a praticidade de seu transporte, devido a ausncia de um fonte e problemas de serem resetados ou desligados involuntariamente caso o computador tenha sido desligado ou mesmo resetado. Webcams, pendrivers e Mp3 players so dispositivos que possuem uma interface Bus-powered. A figura 6 mostra um circuito eltrico genrico para a construo de um dispositivo Bus-powered.

Figura 6: Circuito eltrico genrico Bus-Powered.

www.mecatronicadegaragem.blogspot.com

No esquema acima pode ser observado a utilizao de um resistor R4 de 1500 . Este resistor tem como objetivo a deteco de conexo ou desconexo de um dispositivo, o que caracteriza o funcionamento da tecnologia plug-and-play. Os dispositivos Self-powered possuem fonte prpria, no necessitando da energia fornecida pela porta onde esteja conectado. Scanners, impressoras e alguns modelos de Hubs USB possuem a interface Self-powered. Na figura 7 apresentado um circuito eltrico genrico para a construo de um dispositivo Self-powered.

Figura 7: Circuito eltrico genrico Self-Powered.

www.mecatronicadegaragem.blogspot.com

No esquema da Figura 7 possvel notar algumas diferenas em relao ao esquema Bus-powered. O acrscimo de dois novos resistores, R5 e R8 e a ligao do pino 14 do FT232BM, que agora est conectado a fonte externa atravs do +5 V.

2.3 PROTOCOLO USB O protocolo USB, tem como finalidade a comunicao entre o Host do computador e um ou mais dispositivos, s que em um formato diferente da comunicao de uma Porta Paralela ou Serial, que utiliza sinais eltricos atravs de seus pinos. Na comunicao USB o protocolo est presente tanto no Host quanto no dispositivo. No primeiro, o protocolo se apresenta em formato de drivers. No dispositivo, ele encontrado em um microcontrolador especfico, como o PIC ou em um chipset. Neste ser utilizado um microcontrolador PIC, que ser inicialmente programado em linguagem C seguida da respectiva converso para hexadecimal, e ser utilizado um chipset FT232BM da FTDI, que j possui em seu interior todo o protocolo USB. Atravs do protocolo, possvel se ter quatro tipos de transferncias USB, que so: Controle: So transferncias de dados usadas pelo Host para configurar o dispositivo recm conectado, de forma a requisitar informaes sobre este dispositivo. Interrupo: Nestas transferncias os dispositivos fazem os requisitos para o Host, utilizando pouca banda do sistema USB. Os joysticks, teclados e mouses utilizam esta forma de transferncia, j que no necessitam enviar e receber dados de forma contnua. Isossncrona: Transferncias de dados de forma contnua, sem deteo de erro e checagem para chegada correta de dados. Dispositivos de vdeo e udio utilizam

www.mecatronicadegaragem.blogspot.com

este tipo de transferncia de dados, pois precisam de uma velocidade alta e constante. Bulk: Transferncia de grande volume de dados, com deteo de erro, correo e recuperao de dados corrompidos, largura da banda flexvel, trfego seguro e velocidade no contnua. Impressoras e discos de memria flash utilizam este tipo de transferncia. Na tecnologia USB, a comunicao se d devido ao protocolo, que comunica o Host e o dispositivo atravs do envio de pacotes. A comunicao se inicia pelo pacote Token, gerado pelo Host, com intuito de descrever o que vir no prximo pacote, e se uma escrita ou leitura; seguido do prximo pacote, o Data, que possui todos os dados que sero lidos ou escritos e finalizando com o pacote Handshake, que informa se houve falha ou sucesso na transio (em detalhes na Figura 8).

Figura 8: Pacotes de comunicao do Protocolo USB.

www.mecatronicadegaragem.blogspot.com

2.3.1 Endpoints, Pipes e Descritores

Em uma comunicao USB so formados os Pipes e neles trafegam os descritores enviando informaes a serem armazenadas nos Endpoints. Esta comunicao possui alguns detalhes que devem ser explanados.

2.3.1.1 Endpoints (rea final do dispositivo) Endpoints esto localizados no dispositivo, como uma rea de memria reservada para armazenar dados e informaes que trafegam nos Pipes, sendo que um dispositivo USB pode ter no mximo 16 Endpoints na verso 2.0 do USB. tambm atravs do Endpoint que o Host pode obter informaes sobre o dispositivo conectado. Isto se d atravs de envios de comandos de controle de baixa velocidade, pelo Host, que obtm informaes como: o nmero de srie, fabricante, classe, subclasse, verso do Bus USB, tipo de protocolo, nmero de Endpoints e outros. Essa funo se d apenas ao Endpoint 0 (zero). Os Endpoints podem ser de quatro tipos: Controle, Interrupo, Isossncronos e Bulk.

2.3.1.2 Pipes (tubos) Pipes no so visveis, nem fsicos, e podem ser comparados como uma via de comunicao virtual entre o Endpoint do dispositivo e um software no Host, criando assim um via unidirecional ou bidirecional de comunicao. O Pipe sempre ser existente a partir do momento em que um dispositivo USB for conectado no computador. Sendo que, antes do dispositivo ser configurado pelo Host, haver um Pipe de controle (Control Default) que fornecer informaes de configurao.

www.mecatronicadegaragem.blogspot.com

2.3.1.2.1 Stream Este Pipe possui uma via de comunicao unidirecional, sendo que o Endpoint pode ser do tipo Interrupo, Isossncrono ou Bulk. Se o dispositivo com o Pipe Stream precisar transferir de forma bidirecional um dos tipos de Endpoint, o sistema USB estabelecer dois canais de Pipes, sendo o primeiro definido com o Endpoint de sada (Out) e o segundo definido com o Endpoint de entrada (In).

Figura 9: Endpoint (Out).

Figura 10: Endpoint (In).

2.3.1.2.2 Mensagem ou Controle Este Pipe possui um via de comunicao bidirecional, sendo que o Endpoint ser do tipo Controle. Essa via possui dois Endpoints, um de entrada (In) e outro de sada (Out) e possui uma estrutura definida de dados. Este Pipe usado pelo Endpoint 0 para obter informaes sobre o dispositivo para que o sistema possa configur-lo.

www.mecatronicadegaragem.blogspot.com

Figura 11: Pipe de mensagem e controle.

2.3.1.3 Descritores Os descritores constituem uma hierarquia de informaes sobre o dispositivo, que sero disponibilizadas para o Host, informando as caractersticas dos mesmos. Descritores de Dispositivos: Esse descritor informa de uma forma geral as

caractersticas do dispositivo. Sendo que um dispositivo s pode possuir um Descritor de Dispositivo. As informaes cedidas pelo dispositivo so muito importantes para o Host, pois atravs delas, o Host poder saber a verso do USB que o dispositivo suporta. Descritores de Configurao: Esse descritor possui informaes sobre as

capacidades eltricas e funcionalidades do dispositivo, como a alimentao, o limite de corrente aceito pelo dispositivo, entre outras. Descritores de Interface: Esse descritor possui informaes sobre o nmero de

Endpoints suportado, o protocolo utilizado, e algumas strings de texto especificando o nome do produto. Descritores de Endpoint: Esse descritor possui informaes sobre os Endpoints. O

Endpoint 0 assumido pelo sistema com um endpoint de controle, e ser configurado antes que qualquer descritor. Este descritor possui informaes sobre o nmero de Endpoints, direo de comunicao e tamanho do pacote de dados a ser transmitido. Descritores de Classe: Este descritor possui informaes sobre a classe do

dispositivo. Veja abaixo a tabela:

www.mecatronicadegaragem.blogspot.com

1 2

udio Dispositivos de comunicao. Dispositivos de interface humana:

Mouse, Joysticks, leitor de cdigo de barras, etc.

6 7

Imagem: Scanner, cmeras. Impressoras Armazenamento de massa: Floppy

disk, CD-ROM, DVD, SCSI, memria flash, ATAPI.

9 10 11

Hub. Interface de dados. Chip/Smart card. Dispositivos que no entram nas

255

outras classes: Interface Serial RS232, rede ponto-a-ponto, etc. Tabela 1: Descritores

2.4 FUNCIONAMENTO DO PROJETO COM A USB

O projeto controlador de rels atravs da porta USB com o uso da freqncia de rdio seguir uma seqncia de seis passos para sua perfeita execuo. Esse passos so:

www.mecatronicadegaragem.blogspot.com

1 Aplicao cliente desenvolvida em C++ na mquina teste chamada rotina da API, que receber os parmetros de controle; 2 A API por sua vez faz a chamada do software bsico do fabricante do dispositivo USB, mais conhecido como o driver do cliente. Este driver geralmente acompanha o produto USB que foi adquirido, como no caso da compra de uma impressora ou de um scanner, porm neste caso o driver ser instalado e configurado no sistema operacional conforme o captulo anterior; 3 Este driver ter a funo de fazer com que o sistema operacional garanta o suporte USB, fazendo com que ele interprete e traduza os comandos do driver e envie-os para o Driver do Controlador Host; 4 Ser processada a parte lgica do sistema USB, devido ao driver do controlador Host (HCD) fornecido pelo fabricante da placa trabalhar diretamente com o controlador Host; 5 Agora os sinais eletrnicos j foram interpretados e passam para a parte fsica da USB seu chipset e controlador host que sero enviados para o HCD que por sua vez enviara os comandos para o USBD. 6 A informao chega ao Dispositivo do cliente dispositivo que utilizar como base o chipset FT232BM da FTDI conectado ao Root Hub do HC.

www.mecatronicadegaragem.blogspot.com

3 CHIPSET FT232BM

O chipset FT232BM da FTDI Future Technology Devices Ltd. ser o chip usado no projeto, sendo utilizado na placa controladora de rels com o objetivo de estabelecer a configurao do mesmo e a comunicao com o Bus USB, visto que o FT232BM j possui o protocolo USB.

3.1 PRINCIPAIS CARACTERSTICAS

O FT232BM um chip ideal para construir dispositivos que se comuniquem com a porta USB, j que no site do fabricante, http://www.ftdichip.com/FTDrivers.html, est disponibilizado os drivers de controle do chip, sem necessidade de pagamento de royalties, para vrios sistemas operacionais.

Figura 12: Chipset FT232BM.

O chip possui uma velocidade de at 3Mbps atravs de sinais TTL: RS422 e RS485 e velocidade mxima de 1Mbs em comunicaes utilizando drivers RS323. compatvel com Host USB verses 1.1 e 2.0. Possui suporte a uma memria externa EEPROM, que pode ser

www.mecatronicadegaragem.blogspot.com

usada opcionalmente para armazenar descritores para personalizar o produto (dispositivo). Esta memria pode ser programada pela prpria placa via USB. Tenso de alimentao entre 4,35V a 5,25V com suporte para alimentar dispositivos diretamente no Bus USB atravs do pino PWREN#. Regulador integrado de 3.3V para entrada/sada USB. Um chip manipula tanto transferncias USB como Serial, alm de ser compatvel com controladores Host: UHCI/OHCI/EHCI.

Figura 13: Viso interna dos blocos do chipset FT232BM.

Na Figura 13 pode-se obter uma viso geral em blocos do chipset FT323BM. Em sua estrutura importante conhecer algumas de suas caractersticas e limitao para compreender o seu funcionamento e sua configurao na placa controladora de rels. O chip em questo possui uma clula reguladora de tenso que fornece 3.3v no pino 3v3OUT; uma clula USB transeiver que trata diretamente os sinais D+ e D- atravs do cabo; o USB DPL que trata a codificao NRZI; um multiplicador de sinal clock; uma interface Serial avanada (SIE); a

www.mecatronicadegaragem.blogspot.com

UART que disponibiliza os dados seriais para comunicao externa (RS232/RS422/RS485); uma clula para controle dos Buffers FIFO; o USB Protocol Engine, que trata a pilha de dados do protocolo USB em baixo nvel, como os Pipes e Endpoints.

Figura 14: Pinagem do chipset FT232BM.

Pino 1 2 3

Nome EESK

Tipo Sada

Descrio Sinal de Clock para a EEPROM. Conexo de dados direta com a EEPROM. Tenso de alimentao (+4,4V a +5,25V). Atravs deste pino podemos realizar um reset a partir do exterior. Se no for usado, deve ser conectado ao VCC. Sada do gerador interno de Reset. Este

EEDATA Entrada/Sada VCC Alimentao

RESET#

Entrada

5 RSTOUT#

Sada

pino no afetado no caso de um reset no Bus USB.

www.mecatronicadegaragem.blogspot.com

Sada do regulador LDO (Low Drop Out) de 3,3V. Este pino deve ser conectado a um capacitor cermico de 33nF. Uma 6 3V3OUT Sada pequena quantidade de corrente (<= 5mA) pode ser obtida deste pino, para alimentar um circuito a 3.3v se caso necessrio. Sinal positivo de Dados (D+) USB. 7 USBDP Entrada/Sada Requer um resistor de pull-up de 1,5K conectado ao pino 3V3OUT ou RSTOUT#. 8 9 10 USBDM Entrada/Sada Sinal negativo de Dados (D-) USB. GND SLEEP# Alimentao Sinal negativo (massa). Sada Vai ao estado baixo enquanto est no modo USB "Suspend". LED indicador de recepo de dados. 11 RXLED# Sada Este pino quando est em nvel baixo indica recepo de dados. LED indicador de transmisso de dados. 12 TXLED# Sada Este pino quando est em nvel baixo indica transmisso de dados. 13 VCCIO Alimentao Especifica os nveis de tenso utilizados na interface UART (3.0V - 5,25V). Em nvel baixo, o FT232BM alimentado atravs do bus USB (Bus14 PWRCTL Entrada powered). Em nvel alto alimentado mediante conexo externa (Selfpowered). Est em nvel baixo quando se tem configurado o FT232BM no modo Bus15 PRWEN# Sada powered. Est em nvel alto durante o perodo de suspenso do bus USB. Podese usar este pino para controlar a

www.mecatronicadegaragem.blogspot.com

alimentao de dispositivos externos, alimentados diretamente atravs do bus USB, mediante a utilizao de um MOSFET Canal-P. 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 TXDEN GND RI# DCD# DSR# DTR# CTS# RTS# RXD TXD VCC XTIN XTOUT AGND AVCC Sada Habilita a transmisso de dados para RS485.

Alimentao Sinal negativo (massa). Entrada Entrada Entrada Sada Entrada Sada Entrada Sada Alimentao Entrada Sada Alimentao Alimentao Indicador de Ring. Data Carrier Detect (detecta a portadora de dados). Data Set Ready (Dados pronto). Data Terminal Ready (Terminal de dados pronto). Clear To Send. Request To Send. Pino de recepo. Pino de transmisso. Tenso de alimentao (+4,4V a +5,25V). Entrada do oscilador de 6MHz. Sada do oscilador de 6MHz. Gnd analgico para o multiplicador x8 do Clock interno. VCC analgico para o multiplicador x8 do Clock interno. Pe o FT232BM no modo teste. Para funcionamento normal, deve-se conectar ao GND.

31 32

TEST EECS

Entrada

Entrada/Sada EEPROM-Chip select (seleciona o chip).

Tabela 2: Descrio da Pinagem do Chipset FT232BM

www.mecatronicadegaragem.blogspot.com

3.2 CONFIGURAO DA MEMRIA EEPROM

Para exemplificar a configurao da memria, ser mostrada a memria 93C46 do tipo EEPROM serial (SPI), com 64 palavras de 16 bits de largura, podendo armazenar 1024 bits. Esta memria tem como funo personalizar a placa criada, armazenando o nome do fabricante, nmero de srie, verso, vendedor e outras especificaes. No caso desta memria no ser configurada ou mesmo agregada ao circuito, as especificaes com as informaes da placa assumiro valores da prpria fabricante do chip, FTDI. As figuras e a tabela mostrada abaixo descrevero a pinagem e descrio da memria 93C46, e sua conexo com o chipset.

Figura 15: Pinagem da memria 93C46. Pino CS SK DI D0 VCC NC GND Descrio Chip Select (Seleo do chip) Serial Data Clock (Sinal de relgio) Serial Data Input (Entrada de dado serial) Serial Data Output (Sada de dado serial) Alimentao +5V No Conectado 0v (massa)

Tabela 3: Descrio da pinagem da memria EEPROM

www.mecatronicadegaragem.blogspot.com

Figura 16: Circuito eltrico da memria 93C46 ligada ao chipset FT232BM.

3.3 CONFIGURAO DAS INTERFACES BUS-POWERED E SELF-POWERED

A construo de circuitos com as duas interfaces foram mostradas na figura 5 e 6 do captulo 2. Neste captulo sero mostradas as diferenas referentes as configuraes das interfaces Bus-Powered e a Self-Powered. Alm das configuraes fsicas mostradas no captulo 2, preciso programar os descritores do dispositivo na memria EEPROM informando em um de seus campos com qual interface o dispositivo ir operar. Na figura 17 mostrado a configurao de uma interface Bus-Powered, onde o pino 14-PWRCTL deve ser levado a nvel baixo (0 V). A ferrite ligada em srie 1-Vbus (+5 V do Bus USB) para eliminar rudos que possam afetar o bom funcionamento do dispositivo.

www.mecatronicadegaragem.blogspot.com

Figura 17: Configurao da interface Bus-Powered.

Na figura 18 mostrado a configurao de uma interface Self-Powered, onde o pino 14-PWRCTL deve ser levado a nvel alto (+5 V). Nesta interface ser preciso dois resistores, um de 4K7 e outro de 10K para gerar um sinal no pino 4-RESET#.

Figura 18: Configurao da interface Self-Powered.

www.mecatronicadegaragem.blogspot.com

4 MICROCONTROLADOR PIC 16F877

O microcontrolador de suma importncia no desenvolvimento deste projeto, sendo responsvel pela interpretao de sinais e comparao de strings com intuito de verificar se o dispositivo est com os rels acionados ou no de forma a suspender ou fornecer energia ao atuador ligado no dispositivo.

4.1 CARACTERSTICAS DO PIC 16F877

O PIC 16F877 um microcontrolador da famlia de 8 bits e ncleo de 14 bits com 33 pinos de I/O. Possui 8k de memria de programa FLASH com 8192 palavras de 14 bits, 368 bytes de memria RAM e memria EEPROM com 256 bytes. Sua freqncia de operao chega no mximo a 20 MHz, chegando a uma velocidade de processamento de 5 MIPS. Tem 35 instrues em seu conjunto de instrues RISC. Pode funcionar com alimentao de 2V a 5,5V. Possui como perifricos: 5 conjuntos de portas de entrada e sada (total de 33 portas) Conversor analgico-digital de 10 bits de resoluo e 8 canais de entrada Perifrico de comunicao paralela e serial (USART e MSSP), tendo porta paralela escrava (PSP) e porta serial sncrona (SSP, SPI e I2C) 2 Mdulos CCP (Comparao, Captura e PWM) 3 Timers (1 de 16 bits e 2 de 8 bits) Watchdog timer (WDT)

www.mecatronicadegaragem.blogspot.com

Figura 19: PIC 16F877.

4.2 PINAGEM A pinagem do PIC 16F877 formada por 40 pinos, sendo que a maioria possui mais de uma funo, que pode ser verificado na figura 20. Como exemplo pode-se ver o pino 10 que tem as funes de entrada/sada digital (RE2) ou de selecionar um chip SPI (CS) ou a funo de um canal A/D (AN7). Os pinos (RA0 a RA5) esto associados a porta A, (RE0, RE1, RE2) associados a porta E, (RC0 a RC7) a porta C, (RD0 a RD7) a porta D e os pinos (RB0 a RB7) associados ao porta B. Cada um desses pinos pode ser usado como entrada e sada e so definidos na programao.

Figura 20: Pinagem do PIC 16F877.

www.mecatronicadegaragem.blogspot.com

O PIC 16F877 composto, em sua estrutura interna, de cinco mdulos que separam sua pinagem. Possui um modulo lgico e de controle, mdulos de memria RAM e ROM, postas de I/O e o mdulo de perifricos, onde se localizam o Watchdog, Timers, USART e outros perifricos.

4.2.1 Definio da direo dos pinos de i/o

No PIC, os pinos de I/O podem ser configurados tanto com entradas ou sadas, em um nico pino. Essa configurao feita atravs de sua programao em C, que ser mostrado com maior profundidade no prximo captulo, utilizando a funo set_tris_X(Y). Onde X o porta que ser configurada e Y o parmetro que ser enviado a funo configurando quais portas sero de entrada e quais sero de sada. O parmetro deve seguir o padro obZZZZZZZ, onde Z ser definido por 1 ou 0, haja visto que 1 para entrada e 0 para sada seguindo a ordem nos pinos da direita para esquerda. Como exemplo, a configurao da porta D, onde o pino RD7 e RD1 estivessem que ser configurados para entrada e o resto dos pinos para sada, usaramos a funo set_tris_D(ob1000010).

4.3 PROGRAMAO DO MICROCONTROLADOR PIC

Na programao de microcontroladores, a linguagem nativa Assembler, pois uma linguagem de baixo nvel e est associada diretamente com endereos na memria e registradores do microcontrolador. Mas isso no significa que apenas ela pode ser usada na programao do PIC. Linguagens de alto nvel como C - linguagem utilizada no projeto tambm podem ser usadas, com suas vantangens e desvantagens.

www.mecatronicadegaragem.blogspot.com

H anos, os microcontroladores possuam pouco espao na memria para alocar programas, e por este motivo a utilizao do Assembler era obrigatria, j que finalizaria em um programa compacto, leve e rpido. Porm com a evoluo da microeletrnica, hoje possvel usar linguagens de alto nvel, devido os microcontroladores disponibilizarem quantidade maior de memria, deixando assim a programao mais produtiva, segura e com uma portabilidade e manuteno mais eficiente. A linguagem Assembler ainda sim, utilizada em projetos onde o hardware necessita de toda a velocidade que ele dispe para aumentar a eficcia da rotina. Neste projeto, o PIC 16F877 ir receber uma string do chipset e far a sua devida validao atravs de uma comparao. Caso seja vlida ele ir executar uma ao que depender da string (ligar ou desligar) e enviar uma resposta ao programa do PC, informando que o rel foi ligado ou desligado, conforme o cdigo abaixo.

//Controle de Rels //TCC UNAMA //Rodrigo Tavares Condur e Karla Luciana M. Freitas //------------------------------------------------------------------------------------------------------#include <16F877.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #use delay(clock=4000000) #define MAX_BUFFER 15 char BufferRX[MAX_BUFFER+1]; boolean CHEGOU_COMANDO = false; //-------------------------------------------------------------------------//Interrupo de recebimento de caracter pela UART. //--------------------------------------------------------------------------#int_rda void Serial_Recebe_Car() { static unsigned char ch; static int IndexBuf=0;

www.mecatronicadegaragem.blogspot.com

ch = getc(); //Pega o caracter no registrador da UART. BufferRX[IndexBuf] = ch; //Guarda o caracter no buffer. if( BufferRX[IndexBuf] == '*' ) //Se o fim da string de comando. { BufferRX[IndexBuf+1] = '\0'; //Finaliza sting. IndexBuf = 0; CHEGOU_COMANDO = true; //Avisa que chegou uma string de comando. }else{ IndexBuf++; } if( (BufferRX[0] != '>' ) || (IndexBuf >= MAX_BUFFER) ) { IndexBuf = 0; } } //-------------------------------------------------------------//Para fazer o LED piscar. #int_timer0 void MeuTimer() { static boolean led; static int conta; set_timer0(131-get_timer0()); conta++; if(conta == 125) { conta=0; led = !led; output_bit(pin_d1, led); //pisca o LED1 } } //-------------------------------------------------------------//Programa Principal. void main(void) { char COMANDO[15]; set_timer0(131); setup_timer_0(RTCC_INTERNAL | RTCC_DIV_64); enable_interrupts(int_rda); //Habilita interrupo de recebimento. enable_interrupts(int_timer0); enable_interrupts(GLOBAL); //Habilita registrador de interrupo. set_tris_d(0b00000000); //Todos os pinos da porta D como sadas. set_tris_b(0b00000000); //Todos os pinos da porta B como sadas.

output_b(0b00000000); //Desliga todos os pinos da porta B.

www.mecatronicadegaragem.blogspot.com

while( true ) //Loop infinito. { if(CHEGOU_COMANDO == true) { CHEGOU_COMANDO = false; strcpy(COMANDO,">CMD#01#ON*"); if( strcmp(BufferRX,COMANDO) == 0) { output_high(pin_b0); //Liga Rel 1. printf("Rel #1 LIGADO\r\n"); continue; //volta para o incio do loop while(). } strcpy(COMANDO,">CMD#01#OFF*"); if(strcmp(BufferRX,COMANDO) == 0) { output_low(pin_b0); //Desliga Rel 1. printf("Rel #1 DESLIGADO\r\n"); continue; } //-------------------------------------------------------------strcpy(COMANDO,">CMD#02#ON*"); if( strcmp(BufferRX,COMANDO) == 0) { output_high(pin_b1); //Liga LED. printf("Rel #2 LIGADO\r\n"); continue; } strcpy(COMANDO,">CMD#02#OFF*"); if(strcmp(BufferRX,COMANDO) == 0) { output_low(pin_b1); //Desliga LED. printf("Rel #2 DESLIGADO\r\n"); continue; } //-------------------------------------------------------------strcpy(COMANDO,">CMD#03#ON*"); if( strcmp(BufferRX,COMANDO) == 0) { output_high(pin_b2); //Liga LED. printf("Rel #3 LIGADO\r\n"); continue; } strcpy(COMANDO,">CMD#03#OFF*"); if(strcmp(BufferRX,COMANDO) == 0) {

www.mecatronicadegaragem.blogspot.com

output_low(pin_b2); //Desliga LED. printf("Rel #3 DESLIGADO\r\n"); continue; } //-------------------------------------------------------------strcpy(COMANDO,">CMD#04#ON*"); if( strcmp(BufferRX,COMANDO) == 0) { output_high(pin_b3); //Liga LED. printf("Rel #4 LIGADO\r\n"); continue; } strcpy(COMANDO,">CMD#04#OFF*"); if(strcmp(BufferRX,COMANDO) == 0) { output_low(pin_b3); //Desliga LED. printf("Rel #4 DESLIGADO\r\n"); continue; } //-------------------------------------------------------------strcpy(COMANDO,">CMD#05#ON*"); if( strcmp(BufferRX,COMANDO) == 0) { output_high(pin_b4); //Liga LED. printf("Rel #5 LIGADO\r\n"); continue; } strcpy(COMANDO,">CMD#05#OFF*"); if(strcmp(BufferRX,COMANDO) == 0) { output_low(pin_b4); //Desliga LED. printf("Rel #5 DESLIGADO\r\n"); continue; } //-------------------------------------------------------------strcpy(COMANDO,">CMD#06#ON*"); if( strcmp(BufferRX,COMANDO) == 0) { output_high(pin_b5); //Liga LED. printf("Rel #6 LIGADO\r\n"); continue; } strcpy(COMANDO,">CMD#06#OFF*"); if(strcmp(BufferRX,COMANDO) == 0) { output_low(pin_b5); //Desliga LED. printf("Rel #6 DESLIGADO\r\n"); continue; } //--------------------------------------------------------------

www.mecatronicadegaragem.blogspot.com

strcpy(COMANDO,">CMD#07#ON*"); if( strcmp(BufferRX,COMANDO) == 0) { output_high(pin_b6); //Liga LED. printf("Rel #7 LIGADO\r\n"); continue; } strcpy(COMANDO,">CMD#07#OFF*"); if(strcmp(BufferRX,COMANDO) == 0) { output_low(pin_b6); //Desliga LED. printf("Rel #7 DESLIGADO\r\n"); continue; } //-------------------------------------------------------------strcpy(COMANDO,">CMD#08#ON*"); if( strcmp(BufferRX,COMANDO) == 0) { output_high(pin_b7); //Liga LED. printf("Rel #8 LIGADO\r\n"); continue; } strcpy(COMANDO,">CMD#08#OFF*"); if(strcmp(BufferRX,COMANDO) == 0) { output_low(pin_b7); //Desliga LED. printf("Rel #8 DESLIGADO\r\n"); continue; } //-------------------------------------------------------------} } } //--------------------------------------------------------------

Cdigo 1: cdigo-fonte da programao do PIC.

www.mecatronicadegaragem.blogspot.com

5 DRIVER DO SOFTWARE CONTROLADOR DE RELS Para a programao do software controlador de rels ser utilizado os arquivos dll FTD2xx encontrados no site http://www.ftdichip.com/Drivers/FT232-FT245Drivers.htm, que ao serem baixados e descompactados, fornecero os arquivos FTD2XX.lib e o arquivo cabealho FTD2XX.h, que devero ser adicionados a biblioteca do programa utilizado para a programao do aplicativo, no projeto o Borland C++ Builder.

5.1 FUNES DO FTD2XX

No presente projeto, no ser utilizado todas as funes disponibilizadas pelo FTD2xx, outras tero que ser entendidas para o funcionamento do aplicativo em questo. Primeiramente existem duas variveis que sero utilizadas em qualquer funo da dll da FTDI, elas so: FT_STATUS, varivel responsvel pelo status geral do dispositivo conectado, e assim entrando com outras funes que retornaram o valor FT_OK no caso de sucesso em sua funo especfica; FT_HANDLE a varivel responsvel pelo armazenamento do Handle que deve ser usado pelas funes, para ter acesso ao dispositivo. Em suas funes utilizadas no projeto, sero elas: FT_open() responsvel pela abertura do dispositivo conectado no computador e retorna um identificador (handle) para ser usado na maioria as funes, precisa de dois parmetros para sua execuo, que na seqncia seria um inteiro para dizer qual dispositivo ser aberto, iniciando no 0 para o primeiro dispositivo e seguindo essa seqncia e um fthandle, que ser o ponteiro para a varivel FT_HANDLE;

FT_SetDataCharacteristics(), funo que define as caractersticas de comunicao com o dispositivo, possui quatro parmetros, na seqncia um fthandle, o tamanho dos dados (FT_BITS_7 ou FT_BITS_8), nmero de stop bits (FT_STOP_BITS_1 ou

FT_STOP_BITS_2) e a paridade (FT_PARITY_NONE, FT_PARITY_ODD, entre outros);

www.mecatronicadegaragem.blogspot.com

FT_SetBaudRate(), funo que define a velocidade da comunicao com o dispositivo, possui dois parmetros, na seqncia um fthadle e a velocidade (Baud rate); FT_SetTimeouts(), funo que seta os timeouts de leitura e escrita do dispositivo, possui trs parmetros, em seqncia um fthandle, o timeout de leitura em milisegundos e o timeout de escrita em milisegundos; FT_Purge(), funo responsvel pela limpeza dos buffers de transmisso e recepo do dispositivo (TX e PX), possui dois parmetros, em seqncia um fthandle e o buffer a ser feito a limpeza (FT_PURGE_RX e/ou FT_PURGE_TX); FT_Close(), funo que fecha o dispositivo aberto pelo FT_Open(), possui um parmetro que o fthandle; FT_Write(), funo responsvel por escrever dados para um dispositivo, possui quatro parmetros, na seqncia um fthandle, um ponteiro para o buffer onde contm os dados a serem escritos no dispositivo, nmero de bytes a serem escritos no dispositivo e um ponteiro que obtm o nmero de bytes escritos no dispositivo; FT_Read(), funo responsvel pela leitura dos dados para um dispositivo, possui quatro parmetros que tem funcionalidade igual ao FT_Warite(), s que para leitura. Todas essas funes descritas acima retornam um FT_OK no caso de sucesso em sua operao.

5.2

LINGUAGEM

DE

PROGRAMAO

APLICADA

NO

SOFTWARE

CONTROLADOR DE RELS

O cdigo para o software em questo foi contruido no C++ Builder possuindo apenas uma tela de controle, sendo possvel abrir e fechar a USB e ligar e desligar os rels ligados no dispositivo, mostrando uma tela de status. Haja visto que sua codificao e funes esto programadas de acordo com o funcionamento dos botes.

www.mecatronicadegaragem.blogspot.com

Figura 21: Tela do Software controlador de rels.

//--------------------------------------------------------------------------//CURSO USB/Serial //Liga/Desliga 8 Rels atravs do CI USB FT232BM e PIC16F877. //LOOP: Usando Thead. //--------------------------------------------------------------------------#include <vcl.h> #include <stdio.h> #pragma hdrstop #include "ftd2xx.h" #include "Unit1.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma link "PERFGRAP" #pragma resource "*.dfm" //Variveis globais. TForm1 *Form1; TMultLinha *MultLinha; //Classe Thread. declarada em Unit1.h boolean CONECTADO=false; FT_HANDLE ftHandle;

www.mecatronicadegaragem.blogspot.com

FT_STATUS ftStatus; char RxBuffer[100]; char AuxBuffer[100]; void Status(String Comando); //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //-----------------------------------------------------------------------------__fastcall TMultLinha::TMultLinha(bool CreateSuspended) : TThread(CreateSuspended) { } //--------------------------------------------------------------------------void __fastcall TForm1::ButtonAbrirClick(TObject *Sender) { ftStatus = FT_Open(0, &ftHandle); //Abre USB DEV0. if(ftStatus == FT_OK) //Se OK. { FT_SetDataCharacteristics(ftHandle,FT_BITS_8,FT_STOP_BITS_1,FT_PARITY_NONE); FT_SetBaudRate(ftHandle,FT_BAUD_9600); //Define velocidade bps. FT_SetTimeouts(ftHandle,1,0); ButtonAbrir->Enabled = false; ButtonFechar->Enabled = true; Memo1->Enabled = true; SpeedRele1->Enabled = true; SpeedRele2->Enabled = true; SpeedRele3->Enabled = true; SpeedRele4->Enabled = true; SpeedRele5->Enabled = true; SpeedRele6->Enabled = true; SpeedRele7->Enabled = true; SpeedRele8->Enabled = true; MultLinha->Resume(); //Inicia processo. CONECTADO = true; FT_Purge(ftHandle,FT_PURGE_RX | FT_PURGE_TX); //Limpa os buffers TX e RX do dispositivo. }else{ ShowMessage("Erro ao abrir o dispositivo USB (DEV0)."); } } //--------------------------------------------------------------------------void __fastcall TForm1::ButtonFecharClick(TObject *Sender)

www.mecatronicadegaragem.blogspot.com

{ if(ftStatus == FT_OK) //Se USB DEV0 est aberto. { FT_Close(ftHandle); ButtonFechar->Enabled = false; ButtonAbrir->Enabled = true; Memo1->Enabled = false; SpeedRele1->Enabled = false; SpeedRele2->Enabled = false; SpeedRele3->Enabled = false; SpeedRele4->Enabled = false; SpeedRele5->Enabled = false; SpeedRele6->Enabled = false; SpeedRele7->Enabled = false; SpeedRele8->Enabled = false; }else{ ShowMessage("Erro ao fechar dispositivo USB (DEV0)."); } } //--------------------------------------------------------------------------void __fastcall TForm1::SpeedRele1Click(TObject *Sender) { ULONG TamaDados; ULONG BytesEscritos=0; char *StrON=">CMD#01#ON*"; char *StrOFF=">CMD#01#OFF*"; if(SpeedRele1->Down) { TamaDados = strlen(StrON); ftStatus = FT_Write(ftHandle,StrON,TamaDados,&BytesEscritos); if(ftStatus != FT_OK) { ShowMessage("Erro ao tentar enniar dados."); } } if(!SpeedRele1->Down) { TamaDados = strlen(StrOFF); ftStatus = FT_Write(ftHandle,StrOFF,TamaDados,&BytesEscritos); if(ftStatus != FT_OK) { ShowMessage("Erro ao tentar enviar os dados."); } } } //--------------------------------------------------------------------------void __fastcall TForm1::SpeedRele2Click(TObject *Sender) {

www.mecatronicadegaragem.blogspot.com

ULONG TamaDados; ULONG BytesEscritos=0; char *StrON=">CMD#02#ON*"; char *StrOFF=">CMD#02#OFF*"; if(SpeedRele2->Down) { TamaDados = strlen(StrON); ftStatus = FT_Write(ftHandle,StrON,TamaDados,&BytesEscritos); if(ftStatus != FT_OK) { ShowMessage("Erro ao tentar enviar os dados."); } } if(!SpeedRele2->Down) { TamaDados = strlen(StrOFF); ftStatus = FT_Write(ftHandle,StrOFF,TamaDados,&BytesEscritos); if(ftStatus != FT_OK) { ShowMessage("Erro ao tentar enviar os dados."); } } } //--------------------------------------------------------------------------void __fastcall TForm1::SpeedRele3Click(TObject *Sender) { ULONG TamaDados; ULONG BytesEscritos=0; char *StrON=">CMD#03#ON*"; char *StrOFF=">CMD#03#OFF*"; if(SpeedRele3->Down) { TamaDados = strlen(StrON); ftStatus = FT_Write(ftHandle,StrON,TamaDados,&BytesEscritos); if(ftStatus != FT_OK) { ShowMessage("Erro ao tentar enviar os dados."); } } if(!SpeedRele3->Down) { TamaDados = strlen(StrOFF); ftStatus = FT_Write(ftHandle,StrOFF,TamaDados,&BytesEscritos); if(ftStatus != FT_OK) { ShowMessage("Erro ao tentar enviar os dados."); } }

www.mecatronicadegaragem.blogspot.com

} //--------------------------------------------------------------------------void __fastcall TForm1::SpeedRele4Click(TObject *Sender) { ULONG TamaDados; ULONG BytesEscritos=0; char *StrON=">CMD#04#ON*"; char *StrOFF=">CMD#04#OFF*"; if(SpeedRele4->Down) { TamaDados = strlen(StrON); ftStatus = FT_Write(ftHandle,StrON,TamaDados,&BytesEscritos); if(ftStatus != FT_OK) { ShowMessage("Erro ao tentar enviar os dados."); } } if(!SpeedRele4->Down) { TamaDados = strlen(StrOFF); ftStatus = FT_Write(ftHandle,StrOFF,TamaDados,&BytesEscritos); if(ftStatus != FT_OK) { ShowMessage("Erro ao tentar enviar os dados."); } } } //--------------------------------------------------------------------------void __fastcall TForm1::SpeedRele5Click(TObject *Sender) { ULONG TamaDados; ULONG BytesEscritos=0; char *StrON=">CMD#05#ON*"; char *StrOFF=">CMD#05#OFF*"; if(SpeedRele5->Down) { TamaDados = strlen(StrON); ftStatus = FT_Write(ftHandle,StrON,TamaDados,&BytesEscritos); if(ftStatus != FT_OK) { ShowMessage("Erro ao tentar enviar os dados."); } } if(!SpeedRele5->Down) { TamaDados = strlen(StrOFF); ftStatus = FT_Write(ftHandle,StrOFF,TamaDados,&BytesEscritos); if(ftStatus != FT_OK)

www.mecatronicadegaragem.blogspot.com

{ ShowMessage("Erro ao tentar enviar os dados."); } } } //--------------------------------------------------------------------------void __fastcall TForm1::SpeedRele6Click(TObject *Sender) { ULONG TamaDados; ULONG BytesEscritos=0; char *StrON=">CMD#06#ON*"; char *StrOFF=">CMD#06#OFF*"; if(SpeedRele6->Down) { TamaDados = strlen(StrON); ftStatus = FT_Write(ftHandle,StrON,TamaDados,&BytesEscritos); if(ftStatus != FT_OK) { ShowMessage("Erro ao tentar enviar os dados."); } } if(!SpeedRele6->Down) { TamaDados = strlen(StrOFF); ftStatus = FT_Write(ftHandle,StrOFF,TamaDados,&BytesEscritos); if(ftStatus != FT_OK) { ShowMessage("Erro ao tentar enviar os dados."); } } } //--------------------------------------------------------------------------void __fastcall TForm1::SpeedRele7Click(TObject *Sender) { ULONG TamaDados; ULONG BytesEscritos=0; char *StrON=">CMD#07#ON*"; char *StrOFF=">CMD#07#OFF*"; if(SpeedRele7->Down) { TamaDados = strlen(StrON); ftStatus = FT_Write(ftHandle,StrON,TamaDados,&BytesEscritos); if(ftStatus != FT_OK) { ShowMessage("Erro ao tentar enviar os dados."); } } if(!SpeedRele7->Down)

www.mecatronicadegaragem.blogspot.com

{ TamaDados = strlen(StrOFF); ftStatus = FT_Write(ftHandle,StrOFF,TamaDados,&BytesEscritos); if(ftStatus != FT_OK) { ShowMessage("Erro ao tentar enviar os dados."); } } } //--------------------------------------------------------------------------void __fastcall TForm1::SpeedRele8Click(TObject *Sender) { ULONG TamaDados; ULONG BytesEscritos=0; char *StrON=">CMD#08#ON*"; char *StrOFF=">CMD#08#OFF*"; if(SpeedRele8->Down) { TamaDados = strlen(StrON); ftStatus = FT_Write(ftHandle,StrON,TamaDados,&BytesEscritos); if(ftStatus != FT_OK) { ShowMessage("Erro ao tentar enviar os dados."); } } else { TamaDados = strlen(StrOFF); ftStatus = FT_Write(ftHandle,StrOFF,TamaDados,&BytesEscritos); if(ftStatus != FT_OK) { ShowMessage("Erro ao tentar enviar os dados."); } } } //--------------------------------------------------------------------------void Status(String Comando) { if(Comando == "Rel #1 LIGADO\r\n") { Form1->ShapeRele1->Brush->Color = clLime; Form1->SpeedRele1->Font->Color = clBlack; Form1->SpeedRele1->Caption = "Rel #1 LIGADO"; }else if(Comando == "Rel #1 DESLIGADO\r\n") { Form1->ShapeRele1->Brush->Color = clGreen; Form1->SpeedRele1->Font->Color = clWhite; Form1->SpeedRele1->Caption = "Rel #1 DESLIGADO";

www.mecatronicadegaragem.blogspot.com

}else if(Comando == "Rel #2 LIGADO\r\n") { Form1->ShapeRele2->Brush->Color = clLime; Form1->SpeedRele2->Font->Color = clBlack; Form1->SpeedRele2->Caption = "Rel #2 LIGADO"; }else if(Comando == "Rel #2 DESLIGADO\r\n") { Form1->ShapeRele2->Brush->Color = clGreen; Form1->SpeedRele2->Font->Color = clWhite; Form1->SpeedRele2->Caption = "Rel #2 DESLIGADO"; }else if(Comando == "Rel #3 LIGADO\r\n") { Form1->ShapeRele3->Brush->Color = clLime; Form1->SpeedRele3->Font->Color = clBlack; Form1->SpeedRele3->Caption = "Rel #3 LIGADO"; }else if(Comando == "Rel #3 DESLIGADO\r\n") { Form1->ShapeRele3->Brush->Color = clGreen; Form1->SpeedRele3->Font->Color = clWhite; Form1->SpeedRele3->Caption = "Rel #3 DESLIGADO"; }else if(Comando == "Rel #4 LIGADO\r\n") { Form1->ShapeRele4->Brush->Color = clLime; Form1->SpeedRele4->Font->Color = clBlack; Form1->SpeedRele4->Caption = "Rel #4 LIGADO"; }else if(Comando == "Rel #4 DESLIGADO\r\n") { Form1->ShapeRele4->Brush->Color = clGreen; Form1->SpeedRele4->Font->Color = clWhite; Form1->SpeedRele4->Caption = "Rel #4 DESLIGADO"; }else if(Comando == "Rel #5 LIGADO\r\n") { Form1->ShapeRele5->Brush->Color = clLime; Form1->SpeedRele5->Font->Color = clBlack; Form1->SpeedRele5->Caption = "Rel #5 LIGADO"; }else if(Comando == "Rel #5 DESLIGADO\r\n") { Form1->ShapeRele5->Brush->Color = clGreen; Form1->SpeedRele5->Font->Color = clWhite; Form1->SpeedRele5->Caption = "Rel #5 DESLIGADO"; }else if(Comando == "Rel #6 LIGADO\r\n")

www.mecatronicadegaragem.blogspot.com

{ Form1->ShapeRele6->Brush->Color = clLime; Form1->SpeedRele6->Font->Color = clBlack; Form1->SpeedRele6->Caption = "Rel #6 LIGADO"; }else if(Comando == "Rel #6 DESLIGADO\r\n") { Form1->ShapeRele6->Brush->Color = clGreen; Form1->SpeedRele6->Font->Color = clWhite; Form1->SpeedRele6->Caption = "Rel #6 DESLIGADO"; }else if(Comando == "Rel #7 LIGADO\r\n") { Form1->ShapeRele7->Brush->Color = clLime; Form1->SpeedRele7->Font->Color = clBlack; Form1->SpeedRele7->Caption = "Rel #7 LIGADO"; }else if(Comando == "Rel #7 DESLIGADO\r\n") { Form1->ShapeRele7->Brush->Color = clGreen; Form1->SpeedRele7->Font->Color = clWhite; Form1->SpeedRele7->Caption = "Rel #7 DESLIGADO"; }else if(Comando == "Rel #8 LIGADO\r\n") { Form1->ShapeRele8->Brush->Color = clLime; Form1->SpeedRele8->Font->Color = clBlack; Form1->SpeedRele8->Caption = "Rel #8 LIGADO"; }else if(Comando == "Rel #8 DESLIGADO\r\n") { Form1->ShapeRele8->Brush->Color = clGreen; Form1->SpeedRele8->Font->Color = clWhite; Form1->SpeedRele8->Caption = "Rel #8 DESLIGADO"; } } //--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) { Memo1->Clear(); } //--------------------------------------------------------------------------void __fastcall TForm1::ButtonSairClick(TObject *Sender) { Close(); } //--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender) { MultLinha = new TMultLinha(true); //Aloca memria para o objeto.

www.mecatronicadegaragem.blogspot.com

MultLinha->Priority = tpNormal; //Define a prioridade. } //--------------------------------------------------------------------------void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose) { MultLinha = NULL; delete MultLinha; //Somente se TMultLinha for false "new TMultLinha(false);" //MultLinha->Terminate(); //MultLinha->WaitFor(); if(CONECTADO) FT_Close(ftHandle); } void __fastcall TMultLinha::MostraString(void) { Form1->Caption = AuxBuffer; } //--------------------------------------------------------------------------void __fastcall TMultLinha::Execute() { static DWORD BytesRecebidos; static String StrComandos; static unsigned int cont=0; FreeOnTerminate = true; //O objeto destrudo automaticamente quando a Thead terminar. while(!Terminated) //loop infinito. Vida do programa. { if(CONECTADO == true) //Se est conectado. { ftStatus = FT_Read(ftHandle,RxBuffer,100,&BytesRecebidos); if(ftStatus == FT_OK) { cont=0; if(BytesRecebidos > 0) { RxBuffer[BytesRecebidos] = '\0'; //Finaliza string. StrComandos += RxBuffer; while(cont < BytesRecebidos) //Enquanto houver bytes a serem lidos. { if( (RxBuffer[cont] == '\n') || (RxBuffer[cont] == '\0') ) //Se achou o final da string. { Form1->Memo1->SetSelTextBuf(StrComandos.c_str()); strcpy(AuxBuffer,StrComandos.c_str()); AuxBuffer[StrComandos.Length()-2] = '\0'; //Remove os caracteres '\r\n'. Synchronize(MostraString); //Mostra no Caption do Form1. Status(StrComandos);

www.mecatronicadegaragem.blogspot.com

StrComandos="\0"; //Limpa string. } cont++; } } } }else{//Se no conectado. Sleep(1); //Para no consumir processo da CPU. } }//while. }

Cdigo 2: Cdigo do Software controlador de rels

6 DESENVOLVIMENTO PRTICO DO PROJETO

Este captulo abordar o desenvolvimento prtico deste projeto, passando pela instalao dos drivers, programao do microcontrolador PIC 16F877 finalizando no circuito para o controle de rel.

6.1 INSTALAO DOS ARQUIVOS FTD2XX

Os arquivos dll para a comunicao com o BUS USB esto disponveis, como dito nos captulos anteriores, no site da FTDI no link Drivers. L podem ser encontrados drivers D2XX para vrias verses do Windows e outros sistemas operacionais, no caso o Microsoft Windows XP SP2. realizado o download dos drivers em um formato .zip, possuindo arquivos prprios para serem adicionados nas bibliotecas de programao e outros para instalao do dispositivo.

www.mecatronicadegaragem.blogspot.com

Figura 22: Arquivos necessrios para instalao do dispositivo.

Com os arquivos armazenados no disco rgido do PC, pode-se conectar o dispositivo no host USB do computador, que neste caso ser reconhecido pelo sistema operacional. Em sua instalao, deve-se escolher a localizao do driver e referenciar o arquivo ftd2xx.inf na pasta onde o arquivo baixado foi descompactado. Com isso o dispositivo esta pronto para ser utilizado. 6.2 DETALHAMENTO DA PROGRAMAO DO PIC 16F877 Neste captulo no ser explanado a programao em si, e sim como faz-la. Sendo inicialmente necessrio compilar o cdigo assim transformando-o em linguagem de mquina (seqncia lgica de endereos de memria e instrues internas prprias do microcontrolador). Para essa tarefa, foi utilizado o CSS C Compiler, verso Trial Evaluation. Por meio deste programa possvel compilar o cdigo em C e transform-lo em hexadecimal, linguagem aceita pelo PIC 16F877.

www.mecatronicadegaragem.blogspot.com

Figura 23: Processo de edio, compilao e gravao do PIC 16F877

No processo de gravao foi utilizado uma placa de gravao de microcontroladores cedida pelo IESAM Instituto de Estudos Superiores da Amaznia e o programa MPLAB IDE verso 7.21, que por meio da porta serial e do arquivo antes compilado pelo CCS, faz a gravao no PIC 16F877. O programa tambm disponibiliza uma opo para verificar se o programa foi gravado corretamente ou mesmo apag-lo para inserir novos cdigos.

6.3 CIRCUTO E FUNCIONAMENTO DO DISPOSITIVO Para a montagem do dispositivo e de seu circuito, foi encomendada uma placa com o chipset FT232BM juntamente com o receptor USB da srie B, que esta ligada a um microcontrolador PIC 16F877 onde far a comparao de strings para ligar e desligar o pino que esta ligado ao driver ULN 2803. Este driver possui oito entradas TTL e oito sadas que podem controlar at 45V/500mA. Neste projeto ser utilizada uma fonte de 12v controlando rels de 12v, no caso, apenas um. Este rel consome em mdia 50mA, o que da para ligar mais sete outros rels, o que daria 400mA de consumo, sobrando ainda 100mA de folga para o ULN 2803.

www.mecatronicadegaragem.blogspot.com

Figura 24: Chipset FT232BM juntamente com um receptor USB srie B

O circuito completo para o controle de rels foi montado em um protoboard, seguindo as especificaes da figura 25. Em seu teste, ligando apenas um circuito de controle de rel na entrada RL1 do ULN 2803, sendo este o dispositivo rel de 12 V, foi possvel pelo software ligar e desligar o dispositivo, apesar de que a garantia do PIC esta em apenas desligar e ligar um pino corretamente, mas no garantindo se realmente o rel foi desligado ou ligado.

Figura 25: Circuito do dispositivo controlador de rels.

www.mecatronicadegaragem.blogspot.com

7 CONCLUSO Vimos neste projeto, que interligar um microcomputador atravs de software e hardware, a um eletroeletrnico qualquer, envolve muito mais que saber programar, pois, abrange o conhecimento do funcionamento de barramento de comunicao como USB, estudo de hardware com elementos que realizem a leitura de sinais e que possuam protocolos coerentes para a funcionalidade do problema proposto como Chipset - e hardware tambm programveis como PIC, logo, notvel que com a evoluo da tecnologia, abre-se um leque vasto de informao proporcionando a criao de solues mais tecnolgicas para facilitar a vida cotidiana, tanto do usurio final quanto dos profissionais da rea da tecnologia .

www.mecatronicadegaragem.blogspot.com

7 REFERNCIAS BIBLIOGRFICAS MESSIAS, Antnio R. Curso usb/serial controle de dispositivos, - Curso de Barramento USB; aula 1, 1999/2005. Disponvel em: http://www.rogercom.com . Acesso: em 14 de abril de 2006. UNIVERSAL SERIAL BUS. Disponvel em: http://www.usb.org . Acesso em: 01 de maio de 2006. FUTURE TECHNOLOGY DEVICES INTERNATIONAL LTD. 2006. FTDI Chip. Disponvel em: http://www.ftdichip.com/Documents/ProgramGuides/D2XXPG30.pdf.Acesso em 18 de maio de 2006 PEREIRA, Fbio; Microcontroladores PIC: Programao em C. 4 edio .ed. rica, 2005.

Você também pode gostar