На днях прикрутил к Arduino флешку (микросхема AT24C512 от все того же ATMEL - емкость 65 Кбайт или 512Кбит). В принципе, с аппаратной библиотекой I2C получилось более чем тривиально.
Выводы микросхемы : A0,A1 сажаем на GND, за компанию с WP. SCL и SDA подключаем к аналоговым выводам Arduino (a4,a5) и притягиваем каждый через 5,1К к VCC.
Скетч:
/* Подключение AT2424C15 по I2C */ #define ADDR 0x50 void setup() { Wire.begin(); Serial.begin(38400); randomSeed(analogRead(0)); } void readByte(unsigned int addr) { Wire.beginTransmission(ADDR); Wire.send( (byte) addr >> 8 ); Wire.send( (byte) addr & 0xff ); Wire.endTransmission(); Wire.requestFrom(ADDR, 1); } void writeByte(unsigned int addr, byte b) { Wire.beginTransmission(ADDR); Wire.send( (byte) addr >> 8 ); Wire.send( (byte) addr & 0xff ); Wire.send ( b ); Wire.endTransmission(); } void loop() { if (Wire.available()) { Serial.println(Wire.receive(),HEX); } int cmd = Serial.read(); if (cmd != -1) { if (cmd == 'R') { readByte(0); } if (cmd == 'W') { long b = random(0,255); writeByte(0,b); Serial.println(b,HEX); } } }
Запускаем консольку на 38400, по команде W пишется случайное значение в нулевой адрес, по команде R его можно оттуда же прочитать. Адрес чипа - 0x50, если A0 и A1 притянуты к GND. Если подать на них одну из четырех комбинаций адреса, можно общаться с четырьмя разными чипами, "сидящими" на одной I2C, только надо правильно учитывать адрес (50,51,52,53).
Комментариев нет:
Отправить комментарий