Кто-то любит пирожки, а кто-то - нет.
Шестиногая и очень маленькая прозрачная фигня (2х2 мм). Напряжение питания до двух вольт (1.8 В), потребление очень маленькое, особенно если не использовать ИК-дальномер.
Разрешение АЦП: 14 бит. При таком разрешении единичное преобразование длится 100 мс (можно чувствительность увеличить в 4 раза за счёт времени интерполяции в 400 мс), при снижении до 8 бит - менее 2 мс.
Кроме непосредственного измерения цвета падающего на датчик света, он умеет и реагировать на события (когда какое-либо из значений выйдет из заданного диапазона) и установить низкий уровень на линии прерывания (~INT). Правда, прерывание возможно только по изменению расстояния или общей освещённости, но, думаю, большего и не надо.
читать дальше
Разрешение АЦП: 14 бит. При таком разрешении единичное преобразование длится 100 мс (можно чувствительность увеличить в 4 раза за счёт времени интерполяции в 400 мс), при снижении до 8 бит - менее 2 мс.
Кроме непосредственного измерения цвета падающего на датчик света, он умеет и реагировать на события (когда какое-либо из значений выйдет из заданного диапазона) и установить низкий уровень на линии прерывания (~INT). Правда, прерывание возможно только по изменению расстояния или общей освещённости, но, думаю, большего и не надо.
читать дальше
Можете выложить schematic & PCB files
Если не сложно, скиньте пожалуйста на мыло примерчик, или поясните как с этим датчиком обшаться
Да, это уже сдвинутый с учётом бита направления><
Самый первый тестовый код для стм32ф4 выглядел так:
Вот часть библиотеки twi.h:
sla+w, slave device address + w bit
twi_slarw = TW_READ;
twi_slarw |= address << 1;
С адресом всё ясно. Только это мне не помогло =) Кстати, обязательно ли считывать "0" с 0х00 (Interrupt Status)? Только для проверки? В общем не читал я его. Я сразу записал байты в регистры 0х01 и 0х02 и пошел читать 0х13. Не читает =( Повесил кстати для наглядности светодиод на sda и scl, видно, что что-то проходит...
Ниже скетч
Не знаю, можно ли убить 3.3, но написано, что максимальное 1.8. Наверное, от времени зависит, когда наступит перегрев.
Паял я феном, ибо всё смд и можно запаять пачкой) Не знаю, но вряд ли они настолько нежные... Обычная микруха. В даташите написано, что температура пайки 260 градусов.
Четырёхлапая деталь -- это стабилизатор на 1.8 В с входом разрешения.
Если семибитный адрес нужен, то да, сдвигаем всё вправо на 1 бит (0x88>>1) == 0x44. Направление в любом случае библиотека подставляет.
Т.е. адрес чтения/записи один и тот же, младший бит определяет направление, но к адресу это не относится, т.к в адресации устройства бит не участвует) В любом случае, в даташите нарисовано, что должно передаваться в качестве адреса при чтении и при записи.
Хм, считывать стоит, так как там он пишет, что завершил инициализацию после запуска и что регистры сброшены в дефолт. Да и для проверки даже, так как там в любом случае не ноль (по крайней мере за некоторое время должен им стать. К тому же, ~INT должен, по идее, после загрузки оказаться в низком уровне, показывая, что флаг PWRON установлен (и пока не считаем, он не вернётся в дефолтное состояние). Моргать он будет в любом случае, ибо данные там гоняет, в основном, мастер.
Купите себе китайский логический анализатор за 10$ (клон saleae), это очень сильно поможет в отладке таких вещей)
Я не знаю, есть ли разница, но в примере ардуины чтение происходит немного иначе.
Вот про INT я не до понял. У меня на датчике он вообще затянут кверху (лог 1) а к дуине я его просто не подключал даже ибо пока не нужен. Как он влияет на передачу по i2c? В ваших примерах я его тоже не увидел.
Да и для проверки даже, так как там в любом случае не ноль (по крайней мере за некоторое время должен им стать. К тому же, ~INT должен, по идее, после загрузки оказаться в низком уровне, показывая, что флаг PWRON установлен (и пока не считаем, он не вернётся в дефолтное состояние).
Т.е., если после включения мы не читаем регистр 0х00, то на ноге INT должен висеть низкий уровень ? А т.к. у меня без считывания регистра 0х00 на INT затянутый верхний уровень, то это может означать, что датчик неисправен. Т.е. работоспособность датчика можно проверить по ножке INT, подрубив к нему питание и повесить sda, scl, int к верхнему уровню?!
Не знаю, но вполне возможно, надо проверить. Но я только в понедельник смогу это сделать — датчик на работе валяется.