Работа С Eeprom - Помогите Считать Данные в Arduino

646826
646826 аватар
Offline
Зарегистрирован: 01.11.2012

Привет, хочу считать данные с такого чипа: (http://www.gaw.ru/ht...tton/ds1971.htm)
DS1971 - 256 бит EEPROM + 64 бита
особенности:
256 бит перезаписываемой энергонезависимой памяти
EEPROM организована как одна 256 байтная страница
64 бит одноразово программируемой памяти, которая автоматически защищается от записи после программирования
Контроль, адресация и питание по одному проводу
8 битный идентификационный код семейства DS1971 для идентификации ридером
Диапазон напряжения питания от 2,8 В до 6,0 В во всем температурном диапазоне от -40°C до +85°C

Пробовал разобраться используя статью http://robocraft.ru/...rduino/118.html, но все глухо.

Нашел документ по этому чипу http://www.ibutton.r...1991_ru_new.pdf

Это так-же подходит для этого чипа:
первые 8 бит — номер серии устройства (01h)
следующие 48 бит — уникальный серийный номер
последние 8 бит — CRC-код предыдущих 56 бит информации :)

Это так-же подходит для этого чипа:
первые 8 бит — номер серии устройства (01h)
следующие 48 бит — уникальный серийный номер
последние 8 бит — CRC-код предыдущих 56 бит информации :)

#include <OneWire.h>
OneWire ds(10); // на digital pin 10
void setup(void) { Serial.begin(9600); }
void loop(void) {
byte i; byte present = 0; byte data[12]; byte addr[8];
if ( !ds.search(addr))[color=#0000BF] // по описанию функция ищет устройство, и записывает в addr 8 byte этого устройства.[/color]
{
Serial.print("No more addresses.\n");
ds.reset_search(); [color=#0000BF]// начинаем новый поиск устройства[/color]
return;
}
Serial.print("R="); for( i = 0; i < 8; i++) { Serial.print(addr[i], HEX); Serial.print(" "); }
[color=#0000BF]//(Cyclic redundancy code, CRC — циклический избыточный код) —
//способ цифровой идентификации некоторой последовательности данных, который заключается в
//вычислении контрольного значения её циклического избыточного кода.
//OneWire::crc8 - не совсем понятно, зачем делаем и почему результат сравниваем с addr[7]
//Могу предположить что проверяется, это Dallas устройство или нет, по скольку в коде видно что данные проверяются из массива dscrc_table
//но понимания пока нет, почему addr[7], хотя можно предположить что там лежит crc код...[/color]
if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.print("CRC is not valid!\n"); return; }
if (addr[0] == 20) { Serial.print("Device is a DS1991 family device.\n"); [color=#0000BF]//не знаю на сколько это правда, но у меня так[/color]}
else if(addr[0] == 0x1) {Serial.print("Device is a DS1990A family device.\n"); }
Serial.println(); ds.reset(); delay(1000);}

В коде выше выводится серийный номер устройства.

А как прочитать EEPROM не могу найти.

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

Вот здесь по работе с еепромом по и2с. На аглицком, но разобраться можно.

646826
646826 аватар
Offline
Зарегистрирован: 01.11.2012

Спасибо.
Разобрался, вопрос снят.