Помогите связаться с 24с01 EEPROM

ARDUIN
Offline
Зарегистрирован: 10.11.2013

Добрый день. Не могу обуздать i2c протокол с микросхемой 24с01. Ниже скетч. Что не так? Сериал молчит

Адрес выставил А0. Все А1, А2, А0 - на минусе.

// Wire Master Writer
// by Nicholas Zambetti <http://www.zambetti.com>

// Demonstrates use of the Wire library
// Writes data to an I2C/TWI slave device
// Refer to the "Wire Slave Receiver" example for use with this

// Created 29 March 2006

// This example code is in the public domain.

#define aD  0xA0
#include <Wire.h>

void setup()
{
  Serial.begin(9600);
  Wire.begin(); // join i2c bus (address optional for master)
  delay(15);
}

byte x = 0;

void WRITE(byte adress, byte date)
{
  Wire.beginTransmission(aD); // transmit to device #4
  Wire.send(adress);        // sends five bytes
  Wire.send(date);              // sends one byte  
  Wire.endTransmission();  
}

void READ(byte adress)
{
  Wire.beginTransmission(aD);
  Wire.send(adress);
  Wire.requestFrom(aD, 1);    // request 6 bytes from slave device #2

  while(Wire.available())    // slave may send less than requested
  { 
    char c = Wire.receive(); // receive a byte as character
    Serial.println(c);         // print the character
  }
  
}

void loop()
{
// stop transmitting
WRITE(x,x);
  
  delay(500);
  
READ(x);

  delay(500);
  x++;
}

 

maksim
Offline
Зарегистрирован: 12.02.2012

Какие А0, А1, А2 ?

http://www.atmel.com/Images/doc0134.pdf

Или в маркеровке флэшки еще какие буковки есть?

http://www.atmel.com/Images/doc0180.pdf

ARDUIN
Offline
Зарегистрирован: 10.11.2013

Маркировка

24c01WP

k2W713

 

ARDUIN
Offline
Зарегистрирован: 10.11.2013

Я так начал понимать, что они ещё все разные!!! Во мура. Так какой же у меня адрес?

maksim
Offline
Зарегистрирован: 12.02.2012

В общем либо попробуйте обращаться к байту без адреса девайса, то есть адрес девайса это и есть адрес байта от 0 до 127:

void WRITE(byte adress, byte date)
{
  Wire.beginTransmission(adress); // transmit to device #4    
  Wire.write(date);              // sends one byte  
  Wire.endTransmission();  
}

Либо адрес байта должен состоять из двух байт:

void WRITE(unsigned int adress, byte date)
{
  Wire.beginTransmission(aD); // transmit to device #4
  Wire.write(lowByte(adress));       
  Wire.write(highByte(adress));        
  Wire.write(date);              // sends one byte  
  Wire.endTransmission();  
}

 

maksim
Offline
Зарегистрирован: 12.02.2012

И вы какой версией ИДЕ пользуетесь? Меняйте все send'ы на write'ы и скачайте актуальную версию ИДЕ 1.0.х (но не 1.5.х).

ARDUIN
Offline
Зарегистрирован: 10.11.2013

Да я уже во всех версиях перепробовал. Взял 0020ую. За совет спасибо. Понял. Но это уже завтра ибо поздно. Спасибо еще раз, что ответили. Завтра отпишусь))))