sexta-feira, 30 de julho de 2010

Ethernet Shield

Desde meados de 2009 fabrico o Ethernet Shield com o ENC28J60 da Microchip. O hardware é simples e permite permite que o preço fique bem acessivel aos que necessitam este tipo de comunicação. Ao contrario dos shields com o W5100 da Wiznet este shield precisa da biblioteca específica para funcionar. Seguem specs:

- O Arduino usa os pinos digitais 2,10, 11, 12 e13 (SPI) para se comunicar com o ENC28J60;
- Placa com conector RJ45 padrão de mercado com leds;
- O botão de reset na placa permite o reset do Arduino e do chip ENC28J60 simultaneamente;
- Para uso deste shield é necessário uma fonte externa de 9V x 1A (500mA a 1A);
- A pilha TCP/IP é open source;- Possui exemplos de PING, Web serve e Web Client.




Datasheet do ENC28J60 -> Link
Biblioteca do Shield -> Link

quinta-feira, 29 de julho de 2010

i2c No Arduino

Desde o final de 2009 tenho tentado fazer a expansão i2C do Arduino funcionar corretamente. Achei varios códigos mas nenhum respondia para o PCF8574 da Philips que é uma expansão bidirecional de 8 portas. Ontem finalmente, usando o IO shield eu consegui fazer o dito cujo funcionar corretamente. Na primeira foto a montagem do PCF com dois leds.


Demorou mas funcionou. Basicamente oq ue faltava era corrente para alimentação do conjunto e os resistores no bus i2C, o que impedia que a comunicação acontecesse.

Eu utilizei o seguinte código:
/*
Test program for PCF8574 I2C I/O expander
- Blinks all ports low then high.
by Ford
*/

#include

#define expander B0100000 // Address with three address pins grounded.
// Note that the R/W bit is not part of this address.

void setup() {
Wire.begin();
Serial.begin(9600);

}

void loop() {
Serial.println("LED OFF");
expanderWrite(B00000000);
Serial.print("Read: ");
Serial.println(expanderRead(), BIN);
delay(1000);
Serial.println("LED ON");
expanderWrite(B00100000);
Serial.print("Read: ");
Serial.println(expanderRead(), BIN);
delay(1000);
}


void expanderWrite(byte _data ) {
Wire.beginTransmission(expander);
Wire.send(_data);
Wire.endTransmission();
}

byte expanderRead() {
byte _data;
Wire.requestFrom(expander, 1);
if(Wire.available()) {
_data = Wire.receive();
}
return _data;
}



Origem do código -> Link
A segunda parte consistia em colocar o i2C para funcionar na placa de relés/entradas digitais.



A proxima etapa é colocar tudo para funcionar em Processing e na sequencia integrar com o Ethernet Shield.