Arduino Forum

International => Portugues => Topic started by: bruguink on Oct 09, 2012, 07:16 pm

Title: protocolo i2c
Post by: bruguink on Oct 09, 2012, 07:16 pm
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.

obrigado e abraço
Title: Re: protocolo i2c
Post by: mmoscz on Oct 09, 2012, 07:45 pm
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
Title: Re: protocolo i2c
Post by: AlxDroidDev on Oct 09, 2012, 07:51 pm
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.
Title: Re: protocolo i2c
Post by: AlxDroidDev on Oct 09, 2012, 07:52 pm
Na verdade, a sua melhor chance aqui é usar um outro Arduino, como um Mega 2560 ou algo baseado no 1284.

Você não conseguirá fazer isto no Uno, Nano ou Duemilanuove.
Title: Re: protocolo i2c
Post by: mmoscz on Oct 09, 2012, 07:57 pm
Pode tentar essa biblioteca SoftI2CMaster

http://todbot.com/blog/2010/09/25/softi2cmaster-add-i2c-to-any-arduino-pins/ (http://todbot.com/blog/2010/09/25/softi2cmaster-add-i2c-to-any-arduino-pins/)
Title: Re: protocolo i2c
Post by: bubulindo on Oct 09, 2012, 08:11 pm

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:

http://www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html
http://extremeelectronics.co.in/avr-tutorials/software-i2c-library-for-avr-mcus/
http://www.insidegadgets.com/2012/02/12/avr-soft-i2c-master-with-example-for-i2c-eeproms/


Esta é a minha fonte favorita para código C para AVRs.

http://homepage.hispeed.ch/peterfleury/avr-software.html

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

Title: Re: protocolo i2c
Post by: AlxDroidDev on Oct 09, 2012, 09:32 pm

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.

Title: Re: protocolo i2c
Post by: bubulindo on Oct 10, 2012, 07:06 am
ahh ok, my bad.
Title: Re: protocolo i2c
Post by: hugo007 on Oct 10, 2012, 01:40 pm
Ola pessoal tava aqui a ler o post e encontrei isto que me deixou com duvidas.O colega mmoscz disse isto
Quote
Então melhor seria usar um 4051 para multiplexar para entradas analógicas


Podes explicar melhor isto? Tas a dizer que podes comutar a entrada analogica com o mux?? :smiley-eek-blue: :smiley-red:
Title: Re: protocolo i2c
Post by: hugo007 on Oct 10, 2012, 01:47 pm
Apos ler o datasheet do 4051 vi a tua sugestao, lapso meu nao sabia que ele era analogico :D
Mesmo assim pergunto te se ja testaste essa configuraçao em algum projecto e qual a fiabilidade dos valores analogicos na saida.
Title: Re: protocolo i2c
Post by: mmoscz on Oct 10, 2012, 01:47 pm
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)
Title: Re: protocolo i2c
Post by: mmoscz on Oct 10, 2012, 01:49 pm
Eu faço parte da claque desse CI, já salvou muitos projetos meus...


Apos ler o datasheet do 4051 vi a tua sugestao, lapso meu nao sabia que ele era analogico :D

Title: Re: protocolo i2c
Post by: hugo007 on Oct 10, 2012, 01:51 pm
Muito boa dica vou apontar este mux aqui num byte do meu cerebro para quando tiver esse problema de poucas analogicas.
Bons estudos colega
Title: Re: protocolo i2c
Post by: bubulindo on Oct 10, 2012, 01:56 pm

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.
Title: Re: protocolo i2c
Post by: mmoscz on Oct 10, 2012, 02:15 pm


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?
Title: Re: protocolo i2c
Post by: bubulindo on Oct 10, 2012, 05:03 pm
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.
Title: Re: protocolo i2c
Post by: mmoscz on Oct 10, 2012, 05:04 pm
Entendi.
Title: Re: protocolo i2c
Post by: hugo007 on Oct 10, 2012, 06:59 pm
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:
Quote
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
Title: Re: protocolo i2c
Post by: bubulindo on Oct 10, 2012, 09:46 pm
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?
Title: Re: protocolo i2c
Post by: hugo007 on Oct 10, 2012, 11:13 pm
Penso que o Karma é uma forma de agradecer ao usuario mas...