Jump to content

    

Eddy_Em

Участник
  • Content Count

    1336
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Eddy_Em

  • Rank
    Профессионал
  • Birthday 11/25/1980

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

6548 profile views
  1. Можно еще проще сделать: выделить "служебный" идентификатор, скажем, 1 - его не занимать ничем, кроме "переклички". И периодически каждое звено шлет пакет с этим идентификатором. А в пакете два байта данных — идентификатор устройства, которое шлет данный пакет. И не нужно будет мучиться с 29-битными идентификаторами (тем более, никто их в реальной жизни не использует).
  2. Почитайте man 7 signal и man 3 signal. Пишете обработчик, а в начале main регистрируете при помощи функции signal обработчик нужных сигналов. Вот так, например: https://github.com/eddyem/eddys_snippets/blob/master/guard.c#L49 Ну и не забывайте, что kill -9 или killall -9 посылает SIGKILL, который не может быть игнорирован. P.S. Память освобождать не нужно: ядро после смерти приложения это сделает само. Аналогично не нужно закрывать порты. А вот при работе с БД нужно правильно закрыть, чтобы снять блокировку, или уведомить подключенную железяку, что программа сдохла, или освободить область в разделяемой памяти и т.п...
  3. Очень много задач отлично распараллеливаются. Обработка изображений, например!
  4. А вот интересно: почему такую перспективную вещь, как MIPS, похоронили? Китайцы лет 10 назад на мипсах даже компики собирали… Лично мне для некоторых задач намного полезней был бы 1024-ядерный процессор на 700МГц, нежели 8-ядерный на 3.5ГГц!..
  5. Да даже для 29-битных адресов можно придумать процедуру автоматической идентификации навроде аналогичной процедуры у Dallas в их мерзком 1-wire: мастер поочередно по одному биту перебирает и регистрирует ответы. Но и здесь без мастера не обойтись. А вот меня все терзает любопытство: что ж за одноранговая сеть такая, где все устройства абсолютно одинаковые? Чем она должна заниматься, если нет мастера, через который выполняется внешнее управление и мониторинг?
  6. Тоже думаю, что проще подключить внешний мониторинг через один из блоков. Его же и назначить "мастером". И пускай он периодически шлет себе запросы с идентификаторами от IDmin до IDmax, а все остальные слушают линию и отмечают существующие идентификаторы в своей внутренней таблице. Хотя, с другой стороны, коль в сети будет мастер, зачем остальным знать идентификаторы присутствующих устройств? Как в том же примере про бортовую CAN-шину автомобиля: там есть один мастер (ЭБУ) и куча слейвов (причем количество слейвов варьируется в зависимости от "фарша"). Не нашел мастер модуль ESP — ОК, значит, машина будет без ESP ездить, не нашел контроль стеклоподъемников — ОК, пользователь ручками окна открывать/закрывать будет…
  7. Arlleex, между прочим, в даташите на стандарт по 4-пиновым кулерам в качестве ключа управляющего сигнала нарисован полевой транзистор! У меня и мысли не было, что кто-то может туда биполярный засунуть…
  8. До меня дошло-таки, что случилось! Я рассчитывал на то, что биполярные транзисторы в ключевом режиме уже никто не использует! Поэтому для отключения питания кулера (а по документации если заполнение ШИМа меньше 20%, то поведение недетерменировано, т.е. чтобы кулер однозначно не вращался, нужно выключить питание) просто отключал n-канальным мосфетом его "землю". Ан нет: похоже, китаезы запихнули зачем-то биполярный транзистор. И в итоге, когда я рвал "землю", транзистор превращался в диод и через переход база-коллектор эти самые 12В (за минусом падения на pn-переходе) благополучно попадали на вход моей схемы… Еще одни грабли, которые доказывают, что никогда не стоит рассчитывать на адекватность других людей. Всегда нужно планировать самое худшее! Вплоть до применения ламповых триодов =D
  9. Это из-за долбанутого движка форума, который теги url неправильно обрабатывает. SSerge, ну да — а чем она не полноценная? Открывается кикадом. Описал проблему в жжшке https://eddy-em.livejournal.com/294891.html (какой [censored] [censored] писал движок форума? Гиперссылку нормально вообще невозможно вставить!)
  10. Я дал ссылку на гитхаб, где лежит полноценная схема. А картинку уменьшил дебильный движок Ылектроникса. Меня больше беспокоит то, что выход кулера, который по оф. документации должен быть opendrain, внезапно оказался подтянутым к +12В внутри кулера! И что еще ждать от китайцев?
  11. В общем, причина, похоже (хотя я не могу понять, как это влияет на АЦП) оказалась в том, что в китайских четырехпроводных кулерах контрольный сигнал внутри кулера подтянут к +12В!!! В итоге через резистор 510Ом на ногах МК было 5В… Повесил туда стабилитроны на 3.6В. Вроде бы, пока косяков с АЦП нет: и при отключенных, и при включенных кулерах все каналы работают исправно. Вот уж не ожидал засады с этой стороны! Ведь по документации кулеры должны быть с открытым коллектором, чтобы туда внешнюю подтяжку вешать. Надо будет учесть это и в будущем использовать преобразователь уровней на мосфете. Правда, так и не понял, каким образом повышенное напряжение на ногах PA6 и PA7 влияло на АЦП: ведь мультиплексор эти ноги не подключает к АЦП!
  12. В своей поделке наткнулся на странную штуку: пока у меня МК питается от USB, АЦП (работает через DMA) без проблем выдает нормальные данные. Но стоит подключить блок питания 12В, как через некоторое время вдруг начинается переполнение: все каналы (в т.ч. "внутренние") показывают 4095! Думал, что какой-нибудь конденсатор слишком уж заряжается, но нет: везде (4 входа от NTC + два для контроля питания) меньше трех Вольт. Микроконтроллер - STM32F072CBT6. Схемка в приложении ([url=https://github.com/eddyem/stm32samples/tree/master/F0-nolib/Socket_fans/kicad]вот ссылка[/url] на гитхабе). Вроде бы, ничего криминального не вижу. Подобное питание использую во многих схемах - выпендрежа не было. На ноге AVDD честные 3.3В.
  13. Раз уж 1-wire так популярен, то почему в МК нет аппаратной поддержки этого дурацкого протокола? Или, может быть, существуют аппаратные конвертеры из 1-wire в UART или что-нибудь подобное (вменяемое)? Я сильно сомневаюсь, что все, пользующиеся этими DS18, городят отсебятину с полуаппараной реализацией протокола! Коль уж есть предложение датчиков, должно быть и предложение универсального способа работы с ними.
  14. А что, 1-wire на длинных проводах будет работать что ли? С I2C я работал на шинах до двух метров. Если надо длинней — можно поставить "рипитеры" на CAN-шине. Собственно, термомониторинг зеркала я так и сделал: к каждому контроллеру подходит по 16 датчиков (попарно соединенных) на I2C, дешевыми мультиплексорами выбираю нужную пару и опрашиваю по запросу из CAN-шины. На шине сидит шесть контроллеров, один из которых играет роль "мастера", подключенного к orange PI. Работает, жрать не просит, мониторит температуру зеркала в 80 точках + до 16 точек на "мастере" (туда два датчика подключено всего).
  15. Были бы, будь они на SPI или I2C… Я пока не встречал МК с аппаратной поддержкой 1-wire, а раз так — на кой черт брать эти датчики, коль их никто не поддерживает? Их только ардуинщики и покупают — потому что привыкли через задницу гланды вырезать. Хотя, как я выше говорил, копеечные NTC дают ту же точность после калибровки, но при этом не нужно сношаться с реализацией протокола 1-wire (полностью аппаратно его сделать невозможно из-за необходимости выполнять стартовый длинный импульс, поэтому приходится комбинировать конечный автомат с "полуаппаратным" решением вида timer+DMA или USART+DMA).