Estou pensando em um projeto que exigiria vários AVRs conversando entre si por um ônibus. Eles seriam separados por até 6 pés.
Parece que tanto o I2C quanto o SPI podem permitir que uma série de micros se comunique através de um barramento, mas não vi nada falando sobre quanto tempo isso levaria. Alguém já tentou conectar esses protocolos a distâncias de vários metros?
avr
spi
i2c
digital-communications
edebill
fonte
fonte
Respostas:
Como já foi dito, o SPI e o I2C podem ser usados em longas distâncias, desde que os resistores pull-up, as frequências do relógio e assim por diante.
As principais alternativas (que proporcionam melhor imunidade ao ruído) são RS485 e CAN . Ambos usam linhas diferenciais para minimizar problemas de ruído e são mais adequados para esse comprimento de transmissão de dados do que I2C ou SPI. No entanto, acho que muitos AVRs não vêm com periféricos CAN integrados, o que facilita o uso do CAN.
Eu diria que a coisa mais importante a considerar ao escolher um barramento é garantir que o protocolo usado para comunicação entre dispositivos inclua um CRC ou equivalente, para que você possa determinar se uma mensagem foi recebida corretamente (a CAN tem isso como parte do o pacote). Considerando isso, também é útil ter uma resposta do tipo ACK / NACK como parte do protocolo, para que uma mensagem corrompida possa ser retransmitida.
fonte
Vários pés não devem ser problemáticos, basta usar fios torcidos, se puder. O SPI é muito mais fácil de armazenar em buffer (se necessário) do que o I2C, pois os sinais do SPI são todos unidirecionais, enquanto os sinais do I2C estão em linhas compartilhadas.
os microcontroladores AVR podem lidar com os modos escravo I2C e SPI, bem como os modos mestre? (você precisaria de ambos)
fonte
Para o I2C em longas distâncias, você pode procurar algumas soluções "I2C bus repeteater". Lembre-se de que qualquer distância máxima encontrada para a comunicação I2C ou SPI refere-se principalmente à distância total do barramento e não à distância entre dois nós em um barramento.
Você pode procurar no RS485 esses tipos de problemas. É um protocolo de barramento serial que se comunica através de linhas diferenciais; portanto, ao usar fios trançados, as chances de ruído são minimizadas. Distâncias muito longas podem ser alcançadas dessa maneira. A desvantagem seria que você precisaria de um IC codificador RS485 extra (como um MAX485, não muito caro) em seu circuito.
fonte
Uma vantagem ainda não mencionada do SPI sobre o I2C é que todos os fios do SPI são unidirecionais e sempre são conduzidos alto ou baixo. Isso permite uma comunicação muito mais rápida do que é possível com o I2C, reduz a suscetibilidade ao ruído e permite que portões simples sejam usados como repetidores. Outra opção útil é a comunicação assíncrona simples (um fio em cada direção). A única desvantagem que vejo para assíncrona a comunicação é que ela geralmente exige que os dois lados estejam "acordados", com um relógio estável, para trocar dados.
Para um projeto meu, usei um protocolo SPI de 3 fios levemente modificado e achei os resultados satisfatórios. Envio dados de bitmap de exibição (em que a corrupção ocasional de dados não seria grande coisa) a 10mbps e outros dados a 2,5mbps sem dificuldade.
fonte
Embora o I2C e o SPI sejam projetados para viagens de curta distância (algumas polegadas), ambas podem ser utilizadas em viagens mais longas com cabo adequado e atenção à capacitância geral do barramento.
Embora eu tenha pouca experiência com SPI, o I2C não é terrivelmente difícil, pois você sempre precisa calcular o tamanho adequado para o seu resistor de pull-up. Além disso, existem buffers I2C dedicados e baratos que são bastante fáceis de usar. No entanto, você ainda precisará usar um resistor de pull-up de tamanho adequado para sua rede.
Eu usei o I2C para conectar em rede entre dois AVRs a uma distância de 8 pés, usando apenas resistores pull-up e cabo trançado de alta qualidade, bem blindado.
fonte
Como muitos sugeriram, o I2C e o SPI são mais usados para distâncias curtas. Embora seja possível implementar uma solução com essas interfaces, eu recomendo que você procure uma solução "mais padrão" diferente (por exemplo, Ethernet, RS485, CAN, etc.). - Especialmente se você planeja usar cabos para atingir a distância de 6 pés entre microcontroladores.
fonte
Apenas um FYI, a interface entre o controle remoto sem fio Nintendo Wii e seu companheiro Nunchuck usa o I2C através de um cabo com cerca de um metro de comprimento. Existem também cabos de extensão de 3 pés que estendem o comprimento total para cerca de 6 pés. Não é exatamente o mesmo da sua configuração (apenas dois dispositivos conectados juntos), mas é um exemplo de I2C através de um cabo em um produto de consumo amplamente usado.
fonte
Trabalhei em um projeto envolvendo cerca de 80 nós baseados em AVR em uma rede em estrela que se comunica pelo I2C. Foi uma bagunça total e não funcionou no final. A atualização de todos os nós levou segundos e uma conexão defeituosa eliminaria toda a rede. A última vez que falei com o cara que criou os nós, ele disse que parou de usar o I2C para projetos como este. Infelizmente, não sei por que especificamente o I2C foi inadequado aqui.
fonte
Deve ser fácil com essas distâncias curtas. O que você pode fazer é descobrir o que essas distâncias e seu cabeamento significam em termos de capacitância e impedância de linha e ver que tipo de frequências (tempos de subida / descida) você pode obter através delas. Além de certo ponto, é melhor tratá-los como linhas de transmissão. Se parecer ruim, você pode realmente mudar para outra linha serial como EIA-232 ou 422. Isso pode significar um chip extra nas duas extremidades, mas vai se estender muito. Se você realmente precisa ir rápido e longe, precisará de algo mais (ethernet, não conte rádio ou laser :).
fonte
Se você pode controlar a velocidade do relógio e não precisar de transferência de dados em alta velocidade, tente desacelerar o relógio. Isso o tornará menos suscetível ao ruído.
fonte