ds2430 как записать данные в память

teslarvz
Offline
Зарегистрирован: 20.03.2019

Здравствуйте всем! Не могу записать данные в память ds2430. Пользую этот код программы ,читает все хорошо , а записывать не записывает.

#include <DS2431.h>
#include <OneWire.h>
 
const int ONE_WIRE_PIN = 10; // One Wire pin, change according to your needs. A 4.7k pull up resistor is needed.
 
OneWire oneWire(ONE_WIRE_PIN);
DS2431 eeprom(oneWire);
 
void setup()
{
  Serial.begin(115200);
  while (!Serial); // wait for Serial to come up on USB boards
 
  // Search the 1-Wire bus for a connected device.
  byte serialNb[8];
  oneWire.target_search(DS2431::ONE_WIRE_FAMILY_CODE);
  if (!oneWire.search(serialNb))
  {
    Serial.println("No DS2431 found on the 1-Wire bus.");
    return;
  }
 
  // Check serial number CRC
  if (oneWire.crc8(serialNb, 7) != serialNb[7])
  {
    Serial.println("A DS2431 was found but the serial number CRC is invalid.");
    return;
  }
 
  Serial.print("DS2431 found with serial number : ");
  printBuffer(serialNb, 8);
  Serial.println("");
 
  // Initialize DS2431 object
  eeprom.begin(serialNb);
 
  // Read all memory content
  byte data[16];
  eeprom.read(0, data, sizeof(data));
 
  Serial.println("Memory contents : ");
  printLargeBuffer(data, sizeof(data));
  Serial.println("");
 
  // Write a 8-byte row
  byte newData[8] = {1,2,3,4,5,6,7,8};
  word address = 1;
  
  if (eeprom.write(address, newData, sizeof(newData)))
  {
    Serial.print("Successfully wrote new data @ address ");
    Serial.println(address);
  }
  else
  {
    Serial.print("Failed to write data @ address ");
    Serial.println(address);
  }
  Serial.println("");
 
  // Read again memory content
  eeprom.read(0, data, sizeof(data));
 
  Serial.println("Memory contents : ");
  printLargeBuffer(data, sizeof(data));
  Serial.println("");
 
  // Read single byte
  Serial.print("Data @ address ");
  Serial.print(address);
  Serial.print(" : ");
  Serial.println(eeprom.read(address));
}
 
void loop()
{
  // Nothing to do
}
 
void printBuffer(const uint8_t *buf, uint8_t len)
{
  for (int i = 0; i < len-1; i++)
  {
    Serial.print(buf[i], HEX);
    Serial.print(",");
  }
  Serial.println(buf[len-1], HEX);
}
 
void printLargeBuffer(const uint8_t *buf, uint16_t len)
{
  uint8_t bytesPerLine = 8;
 
  for (int i = 0; i < len / bytesPerLine; i++)
  {
    Serial.print(i * bytesPerLine);
    Serial.print("\t\t:");
    printBuffer(buf + i * bytesPerLine, bytesPerLine);
  }
}
teslarvz
Offline
Зарегистрирован: 20.03.2019

В даполнение выдает такие данные

 No DS2431 found on the 1-Wire bus.

DS2431 found with serial number : *********
 
Memory contents : 
0 :47,6D,15,41,73,C8,5A,17
8 :3C,85,A4,73,C8,B0,F0,A5
 
Failed to write data @ address 0
 
Memory contents : 
0 :47,6D,15,41,73,C8,5A,17
8 :3C,85,A4,73,C8,B0,F0,A5
 
Data @ address 0 : 71
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. Изучите вот эту  тему

2. перепостите заново (в этой же теме, новым постом)

teslarvz
Offline
Зарегистрирован: 20.03.2019

Здравствуйте всем! Не могу записать данные в память ds2430. Пользую этот код программы ,читает все хорошо , а записывать не записывает.

#include <DS2431.h>
#include <OneWire.h>
 
const int ONE_WIRE_PIN = 10; // One Wire pin, change according to your needs. A 4.7k pull up resistor is needed.
 
OneWire oneWire(ONE_WIRE_PIN);
DS2431 eeprom(oneWire);
 
void setup()
{
  Serial.begin(115200);
  while (!Serial); // wait for Serial to come up on USB boards
 
  // Search the 1-Wire bus for a connected device.
  byte serialNb[8];
  oneWire.target_search(DS2431::ONE_WIRE_FAMILY_CODE);
  if (!oneWire.search(serialNb))
  {
    Serial.println("No DS2431 found on the 1-Wire bus.");
    return;
  }
 
  // Check serial number CRC
  if (oneWire.crc8(serialNb, 7) != serialNb[7])
  {
    Serial.println("A DS2431 was found but the serial number CRC is invalid.");
    return;
  }
 
  Serial.print("DS2431 found with serial number : ");
  printBuffer(serialNb, 8);
  Serial.println("");
 
  // Initialize DS2431 object
  eeprom.begin(serialNb);
 
  // Read all memory content
  byte data[16];
  eeprom.read(0, data, sizeof(data));
 
  Serial.println("Memory contents : ");
  printLargeBuffer(data, sizeof(data));
  Serial.println("");
 
  // Write a 8-byte row
  byte newData[8] = {1,2,3,4,5,6,7,8};
  word address = 1;
  
  if (eeprom.write(address, newData, sizeof(newData)))
  {
    Serial.print("Successfully wrote new data @ address ");
    Serial.println(address);
  }
  else
  {
    Serial.print("Failed to write data @ address ");
    Serial.println(address);
  }
  Serial.println("");
 
  // Read again memory content
  eeprom.read(0, data, sizeof(data));
 
  Serial.println("Memory contents : ");
  printLargeBuffer(data, sizeof(data));
  Serial.println("");
 
  // Read single byte
  Serial.print("Data @ address ");
  Serial.print(address);
  Serial.print(" : ");
  Serial.println(eeprom.read(address));
}
 
void loop()
{
  // Nothing to do
}
 
void printBuffer(const uint8_t *buf, uint8_t len)
{
  for (int i = 0; i < len-1; i++)
  {
    Serial.print(buf[i], HEX);
    Serial.print(",");
  }
  Serial.println(buf[len-1], HEX);
}
 
void printLargeBuffer(const uint8_t *buf, uint16_t len)
{
  uint8_t bytesPerLine = 8;
 
  for (int i = 0; i < len / bytesPerLine; i++)
  {
    Serial.print(i * bytesPerLine);
    Serial.print("\t\t:");
    printBuffer(buf + i * bytesPerLine, bytesPerLine);
  }
}

В даполнение выдает такие данные

 No DS2431 found on the 1-Wire bus.

DS2431 found with serial number : *********
 
Memory contents : 
0 :47,6D,15,41,73,C8,5A,17
8 :3C,85,A4,73,C8,B0,F0,A5
 
Failed to write data @ address 0
 
Memory contents : 
0 :47,6D,15,41,73,C8,5A,17
8 :3C,85,A4,73,C8,B0,F0,A5
 
Data @ address 0 : 71
teslarvz
Offline
Зарегистрирован: 20.03.2019

Да ответов и советов куча ! У меня все получилось . Пишите кому интересно.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Мне не интересно про 2431. Интересно другое, если в вашем софте использовать более ОДНОЙ 2431 - софт будет работать?

teslarvz
Offline
Зарегистрирован: 20.03.2019

Нет я думаю!