[DUVIDA] Quantas e quais realmente são as formas que o arduino se comunica ?

Olá Galera,

     Sempre vejos nos comentarios que existem diversas formas do arduino trocar dados,  porem, só conheço 3 sendo:

  -  SERIAL, ( pinos RX - TX )

  -  I2C  ( pinos A4-sda e A5-scl)

  -  SPI (  10-SS ,  11-MOSI , 12-MISO, 13-SCK )

    Então tenho 2 duvidas:

1- Existe alguma outra forma de trocar dados entre dois arduinos, com fio,  alem dos três descritos acima ?

2- Os modulos NRF24L01 se comunicam via SPI, e normalmente transitam seus dados em arrays (matrizes),  logo, diante de um projeto onde o radio esta conectado ao arduino 1, e esse recebe os dados,  mas que se deseja passar esses dados para um segundo arduino, ou seja, colocar uma placa com dois nucleos atmega328,    sendo que o protocolo SPI já esta sendo utilizado pelos radios, e esse depende de interromper a transmissão para se poder acessar varios perifericos no mesmo barramento, porem, as bibliotecas dos radios não nos dão esse acesso,   logo, o SPI estaria descartado,  ai fica a duvida,  qual o melhor protocolo pra transmitir os dados recebidos por radio do atmega328-1  para o atmega328-2 ?

Exibições: 314

Responder esta

Respostas a este tópico

Olá,

Tem o softserial, onde qualquer pino pode ser TX ou RX, desta forma podemos ter comunicação serial em um MCU que não tenha uma porta serial no seu hardware nativo, ou quando precisamos de uma porta a mais que a disponível. É uma saída já muito conhecida desde os primeiros MCUs, mas tem algumas limitações por ocupar tempo de processamento do MCU, muito maior que quando usamos uma porta nativa.

Em tempo, todas as formas de comunicação enumeradas pelo Weider podem ser feitas com pinos e software, com as limitações já citadas.

Também é possível fazer comunicação paralela, como a usada pelas antigas impressoras.

Abraço.

Olá Grande Wiechert,

     Acho que me alonguei na pergunta o que não mostrou realmente qual era ela.

   A minha duvida é a seguinte:  Desejo montar um projeto dual core, com dois atmegas328, no primeiro vai estar ligado um radio NRF24L01,  o qual se comunica via SPI, e suas bibliotecas não dão permissão ao uso de outros perifericos com o mesmo protocolo.

   Dai que eu conheça sobram somente dois protocolos, o serial e o i2c.

    Então fica a minha duvida, os dados chegam pela SPI do NRF em forma de matrizes (arrays) e desejo passa-las para o segundo nucleo, a questão é qual o melhor protocolo pra isso, visto que o SPI esta ocupado?

    Pelo que vi até agora:

    SERIAL:  PROS: Maior velocidade, mais simples, permite transmissão de variaveis, INT, LONG, etc.            CONTRAS:Não permite transmissão de arrays, somente um dado por vez.

     I2C:  PROS: Permite transmissão de arrays   CONTRAS: permite somente variais tipo BYTE,  parece ser mais lento.

     Então fica a duvida, qual o melhor para enviar dados de um atmega328 a outro ?

Weider,

Talvez as bibliotecas foram mau escritas ou mau usadas, visto que o SPI é uma rede multiponto...

De qualquer forma, como escrevi acima, sempre é possível fazer qualquer comunicação via software, e então ter mais uma porta SPI.

Abraço.

Oi WD, boa noite.

eu acrescentaria que o arduino também comunica pelo protocolo OneWire.

Mas, os protocolos "nativos" são só os 3 que você citou

Rui

Wiechert, muito obrigado cara,  sim, é verdade a SPI é multiponto, porem, várias bibliotecas que utilizam o protocolo, recomendam que não se utilize o SPI com algo alem do objetivo delas, a razão ao meu ver parece simples, na SPI você tem que colocar em LOW o pino SS (slave select) para selecionar o periferico a se comunicar, e as bibliotecas são feitas unicamente com foco em seus produtos, dai qualquer coisa extra, podera interferir.

Rui,

   Muito obrigado amigo,  você realmente é incrivel, captou a essencia da segunda parte da duvida, o wiechert mandou bem na primeira, e vocÊ na segunda, obrigado aos dois.

   Quanto ao meu problema, eu acho que a solução, como em muuuuuuitos casos na nossa área, não depende de tecnologia,  mas de raciocínio.

    Ou seja, quero pegar o resultado da leitura de um sensor, mandar via radio(NRF) para um segundo arduino que tem outro radio nele, e esse por sua vez passar os dados recebidos para um terceiro arduino com fio,  o problema que eu tava pensando era que a captação é em 10bits, e o NRF transmite em 10bits,  porem, quando chegasse do outro lado, o que sobraria seria o protocolo I2C que se comunica em 8bits.

   Mas ai eu matei a charada.

   Na saida do outro lado, eu vou ter uma emissão PWM, essa utiliza 8bits( 0 a 255).

   Dai notei que o truque, é abrir mão dos 10bits, e desde o principio usar 8bits pra tudo.

   Ou seja, posso até captar em 10bits no primeiro arduino, mas imediatamente passo para 8bits, dai mando pelo Radio, que vai ter muito mais folga para trabalhar, e quando chegar do outro lado no segundo arduino, e esse for repassar para o terceiro arduino via i2c, e esse jogar na PWM,  não precisarei fazer nada,  será leitura direta.

    Bem, isso tudo é teoria obvio,  preciso meter na pratica,  tô chegando na bancada agora e vou testar.

    Mas agradeço muito aos dois.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço