boas a todos,
Preciso que me digam se é possível construir um protocolo i2c sem utilizar as entradas analógicas já preparadas para esse efeito (no caso do Arduino Nano são os pinos analógicos 4(sda) e 5(slc)). posso por exemplo construir esse protocolo em 2 pinos digitais? se sim, como poderei fazer isso? alguma sugestão?
eu pergunto isso porque no meu projecto necessito de utilizar todas as entradas analógicas para recolher os dados de 8 sensores de carga e preciso de um protocolo i2c para recolher dados de um sensor de temperatura/humidade.
Desculpa a ignorância, mas se precisa de 8 entradas, como vai fazer se há apenas 6 pinos analógicos???
Então melhor seria usar um 4051 para multiplexar para entradas analógicas e usar o pinos 4-5 para o I2C
Eu pesquisei em twi.c, twi.h, tentando ver se era possível apenas alterar a designação dos pinos, mas acontece que esta designação tem mais a ver com o hardware do que com uma atribuição arbitrária do software.
Ou seja: a biblioteca apenas mapeia os pinos 4 e 5 para os respectivos SDA e SCL no chip Atmel.
AlxDroidDev:
Você não conseguirá fazer isto no Uno, Nano ou Duemilanuove.
Não sei a que te referias... mas o protocolo I2C é dos mais simples de implementar devido a não haver requerimentos muito apertados relativamente a temporizacões (como nas UARTS, por exemplo).
Existem já várias bibliotecas escritas, como a que o mmoscz meteu ou então para quem quiser mais info:
Ele tem um .zip com uma quantidade incrível de bibliotecas prontas a usar. Por vezes pode ser necessário um pouco de conhecimentos avancados de C para entender as instrucões de compilacão, mas não é nada que não se faca com um pouco de lógica e um manual ao lado. Com um pouco de sorte tem código de interface para o teu sensor de temperatura/humidade...
bubulindo:
Não sei a que te referias... mas o protocolo I2C é dos mais simples de implementar devido a não haver requerimentos muito apertados relativamente a temporizacões (como nas UARTS, por exemplo).
A implementação do I2C não é problema, até porque ela é das mais simples e a biblioteca Wire já encapsula tudo que precisamos.
O que eu quis dizer é que os modelos de Arduinos que listei não possuem portas analógicas o suficiente (6 ao todo) para atender sua demanda. Se você separar 2 para dispositivos I2C, sobram-lhe apenas 4 portas analógicas. Já no Mega2560, você teria mais que o dobro disto, portanto conseguiria facilmente fazer o que deseja em um 2560 ou no 1284.
Apos ler o datasheet do 4051 vi a tua sugestao, lapso meu nao sabia que ele era analogico
Mesmo assim pergunto te se ja testaste essa configuraçao em algum projecto e qual a fiabilidade dos valores analogicos na saida.
O 4051 é um mux/demux analógico, tu tens 6 entradas analógicas no Arduino UNO/Duemillanove (pelo que li, o mini tem 8 entradas analógicas), com o 4051, ligado a uma das portas analógicas poderá ler os oito sensores, mas tens que usar 4 pinos do arduino para isso, 1 pino Analógico e 3 pinos para o endereçamento do 4051 (até mesmo pode usar 3 pinos analógicos como "digitais", para endereçar o 4051)
mmoscz:
Eu faço parte da claque desse CI, já salvou muitos projetos meus...
Estava aqui a pensar porque é que isso nunca me tinha acontecido e lembrei-me que quando precisei de comutar sinais analógicos, o mux perdia mais corrente do que a que eu ia medir. Mas é muito boa dica.
mmoscz:
Eu faço parte da claque desse CI, já salvou muitos projetos meus...
Estava aqui a pensar porque é que isso nunca me tinha acontecido e lembrei-me que quando precisei de comutar sinais analógicos, o mux perdia mais corrente do que a que eu ia medir. Mas é muito boa dica.
Como isso acontecia? O chip consumia muita corrente dos sensores?
Perdas... quando entramos na gama dos Giga Ohm, qualquer coisinha serve para estragar a medicão.
Acabei por conseguir o que pretendia com um amp-op que na altura (2003) custava cerca de 30 euro. Cada um... :S mais uma fonte de corrente e uns relés.
De facto essa é uma questao a qual me interrogo, alguem ja testou comparar o sinal quer em tensao ou em corrente que entra e sai do mux.
No datasheet vem mencionado o seguinte:
Low ``ON'' resistance: 80 Ohms (typ.) over entire 15Vp-p signal-
input range for VDDbVEEe15V
Por isso a saida saira ligeiramente atenuada deduzo.Bom bom era uma imagem de osciloscopio a comparar, isto porque quando se trabalha com analogicas tudo é importante
O mux, a não ser que se opte por um esquema exótico (como o meu de comutar ganhos na amplificacão), ficaria na saída do andar de amplificacão. Como esse andar introduz sempre erro, o mux poderia ser compensado directamente com uma calibracão. A questão é, qual a variacão do mux com temperatura e chips diferentes...
Alguém que se dedique a experimentar isso?
Já agora, que é esta cena do karma que aparece debaixo do nosso nome?