Кто-то любит пирожки, а кто-то - нет.
Шестиногая и очень маленькая прозрачная фигня (2х2 мм). Напряжение питания до двух вольт (1.8 В), потребление очень маленькое, особенно если не использовать ИК-дальномер.
Разрешение АЦП: 14 бит. При таком разрешении единичное преобразование длится 100 мс (можно чувствительность увеличить в 4 раза за счёт времени интерполяции в 400 мс), при снижении до 8 бит - менее 2 мс.

Кроме непосредственного измерения цвета падающего на датчик света, он умеет и реагировать на события (когда какое-либо из значений выйдет из заданного диапазона) и установить низкий уровень на линии прерывания (~INT). Правда, прерывание возможно только по изменению расстояния или общей освещённости, но, думаю, большего и не надо.

читать дальше

@темы: электроника

Комментарии
10.08.2013 в 08:00

А где можно купить такой датчик и сколько он стоит?
Можете выложить schematic & PCB files
19.10.2013 в 15:08

А есть пример программы, где данный датчик используется? Что-то у меня не получается его запустить. Ни на что не реагирует =(
Если не сложно, скиньте пожалуйста на мыло примерчик, или поясните как с этим датчиком обшаться
19.10.2013 в 21:23

Да... И как это Вы умудрились задать датчику адрес 0х88. Это же 136, а в интерфейсе I2C максимальный адрес слейва 127 (0х7F). Вы наверно учли бит r/w, но это же не относиться к адресу датчика, просто оно идет в адресном байте. Может я чего не так понял конечно.
19.10.2013 в 22:04

Кто-то любит пирожки, а кто-то - нет.
Гость, да, я сейчас погляжу.

Да, это уже сдвинутый с учётом бита направления><
19.10.2013 в 22:11

Кто-то любит пирожки, а кто-то - нет.
max44005.c — тут асинхронный,но вряд ли он будет полезен.

Самый первый тестовый код для стм32ф4 выглядел так:

01.11.2013 в 19:13

Хм... Мне тут сообщили, что адресацию для этих датчиков (если их больше одного на шине) надо демультиплекором задавать. Так ли это?
02.11.2013 в 00:30

Кто-то любит пирожки, а кто-то - нет.
Гость, да, выбора адреса у микросхемы нет (ввиду того, что у неё всего 6 выводов). Потому для подключения нескольких надо их как-то переключать. Разрывом лини SCK ключом или ещё как — на усмотрение схемотехника или программиста =)
14.02.2014 в 18:20

В общем так и не разобрался я с этим датчиком. Просто я его пытаюсь прикрутить к ардуино =) В принципе все тоже самое, что и стм, только на библиотеках (wire.h). Все подключил, вроде все прописал как надо и куда надо. Реакции никакой. Уже на двух датчиках проверил.
14.02.2014 в 18:48

Кто-то любит пирожки, а кто-то - нет.
Гость, что осцилл кажет?) И не сожгли их? Там 1.8 В питание.
15.02.2014 в 06:18

Осциллографа под рукой нет, надо на работу будет нести все это дело. Сжечь мог, потому как оба раза забывал про низкое питание. Но 3.3 В могли его спалить? Если так, то у меня есть еще 6 таких датчиков =) Чем кстати паять лучше их?! Может я их при пайке еще пожег?! Фена и индукционки нет, поэтому паяльник на 40Вт мог их убить, хотя был аккуратен при пайке =) В общем беда прям с этими датчиками. Да, и еще, что за элемент у вас на плате стоит с 4-мя ножками? Реле какое или транзистор на светодиод?! Нужен он вообще или нет?
15.02.2014 в 09:21

Запаял новый датчик. Паял со сверх аккуратностью, можно сказать без контактно =) Результат такой же. У библиотеки wire на дуино есть одна особенность, адрес задется лишь 7-битный, т.е. до 127. Адрес же для записи в датчик 136, на чтение - 137. Что с этим делать? дуино матерится на выставленные адреса. Посчитал адрес по старшим 7 разрядам, получил адрес 68, видимо и он ничего не дает. Может эта библиотека не способна реализовать соединение с этим датчиком?! Может стоит на ардуино все на чистом С написать?! Только вот где взять библиотеку I2C.h, чтоб ее прикрутить к этакому коду.
15.02.2014 в 14:50

В общем разобрался, что адрес таки у устройства 0х44, потому что 0х88 это адрес записи. И прописывать надо именно обычный адрес, а уже потом, он сам сдвигает и доставляет бит (либо 0 либо 1при чтении или записи). Это как сделано в дуино, как на стм бибилотеки написаны я не знаю.
Вот часть библиотеки 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, видно, что что-то проходит...
Ниже скетч

15.02.2014 в 16:01

Кто-то любит пирожки, а кто-то - нет.
Гость, ого сколько много =D

Не знаю, можно ли убить 3.3, но написано, что максимальное 1.8. Наверное, от времени зависит, когда наступит перегрев.

Паял я феном, ибо всё смд и можно запаять пачкой) Не знаю, но вряд ли они настолько нежные... Обычная микруха. В даташите написано, что температура пайки 260 градусов.
Четырёхлапая деталь -- это стабилизатор на 1.8 В с входом разрешения.

Если семибитный адрес нужен, то да, сдвигаем всё вправо на 1 бит (0x88>>1) == 0x44. Направление в любом случае библиотека подставляет.
Т.е. адрес чтения/записи один и тот же, младший бит определяет направление, но к адресу это не относится, т.к в адресации устройства бит не участвует) В любом случае, в даташите нарисовано, что должно передаваться в качестве адреса при чтении и при записи.

Хм, считывать стоит, так как там он пишет, что завершил инициализацию после запуска и что регистры сброшены в дефолт. Да и для проверки даже, так как там в любом случае не ноль (по крайней мере за некоторое время должен им стать. К тому же, ~INT должен, по идее, после загрузки оказаться в низком уровне, показывая, что флаг PWRON установлен (и пока не считаем, он не вернётся в дефолтное состояние). Моргать он будет в любом случае, ибо данные там гоняет, в основном, мастер.

Купите себе китайский логический анализатор за 10$ (клон saleae), это очень сильно поможет в отладке таких вещей)

Я не знаю, есть ли разница, но в примере ардуины чтение происходит немного иначе.
15.02.2014 в 16:28

Разницы нет. И так тоже пробовал =)
Вот про INT я не до понял. У меня на датчике он вообще затянут кверху (лог 1) а к дуине я его просто не подключал даже ибо пока не нужен. Как он влияет на передачу по i2c? В ваших примерах я его тоже не увидел.

Да и для проверки даже, так как там в любом случае не ноль (по крайней мере за некоторое время должен им стать. К тому же, ~INT должен, по идее, после загрузки оказаться в низком уровне, показывая, что флаг PWRON установлен (и пока не считаем, он не вернётся в дефолтное состояние).
Т.е., если после включения мы не читаем регистр 0х00, то на ноге INT должен висеть низкий уровень ? А т.к. у меня без считывания регистра 0х00 на INT затянутый верхний уровень, то это может означать, что датчик неисправен. Т.е. работоспособность датчика можно проверить по ножке INT, подрубив к нему питание и повесить sda, scl, int к верхнему уровню?!
15.02.2014 в 18:10

Кто-то любит пирожки, а кто-то - нет.
Гость, никак не влияет, он нужен, если требуется использовать прерывания =)

Не знаю, но вполне возможно, надо проверить. Но я только в понедельник смогу это сделать — датчик на работе валяется.
17.02.2014 в 18:31

Получилось проверить?
18.02.2014 в 10:26

Кто-то любит пирожки, а кто-то - нет.
Гость, да, при подаче питания линия INT опускается в ноль.
12.05.2014 в 05:40

Ураа... Я разобрался с этим датчиком. Скорей всего проблема была в пайке. Не пропаяны контакты. Кстати бит вкл. датчика температуры номер 5. Там в дш очепятка в одном месте. Доволен как слон в общем, отличный датчик. Только еще не разобрался с ик светодиодом. Есть мысли? Гн почему-то не хочет светить. Или я и не увижу?!)
12.05.2014 в 10:03

Кто-то любит пирожки, а кто-то - нет.
Гость, настроить надо =) Да и взглядом не углядишь, через камеру телефона если ... Ну и можно анализатором посмотреть активность вывода =)