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.

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

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


Ссылка на сообщение
Поделиться на других сайтах
BARS_    733
Только что, ktulx сказал:

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

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

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


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

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

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

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


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

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

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


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

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

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

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

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


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

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

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

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


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

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

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

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

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


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

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

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

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

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

Загрузка...

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

    • Гость Виталий
      Автор: Гость Виталий
      Подключаю usb клавиатуру к малинке . Usb  работает  с android, по сути и с малинкой должна работать. Numlock горит.
      Соединяюсь по vnc  захожу в текстовый редактор  нажимаю на кнопки - результат 0.
    • Автор: PATRONzzz
      Доброго времени суток. Не знаю на сколько дурацкая эта идея, но все же. Хочется чтобы raspberry pi 3 включалась вместе с телевизором, а выключался по таймеру бездействия системы. Так вот сама идея, при включении телевизора на разъеме hdmi должно появится питание +5В. Можно ли при появлении этих +5В, кратковременно замкнуть контакты RUN на плате raspberry?  Опыта у меня нет, может есть методы и попроще, поделитесь кому не жаль?
    • Автор: ktulx
      Приветствую.
      Имеется вот такая простая схема.
      В качестве шим-контроллера выступает PCA8695 (подключённый к Raspberry Pi). 
      Блок питания: -48В, +12В, +5В.
      Требуется PWM притянуть к земле непосредственно при подаче питания на какую-нибудь секунду-полторы, потому что 3.3В, выходящие с Малины, появляются с задержкой и как результат - вспышка светодиодов.
      Пытался что-нибудь придумать на полевиках - так и не додумался.
      Единственные варианты, которые ещё не пробовал - коммутировать непосредственно 48В или поставить ещё один оптрон в параллель + LDO на 3.3В, после загрузки подавать Малиной высокий уровень на катод оптрона.
      Есть ли какое-то решение попроще? Помогите, пожалуйста.
       
    • Гость Roman
      Автор: Гость Roman
       
      import sys
      SUBJECT = b"Subject: "
      HEADER_END = b"\r\n\r\n"
      def find_pos(email):
          return map(
                  lambda x: email.find(x) + len(x),
                  (SUBJECT, HEADER_END)
                  )
      with open(sys.argv[1], "rb") as f:
          email = f.read()
          subject_pos, header_end_pos = find_pos(email)
          print(subject_pos, header_end_pos)
    • Автор: 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 
      С уважением, Михаил.
  • Сообщения

    • Покритикуйте плз печатки... Рисовальщик из меня тот еще (хотя я не с нуля рисовал). Понимаю, что печатка с лампами "не тру", но все же Преамп "томато" (с 6н2п и без умножителя) На 6ф5п (в стиле Борисова) Хотелка собрать уже как год живет в голове, но как-то не срастается, может добью, если все ок...Останется впаять) Только с печатками меня невнимательность вечно подводит. Если кому не влом, гляньте опытным взглядом, пожалуйста. Guitar preamp tomato.lay6 6f5p.lay6  
    • "Сороковой" не был рассчитан на  такой способ "заводки", в отличии от трактора на видео. У того это штатный способ старта движка, посредством порохового заряда. P.S. Да и завести "беларуса" задачи не было.  Ехали мимо, пофоткались, поехали далее. То шЮтка была.
    • Можно попробовать тут купить http://www.ligra-spb.ru/Profile.htm Для физ лиц https://1radcom.ru/category/radiatorniy-profil/
    • Абборигены до сих пор используют муравьёв для получения чистых и гладких костей животных. Полинезийцы используют обглоданные муравьями кости рыб для наконечников стрел, игл и украшений. Костяное оружие опаснее металлического. При ударе в теле остаются осколки и кончик. После удара оружие приводиться в боевой режим простым ударом камня по торцу оружия. В Японии и Голландии продаются конструкторы- рыбьи кости и клей. Склеиваешь сувенир на свою фантазию. В смысле нет задачи быстрого умервщления. Гвозди в руку вбивают оч умело не нарушая вены и сосуды. Крови вытекает мало. Палач-профи тех времён знал строение человека и знал множество способов быстрой и медленной казни. Спецов по пыткам ценили как самородок золота. В рейхе подобными делами занимались люди с медицинским образованием. Самый мразь был доктор Менгиле.
    • Судмедэксперт полагает, что можно и помереть. ТЫЦ.