Ir ao conteúdo
  • Cadastre-se

TUTORIAL: Projeto PicUSB quase pronto PIC<-->RF<-->PIC<-->USB<-->PC


Posts recomendados

  • 2 semanas depois...

Olha só felipeetec,

Quando fiz esse projeto, também nao sabia. Entãi eu peguei o código de um projeto bem mais simples e modifiquei ele para minha necessidades.

Primeiro de tudo é fazer engenharia reversa. você pega o código que está aí e tenta compreender como o mesmo funciona. O esquema de envia buffer, recebe buffer. Nao foge disso! :D

Mais ou menos assim: O PC envia um buffer para o PIC que fica esperando receber buffer o tempo todo. Imgina q o pc diz assim: "O PIC, quero saber a temperatura ambiente." Ai o PC vai enviar um buffer, um número para o pic. Esse número está atrelado a ums funçao q você fez no PIC. Quando esse numero chega no PIC, ele lê a temparatura e envia para o PC que vai estar esperando a chegada de um buffer.

Acontece estão rápido.....

Basicamente é isso.

Exemplo:

Trexo do código que postei do Microsoft Visual C#:

private void timer1_Tick(object sender, EventArgs e)
{
temperatura_ambiente_var =( usbapi.ADC());

progressBar_temp_ambiente.Value = temperatura_ambiente_var;
temp_ambiente_box.Text = "Temperatura Ambiente: " + temperatura_ambiente_var.ToString() + " ºC";
temp_ambiente_box.ForeColor = Color.Red;

chart1.Series["Series1"].Points.AddXY(time, temperatura_ambiente_var);

Veja que você tem uma função chamada private void timer1_Tick(object sender, EventArgs e)

Essa função é do relógio que está lá no design. Foi programado para ser chamada a cada segundo.

O primeiro comando é o temperatura_ambiente_var =( usbapi.ADC());

Quer dizer que minha variável temperatura_ambiente_var vai receber o valor da função ( usbapi.ADC()).

Nesse ponto, o Visual C# vai lá na função ( usbapi.ADC()):

public int ADC()
{
int dato = 0;

byte* send_buf = stackalloc byte[1];
send_buf[0] = 0x02;
SendPacket(send_buf, 1);

byte* receive_buf = stackalloc byte[1];

DWORD RecvLength = 1;

ReceivePacket(receive_buf, &RecvLength);
dato = receive_buf[0];

return dato;
}

Ele cria uma variável chamada dato. Logo depois uma variável recebe o buffer 0x02 que é enviado pelo comando SendPacket(send_buf, 1);

Nessa hora, o PIC vai receber esse número 0x02 e vai ver que toda vez q ele aparece, ele deve ler o sensor LM35 que está no PIC. Pois ele está numa rotina de swtch/case.

Logo depois q ele calcula a temperatura, ele envia o resultado de volta para o PC que recebe pelos comandos:

ReceivePacket(receive_buf, &RecvLength);

dato = receive_buf[0];

O resultado da função public int ADC() é dado por return dato;

Aí o Visual C# volta para o código principal e faz os outros comandos:

progressBar_temp_ambiente.Value = temperatura_ambiente_var;

temp_ambiente_box.Text = "Temperatura Ambiente: " + temperatura_ambiente_var.ToString() + " ºC";

SE você pegar esse raciocínio, vai criar o aplicativo que quiser.

Falou

Link para o comentário
Compartilhar em outros sites

Matheus brigadão mesmo pela ajuda, vou dar uma estudada no que você me passou agora, e tentar montar um programinha, qualquer duvida eu volto aqui.ahuauauha

obs:ando meio sem tempo ultimamente por causa que estou me preparando para o vestibular, e pode ser que demore um pouco pra eu entrar novamente e responder o meu progresso, mas você já me deu uma ótima base, muito obrigado.

Link para o comentário
Compartilhar em outros sites

Matheus, bom dia!

Cara, estou desenvolvendo meu TCC.. também faço engenharia elétrica, mas a matéria de programação infelizmente não pude aproveitar muito.. mas beleza..

Cara peguei seu Projeto Final, e comecei a editar meu supervisório baseado no seu. O que acontece cara que quando coloco para simular a compilação, apresenta um problema na no arquivo PicUSBAPI nas linhas discrimanadas da DLL. O erro que aparece é este:

Pode me ajudar??

post-899774-13884960110721_thumb.jpg

Link para o comentário
Compartilhar em outros sites

Tive o mesmo erro que você tem aí. Ficou louco por 4 dias revisando todos os códigos e o hardware.

Nesse erro, estava utilizando o windows 7.

Veja:

errofm.jpg

Só consegui resolver usando o XP.

Mas, me parece que você já esta utilizando o XP....

Correto?

Isso está me intrigando.

Falou

Link para o comentário
Compartilhar em outros sites

é então Mateus.. já estou utilizando o XP... sinceramente não sei como resolver.. no começo compilava de boa.. agora já começou a zicar e toda vez q tento compilar aparece esta advertência.. to ralando aqui pra tentar descobrir o que há.. se tiver alguma resposta ae... me avisa..

abrasss

Link para o comentário
Compartilhar em outros sites

Salve Julierme,

Isso na verdade não é um erro, pois nesta tela serve para você visualizar o comportamento das variáveis, ou seja, se estão sendo enviados parâmetros corretos e recebendo dados corretos. Esta tela aparece quando você utiliza o botão "Start Debugging (F5)" ao invés de "Start Without Debugging (Ctrl+F5)"

Atualmente utilizo o win7 de 32bits normalmente. Não sei qual a versão do arquivo mpusbapi.dll você esta utilizando, mas por meio do "Microchip Solutions v2011-06-02" você consegue pegar a ultima versão que deverá estar em seu projeto e na pasta system32 do windows.

A imagem que você tem é igual a que estou postando veja que ao passo que você clica no botão F5 do teclado o seu programa vai correndo passo a passo (linha a linha). O ideal é ter 2 monitores acoplado ao seu pc para visualizar isso com mais facilidade, pois a tela do seu aplicativo fica atrás da tela de códigos do C# e se você estiver utilizando a mesma base do Matheus quando você clicar 11 ou 12 vezes o botão F5 você verá a transição de PIC Desconectado (vermelho) para PIC conectado (verde).

Espero ter ajudado e qualquer coisa estou por aqui também.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Salve Julierme,

Acho que o site do microchip deve estar fora do ar, pois tentei acessá-lo e não entrou, mas o link é esse: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en547784

Você terá como opção fazer o down só do bloco interessado "USB" ou se você for do tipo fuçador também pegue a versão completa o arquivo tem este nome: "microchip-application-libraries-v2011-06-02-windows-installer" e o tamanho é de 185MB aproximado.

Estou terminando a minha iniciação cientifica e postarei o meu trabalho também lá para o fim de setembro é bem do jeitão do trabalho do Matheus exceto pelo fato dos motores serem acoplados a um microscópio e estou utilizando servos de rotação e acionamento por pwm.

Link para o comentário
Compartilhar em outros sites

Boaaaa Flaviãoo.. show de bola....

Cara.. ve então ae se você consegue me ajudar numa dessa... nessa tcc que estou baseando no do matheus.. mas é na verdade um medidor de energia.. estou utilizando dois pic's um é o 16F877A (escravo) e o outro é o 18F4550. Cara... consigo transmitir dados de boa do 18 para o 16.. mas do 16 para o 18 tenho uma distorção de dados muito grande.. estou utilizando a mesma ferramenta de transmissão q o matheus disponibilizou, via rx tx, tem alguma ideia de como posso transferir dados nesses dois pic, do 16 para o 18, sem que haja algum tipo de distorção..??

Valeuu.. Abrass..

Link para o comentário
Compartilhar em outros sites

Salve Julierme,

Deixe-me entender melhor o seu problema:

A sequencia de funcionamento é essa: PIC16<->Rx-Tx<->PIC18<->USB<->PC?

E o seu problema está do PIC16->Tx->PIC18, correto?

O medidor de energia que você disse seria igual ao que possuímos em casa para medir o consumo em KWh e que possui um sensor para mensurar a tensão da rede e outro sensor para medir a corrente que circula na carga, até aqui o meu pensamento está correto com relação ao seu trabalho?

Se o que disse for correto você deve ter dois terminais do PIC16 dedicado a conversão ADC um para tensão (de 0 a 5Vdc caso não esteja usando os pinos de vref) e o outro para a corrente que você deve esta utilizando um conversor I/V antes de entrar no PIC, pois o mesmo não consegue medir corrente), sendo V e I em função do tempo.

E o valor desta conversão você quer enviar via rxtx para o PIC18 que enviará via USB para o aplicativo no pc e que no aplicativo deverá informar o consumo em KWh em que forma: numericamente ou graficamente?

Me informe onde acertei e errei, pois assim terei uma ideia melhor do seu problema para poder ajudar OK!

Um detalhe eu sou meio fuçador mesmo , pois ainda estou no 3ºsem de engenharia elétrica. Agora estou brincando com sinal cardíaco e estou tendo uns probleminhas também devido a taxa de amostragem do sinal que tenho que corrigir, pois quando eu oscilo um pot em função do tempo tanto no gráfico em C# como no osciloscópio sai igual conforme a figura1.

Mas o sinal cardíaco,figura 2, está bastante distorcido e com saturação.

post-866900-13884960128665_thumb.jpg

post-866900-13884960128976_thumb.png

Link para o comentário
Compartilhar em outros sites

Fala Flaviãooo...

Em relação ao seu projeto de medição existe um teorema.. que chama Teorema de Nyquist.. que diz o seguinte..: "A frequência de amostragem de um sinal analógico (como o caso de sinais cardíacos..), para que possamos reconstruir-lo de forma de forma que a perca de dados seja a mínima possível, deve ser igual ou maior a duas vezes a maior frequência do espectro desse sinal. --> fa <= 2fmax

Ve ae se consegue algum resultado dai me fala...

Em relação ao meu projeto.. é o seguinte.. PIC16<->Rx-Tx<->PIC18<->USB<->PC (igual você disse acima)

Ele vai medir igual ao de nossas casas...

E vai quero que ele seja mostrado de forma númerica no software no C#

Abrass...

Link para o comentário
Compartilhar em outros sites

Uma coia que percebi na hora de enviar dados para o PC é que só dava certo enviando números de 8Bits no máximo.

Ou seja, só dava certo enviando até 255.

Se tivesse que enviar mais, deixava para multiplicar quando chegasse no PC.

Outro coisa são nueros com virgula. Os float dos PIC sao diferentes dos float do PC, então nem adianta mandar.

Falou

Link para o comentário
Compartilhar em outros sites

Salve Matheus e Julierme,

É possível enviar pacotes para o pc de tamanho maior que 8bits, mas para isso o programa no PIC deve ser formatado para enviar 16bits(2bytes=65535).

Citando um exemplo é o conversor AD do PIC de 10bits(>8bits) e a informação chega tranquilamente no pc!

Ahh vou ver se no programa no C# também deve ser modificado para receber a quantidade certa beleza!

post-866900-13884960132458_thumb.jpg

Link para o comentário
Compartilhar em outros sites

Flavião...

Vou montar o circuito na placa e vou em paralelo desenvolvendo o software... minha meta é acabar o trabalho ainda nesse mês de agosto, pelo menos a parte de hardware e software, vamos ver se consigo... mas vou falando com vocês ae...

Conseguiu ver a questão de amostragem de ondas de batimento cardíaco no seu projeto?

Abrass..

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...