Você está na página 1de 9

tinyurl.

com/SanUSB

07/02/2010

Instalao CPORT 3.10 -------------------------------------------------------------------------------- Coloque o arquivo cport-3.10 e descompacte dentro do diretrio do Delphi instalado. Remova, se houverem, todas as outras portas COM previamente instaladas (TcomPort component). - Adicione um novo endereo no Library Path, apontando para a pasta Sources dentro de cport-3.10 descompactado em Tools-Environment Options-Library-Library Path.

Para Delphi 3, 4, 5, 6, 7, 2005 & C++ Builder 4, 5, 6: 1. Use o menu "File/Open" no Delphi para abrir o arquivo ComPort run-time package source file (CPortLib7.dpk) para o Delphi 7, se for o Delphi 6 o arquivo CPortLib6.dpk. Clique em "Compile" para compilar a biblioteca. Agora copie e cole dentro de Windows\System32 todas as bibliotecas *.dcu geradas da mesma pasta Sources. Package names -------------------------------------------------------------------------------Design-Time Source Run-Time Source -----------------------------Delphi 6 DsgnCPort6.dpk CPortLib6.dpk Delphi 7 DsgnCPort7.dpk CPortLib7.dpk

2. Agora deve instalar design-time package. Use o menu File/Open para abrir o arquivo design-time (DsgnCPort7.bpl). Clique em "Compile" para compilar e the "Install" para registrar o ComPort dentro do IDE. Pronto o componente ComPort aparecer disponvel para usar na paleta de componentes como "CPortLib". Design-Time library ---------------Delphi 6 DsgnCPort6.bpl Delphi 7 DsgnCPort7.bpl Run-Time library ---------------CPortLib6.bpl CPortLib7.bpl

EXEMPLO DE APLICAO

Para estabelecer a comunicao via USB entre o computador e o microcontrolador, basta gravar qualquer programa da pasta exemplos no SanUSB que emule a comunicao serial virtual CDC.

tinyurl.com/SanUSB

07/02/2010

1 Aps a instalao do CPORT no Delphi, v na paleta de componentes no CportLib e insira na rea de trabalho, o Comport e 2 ComCombobox, um para a porta serial e o outro para o Baud Rate;

2- Nomeie, inserindo dois Labels do componente Standard, o ComCombobox superior como Porta serial e o inferior como Baud Rate;

2- Clique no ComCombobox superior, v em properties e altere AutoApply para true, comport: comport1 e ComProperty: CpPort; clique no ComCombobox inferior, v em properties e altere AutoApply para true, comport: comport1 e ComProperty: CpBaudRate;

3- Execute (F9) o projeto para ver se o executvel gerado; Para voltar ao projeto (Alt+F4);

4- Insira um boto do componente Standard para conectar a porta serial, V em caption e o chame de Conecta&r, onde o & permite habilitar o boto com Alt+r, v em name e o chame de Bconectar; Clique duas vezes no boto Bconectar e escreva as condies abaixo

tinyurl.com/SanUSB

07/02/2010

para abrir e fechar a porta serial, mostrando Conectar e Desconectar. Lembre que aps digitar o ponto, o Delphi mostra automaticamente as propriedades de cada objeto (como Caption).

if Bconectar.Caption='Conecta&r' then begin ComPort1.Connected:=true; Bconectar.Caption:='Desconecta&r' end else begin ComPort1.Connected:=false; Bconectar.Caption:='Conecta&r' end

4- Insira dois botes do componente Standard para ligar e desligar um Led, V em caption e chame-os de Liga e Desliga; Clique duas vezes no boto Liga e escreva a String para ligar o LED:
if Comport1.Connected = true then begin Comport1.WriteStr('L1'); end else begin ShowMessage('Conecte a porta serial!!'); End

Clique duas vezes no boto Desliga e escreva a String para desligar o LED:

if Comport1.Connected = true then begin Comport1.WriteStr('D1'); end else begin ShowMessage('Conecte a porta serial!!'); end

tinyurl.com/SanUSB

07/02/2010

5- Para mostrar os bytes recebidos insira um Memo do componente Standard e configure name para MemoRx, v na propriedade Line e apague qualquer texto Default dentro do MemoRx.

6- Insira dois panel para representar um Led, o primeiro apague caption, cor branca e nome PledOff e o outro por trs apague caption, cor vermelha e nome PledOn e Visible:=false. One o Led ir ascender (vermelho) quando o boto Liga for pressionando e apagar (branco) quando o boto Desliga for pressionando.

tinyurl.com/SanUSB

07/02/2010

importante salientar que pela USB as strings emuladas (L1, D1, etc.) so enviadas do microcontrolador para o supervisrio atravs de bytes individuais (L, 1, D, 1, etc.). Dessa forma, necessrio inserir na recepo serial uma varival global recebe (deve ser declarada antes de implementation) do tipo string para receber os caracteres individuais emulados pela USB e construir uma string dentro do evento de recepo serial do ComPort. (recebe:=recebe+receb1;)

var Serial_Leds: TSerial_Leds; recebe:string; //Varivel Global

implementation

..... ......

tinyurl.com/SanUSB

07/02/2010

A recepo um evento de interrupo (Events no Object Inspector) do componente Cport, clique no Cport v nas propriedades, selecione a COM disponvel em Port, v em Events e clique duas vezes em OnRxChar, selecionando ComPort1RxChar. Ir aperecer no script:

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);

Ento escreva:
var receb1:string; //receb1 Varivel local e recebe global

begin ComPort1.ReadStr(receb1,count); recebe:=recebe+receb1; //Artifcio usado para que a varivel global //receba os caracteres individuais emulados pela USB if recebe = 'L1' then begin MemoRx.Lines.Add('Chegou ' + recebe); //Escreve dentro do Memo PLedOn.Visible:=true; PLedOff.Visible:=false; end; //O panel PLedOn aparece

if recebe = 'D1' then begin MemoRx.Lines.Add('Chegou ' + recebe); PLedOn.Visible:=false; PLedOff.Visible:=true; //O panel PLedOff aparece end;

Agora grave o microcontrolador com o seguinte programa que ir acender e apagar um led em B7 atravs dos botes Liga e Desliga deste supervisrio. O supervisrio comanda o microcontrolador e verifica a atuao esperando que o microcontrolador reenvie os comandos recebidos.
#include <SanUSB.h> #include <usb_san_cdc.h> char dado1,dado2; main() { clock_int_4MHz(); usb_cdc_init(); // Inicializa o protocolo CDC usb_init(); // Inicializa o protocolo USB

tinyurl.com/SanUSB
usb_task(); // Une o perifrico com a usb do PC output_low(pin_b7);

07/02/2010

while(1) { if (usb_cdc_kbhit(1)) //se o endpoint de contem dados do PC { dado1=usb_cdc_getc(); //retm o primeiro caractere if (dado1=='L') //Se for um endereco vlido entre para processamento da informao { dado2=usb_cdc_getc(); //retm o primeiro caractere if (dado2=='1') { output_high(pin_b7); printf(usb_cdc_putc,"L1"); } } if (dado1=='D') { dado2=usb_cdc_getc(); if (dado2=='1') { output_low(pin_b7); printf(usb_cdc_putc,"D1"); } } } }}

Agora s compilar o programa no Delphi em F9 e selecionar a porta COM virtual emulada para conectar o computador ao microcontrolador.

SUPERVISRIO EM DELPHI PARA CONTROLAR TRS LEDS

Neste exemplo, o supervisrio envia L1 depois que o boto ligar Led 1 pressionado, o label do boto muda para Desliga. Quando o boto Desligar Led 1 pressionado, o supervisrio envia D1. O microcontrolador atua o led e depois confirma para o supervisrio enviando L1 ou D1 que atualiza o label indicando Led 1 ligado ou desligado.

tinyurl.com/SanUSB

07/02/2010

Esta

interface,

disponvel

tambm

nos

arquivos

do

grupo

SanUSB

(tinyurl.com/SanUSB), pode ser construda de forma similar ao exemplo anterior, inserindo na recepo serial uma varival global recebe do tipo string para receber os caracteres individuais emulados pela USB, no evento de recepo serial do ComPort. Abaixo mostrado o firmware do microcontrolador para esta aplicao, que pode ser vista em http://www.youtube.com/watch?v=KmLFnDRdPz8.
#include <SanUSB.h> #include <usb_san_cdc.h> char dado1,dado2; main() { usb_cdc_init(); // Inicializa o protocolo CDC usb_init(); // Inicializa o protocolo USB while(!usb_cdc_connected()) {} // espere enquanto o protocolo CDC no se conecta com o driver CDC usb_task(); // Une o perifrico com a usb do PC usb_wait_for_enumeration(); //espera at que a USB do Pic seja reconhecida pelo PC port_b_pullups(true); output_low(pin_b0); output_low(pin_b6); output_low(pin_b7);

while(1)

tinyurl.com/SanUSB
{ if (usb_cdc_kbhit(1)) //se o endpoint de contem dados do PC { dado1=usb_cdc_getc(); if (dado1=='L') { dado2=usb_cdc_getc(); if (dado2=='1') { output_high(pin_b0); printf(usb_cdc_putc,"L1"); } if (dado2=='2') { output_high(pin_b6); printf(usb_cdc_putc,"L2"); } if (dado2=='3') { output_high(pin_b7); printf(usb_cdc_putc,"L3"); } } if (dado1=='D') { dado2=usb_cdc_getc(); if (dado2=='1') { output_low(pin_b0); printf(usb_cdc_putc,"D1"); } if (dado2=='2') { output_low(pin_b6); printf(usb_cdc_putc,"D2"); } if (dado2=='3') { output_low(pin_b7); printf(usb_cdc_putc,"D3"); } } } }}

07/02/2010

Você também pode gostar