Saudações a todos!

Preciso de uma ajuda do pessoal da eletrônica.

Estou fazendo um experimento com o NRF24L01 e, para isso, é necessário conectá-lo na SPI pinos digitais 11,12 e 13 do Arduino.

No entanto, segundo o esquema do Arduino, esses pinos estão espelhados PARALELAMENTE na interface ICSP, conforme figura abaixo

Eu já fiz um teste e liguei o NRF nos pinos ICSP e deu tudo certo:


Minha pergunta: Ligando o NRF24L01 na ICSP, deixa livres os pinos 11,12 e 13 para conectar outros sensores e dispositivos sem interferir na comunicação RF?
Fiz alguns testes simples conectei um LED no pino 13 e parece que não interfere. Mas estou em dúvida se isso pode comprometer a comunicação em alguns momentos

Existe outra interface ICSP perto do pino 13 que não é espelhada nos pinos digitais, conforme figura acima. Essa ICSP é usada para programar o chip conversor USB. Poderia usá-la também?

Grato!

Exibições: 1444

Responder esta

Respostas a este tópico

Bom dia JAC, (se não gosta que te chame pelas iniciais, avise),

O Atmega328 (Arduino UNO e Mini) só tem uma SPI nativa.

Ao usar o port SPI, você só deve usar os ports para SPI, (MISO, MOSI e SCK) em 11, 12 e 13 ou ISCP,

mas pode usar outros dispositivo SPI ligados nestes ports.

O SS é o port usado para que você selecione o dispositivo que está ligado nos ports SPI.

Exemplificando:

Você liga 3 dispositivos nos ports (MISO, MOSI, e SCK),  na barra numerada 11, 12 e 13 ou nos pinos ISCP,

e use 3 ports diferentes para o SS de cada dispositivo.

RV

Fala aí Rui. Tudo bem?

Na verdade minha dúvida é outra:

Eu quero usar um só dispositivo SPI (o NRF24l01).

Segundo o esquema do UNO, os pinos do ICSP são espelhos dos pinos 11,12 e 13 (pinos SPI).

Se eu usar os pinos do ICSP, os pinos espelho 11,12 e 13 poderão ser usados para ligar outros componentes? Por serem espelhos os 2 podem receber os mesmos sinais e interferir um no outro. Será?

Fiquei em dúvida, pois são espelhos, mas de forma paralela.

Mas existe um outro ICSP no Arduino que não são espelhados. Talvez sejam mais seguros.

Oi JAC, tudo bem por aqui, e com você?

Os pinos 11(MOSI), 12(MISO) e 13(SCK) do arduino Uno estão literalmente ligados aos pinos,

4 , 3 e 1 respectivamente do conector ICSP.

Vi pela sia foto que o seu arduino tem um conector a mais na placa,

(aquele que você marcou em vermelho).

Não sei se ele é ligado diretamente como o ISCP, mas acredito que sim, pois o arduino UNO

só tem um SPI nativo.

Quanto a sua dúvida, a resposta é não.,

Você não pode usar os pinos do SPI enquanto os usa para SPI, sob o risco de bagunçar

a comunicação do atmega com o dispositivo SPI.

RV

Arduino_Uno_Rev3-schematic.pdf

PS:

Por este link aqui paraece que este6 pinos perto do pino 13 também estão interligados 

com os pinos do SPI (ISCP).

https://br-arduino.org/2015/05/arduino-icsp-attiny-atmega.html

Valeu Rui.

Então se usar o os pinos do ICSP para SPI não posso usar os pinos digitais do 11 ao 13.

Beleza, era isso que eu estava em dúvida.

Quanto ao ICSP perto do pino 13 descobri que ele faz conexão com aquele chip do Arduino responsável pela USB.

Então nem adianta usar ele que não vai funcionar com o NRF24.

Como você disse, só existe um interface nativa SPI para o UNO.

Outra coisa que descobri é que no Arduino Nano isso é diferente. A ICSP não espelha os pinos digitais. Então dá para usar o SPI sem ocupar os pinos digitais

Obrigado pela ajuda!

olá Cintra.

      A Interface SPI  disponível via pinos "11", "12", e "13",  é uma Interface por Hardware do Processador AVR ATMega328 do Arduino UNO.  Isto significa que quando vc utiliza esta SPI, dentro do Processador estes respectivos pinos são controlados pelos circuitos desta Interface, e portanto os sinais lógicos que aparecem nos pinos externos, são os sinais do Hardware SPI.  Em outras palavras: enquanto o SPI está "habilitado",  se no seu sketch vc setar um daqueles sinais com "HIGH" ou "LOW" via "digitalWrite",  o nível lógico não chegará ao pino, uma vez que este está sendo controlado pelo Hardware SPI.  Vc pode ver isto claramente através do  Diagrama Lógico  para um pino de I/O do Processador, conforme mostro na figura a seguir:

(clique na figura para "zoom")

      A figura anterior é do datasheet do Processador AVR. Nela marquei na cor "rosa claro", os sinais que selecionam entre um I/O convencional (que pode ser "setado" via "digitalWrite" e lido via "digitalRead") e uma Função Alternativa para o pino (esta função pode ser por exemplo o SPI).  Os sinais da Função Alternativa, estão marcados na cor "laranja claro", e veja que nem todos estes sinais "chegam" aos pinos físicos do Processador, pois alguns são usados para determinar se na Função Alternativa o pino será uma entrada ou uma saída, ou mesmo se o Resistor de Pullup interno (o "RPU") será ativado.  Caso tenha alguma curiosidade sobre algum sinal em específico mostrado na figura, fique à vontade para perguntar.

      Uma informação adicional: na figura anterior,  a região que marquei em azul mais escuro, é a que é controlada pelo "digitalWrite",  e a região que marquei em verde claro é a que é acessada pelo "digitalRead" (e neste caso específico, essa região também pode ser acessada por uma Função Alternativa).

      Uma vez esclarecido esta questão das Funções Alternativas  em relação aos pinos do Processador,  respondendo suas questões, de forma enumerada:

      1) como o RV  já disse, vc não pode usar os pinos do SPI para I/O convencional. E o motivo disso é exatamente o que mostrei no texto anterior:  quando vc habilita o uso do SPI, os pinos correspondentes  não  estão conectados aos Ports de I/O, e sim ao Hardware do SPI dentro do Processador.

       E se a Interface SPI estiver habilitada, então os pinos correspondentes terão uma temporização específica para esta Interface, conforme vc pode ver na figura a seguir:

(clique na figura para "zoom")

      Note que marquei com cores, os sinais correspondentes ao SPI, e estas cores irão coincidir com as que usei na próxima figura logo adiante, para os mesmos sinais.  Mas aqui o importante é perceber que devido às características específicas desta temporização, é praticamente inviável tentar usar estes sinais para outras funções, mesmo com "gambiarras" de Hardware e Firmware (até é possível, mas não é nada prático).

      2) "espelhamento" não é o termo técnico adequado.  Em Hardware,  o termo técnico "espelhamento" se refere quando um Sinal  sempre  acompanha o Estado Lógico de outro sinal, mas estes sinais não estão fisicamente conectados. Ou seja, apenas um é a cópia lógica do outro, e os sinais são "drivados" cada um por seu circuito específico.

      No caso a que vc se refere sobre os sinais correspondentes ao SPI, que seriam os pinos "11", "12", e "13",  seja no conector "ICSP" (ou "In Circuit System Programming"), seja no conector de I/O do Arduino,  os sinais são exatamente os mesmos, ou seja, os três sinais estão em ambos os conectores (e portanto não são "espelhamentos").  E estes sinais são originados nos pinos do Processador. Vc pode ver isso na figura a seguir, onde marquei a conexão destes três sinais na cor "rosa claro":

(clique na figura para "zoom")

      Na figura anterior,  o conector  "ICSP" para o Processador ATMega328  está marcado na cor amarela.  Este conector é usado para programar o Processador, semelhante a quando vc programa o mesmo através da IDE do Arduino.  Porém a IDE do Arduino usa uma "Ponte USB para Serial" para enviar os códigos ao Processador "principal", e neste caso é o próprio Processador que se "auto-programa" com o código enviado.  Já no caso do uso do "ICSP", os sinais para programação são praticamente idênticos aos do SPI, e por isso os sinais físicos desta Interface são usados nesta função de programação. Porém neste caso,  não é exatamente o Processador quem faz a programação, pois quando o "ICSP" é usado, um Hardware "escondido" no Processador é "ativado". Este Hardware é uma Máquina de Estados, e ela é cadenciada pelos sinais do "ICSP", usando um Protocolo específico (este Protocolo está descrito em documentos publicados pelo Fabricante do Processador).

      Então veja que,  a função do "ICSP" não tem relação com a Função SPI  usada nos sketchs.  E apesar de ambas usarem os mesmos sinais,  em 99,99% dos casos isso não é um problema,  pois o "ICSP"  é geralmente usado ou na Programação em Fábrica de um Produto comercial, ou na programação em campo  deste produto, e neste caso o Fabricante do produto evita usar a SPI no produto final (e se ele resolver usar, então terá que tomar alguns cuidados).  Já no caso do Arduino,  em 99,99% dos casos,  a programação é feira através da "Ponte USB para Serial", que é totalmente separada do "ISCP", e nenhum conflito ocorre.

      3) e o "outro" conector "ICSP" na placa no UNO (aquele conector próximo ao conector USB),  é para a programação via "ICSP" do Processador que implementa a "Ponte USB para Serial", sendo este Processador geralmente o ATMega16u2  conforme vc pode ver no diagrama elétrico mostrado na figura anterior.  O "ICSP" desse outro Processador está na cor laranja na figura anterior. O código que "roda" neste processador, é o que gerencia a "Ponte USB para Serial", ou seja, que envia ao Processador "principal" o código que vc compila na IDE do Arduino.  Logo geralmente não "mexemos" com este Processador.  Mas o "ICSP" dele está ali, caso por algum motivo seja necessário regravar o código que gerencia a "Ponte USB para Serial",

      Então,  de forma convencional, não há como vc usar os sinais deste outro "ISCP", uma vez que ele não está conectado aos sinais do Processador "principal".

      Além disso, a maioria esmagadora das placas UNO (e de outros Arduinos também), atualmente está usando Circuitos Integrados que são uma implementação em Hardware da "Ponte USB para Serial", o que significa que vc não encontrará um conector "ICSP" correspondente (ou seja, nestas placas só há o "ICSP" para o Processador "principal").

      Uma curiosidade:  o sinal  "SS" (o pino "10" no UNO), de fato pertence à Interface SPI. Porém só é utilizado quando se usa o SPI  com diversos Processadores  e mais de um desses pode ser um "Master SPI".  Em todos os outros casos, o sinal "SS" está livre para ser um I/O convencional e nenhum "setting" especial é necessário para isto.  Note também que para o nRF24L01, vc pode especificar quem será o pino "CSN", e não precisa  ser o "SS" do Arduino.

      Uma dica final:  caso precise de mais I/Os  no UNO,  aconselho usar um Expansor I2C, devido à praticidade de fazer isto com esta Interface. Um expansor muito popular e muito bom, é aquele que é usado também para acessar os Displays LCDs convencionais através do I2C, e que pode ser usado para expandir I/Os sem ser necessária qualquer modificação, como mostrado na figura  a seguir:

(clique na figura para "zoom")

      Este Expansor I2C da figura anterior, usa o CI "PCF8574" ou o "PCF8574A" (a diferença entre eles é apenas o "endereço base" I2C).  Cada expansor desses,  acrescenta 8 pinos de I/O ao Arduino,  e vc pode usar até 16 desses expansores simultaneamente (caso use ambos 8574 e 8574A), possibilitando até 128 pinos de I/O (e se usar apenas o 8574  ou o 8574A, então até 64 pinos são possíveis usando 8 expansores simultaneamente).  E cada pino de I/O do expansor é independente,  e pode ser programado para ser entrada ou saída digital.  E melhor:  há Bibliotecas disponíveis para facilitar a programação e o acesso a estes pinos do expansor.  E claro: ao usar estes expansores, atente para o consumo de energia, já que está acrescentando Hardware.

      Espero ter ajudado a esclarecer as dúvidas.

      Abrçs

      Elcids

Elcids, bom dia!

Obrigado pela aula. Agradeço muito mesmo!

olá novamente Cintra.

      Esqueci de mencionar sobre o Arduino Nano. O Processador do Nano também é o ATMega328, o mesmo do UNO.

      Consequentemente, os sinais do "ICSP"  são os mesmos  "D11", "D12", e "D13" (respectivamente "MOSI", "MISO", e "SCK", da Interface SPI).

      Logo se aplicam ao Nano, as mesmas conclusões que apresentei no post anterior.

      Você pode conferir via esquemático, conforme a figura a seguir, onde salientei os três sinais na cor "rosa claro":

(clique na figura para "zoom")

      Abrçs,

      Elcids

Elcids, bom dia!

Eu havia dado a informação errada acima. Falei do Nano, mas na verdade seria o Arduino Leonardo que tem os pinos da ICSP independentes dos pinos digitais, segundo este artigo:

https://br-arduino.org/2015/05/arduino-icsp-attiny-atmega.html, de onde tirei as imagens acima.

Foi daí que surgiram todas as dúvidas.

Agradeço mais uma vez a todos pelas informações.

olá Cintra.

      Eu tive alguma cisma de que vc talvez estive querendo se referir ao Arduino  "Leonardo",  mas acabei achando que era o Nano  devido à algumas diferenças entres estas plataformas de Hardware.

      Mas realmente,  no "Leonardoos sinais no conector "ICSP" não coincidem com os I/Os "11" a "13" do Arduino.  Logo,  vc pode usar a Interface SPI  ali disponível, e ainda ter os I/Os  livres para usar como desejar.

      No entanto, atente para a seguinte e interessante combinação:  Arduino Nano + nRF24L01 + Expansor de I/O I2C.  Veja que ela tem custo menor e ocupa cerca de 1/3 do espaço físico que um Leonardo + nRF24L01  irá ocupar, e sendo também mais flexível.

      Abrçs,

      Elcids

Amigo José Augusto cheguei tarde, 

Mas os colegas do Lab já resolveram a sua dúvida.

Abraços 

Gustavo 

Gustavo, agradeço mesmo assim.

Grande abraço!

Bom dia, 

O diagrama esquemático do Arduino Leonardo (site oficial) :

https://www.arduino.cc/en/uploads/Main/arduino-leonardo-schematic_3...

No Leonardo, como vi no diagrama, existem dois ATMEGA32U4.

O Chip U1 ATMega32U4-XUMU que faz parte da Interface Serial/USB. 

O Chip U2 ATMega32U4-XUAU é o Micro-controlador principal. 

A interface ICSP/SPI esta conectada no Chip principal U2. 

Mas na imagem da placa, não dá para ver esses dois Chips, somente um???

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço