Привет, хочу считать данные с такого чипа: (http://www.gaw.ru/html.cgi/txt/ic/Maxim/ibutton/ds1971.htm)
DS1971 - 256 бит EEPROM + 64 бита
особенности:
256 бит перезаписываемой энергонезависимой памяти
EEPROM организована как одна 256 байтная страница
64 бит одноразово программируемой памяти, которая автоматически защищается от записи после программирования
Контроль, адресация и питание по одному проводу
8 битный идентификационный код семейства DS1971 для идентификации ридером
Диапазон напряжения питания от 2,8 В до 6,0 В во всем температурном диапазоне от -40°C до +85°C
Пробовал разобраться используя статью http://robocraft.ru/blog/arduino/118.html, но все глухо.
Нашел документ по этому чипу http://www.ibutton.ru/pdf/Dallas_Sem/ibutton/rus/DS1991_ru_new.pdf
Это так-же подходит для этого чипа:
первые 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)) // по описанию функция ищет устройство, и записывает в addr 8 byte этого устройства.
{
Serial.print("No more addresses.\n");
ds.reset_search(); // начинаем новый поиск устройства
return;
}
Serial.print("R="); for( i = 0; i < 8; i++) { Serial.print(addr[i], HEX); Serial.print(" "); }
//(Cyclic redundancy code, CRC — циклический избыточный код) —
//способ цифровой идентификации некоторой последовательности данных, который заключается в
//вычислении контрольного значения её циклического избыточного кода.
//OneWire::crc8 - не совсем понятно, зачем делаем и почему результат сравниваем с addr[7]
//Могу предположить что проверяется, это Dallas устройство или нет, по скольку в коде видно что данные проверяются из массива dscrc_table
//но понимания пока нет, почему addr[7], хотя можно предположить что там лежит crc код...
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"); //не знаю на сколько это правда, но у меня так}
else if(addr[0] == 0x1) {Serial.print("Device is a DS1990A family device.\n"); }
Serial.println(); ds.reset(); delay(1000);}
В коде выше выводится серийный номер устройства.
А как прочитать EEPROM не могу найти.
Раздел: Arduino
DS1971 - 256 бит EEPROM + 64 бита
особенности:
256 бит перезаписываемой энергонезависимой памяти
EEPROM организована как одна 256 байтная страница
64 бит одноразово программируемой памяти, которая автоматически защищается от записи после программирования
Контроль, адресация и питание по одному проводу
8 битный идентификационный код семейства DS1971 для идентификации ридером
Диапазон напряжения питания от 2,8 В до 6,0 В во всем температурном диапазоне от -40°C до +85°C
Пробовал разобраться используя статью http://robocraft.ru/blog/arduino/118.html, но все глухо.
Нашел документ по этому чипу http://www.ibutton.ru/pdf/Dallas_Sem/ibutton/rus/DS1991_ru_new.pdf
Это так-же подходит для этого чипа:
первые 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)) // по описанию функция ищет устройство, и записывает в addr 8 byte этого устройства.
{
Serial.print("No more addresses.\n");
ds.reset_search(); // начинаем новый поиск устройства
return;
}
Serial.print("R="); for( i = 0; i < 8; i++) { Serial.print(addr[i], HEX); Serial.print(" "); }
//(Cyclic redundancy code, CRC — циклический избыточный код) —
//способ цифровой идентификации некоторой последовательности данных, который заключается в
//вычислении контрольного значения её циклического избыточного кода.
//OneWire::crc8 - не совсем понятно, зачем делаем и почему результат сравниваем с addr[7]
//Могу предположить что проверяется, это Dallas устройство или нет, по скольку в коде видно что данные проверяются из массива dscrc_table
//но понимания пока нет, почему addr[7], хотя можно предположить что там лежит crc код...
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"); //не знаю на сколько это правда, но у меня так}
else if(addr[0] == 0x1) {Serial.print("Device is a DS1990A family device.\n"); }
Serial.println(); ds.reset(); delay(1000);}
В коде выше выводится серийный номер устройства.
А как прочитать EEPROM не могу найти.
Раздел: Arduino