Работа С Eeprom - Помогите Считать Данные в Arduino
- Войдите на сайт для отправки комментариев
Привет, хочу считать данные с такого чипа: (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 не могу найти.
Вставка программного кода в тему/комментарий
Вот здесь по работе с еепромом по и2с. На аглицком, но разобраться можно.
Спасибо.
Разобрался, вопрос снят.