Comunicação USB com o PIC- parte 2

download Comunicação USB com o PIC- parte 2

of 13

Transcript of Comunicação USB com o PIC- parte 2

  • 8/14/2019 Comunicao USB com o PIC- parte 2

    1/13

    1

    WWW.cerne-tec.com.br

    WWW.cerne-tec.com.br

    Comunicao USB com o PICVitor Amadeu Souza Parte II

    [email protected]

    Continuando com o artigo apresentado na edio passada de comunicaoUSB com o PIC, continuaremos nesta edio o estudo do mikroC e a configuraodo mesmo para a correta comunicao do PIC com o PC via USB.

    O Ambiente de Programao

    Aps a instalao do mikroC, execute o mesmo. Teremos a tela da figura 1.

  • 8/14/2019 Comunicao USB com o PIC- parte 2

    2/13

    2

    WWW.cerne-tec.com.br

    Figura 1 Tela inicial do mikroC

    O mikroC trabalha com o conceito de projeto, ou seja, sempre quequisermos compilar um determinado cdigo, precisaremos criar um projeto. Nestecaso, v no menu Project -> New Project, a tela da figura 2 ser apresentada:

    Figura 2 Criando um projeto no mikroC

    No campo Project Name, devemos informar o nome do nosso projeto.Informe neste campo por exemplo, o nome comunicao_usb ou o nome quemelhor lhe convier. Em seguida, escolha a pasta onde o projeto ficar salvo,clicando no boto Browse do campo Project Path. O campo Descritption

  • 8/14/2019 Comunicao USB com o PIC- parte 2

    3/13

    3

    WWW.cerne-tec.com.br

    opcional e serve para detalharmos o que o nosso projeto faz, podendo ficar nesteexemplo sem preenchimento. O campo clock serve para configurarmos nocompilador qual a velocidade de processamento no qual o PIC est funcionando,No nosso caso, apesar do oscilador ser de 4 MHz, escolha o clock de 48 MHz,pois como a srie 18 possui internamente PLLs que permitem aumentar o clock do

    microcontrolador, neste exemplo iremos utilizar este recurso. No campo Device,escolha o modelo que iremos utilizar neste projeto, neste caso o PIC18F4550.Atravs do campo Device Flags, podemos ajustar os bits de configurao do PIC.Observe na tabela 1 os campos que devem ficar marcados para o corretofuncionamento deste exemplo.

    Configuration BitPLLDIV_1_1L

    CPUDIV_OSC1_PLL2_1LUSBDIV_2_1LFOSC_XTPLL_XTVREGEN_ON_2L

    WDT_OFFMCLRE_OFF

    LPT1OSC_OFFPBADEN_OFFLVP_OFF_4L

    ICPRT_OFF_4LXINST_OFF_4L

    DEBUG_OFF_4LTabela 1 Ajuste de Configurations Bits

    * Recomendo a leitura do datasheet do PIC18F4550 na parte dos configurations bits para um entendimento melhor dos mesmos.

    Feito os ajustes apresentados, pressione o boto ok. Agora o mikroC ficarcom a tela apresentada na figura 3.

  • 8/14/2019 Comunicao USB com o PIC- parte 2

    4/13

    4

    WWW.cerne-tec.com.br

    Figura 3 Tela apresentada pelo mikroC

    Agora precisaremos criar um arquivo chamado descritor. A funo destearquivo fazer a identificao do dispositivo USB assim que o mesmo forconectado ao PC. Para acessar este item, v no menu Tools -> HID Terminal. A

    tela da figura 4 surgir.

  • 8/14/2019 Comunicao USB com o PIC- parte 2

    5/13

    5

    WWW.cerne-tec.com.br

    Figura 4 Configurao do arquivo descritor

    Agora clique na aba Descriptor, a tela da figura 5 surgir.

  • 8/14/2019 Comunicao USB com o PIC- parte 2

    6/13

    6

    WWW.cerne-tec.com.br

    Figura 5 Abrindo o HID Terminal

    Neste arquivo, definimos por exemplo o VID (Vendor ID) e PID (Product ID)do dispositivo. Estes dois parmetros, so fornecidos diretamente pela USB.orgporm iremos utilizar o mesmo que est sendo informado como parmetro. Outrasinformaes que podemos ajustar o buffer de entrada e sada, atravs do campoReport Lenght porm como iremos comunicar a nvel de bytes, podemos manter aconfigurao atual. Alm disso, no campo bus power, podemos ajustar se odispositivo ser do tipo bus powered, ou seja alimentado pela prpria USB ou selfpowered, o que quer dizer que est sendo alimentado pela fonte no qual o

    equipamento est ligado. No nosso caso, a opo bus powered dever ficarmarcado, que por sinal j o default. Note que no campo abaixo da configuraoda alimentao do dispositivo, podemos tambm configurar a corrente mxima noqual este ir utilizar. Este campo tambm no precisa ser alterado, podendomanter neste caso com 100 mA que 50mA x 2. Os campos de Strings de VendorName e Product Name servem para que assim que o dispositivo for conectado aporta USB, este nome seja apresentado, podemos tambm manter a stringapresentada. Aps este passo, note que existem trs ferramentas no qual o HID

  • 8/14/2019 Comunicao USB com o PIC- parte 2

    7/13

    7

    WWW.cerne-tec.com.br

    Terminal pode configurar para gerar o campo descritor, sendo necessrio escolhera opo mikroC. Pronto, agora pressione o boto Create e salve o arquivo com onome usbdsc.c na pasta onde est o seu projeto. Agora, de volta a janela principaldo mikroC, precisamos adicionar este arquivo descritor ao projeto. Para isso, vno menu Project -> Add to Project. Neste momento, ser aberta uma nova janela

    onde voc dever escolher o arquivo recm criado, neste caso o usbdsc.c napasta onde voc salvou o mesmo.Para encerrar esta parte de configurao, devemos copiar dois arquivos

    chamados var.h e definit.h que se encontram na pasta...\mikroelektronika\mikroC\examples\extra_examples\hid-library para a pasta doseu projeto e adicionar os mesmos, da mesma forma que o usbdsc.c ao projeto.Note que normalmente, o mikroC fica instalado na pasta arquivos de programa doseu PC.

    Cdigo

    Com o ambiente devidamente configurado, podemos agora nos ater aocdigo que ir rodar no PIC. Este cdigo est disponvel no box1. Vamos agoraesmiuar melhor o seu funcionamento.

    As funes Hid_Write e Hid_Read conseguem comunicar com at 64 bytes.Apesar de utilizarmos somente 1 byte tanto na transmisso como na recepo,precisamos declarar estes dois vetores de forma que todo o byte transmitido ourecebido fique armazenado nestes dois buffers.

    Agora entramos na funo principal de programa do programa em C, nestecaso a funo void (principal). Note que logo destarte, declarada uma variveldo tipo char chamada recebe . Esta varivel ser utilizada logo a frente noprograma, para indicar se um dado foi recebido ou no do PC. Inicialmente,quando o microcontrolador energizado, os pinos do PORTA e PORTE ficamconfigurados como entradas analgicas. No nosso caso, em que a porta serutilizada da forma digital, devemos desligar este recurso e isso feito atribuindo

    unsigned char userWR_buffer[64]; //Buffer de transmisso serialunsigned char userRD_buffer[64]; //Buffer de recepo serial

    void main(){

    char recebe; //Varivel indicadora de bytes recebidosADCON1 = 0x0F; //Configura os pinos de forma digitaltrisa.ra1=0; //Configura o pino do led como sadatrisb.rb0=1; //Configura o pino do boto como entrada

  • 8/14/2019 Comunicao USB com o PIC- parte 2

    8/13

    8

    WWW.cerne-tec.com.br

    ao registrador ADCON1 o valor 0x0F. De acordo com o esquema eltrico, no pinoRA1 est conectado um led, enquanto no pino RB0 o boto. Configurando osregistradores TRISB e TRISA do PIC, estamos ajustando as direes no qual osmesmos iro funcionar.

    Neste ponto, feita a inicializao da USB no PIC. Note que os dois vetoresque foram inicializados no incio do programa, so informados para a funoHID_Enable. Todo o byte recebido ou transmitido pela USB, sero feitos atravsdestes dois registradores.

    Dando prosseguimento a anlise do cdigo, entramos no loop while em queconstante os estados do boto so verificados e enviado o byte referente se omesmo est pressionado ou no. Se o boto estiver pressionado ( if(portb.rb0==0)) primeiramente carregado o byte A no vetor usbWR_Buffer[0]que o byte que ser enviado para o PC e logo em seguida o mesmo escritoatravs da funo HID_Write, que transmite 1 byte do vetor usbWR_Buffer[0].

    HID_Enable(&userRD_buffer, &userWR_buffer);//Inicializa a USB

    while (1){

    if (portb.rb0==0){

    userWR_buffer[0]='1'; //Carrega byte a ser enviado para o PCwhile (!HID_Write(&userWR_buffer, 1)) ;

    //Envia e aguarda finalizar o envio do//byte pela USB

    }else

    {userWR_buffer[0]='0'; //Carrega byte a ser enviado para o PCwhile (!HID_Write(&userWR_buffer, 1)) ;

    //Envia e aguarda finalizar o envio//do byte pela USB

  • 8/14/2019 Comunicao USB com o PIC- parte 2

    9/13

    9

    WWW.cerne-tec.com.br

    Para saber se um determinado byte foi recebido, a varivel recebe recebe ovalor proveniente da funo hid_read(). Caso a mesma retorne 0, indica quenenhum byte foi recebido e caso contrrio, h a existncia de algum dado nobuffer de recepo. Note que logo em seguida, o contedo do buffer de recepo checado e caso haja o caracter A, o led aceso e caso contrrio, verificadose o B sendo neste caso apagado. O delay_ms(1000) foi colocado apenas paraque possamos verificar com mais clareza os dados recebidos pelo PIC, no sendoobrigatrio o seu uso.

    Este bloco de interrupo foi criado para que toda a transao que ocorrerna USB, seja tratada pela mesma. Observe que a funo HID_InterruptProc()tambm j disponibilizada pelo prprio mikroC.

    Agora compile e grave este programa no microcontrolador, de forma quepossamos continuar o nosso estudo.

    recebe=hid_read(); //Verifica se h algum byte no//buffer de recepo

    if (recebe!=0) //H algum byte para receber?{

    if(userRD_buffer[0]=='A') // o 'A'?porta.ra1=1; //Sim, ento liga o led

    if(userRD_buffer[0]=='B') // o 'B'?porta.ra1=0; //Sim, ento desliga o led

    }

    Delay_ms(1000); //Delay para atualizao

    void interrupt(void){

    HID_InterruptProc(); //Tratamento da interrupo de USB

    }

  • 8/14/2019 Comunicao USB com o PIC- parte 2

    10/13

    10

    WWW.cerne-tec.com.br

    Box 1 Cdigo Fonte

    unsigned char userWR_buffer[64]; //Buffer de transmisso serialunsigned char userRD_buffer[64]; //Buffer de recepo serial

    void main(){

    char recebe;

    ADCON1 = 0x0F; //Configura os pinos de forma digital

    trisa.ra1=0; //Configura o pino do led como sadatrisb.rb0=1; //Configura o pino do boto como entrada

    HID_Enable(&userRD_buffer, &userWR_buffer);//Inicializa a USB

    while (1){

    if (portb.rb0==0){

    userWR_buffer[0]='1'; //Carrega byte a ser enviado para o PCwhile (!HID_Write(&userWR_buffer, 1)) ;

    //Envia e aguarda finalizar o envio do//byte pela USB}

    else{

    userWR_buffer[0]='0'; //Carrega byte a ser enviado para o PCwhile (!HID_Write(&userWR_buffer, 1)) ;

    //Envia e aguarda finalizar o envio//do byte pela USB

    }

    recebe=hid_read(); //Verifica se h algum byte no//buffer de recepo

    if (recebe!=0) //H algum byte para receber?{

    if(userRD_buffer[0]=='A') // o 'A'?porta.ra1=1; //Sim, ento liga o led

    if(userRD_buffer[0]=='B') // o 'B'?porta.ra1=0; //Sim, ento desliga o led

    }

    Delay_ms(1000); //Delay para atualizao

    }

    }

    void interrupt(void){

    HID_InterruptProc(); //Tratamento da interrupo de USB

  • 8/14/2019 Comunicao USB com o PIC- parte 2

    11/13

    11

    WWW.cerne-tec.com.br

    Conectando ao PC

    Assim que o microcontrolador for conectado ao PC, ir aparecer umamensagem informativa do Windows, conforme a figura 6.

    Figura 6 - Detectando o dispositivo USB

    Neste instante, ir aparecer o assistente de instalao do Windows,conforme a figura 7.

    Figura 7 Assistente de instalao do Windows

    Escolha a opo No, no agora e pressione Avanar. Na prxima tela,escolha a opo Instalar o Software Automaticamente (recomendvel) e pressioneok. Em seguida, o Windows pode informar que o dispositivo no est registrado nologotipo do mesmo. Ignore esta mensagem e continue pressionando Continuar. Oresultado dever ser o apresentado na figura 8.

  • 8/14/2019 Comunicao USB com o PIC- parte 2

    12/13

    12

    WWW.cerne-tec.com.br

    Figura 8 Dispositivo reconhecido e pronto para funcionar

    Agora iremos utilizar a ferramenta HID Terminal que fica no prprio mikroCpara comunicar com o PIC. Note que neste ponto, outras aplicaes como oDelphi, Visual Basic ou Java j poderiam comunicar com o PIC, desde que estestivessem os devidos componentes de acesso a USB. Para abrir o HID Terminal,v em Tools -> HID Terminal. Note que assim que voc abrir este software, omesmo j ir apresentar os dados recebidos da USB, conforme apresentado nafigura9.

    Figura 9 Recebendo dados da USB

  • 8/14/2019 Comunicao USB com o PIC- parte 2

    13/13

    13

    WWW.cerne-tec.com.br

    Observe que o 0 est sendo apresentado em funo do boto estar solto.Conforme o mesmo for pressionado, o 1 ser enviado.

    Agora para testar o acesso as sadas do PIC via USB, na caixacommunication, coloque o caracter A e logo em seguida, pressione o boto Send.

    Observe que neste instante, o led ir acender. A mesma idia vlida paraapagar, bastando neste caso enviar o caracter B.

    Concluso

    Vimos nestes dois artigos como implementar a comunicao USB com oPIC. Este tema se torna importante nos dias atuais, em que cada vez mais a portaRS232 entra em desuso, e atualizar os atuais projetos com a USB se torna tonecessrio.