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_    530
Только что, ktulx сказал:

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

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

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


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

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

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

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


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

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

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


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

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

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

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

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


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

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

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

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


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

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

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

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

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


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

Тогда измените немного 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 смайлов.

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

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

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

Загрузка...

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

    • Автор: Антон Миханько
      Здравствуйте.
      Собираю из 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?
      Общий процесс я представляю. Интересует конкретное ПО или примеры из опыта.
    • Автор: Hamulus
      Подскажите, как заставить работать Arduino Due и контролером PCA9685.
      Использую вот эту библиотеку
      https://github.com/adafruit/Adafruit-PWM-Servo-Driver-Library
      Сам контроллер точно рабочий, с Мегой всё работает.
      А вот на Due проблема
      Покопался на иностранных форумах, наткнулся вот на эту тему
      https://forum.arduino.cc/index.php?topic=345971.0
      Но там проблема так и не решена.