Ir ao conteúdo
  • Cadastre-se

Transmissao digital entre PICs


Sink00

Posts recomendados

Pergunta bem basica.. saida digital ttl de PIC é seguro transmitir por qual distancia? E outra coisa como faço para tranmitir dados digitais entre pics? E qual a velocidade dessa transmissao?Existe algum PIC para realizar tansmissao digitalfacilmmente?

Depende da interface a ser utilizada (EIA485, 232, 422, SPI, IIC...). Todo e qualquer microcontrolador pode realizar transmissão e recepção de dados.

.

Link para o comentário
Compartilhar em outros sites

Hmm e qual seria a velocidade de transmissao com um clock de 48Mhz?

vocês podereiam me dar algum exemplo de codigo em C que faca tal transmissao e recepcao de dados?

Bom o meu problema é o seguinte.

Eu preciso enviar para o computador via USB dados analogicos que eu tenho de mais ou menos 12 sistemas. O ADC pode se rum CI separado ou do proprio PIC. So que tem um problema.. Eu nao posso percorrer grandes distancias com o sinal analogico por isso eu pretendia digitalizar localmente. So que dai fica o problema. Para enviar para o computador eu vou enviar via u PIC18F2550 que ja estou implementando. So que como eu faco para o PIC receber os 12 sinais digitais , quardar na RAM.. e então mandar tudo no mesmo pacote USB? Depois que esta na RAM eu nao tenho problemas para mandar, so que o problema é como colocar todos esses sinais digitais na RAM? Eu estava pensando em colocar um PIC para cada 2 sinais (eu fiz essa escolha por casa do espacamento fisico entre os sistemas) e usar o ADC do PIC e então fazer o PIC se comuicar com um proximo PIC que tambem vai estar recebendo outros 2 sinais, e esse ultimo PIC manda os 4 sinais para um outro PIC que tambem esta recebendo dois sinais e assim por diante em um efeito cascata. Isso é possivel? Quanto tempo isso leva com o clock de 48Mhz? Qual seria o modo mais fácil de fazer isso? Qualquer outra ideia e bem vinda.

Vlew!!

Link para o comentário
Compartilhar em outros sites

Sink00,

Olha, eu não entendo patavina de C, mas pelo que voce falou aí, basta um único PIC para isso, ou no máximo 2 para ter todos os canais que voce quer.

Agora, o fundamental para todo o projeto é isto :

QUAL A DISTÂNCIA EM METROS QUE voce QUER TROCAR INFORMAÇÕES, E QUAL A TAXA DE AMOSTRAGEM ( TIPO 10 AMOSTRAS POR SEGUNDO DE CADA UM DOS ADC's ) ??????????

Paulo

Link para o comentário
Compartilhar em outros sites

Como eu ja disse.. o meu problema sao as distancias mesmo. Um Sistema devera ficar uns 50, 60Cm do outro 2 a dois. A taxa de amostragem sera algo de 1Khz para ou mais, mas no maaaaaximo 5 KHz por por ADC isso eu sei que é beem possivel. Pelo menos com uma eu consigo sem problemas. Eu imagino que usando varias nao terei problemas.

Bom para ser mais exatdo do sistema eu irei captar sinais EMG. A parte da amplificacao e filtros notch contra 60hz, entre outras coisas ja esta feito. Como cada mvimento sao regidos basicamente por dois musculos ( biceps, triceps por exemplo) em cada regiao eu irei utilizar dois desses circuitos. Eu pretendo capta-los de toda a perna. ou seja eu irei precisa de 2 para cada pe,2 para cada panturrilha e dois para cada coxa ( considere isso como a prte movel do movimento ou seja para o pe na verdade eu pego o sinal da panturrilha e assim por diante). Depois eu pretendo armazenar tudo na RAM de um 18F2550 mandar via USB para o computador.

Essa taxa de amostragem nao e compativel com um HID que sera o modo de tranmissao para o computador porém como o sistema sera autonomo numa fase mais avancada do projeto eu precisarei dessas taxas de amostragem.

Eu nao quero percorrer o percurso com o sinal analogico pois a frequencia de sinas EMG e baixa e sofre MUITA interferencia de 60Hz (por isso o filtro Notch) Quanto mais proximo eu digitalizar o sinal do local de sensoriamento melhor ira ficar o sinal para uma posterior analise.

Bom o problma é esse :) alguma ideia?

Vlew pela ajuda!!

Link para o comentário
Compartilhar em outros sites

Acho que o conversor do PIC é de 10 bits, não é isso? Dez bits ocupam dois bytes (16 bits). Doze sensores ocupam somente 24 bytes. Um vetor de 24 bytes na RAM, e seus pobremas, terminaram-se!

Minha sugestão: rede mestre/escravo, com transmissão sob RS485 (isso, depende da distância. RS232 acho que dá pra transmitir sem problemas até uns 20, 30 metros). O mestre solicita os dados do escravo. O escravo transmite os dados para o mestre, que armazena esses dados em sua RAM.

Mas, como o Paulo falou, dependendo de onde estejam esses sensores, se o PIC tiver 8 canais de AD, você só precisa de 2 MCUs, sendo que um deles, pode fazer amostragem e transmissão USB, sem problemas. Creio eu. Não conheço PICs.

[]´s

E eu pensando que a distância era de quilômetros....

Depois dessa sua última postagem (que postamos quase juntos), nessa distância dá pra usar qualquer padrão: I2C, SPI, SERIAL digital (sem conversor), etc.

Link para o comentário
Compartilhar em outros sites

Nao eu estou utilizando mais simples que isso. Eu so estou utilizando o ADC em 8bits.. Ou seja terei 12 bytes para transmitir. Que o USB consegue e que a RAM do pic da e sobra pra isso eu sei. então e exatamente isso que eu quero fazer. Esquema Mestre/escravo. So que como eu mencionei anteriormente. Eu nao quero percorrer a perna inteira com o sinal analogico. Eu ate posso tentar par ver como fica, mas eu pretendo fazer um sistema mais robusto. E por isso eu vou digitalizar localmente. Ou seja Da panturrilha so sai fio com sinal digital :). Todo o sistema vai ser alimentado via USB. Cada sistema consome 20mA, com 12 eu terei 240mA que USB2 consegue suprir. Bom mas basicamente o que eu preciso é: Como eu implemento esse sistema mestre escravo com PICs? Eu comecei a mexer com uControladores faz pouco tempo. Qual seria desses metodos de transmissao o mais fácil para implementar? E com qual PIC?

O PIC escolhido precisa estar a 48Mhz pois e a o clock do 18f2550

Obrigado pela ajuda!!!

Abs

Abs

Link para o comentário
Compartilhar em outros sites

Maurício, eu também tava pensando que a distância era acima de 10 metros ....

Bom, facilitou muito.

Agora , ainda tenho um problema enorme sem resposta :

Qual a taxa de conversões A/D por segundo, para cada um dos canais A/D ?????

A frequência usada na conversão importa bem pouco .... lembro que só podemos ativar uma conversão A/D de cada vez, portanto temos de calcular isso muito bem, para saber se podemos usar 1 , 2, 4 ou mais Pics , de acordo com a necessidade.

Paulo

Link para o comentário
Compartilhar em outros sites

Sink, deixa eu ver se entendí :

voce quer fazer no mínimo 1000 leituras de cada um dos conversores A/D POR SEGUNDO ?

Uau ...

Repare que isso não tem nada de Khz !!!!!!!!! A frequência de conversão nós vamos programar a partir desse número de leituras por segundo.

Outra coisa, os conversores dos PIC's são de 10 bits, e mesmo para voce usar 8 bits vamos ter de esperar o mesmo tempo para ler os 10 bits.

Se voce for usar , por exemplo, os 8 conversores de um PIC 16F, teremos de conseguir ler, tratar, converter e enviar 8.000 leituras a cada segundo.

Estou correto ?

Paulo

Link para o comentário
Compartilhar em outros sites

Bom considere Khz por que no final vai ser a minha sample rate ... que pode ser descrita em Hz... Como por exemplo num Osciloscopio que vem escrito a taxa de amostragem dele em frequencia. Mas que seja .. sim 1000 leiuras por segundo dosconversores A/D... Nesse projeto ele fala que o conversor do 18f2550 consegue chegar ate 60ksps ou seja 60khz ou seja 60000 leituras por segundo. Eu nao preciso nem perto disso. Eu sei que 4000 leituras por segundo em um conversor ele consegue pois eu ja o fiz. E sim .. nesse caso seriam 8000 leituras por segundo. Mas isso parece estão absurdo para vocês? O Ci max114 que é puramente um converso AD consegue uma freqencia de ate 1000000 de leituras por segundo se usado so uma de suas portas.

Bom mas é isso sim.

E então alguma sugestao?

Vlew!!

Abs

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

O problema maior não é a velocidade de conversão, transmissão e tratamento... pois eu faço isso muito mais rápido em alguns projetos meus e transmito a 250Kbps a uma distância de até 1200 metros (EIA-485)... mas eu uso para transmitir dados de cores de leds em tempo real para um painel gráfico.

O questão é:

O que vai fazer com estes dados? Se for armazenar todos, haja memória!

Se for mostrar valores, então não precisa dessa taxa de conversão.

Link para o comentário
Compartilhar em outros sites

Soschip,

Eu também estou achando a taxa de conversão muito alta, e haja bytes para serem tratados pelo segundo PIC ....

Sink,

Ok, entendí sim, voce vai usar a família 18f, entáo pode mesmo chegar a samples bem altos.

Não é que eu acho muito alto, é que nesse nível de exigência de software normalmente trabalhamos com interrupções, para que o programa possa ter performance, e terá também de fazer a comunicação com o outro PIC usando a porta propria para isso, fazendo também por interrupção, e usando buffers com ponteiros circulares .... enfim, é um belo projeto heheheh .

Eu náo entendi a necessidade de tantos samples para ler os sinais cardíacos, eu achava que uns 100 samples por segundo eram mais que suficientes, esse era o motivo de minha pergunta ok ??

Paulo

Link para o comentário
Compartilhar em outros sites

OBRIGADO PELAS RESPOSTAS!!

Primeiramente nao é ECG e sim EMG... sao diferentes.. EMG tem uma frequencia de em media 200 HZ .. para a minha analise eu vou pegar tanto o sinal puro quanto o RMS que representa melhora a força que um musculo esta fazendo. Mas de qualquer modo .. Esse 1khz é beeeem superdimensionao .. é que eu vou contruir um sistema assitivo para uma pessoa que é semi-paraplegica ( é complicado explicar) e esse sistema tem que funcionar de ponto a ponto em 200hz.. so eu pretendo superdimensionar meu sistema por que no meu laboratorio ele pode vir a ser util para outras palicacoes quenecessitem de mais frequenica de amostragem. Bom mas basicamente é Isso. Mas vocês tem alguma ideia de por onde eu comeco esse sitema de Mestre / Escravo? E brigadao pelas respostas rapidas!!!

Obrigado pela ajuda!!

Abs

Link para o comentário
Compartilhar em outros sites

Inicialmente eu vou coletar alguns dados.. mas nao continualmetente.. Eu vou utilizar os dados como se fosse um ociloscopio no computador e salvar alguns conjuntos de dados que me interessem. Mas para frente talvez eu venha a armazenar os dados em um cartão SD ou coisa d tipo mas o objetivo final é ficar armazenando pouquissimos dados apenas para efeito de comparacao e tratamento de dados a fim de procurar um padrão, por exemplo identificar a vontade de mexer um braço, mas depois de analisados os dados são descartados. Tudo em tempo real.

Qualquer duvida e so perguntar. E me desculpe pela demora eu estava conversando no telefone com a minha namorada hehe.

Abs

Link para o comentário
Compartilhar em outros sites

pessoal entrando no meio do papo de vocês mais como só tem fera aqui vou aproveitar para tira uma duvida ,

qual seria as formas de comunicar um microcontrolador com outro através de infravermelho ?

eu tava dando uma olhada no protocolo Rc5 mais tem muita informação em assembly e eu num entendo nadica de nada . entendo um pouco . de C .

e queria algo para tirar uma base mais num acho nada em C , google revirado de cabeça para baixo

quem sabe alguem me da uma outra ideia ae de transmissão por infra-vermelho

abraços

Link para o comentário
Compartilhar em outros sites

Transmissao em tempo real, vais ter que usar um DSP, pois os dados aos quais voce quer tratar sao um pouco mais complexos, um micrinho de 8bits nao vai aguentar o tranco, existem no mercado diversos DSPs acessiveis e faceis de programar em C, veja no site da freescale, nxp e Texas.

abs.

Link para o comentário
Compartilhar em outros sites

A nao .. mas isso possa ter certeza que para tratar eu nao vou usar um pic haha.. isso é inviavel. Inicialmente eu vou usar o 18f2550 para fazer a conexao USB e depois eu uso os dados no meu computador. Agora quando o sistema for autonomo eu prentendia usar os PICs apenas para fazer a conversao AD e passar os dados para o seu mestre.. e esse mestre passa para um nivel superior, ate ter todos os dados juntos em algo mais parrudo como um DSP. Mas nao importa onde vão ser processados os dados, tanto no meu computador como no DSP ou ate mesmo um microprocessador como um ARM ou PowerPC, o meu problema aqui é o esquema de mestre escravo. Ou seja vamos imaginar assim vão ter 6 PICs so para converter os dados e passar para frente, sendo 3 por perna por exemplo.

O seja seria assim olhando so uma das pernas:

Vamos numerar os PICs ( seja qual for o seu tipo )

PIC01 - O mais proximo fisicamente do DSP ou 18f2550

PIC02 - O segundo mais proximo

PIC03 - O mais longe

1º - O computador via USB manda uma mensagem para o 18f2550 requisitando os dados ou o DSP requisita dos dados do PIC01.

2º - O PIC01 requisita do PIC02

3º - O PIC03 requisita do PIC03

4º - O PIC03 manda para o PIC02 os dados de 2 sensores, ou seja 2 bytes.

5º - O PIC02 manda para o PIC01 os dados recebidos do PIC03 mais 2 bytes relativos aos sensores que estão conectados em suas portas ADC.

6º - O PIC01 manda para o DSP/PIC18f2550 os 2 bytes do PIC03, os 2 do PIC02 e seus dois bytes referentes aos sensores conectados a suas portas ADC.

7º - (Valido apenas para o PIC18f2550) O 18f manda todos os 12 bytes (das duas pernas) via USB para o computador.

8º - O computador/DSP processa os dados.

Pelo menos e imagino que deva ser feito assim. Agora como fazer isso é uma boa pergunta pois eu nao sei ainda muito beeeem mexer com PICs.

Primeiro eu nao tenho nem ideia qual das portas do PIC usar para fazer isso. Segundo eu nao tenho nenhuma ideia de como implementar isso num codigo. Obviamente eu nao estou pedindo nada feito. Eu so queria uma dica ou outra que pudesse ser dada.

Obrigado por toda a ajuda!!!

Abs

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Transmissao em tempo real, vais ter que usar um DSP, pois os dados aos quais voce quer tratar sao um pouco mais complexos, um micrinho de 8bits nao vai aguentar o tranco, existem no mercado diversos DSPs acessiveis e faceis de programar em C, veja no site da freescale, nxp e Texas.

abs.

Que é isso Felipe... não me decepcione.

Leu um dos meus posts anteriores? Onde falo que transmito a 250Kbps, (poderia ser até 2Mbps) , recebo e apresento em um painel gráfico.

A comunicação é em tempo real com MCUs de 8 bits (ATmega e attiny).

Veja as características de conversão e comunicação (UART) do mega8 com cristal de 16MHz.

adcm8.gif

bpsm8.gif

Mas tenho (quase) certeza que o PIC que você usa também pode fazer isto...

Se fosse com AVR eu até poderia fazer uma rotina exemplo em basic pra você, mas PIC não é minha praia.

Você acha o ATmega8 por apenas 7,50.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Com 3 resistores e uma porta paralela você faz um gravador.

Imagens retiradas de http://www.avrprojects.net/index.php?option=com_content&view=article&id=53:parallel-port-programmers&catid=35:avr-programming-hardware&Itemid=55

Para ponyprog e diretamente do Bascom;

Parallel%20Port%20Programmer%20SE%20sch.gif

Para ICprog:

Parallel%20Port%20Programmer%20Funcard%20sch.gif

É a chance de começar. Garanto em alguns dias já estará programando no Bacom mais do que você já programa o PIC, já que de 0 a 10 você ainda está no 1.

Após este primeiro programa você já estará pelo menos no 5.

Já tem alguma noção de basic?

Caso se interesse, inicio outro tópico específico para AVR.

Link para o comentário
Compartilhar em outros sites

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...