Как стать автором
Обновить

Комментарии 7

Статья была скрыта на сутки из-за обнаружения проблемы функционирования процедур высокого уровня с реальными устройствами. В результате выяснилось, что проблема не в алгоритме, а в значениях тайминга при декодировании принятых битов. Исходники на гитхабе исправлены, статья снова доступна для чтения.
Обоснование?
В коде не узрел, как «разгребать» разнотипные w1 устройства, напр: ds18b20 и iButton.
Сигнал на w1 3.3V еще тот гемор.
Нафига ДМА на W1? Аппаратной поддержки в МК w1 — нет, тогда смысл в DMA? Экономия 4-х тактов процессора?
Да и ШИМ для w1 притянут за уши. Оно там надо?
Как там понаснасчет гальванической развязки МК — линия w1?
Ну и напоследок: долгий опыт практического использования w1 показал, что вешать все устройства w1 на один провод совершенно бессмысленно, хотя протокол именно для этого и задумывался.
Коммент — ярчайший пример кодера-ардуинщика, никогда не писавшего серьезных проектов). Смотрим по пунктам:
1. Высокоуровневые функции (например bus search) на основе pthreads — в списке литературы под п. 4.
2. w1 3V3 (т.е. ссылку на п. 3 в списке литературы пропустили. Где там трехвольтовая 1-wire?)
3. PWM. bitbang исключаем сразу. Ибо это работа с запрещенными прерываниями в интервалах от 10 мкс (единица или чтение) до 120 мкс (передача нуля. С разрешенными прерываниями она может плавно перейти в передачу RESET). Если мк выполняет одну задачу (уровень ардуинщика) — это нормально. Для профессионала это уровень даже не junior.
4. DMA. Реализация по IRQ требует по 2 IRQ/бит (одно загрузка PWM, одно на запись результата, 16 IRQ на байт). Но экономит RAM. Выбирается по условиям компиляции. Если RAM не критична, но критично CPU — выбираем DMA (приблизительно 3 IRQ на байт).
5. Вменяемые люди на одну шину вешают не отключаемые датчики (напр. температуры), а на вторую отключаемые (напр. таблетки для кода доступа). Таймеров на камне дофига, по одному на каждую шину вполне можно выделить. А можно коммутировать сигнал одним полевиком.

И причем тут гальваническая развязка, если статья о программировании? Схему аппаратного драйвера (3) давно разобрали умные люди, и их советы давно учтены в production.
Да, про ШИМ еще забыл. Устройства w1 латентны к опросу состояния бита, до 500-600 mSec запросто можно «притормозить» опрашивая, или инициализируя опрос бита. Тогда ШИМ никаким боком не нужен. Достаточно неспешнно опрашивать устройства в основном цикле.Что-то более важное обрабатывается в прерываниях, потом вернулись к работе с w1.
А сам бит как будем принимать/передавать? С запрещенными прерываниями на время от 10 до 120 мкс при тактовой в 16Mhz? На какое время затормозим остальные фоновые задачи при выполнении, например, bus search с подключенным десятком датчиков? А если остальные задачи являются реалтайм-управлением сторонним устройством?
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории