Ir ao conteúdo

Aplicação USB com PIC - Duvidas Basicas


Sink00

Posts recomendados

Postado

Boa tarde,

Eu estou desenvolvendo um dispositivo de leitura de sinais EMG com interface via um comp. O sinal analogico eu ja tenho. Inicialmente pela facilidad eu vou utilizar o PIC18f2550. Eu estive olhando diversos exemplos de aplicações e gostaria de tirar algumas duvidas. Onde eu encontro a biblioteca usb.c? o compilador da versao estudantirl do ccd da microchip da pro gasto? vocês tem algum tutorial sobre programação em C pra PIC? Alguma dica inicial? Eu estou como base seguindo esse projeto. So que o codigo em C do PIC eu ianda nao to entendendo muito bem. O codigo do VB6 eu ja to entendendo mais ou menos. Bom basicamente o que eu preciso é de dicas. E eu nã quero ficar aprendendo pois isso é apenas uma ferramenta do projeto que eu tenho que desenvolver e não a base dele. VLew!!!

Postado

Ja ajuda bastante colocandi o codigo, tambem estou desenvolvendo uma aplicaçao USB com pic18f2550, e o C18 da microchip, ambos atendem bem a minha necessidade, embora eu tambem esteja tendo algumas dificuldades!

EDIT:veja esse pequeno codigo em C que fiz pra testar a USB, funciona perfeitamente

                                 //Teste
//Autor; Felipe


unsigned char userWR_buffer[64];
unsigned char userRD_buffer[64];



void main() {
char recebe;
ADCON1 = 0x0F;
TRISA.RA1 = 0;
TRISB = 0;
HID_Enable(&userRD_buffer, &userWR_buffer);
while (1){
recebe=hid_read();
if(recebe != 0)
{
if (userRD_buffer[0] == 'L'){
PORTB = 255;
}
if (userRD_buffer[0] == 'D'){
PORTB =127;
}
}
}
}

void interrupt (void){
HID_InterruptProc();
}

abs.

Postado

Felipe voce esta usando a versao LITE do compilador certo? E que bibliotecas voce incluiu? Por que eu nao vi nenhum #include no seu projeto. E bom ontem eu fiqui estudando o projeto que eu estou trabalhando em cima ( o do link que eu colcoquei acima) e eu entendi como funcina a comunicacao USB e o arquivo EXA que ele passa para colocar no PIC ja me resolve bastante problemas eu so precisaria dar um tapa. A interface HID eu estou seguindo o exemplo dele usando VB6 so que e bem lerdo. Dai por enquanto eu tenho dois problemas que um deles nao e efetivamente um problema. Primeiro eu ainda nao tenho ideia como utilizar o C18... ou seja como faz para compilar em Exa no MPLAB? Ja que voce ja usou poderia me dar umas dicas. E segundo. Nao sei se voc entende bem de HID. Mas é que como o programa reconhece a conexao pelo vendors ID e o Product ID ... como eu faco para ter mais de uma conexao utilizando o mesmo PIC? Eu precisaria utilizar umas 4 desas conexoes na verdade...

Vlew pela ajuda e pelo codigo postado!!

Abs

Postado

Fala amigo sink, então esse codigo que fiz de teste me baseei em um exemplo da revista saber eletronica e da cerne tecnologia, ele ensina de modo fácil a implementar a comunicaçao USB, com o C18 nao tava dando certo então usei o mikroC, a unica coisa que fiz foi adaptar o projeto para o 2550 (uma vez que eles descrevem o 4550) o unico arquivo .H que incluo sao os definit e var, que estão na pasta do mikroC, e deve ser criado um descritivo do dispositivo, isso o mikroC tambem faz pra voce.

veja aqui:http://www.sabereletronica.com.br/secoes/leitura/489

tem todo o procedimento passo a passo.

hoje estou utilizando a USB com outros perifericos, como LCD, A/D entre outros,

so preciso fazer a aplicaçao com o PC, sei programar em delphi e C++ porém ate agora estou tendo dificuldades em faze las. poderia me enviar sua aplicaçao em VB6?

abs.

Postado

Alguem aí ja usou usb fazendo o codigo "no braço" em assembly? :D em vez usar codigos prontos em C? (C18, CCS ou MPLAB C18)?

O maximo que fiz foi estudar como o codigo em C trata as interrupcoes USB e como ele verifica se tem dados no buffer e como armazena dados no buffer de recpcao e envia dados para o buffer de transmissao, como ele configura os descritores, como ele trata interrupcoes no endpoint 0, etc...

Postado

Todos os arquivos se encontram nesse link : Semifluid

Desca a barra de rolagem ate Source and Firmware la se encontra todos os arquivos utilizados inclusive o source o projeto em VB6.. o arquivo EXA pra colocar no PIC e o C nao compilado. O unico problema é que pra colocar o exa no PIC você tem que utilizar o Tyni bootloader. Caso nao queira utilizar pega o exa desse link : http://www.semifluid.com/?p=23 que tem tambem la emaixo com o adendo no nome "no bootloader" funciona conecta e secomunica com o pic direitinho, eu ja testei. E nele que eu to trabalhando .. so que ta muito lerdo e eu nao sei se a limitacao é do VB6 ou da conexao USB... porque ele demroa demais para receber 512 bytes ... Pelo menos par a minha aplicacao, que nao requer frequencias altas, esta demorado demais. Eu precisaria de pelo menos uns 2kHz de frequeencia de amostragem em tempo real, e com essa aplicacao eu nao consigo isso em tempo real, so se eu carregar todos os dados na memoria do PIC e depois puxar para o comp... Eu to dando uma olhada agora em Visual C++ para ver se fica mais rápido mas to engatinhando ainda...

Qualquer ajuda é bem vinda!! Vlew

Postado

Galera fiquem atentos a uma coisa, quando você vaí criar o descritor, muitos tutoriais recomendam colocar 1 byte de envio por vez, eu recomendo 128.

É muito melhor se você souber usar corretamente.

off : Felipe da uma olhada na MP que te enviei.

Postado

Bom a aplicaçao que estou desenvolvendo faz um download de uma musica para o PIC de modo a armazenar em uma memoria SPI que tenho aqui, o problema esta na minha aplicaçao que nao faço ideia de como abrir um arquivo e transmitir via USB.

esse detalhe do Dani, realmente é valido ate para arquivos grandes.

off.: dei uma olhada sim, aqui - o : flp_rk@hotmail.com

abs.

Postado
Bom a aplicaçao que estou desenvolvendo faz um download de uma musica para o PIC de modo a armazenar em uma memoria SPI que tenho aqui, o problema esta na minha aplicaçao que nao faço ideia de como abrir um arquivo e transmitir via USB.

esse detalhe do Dani, realmente é valido ate para arquivos grandes.

off.: dei uma olhada sim, aqui - o : flp_rk@hotmail.com

abs.

Fala Felipe :P

Que tipo de memória você está usando? É uma EEPROM, Flash, Castao SD, outro?

SPI eu conheco bem e ja usei varias vezes. Fiquei sabendo que os cartoes SD usam SPI pra comunicar e que eles possuem alimentacao nominal de 3.3V.

Um dia eu gostaria, por hobby mesmo, de aprender usar estes cartoes SD, mas para isto eu teria que conhecer como funciona o sistema de arquivos dele (como criar arquivos, ler arquivos, deletar, renomear, etc). custa R$ 10,00 um cartao SD de 512MB

Postado

Na verdade voce so deve usar o sistema fat, se quiser que o cartao seja lido pelo windows, se o cartao ficar embarcado na aplicação então faça o processo de escrita e leitura normalmante usando um ponteiro dfe endereços.

como o que pretendo gravar é somente um arquivo de audio, para funcionar como mensagem publicitaria, uso uma memoria simples a m25p80 da ST, que armazena ate 8Mb.

abs.

Postado
Na verdade voce so deve usar o sistema fat, se quiser que o cartao seja lido pelo windows, se o cartao ficar embarcado na aplicação então faça o processo de escrita e leitura normalmante usando um ponteiro dfe endereços.

como o que pretendo gravar é somente um arquivo de audio, para funcionar como mensagem publicitaria, uso uma memoria simples a m25p80 da ST, que armazena ate 8Mb.

abs.

Hmm interessante.

Mas tipo, você armazena o arquivo em formato mp3 na memoria da ST?

Como se faria pra decodificar o arquivo e transformar em audio?

Postado

Amigo maskador, vou utilizar o formato Wave em PCM, pois é so pegar o byte e converter para analogico.

Para mp3, daria pra armazenar tranquilamente, o problemaa e que na saida do PIC ainda precisaria de um CI decoder de MP3 como o ST0113, que são caros de dificeis de se encontrar, alem disso o mp3 nao faz parte da aplicação!

abs.

Postado
Amigo maskador, vou utilizar o formato Wave em PCM, pois é so pegar o byte e converter para analogico.

Para mp3, daria pra armazenar tranquilamente, o problemaa e que na saida do PIC ainda precisaria de um CI decoder de MP3 como o ST0113, que são caros de dificeis de se encontrar, alem disso o mp3 nao faz parte da aplicação!

abs.

Hmm, mas em formato wave, quantos segundos de som você acha que da para armazenar em 8MB? Qual a taxa de amostragem do formato wave ? 44Khz? Tem como diminuir para 22Khz?

Postado

Boa tarde Felipe,

Por acaso já pensou em usar um CI gravador e reprodutor de voz da Winbond? Eles possuem comunicação serial ou paralela e possuem um memória interna que permite gravar vários minutos, além disso, a qualidade de reprodução é ótima.

Trata-se da ISD40xxx onde os três últimos números correspondem ao tamanho da memória, este modelo também permite que se faça a gravação apertuando um botão manualmente e use o PIC apenas para executar a mensagem gravada.

Com este CI também é possível gravar várias mensagem em um único Chip, pois ele permite selecionar a seção da memória a qual se deseja gravar ou reproduzir.

Corrigindo, o modelo é ISD17xxx

Desculpe

Postado

Amigo ProjetPIC obrigado pela sugestão,

na verdade estou pensando e utilizar a serie 14xxx que possui SPI, a qualidade de som e boa sim, mas acabei me deparando com uma outra serie muito mais interessante.

que sao a familia ISD151xx, eles podem reproduzir com frequencia de amostragem de ate 48KHZ! possuem interface I2Ce SPI alem de decopressores ADPCM, o unico incoveniente e que nao encontrei por aqui.... chato nao!

mas creio que irei acabar usando um ISD14xx mesmo, ate pela simplicidade.

abs.

Postado

Felipe eu fiz em Delphi a comunicação USB HID para meu hardware e esta funcionando perfeito tando para enviar como receber dados.

Qualquer coisa posta ai.

Abraços.

Postado

Sink00 este PIC funciona com Low Speed (1.5Mbps) e Full Speed(12Mbps) pois ele usa o recurso de PLL que por exemplo com um cristal de 8Mhz de input você consegue os 48Mhz para Full Speed.

Tentei passar um email para você mais deu errado um do gmail.

Abraços,

Postado

A o PiC eu sei que consegue tudo isso. porém eu nao consegui chegar ate o polling time de 1ms do HID. Eu relmente nao estou muito preocupado em quantos bytes por segundo serao transmitidos porque eu preciso transmitir na verdade muito poucos bytes por vez. Mas minha limitacao ta na cadencia dos reports que sao trocados. você uso no modo interrupt ou bulk?

Abs

Postado

Sink00 eu uso mikroC com Interrupt e como já é uma library pronta não saberia precisar sobre esta questão. Mais segundo o que vi o Endpoints pooling é de 1mSec.

Abraços,

Fernando.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!