Arduino:Примеры/DS250x PROM
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Чтение данных с PROM-чипа DS250x[1]
Этот пример показывает, как считывать данные с PROM-чипа семейства DS250x.
Код
/*
Скетч, считывающий данные с PROM-чипа DS250x при помощи функции SKIP ROM.
DS250x – это PROM-чип типа «add-only» (то есть новые данные добавлять
можно, а изменять старые – нельзя) на 512/1024 бита, который
используется, как правило, для хранения идентификационных данных вроде
серийного номера, mfgr-данных, уникальных идентификаторов и т.д. Он
использует шину 1-Wire от Maxim.
Этот скетч использует функцию SKIP ROM, которая пропускает фазу поиска
в 1-Wire, поскольку скетч рассчитан на то, что к шине (точнее, к 6-ому
контакту) подключено всего одно устройство.
Если к шине будет подключено больше одного устройства, то скетч
работать не будет. Кроме того, скетч не будет проверять, подключено ли
к Arduino именно устройство семейства DS250x, т.к. благодаря функции
SKIP ROM этап считывания ID семейства будет пропущен.
Поскольку этот скетч можно запустить с любым устройством Maxim
OneWire, команда CRC в большинстве случаев работать не будет.
Скетч считывает только первую страницу памяти (32 бита) – начиная с
самого младшего адреса (0000h). Если в сети имеется больше одного
девайса, используйте скетч с функциями поиска.
Не забудьте подключить резистор на 4,7 кОм между 6-ым контактом и +Vcc.
Чтобы изменить диапазон данных для считывания, просто поменяйте размер
массива данных, адреса самого младшего и самого старшего битов, а
также итерации в цикле for().
Этот код не защищен авторским правом и предоставляется в состоянии
«как есть».
Написан для Arduino 0022 и библиотеки OneWire 2.0 (от PJRC)
http://www.pjrc.com/teensy/td_libs_OneWire.html
Создан Гильермо Ловато (Guillermo Lovato; <glovato@gmail.com>) в марте 2011 года
*/
#include <OneWire.h>
OneWire ds(6); // шина OneWire на 6-ом цифровом контакте
void setup() {
Serial.begin (9600);
}
void loop() {
byte i; // это для циклов for()
boolean present; // переменная для устройства
byte data[32]; // контейнер для данных от девайса
byte leemem[3] = { // массив с командами для инициации записи; устройствам DS250x для начала записи нужны 3 байта: команда, а также адреса самого младшего и самого старшего битов
0xF0 , 0x00 , 0x00 }; // 0xF0 – это команда для чтения данных, а за ней стартовые адреса 00h и 00h (начало, 0000h)
byte ccrc; // переменная для хранения команды CRC
byte ccrc_calc;
present = ds.reset(); // сброс шины OneWire, всегда нужно для начала работы с шиной; если присутствует девайс, возвращает 1/TRUE
ds.skip(); // поиск Skip ROM
if (present == TRUE){ // если девайс подключен, пытаемся только прочесть данные
Serial.println("DS250x device present"); // "Обнаружено устройство DS250x"
ds.write(leemem[0],1); // команда чтения данных, паразитное питание оставляем включенным
ds.write(leemem[1],1); // начальный адрес самого младшего бита, паразитное питание оставляем включенным
ds.write(leemem[2],1); // начальный адрес самого старшего бита, паразитное питание оставляем включенным
ccrc = ds.read(); // DS250x генерирует CRC для отправленной команды, а мы сохраняем это значение в специально созданной для этого переменной
ccrc_calc = OneWire::crc8(leemem, 3); // при помощи библиотечной функции высчитываем CRC отправленных нами команд и сохраняем его
if ( ccrc_calc != ccrc) { // затем сравниваем его со значением, рассчитанным ds250x, и если они не совпадают, выводим сообщение об ошибке и завершаем работу цикла
Serial.println("Invalid command CRC!"); // "Неверная команда CRC!"
Serial.print("Calculated CRC:"); // "Рассчитанный CRC:"
Serial.println(ccrc_calc,HEX); // при помощи HEX-формата проще сравнивать
Serial.print("DS250x readback CRC:"); // "Обратное считывание CRC на DS250x:"
Serial.println(ccrc,HEX);
return; // поскольку с CRC произошла ошибка, завершаем цикл и начинаем заново
}
Serial.println("Data is: "); // для вывода данных
for ( i = 0; i < 32; i++) { // теперь пришло время считывать сами PROM-данные; каждая страница – это 32 байта, так что нам нужно 32 команды чтения
data[i] = ds.read(); // для каждого считанного байта в массиве данных отведена отдельная позиция
Serial.print(data[i]); // выводим ASCII
Serial.print(" "); // просто пробел
}
Serial.println();
delay(5000); // задержка, чтобы не переборщить с выводом данных
}
else { // к шине ничего не подключено
Serial.println("Nothing connected"); // "Ничего не подключено"
delay(3000);
}
}
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
Категории:
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino