• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!
ktulx

Raspberry Pi, PCA9685 - вспышки при инициализации

10 сообщений в этой теме

ktulx    0

Приветствую.

Схема простая: малина - pca9685 - оптрон - LDD-1000H - светодиоды.

Все питания берётся от одного БП, причём на драйвер идёт минус 48 вольт. Отсюда и оптрон.

Теперь о проблеме.

Запускаю питоновый скрипт через cron. Каждый раз, будь то включение сд, выключение или изменение яркости - сначала происходит мгновенная вспышка на максимальной яркости, а затем уже то, что по плану. В общем-то оно и понятно - создаю новый объект класса при каждом запуске скрипта.

Пример led_on:

import Adafruit_PCA9685
pwm = Adafruit_PCA9685.PCA9685()
pwm.set_pwm_freq(100)
pwm.set_pwm(0, 0, 1000)

Был на форуме Adafruit. Там мне "посоветовали", чтобы я не инициализировал контроллер каждый раз.

Но как так-то?

В общем, возможно ли софтварно решить эту задачу?

Хардварно не придумал ничего лучше, чем повесить полевик на Output Enable и менять уровень на пине каждый раз перед работой с контроллером из нового скрипта.

Это хоть и лучше, чем сейчас, но всё равно будет кратковременно моргать, только уже темнотой )

Здесь можно посмотреть библиотеку от Adafruit для работы с PCA9685.

Прошу советов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
BARS_    574
Только что, ktulx сказал:

чтобы я не инициализировал контроллер каждый раз

А нафига его инициализировать каждый раз? Достаточно одного раза.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ktulx    0

Я, видимо, и там и здесь криво изъясняюсь. Жара всё-таки за 30, будь она неладна.

Вспышка происходит при создании нового объекта - pwm = Adafruit_PCA9685.PCA9685().

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
BARS_    574

А не вариант создать его единожды, а потом просто использовать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ktulx    0

Это вообще возможно? Я в Питоне нуб.

Напомню - скрипты запускаются через cron.

Если бы всё происходило в одном "сеансе" Питона, то проблем бы не было.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Yurkin2015    279

Ну, понятно, у Вас cron периодически по расписанию запускает скрипт?

Можно сделать так: запускать скрипт только один раз после reboot, а в самом уже скрипте изменять яркость по расписанию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ktulx    0

@Yurkin2015 совершенно верно.

Ваше предложение абсолютно логично. Основной скрипт у меня и так работает в фоне. 

Мне бы вот хотелось обработку расписаний отдать под ответственность cron. Считаю это более надёжным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Yurkin2015    279

Тогда измените немного init класса PCA9685, добавьте параметр full_init

def __init__(self, full_init = True, address=PCA9685_ADDRESS, i2c=None, **kwargs):
        """Initialize the PCA9685."""
        # Setup I2C interface for the device.
        if i2c is None:
            import Adafruit_GPIO.I2C as I2C
            i2c = I2C
        self._device = i2c.get_i2c_device(address, **kwargs)

        if(full_init):
            self.set_all_pwm(0, 0)
            self._device.write8(MODE2, OUTDRV)
            self._device.write8(MODE1, ALLCALL)
            time.sleep(0.005)  # wait for oscillator
            mode1 = self._device.readU8(MODE1)
            mode1 = mode1 & ~SLEEP  # wake up (reset sleep)
            self._device.write8(MODE1, mode1)
            time.sleep(0.005)  # wait for oscillator

Тогда в основном скрипте при создании объекта будет инициализация PCA9685

pwm = Adafruit_PCA9685.PCA9685()

а в кроне в скрипте создавайте с параметром false

pwm = Adafruit_PCA9685.PCA9685(False)

при этом не будет переинициализации микросхемы.

Изменено пользователем Yurkin2015

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ktulx    0

@Yurkin2015 вот за это респект и огромное спасибо! чего-то подобного и хотел добиться.

вечером проверю и отпишусь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ktulx    0

Докладываю.

Всё заработало :) пришлось чуток помучаться, чтобы поправить файл в яйце, раньше не приходилось.

Думаю вызавать полную инициализацию отдельно, сразу и только после перезагрузки Малины. Это на случай закрытия/открытия основной программы.

Также, железную систему подавления вспышек всё-таки придётся придумать. На тот же случай перезагрузки. До начала работы какого-либо скрипта подавать на Output Enable высокий уровень.

Ещё раз спасибо, @Yurkin2015 !

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Автор: Michael4you
      Основные обязанности:
      •проектирование, разработка и поддержка ПО для встраиваемых систем;
      •сопровождение кода и тестов;
      •документирование разрабатываемого ПО;
      Требования к кандидату: 
      • опыт работы от 3 лет;
      • уверенное знание C;
      • опыт разработки встраиваемых приложений;
      • опыт работы с платформами на ARM-процессорах;
      • опыт работы с STM32;
      • опыт работы с ОСРВ (желательно FreeRTOS);
      • опыт работы с Keil, System Workbench;
      • опыт работы c ModBus, USB, CAN;
      Приветствуется:
      • опыт проектирования архитектур ПО;
      • знание Python;
      Условия:
      •трудоустройство по ТК РФ;
      •доход обсуждается с успешным кандидатом (от 60 тыс.руб.)
      •дистанционная работа, можно работать из дома;
      •выплаты заработной платы 2 раза в месяц
      Наш сайт: http://i-mt.net/
      Моя почта: dezh@i-mt.net
      Мой мобильный: +7963 776 36 55 
      С уважением, Михаил.
    • Автор: Антон Миханько
      Здравствуйте.
      Собираю из Raspberry удобное подобие планшета, чтоб можно было бы кодить в машине, автобусе, кровати и без проводов. 
      Задумался над тем, чтобы прикрутить к малинке колонки (вдруг захочу еще и фильм глянуть). Аудиовыход имеется, мелкие динамики куплю. 
      Думаю дальше сборка будет как у наушников, плюс\минус динамика к соответствующему контакту аудио-штекера.
      С этим понятно (если я не ошибаюсь), но, если я так сделаю, то мой аудио-выход малины будет всегда занять колонками, а если я захочу подключить наушники, то динамики придется снимать.
      На планшетах, ноутбуках при подключении наушников динамики отключаются сами. Как бы такое же сотварить с малинкой?
    • Автор: ktulx
      Всем привет.
      Есть два одинаковых модуля на max31855. Заказаны на Aliexpress.
      Для проверки использовал библиотеку и пример оттуда от Adafruit.
      Термопары К типа, две штуки, обе рабочие.
      Не помню уже, какие именно были показания в начале, но неправильные.
      Стал смотреть дш на микросхему. В нём сказано, что нельзя подключать второй пин (Т-) к земле. На китайских же платах оно именно так.
      Сдул чип с одной платы, перерезал дорожку, запаял обратно.
      Результат: показания бредовые, то -800, то +1200.
      Вешал конденсатор параллельно термопаре. Менял + и - местами. Бесполезно.
      Пробовал и хардварный и софтварный SPI. Со стороны Малины всё в порядке - на хардварный SPI цеплял дисплей от Ноклы 3310, всё работает.
      Есть у кого-нибудь опыт с этими модулями? В чём дело может быть?
      Спасибо.
    • Автор: Qanper
      В небольшую команду, которая занимается разработкой квест-комнат и электроники для квестов, требуется инженер-программист. В ходе работы предстоит программировать игровую логику, «оживлять» загадки и головоломки. Цель нашей работы — создать интересный игровой сюжет и в совершенстве воплотить его «в железе» и софте, чтобы принести игрокам удовольствие от игры! Мы постоянно ищем новые технологии, которые можно использовать в квестах
      От вас требуется:
      — понимать (иногда плохо формализованные) моменты игрового сценария, участвовать в обсуждении деталей технической реализации
      — писать стабильный и поддерживаемый код. Стабильный — потому что результатом вашей работы будут пользоваться люди и любая ошибка смажет впечатление от игры; Поддерживаемый — потому как часто только после реализации можно увидеть изъяны логики, улучшения визуальной составляющей и т. д., что требует оперативной корректировки;
      — уметь быстро «завести» периферийный интерфейс; у нас обычно нет невидимых радиосигналов или гигабайт свежей информации© в недрах жестких дисков, вся периферия мигает, светится или норовит укусить вас за нос;

      На текущий момент стек технологий следующий:
      — STM32L1, arm-gcc/mbed;
      — Raspberry Pi, Raspbian;
      — Python (думаем хотя бы частично переходить на JS в силу чрезвычайной модности главного разработчика);

      Из профессиональных навыков:
      — знание C/C++. Да, мы пишем встраиваемый код на плюсах. Хочется, чтобы вы понимали, как вызывается виртуальный метод, почему нельзя возвращать из функции временную переменную и что не так с проклятой строчкой «++i + ++i»;
      — умение работать с Linux хотя бы на уровне «зайти по ssh на Raspberry и прописать скрипт в автозагрузку»;
      — знание Python или JS. Программ по распознаванию инопланетных сообщений в белом шуме писать не требуется, только бизнес-логика и взаимодействие с системой (последовательный порт, запуск приложений и т. д.);
      — знание схемотехники. Отличить, например, SPI от I²C, уметь пользоваться осциллографом и мультиметром; к сожалению, не все баги находятся с помощью отладчика, так что вас не должен смутить неприпаянный резистор в схеме, из-за которого не идут данные; умение держать паяльник за правильный конец будет большим плюсом;
      вот еще пункт в конец:
      — владение современными средствами разработки: в первую очередь, система контроля версий (мы используем git); Пользоваться можно почти любой IDE, но с любителями писать код в блокноте (без автодополнения, подсветки синтаксиса и отступами вразнобой) далеко не уедем;

      Работа в просторном офисе, 5 минут от ст.м. «Технологический проспект»
       
      Пишите в ЛС или mail@s3f.ru
    • Автор: Инженер!Туленков
      Добрый вечер форумчане! Создавая некий проект на Arduino и Raspberry возникла интересная ситуация.
      Были закуплены 10 Arduino Nano v3 и подключены к raspberry. По незнанию и не сталкиванию ранее с данной темой увидел что Vendor ID Product ID одинаковые на всех ардуинах и Serial (код) вовсе отсутствует у всех ардуин.
      В проекте необходимо что бы каждая ардуина была уникальная хоть в чем то.
      Далее каждая уникальная ардуина будет привязана естественно к своему COM порту символьными ссылками для использования.
      Каким образом можно придать уникальности каждой ардуине? Как изменить информацию? Возможно ли это осуществить через ch430?
      Общий процесс я представляю. Интересует конкретное ПО или примеры из опыта.
  • Сообщения

    • Теперь по вопросу куда копать? Начнём с того,что когда у тебя на экранной сетке было 230 вольт-это было 230 вольт постоянного напряжения.И 150 мА анодного тока были постоянной составляющей анодного тока в этом режиме.При модуляции,230 вольт на экранной сетке будут только в импульсе,это будет амплитудным значением.Так же как и 150 мА анодного тока-то же станут амплитудной величиной.А то,что показывает прибор при этом-действующее значение.Разница в 1,41.Если твой модулятор будет по прибору,отдавать в сетку 163 вольта,а ток анода будет при этом 106 мА-тогда твой выходной каскад будет в режиме-на пике модуляции у него будет 230 вольт на сетке и 150 мА анодного тока.Но!всегда хочется что бы показания в ТЛГ режиме и на пике модуляции были либо равны,либо незначительно отличались.Си-Эль-Си модуляция это позволяет.Для этого надо лишь поднять напряжение на аноде выходной лампы модулятора,таким образом,что бы 230 вольт  были не амплитудным,а действующим значением.Амплитудное при этом будет порядка 324 вольта.Для коррекции режима выходного каскада при этом надо будет немного поиграться с конденсатором связи П-контура.
    • Схему не искал, но думаю в приёмнике стоит стандартный УКВ блок. По его "имени" ищите методику перестройки диапазона.
    • и все таки конвертер лучше. блок там собран на 273ха5 перестройка https://huxfluxdeluxe.wordpress.com/2015/02/03/укв-2-08с-возвращаясь-к-напечатанному/
    • Проверил ,все транзисторы целые.ТП - 0.5А
    • Спасибо! Как деберусь до предмета рукоделия, прочитаю вашу ссылочку 
    • Жаль только версия прошивки не полная. 
    • Этот ШИМ генератор мне предоставил на обзор магазин ICstation (ссылка на генератор http://www.icstation.com/signal-generator-pulse-frequency-duty-cycle-adjustable-module-display-150khz-p-12477.html ). Фото генератора. Что может этот генератор? Взглянем на параметры.  Рабочее напряжение: 3.3 - 30V; Частота генерации: 1Hz - 150KHz; Точность генерации частоты: 2%; Мощность нагрузки: 5…30mА; Амплитуда выходного сигнала равна напряжению питания; Температура окружающей среды: -20 … +70 °С. На дисплей можно вывести только 2 числа по 3 цифры в каждом. В нижней строке отображается скважность ШИМ в процентах, а в верхней – частота. Частота выводится на дисплей по следующим правилам: XXX, шаг в 1Гц, в диапазоне 1 – 999Гц; X.XX, шаг в 0.01кГц, в диапазоне 1.00 - 9.99кГц; XX.X, шаг в 0.1кГц; в диапазоне 10.0 - 99.9кГц; X.X.X, шаг в 1 кГц; в диапазоне 100 - 150 кГц. Дисплей управляется микросхемой HT1621B, дисплей универсальный, на нем имеются символы, необходимые для построения термометра, гигрометра, вольтметра, амперметра и ваттметра, но в нашем случае они не используются. Дисплей имеет яркую синюю подсветку. К слову, замечу, что дисплей на моем генераторе оказался потертым, будто его откуда-то сняли. Так же отсутствовала защитная пленка на дисплее. Главной микросхемой генератора является микроконтроллер STM8S003F3P6. И поскольку этот микроконтроллер имеет EEPROM память, то настройки сохраняются при выключении. Управлять генератором можно двумя способами: кнопками и по UART. С кнопками всё ясно, одна пара кнопок управляет частотой, вторая скважностью. А вот с UART всё намного интереснее. Обмен данными должен происходить со следующими параметрами:  9600 bps Data bits: 8 Stop bit: 1 Check digit: none  Flow control: none Для того что бы установить частоту генерации, необходимо отправить частоту так, как она отображается на дисплее прибавив перед значением частоты букву F. Например, для установки частоты в 100 Гц необходимо отправить F100, для 105 кГц - F1.0.5, для 10.5 кГц - F10.5 и так далее. Для установки скважности необходимо отправить трехзначное число скважности добавив перед ним букву D . Например, D050, D100, D001. Что бы прочитать установленные параметры, необходимо отправить слово "read". Если отправлена верная команда, то генератор ответит DOWN, если ошибочная – FALL. Но есть одно НО, я так и не смог настроить работу с генератором через UART. Я решил проверить генератор при помощи логического анализатора. Вот что получилось. Частота 1 Гц, скважность 1%. Как видим погрешность пока небольшая. Частота 1 Гц, скважность 50%. Частота 1 Гц, скважность 99%. Частота 1 кГц, скважность 1%. Частота 1 кГц, скважность 50%. Частота 1 кГц, скважность 99%.  Тут мы видим, что при установленных 99% скважности на самом деле заполнение составляет 100%. Частота 1 кГц, скважность 91%. Я начал снижать скважность, и вплоть до 92% заполнение составляло 100%, и только при 91% ситуация исправляется. Частота 50 кГц, скважность 1%. Как видим что тут всего 0,2% вместо 1%. Частота 50 кГц, скважность 50%. Здесь отличается на -1%. Частота 50 кГц, скважность 99%. И тут снова отклонение -1%. Частота 100 кГц, скважность 1%. А вот тут ещё ничего нет. Частота 100 кГц, скважность 2%. А при 2% сигнал появляется, но на самом деле заполнение 0,4%. Частота 100 кГц, скважность 50%. Отклонение почти -2%. Частота 100 кГц, скважность 99%. И тут почти -1%. Частота 150 кГц, скважность 1%. Снова нет сигнала. Частота 150 Гц, скважность 3%. И появляется сигнал только при 3%, но заполнение составляет 0,6%. Частота 150 кГц, скважность 50%. Но на самом деле заполнение 46,5%, на -3,5% уже отличие. Частота 150 кГц, скважность 99%. И тут отличается, но всего -1,5%. Выборка достаточно грубая, но на этом исследования не закончены. Я решил измерить скважность при различном заполнении (шаг 5%) и на различных частотах (шаг 25000 Гц) и занести их в таблицу. Верхняя строка содержит частоту, я выбрал шаг в 25 кГц, левый столбец – установленная скважность, в остальных ячейках замеренная скважность. В этой таблице указана разница между установленной и замеренной скважности. Чем выше частота, тем больше отклонение между установленным и замеренным значениями. Так же замеренная скважность всегда ниже установленной, но строгой закономерности в отклонении не наблюдается. Так же я проверил соответствие установленной и замеренной частоты. Результат так же занес в таблицу. Заявленная точность в 2% от установленной частоты соблюдается. В итоге, если вам необходимо установить точные значения генерации, то проверяйте установленные параметры перед использованием генератора. Если же необходимо просто управлять яркостью светодиода или скоростью вращения двигателя, то этот генератор без проблем подойдет для этих задач.