Накидываем интересного к пятнице

Я тут как раз на PUYA - PY32F003L18 (восьминожка) основу скетча под преобразователь запилил, всё одно к одному видимо )))

#include <Arduino.h>

#define MAX_PWM 1148
#define MIN_PWM 7

// Медианный фильтр
#define MEDIAN_SIZE 5

uint16_t adc0_median_buffer[MEDIAN_SIZE];
uint16_t adc1_median_buffer[MEDIAN_SIZE];
uint8_t median_index = 0;

uint16_t medianFilter(uint16_t new_value, uint16_t buffer[], uint8_t size, uint8_t *index) {
  buffer[*index] = new_value;
  *index = (*index + 1) % size;
  
  // Создаем временный буфер для сортировки
  uint16_t temp_buffer[size];
  for (uint8_t i = 0; i < size; i++) {
    temp_buffer[i] = buffer[i];
  }
  
  // Простая пузырьковая сортировка
  for (int i = 0; i < size - 1; i++) {
    for (int j = i + 1; j < size; j++) {
      if (temp_buffer[i] > temp_buffer[j]) {
        uint16_t temp = temp_buffer[i];
        temp_buffer[i] = temp_buffer[j];
        temp_buffer[j] = temp;
      }
    }
  }
  
  return temp_buffer[size / 2]; // Возвращаем медиану
}

void setup() {
  Serial.begin(115200);
  Serial.println("PY32F003L18 в работе");

  // Включение тактирования
  RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;  // Порт A
  RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;  // АЦП1
  
  // Настройка выводов АЦП в аналоговый режим
  // PA0, PA1, PA2, PA3 - аналоговые входы
  GPIOA->MODER |= GPIO_MODER_MODER0 | GPIO_MODER_MODER1 | 
                  GPIO_MODER_MODER2 | GPIO_MODER_MODER3;
  
  // Настройка АЦП
  ADC1->CFGR1 = 0;  // Сброс конфигурации
  ADC1->CFGR2 = 0;  // Сброс конфигурации 2
  
  // Время выборки: 71.5 циклов (для PY32)
  ADC1->SMPR |= ADC_SMPR_SMP_0 | ADC_SMPR_SMP_1 | ADC_SMPR_SMP_2;
  
  // Настройка последовательности: 2 канала
  ADC1->CHSELR = 0;
  ADC1->CHSELR |= ADC_CHSELR_CHSEL8;  // Канал 8 (PA0)
  ADC1->CHSELR |= ADC_CHSELR_CHSEL9;  // Канал 9 (PA1)
  
  // Длина последовательности: 2 преобразования
  ADC1->SQR1 = 0;  // 1 преобразование в последовательности
  // Для PY32 последовательность настраивается через CHSELR
  
  ADC1->CR = ADC_CR_ADEN;  // Включение АЦП
  while (!(ADC1->ISR & ADC_ISR_ADRDY));  // Ожидание готовности
  
  // ИНИЦИАЛИЗАЦИЯ ШИМ НА TIM2 ------------
  RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;  // Тактирование TIM2
  
  // Настройка PA0 как альтернативной функции (TIM2_CH1)
  GPIOA->MODER &= ~GPIO_MODER_MODER0;
  GPIOA->MODER |= (2 << GPIO_MODER_MODER0_Pos);  // Alternate function
  GPIOA->AFR[0] |= (1 << GPIO_AFRL_AFSEL0_Pos);  // AF1 = TIM2
  
  // Настройка таймера
  TIM2->PSC = 0;     // Предделитель = 1
  TIM2->ARR = 1151;  // Период (11-битное разрешение)
  TIM2->CCR1 = 575;  // Начальная скважность 50%
  
  // Настройка ШИМ режима 1
  TIM2->CCMR1 |= (6 << TIM_CCMR1_OC1M_Pos);  // PWM mode 1
  TIM2->CCMR1 |= TIM_CCMR1_OC1PE;            // Preload enable
  TIM2->CCER |= TIM_CCER_CC1E;               // Включение канала 1
  TIM2->CR1 |= TIM_CR1_ARPE;                 // Auto-reload preload
  TIM2->CR1 |= TIM_CR1_CEN;                  // Запуск таймера
  
  Serial.println("ШИМ инициализирован на PA0");
  Serial.print("Частота ШИМ: ");
  Serial.print(SystemCoreClock / (TIM2->PSC + 1) / (TIM2->ARR + 1));
  Serial.println(" Hz");
  
  // Инициализация буферов медианного фильтра
  for (int i = 0; i < MEDIAN_SIZE; i++) {
    adc0_median_buffer[i] = 2048;
    adc1_median_buffer[i] = 2048;
  }
}

volatile unsigned int adc[2];
float result;

void loop() {
  // Запуск одиночного преобразования
  ADC1->CR |= ADC_CR_ADSTART;
  
  // Ожидание завершения преобразования
  while (!(ADC1->ISR & ADC_ISR_EOC));
  
  // Чтение значений (последовательно для каждого канала)
  // PY32F003 преобразует каналы по очереди согласно CHSELR
  uint16_t raw_adc0 = ADC1->DR;  // Первое чтение - канал 8
  
  // Запуск второго преобразования
  ADC1->CR |= ADC_CR_ADSTART;
  while (!(ADC1->ISR & ADC_ISR_EOC));
  uint16_t raw_adc1 = ADC1->DR;  // Второе чтение - канал 9
  
  // Применение медианного фильтра
  adc[0] = medianFilter(raw_adc0, adc0_median_buffer, MEDIAN_SIZE, &median_index);
  adc[1] = medianFilter(raw_adc1, adc1_median_buffer, MEDIAN_SIZE, &median_index);

  result = (float)adc[0] * 3.3f / 4095.0f;
  Serial.print("A0 = ");
  Serial.print(result, 3);
  Serial.print("  ");

  result = (float)adc[1] * 3.3f / 4095.0f;
  Serial.print("A1 = ");
  Serial.print(result, 3);
  
  // Управление ШИМ
  uint16_t pwmm = adc[0] / 4;
  if (pwmm > MAX_PWM) pwmm = MAX_PWM;
  if (pwmm < MIN_PWM) pwmm = MIN_PWM;
  TIM2->CCR1 = pwmm;
  
  Serial.print("  PWM: ");
  Serial.print(pwmm);
  Serial.print(" (");
  Serial.print((pwmm * 100) / 1151);
  Serial.println("%)");
   
  delay(100);
}

PS я так понял здесь больше некому

И я. И, повзрослев - любил. До тех пор, пока не появились ЖК-телевизоры. Купил, а тут как раз ЧМ подоспел. В предвкушении потираю руки, закупаюсь пивом. Начинается игра. По площадке мечется десяток человек, машут клюшками, толкаются, дерутся. Без шайбы… Её (шайбу) отчетливо видел только во время вбрасывания. В руках у судьи.

С тех пор охладел. ))

После разборки данной люстры.
Не покупайте MW-LIGHT! Провода омедненные. Светодиоды 2835. Драйвер явно не потянет нагрузку. Дистанционное управление - микросхемы затерты, анализ протокола ничего не дал.
Все провода выбросил, поскольку омеднение тонкое и в месте пайки меди увы уже нет. Провода просто начали крошиться.

Чуть позже выложу что получилось.

Мда уж..
До чего дошло - заказал посылку с проводами из РФ. С медными.
У нас медных уже несолько лет нет. Нигде :). Ни в езернете, ни в обмотке моторчика, ни в магазине.

Медененый люминь - редкость. Обычно просто крашеный коричневым или рыжим лаком люминь.

Вот тут брал неоднократно, где указано что медь - медь и приезжала.

Вот мгтфа и набрал, еще полевых кабелей связи четырехжильных :).

Я бы все понял, но люстра 30килорублей стоила.

не знаю такие же у меня или нет… но я купил 2, пользуюсь год точно и все норм, по цене не помню, 1000-2500 вроде на озоне, лично я доволен))) но может вам и попалась какая то гадость…

Это вы, что-то погорячились. Уверен, много таких найдётся предложений https://www.royalsvet.ru/product/svetilnik-demarkt-erida-706011001/
Или вообще Люстра De markt 706011001 90w led (1002305887) купить в Москве по цене 7999 руб. в интернет-магазине Твой Дом
В твоё доме, часто на последние товары скидка большая

Это со скидкой предложение, поскольку он подохнет как раз после гарантии. На фото явно не потянет драйвер такой люстру. Я сейчас поставил 2 драйвера. И БП с дежурными 5Вольт еще поставлю. Основные драйверы будут отключаться.

Да это не секрет, они часто на год все. Но мы то знаем, как продлить их жизнь:)

Уфимкабель норм медные проводки. От 10км заказывайте, нет проблем.

В моей локации в местной сети радиомагазинов продают обрезки МГТФ.

Цена вкусная, 22р за кусок 1,5м. (0,12мм²)

заказал, обещают привезти в мой аул за 5-7 дней, ждём’c

Ну вроде собрал люстру. Завтра генеральный прогон с управлением от алисы. Пора делать платы управления светодиодами в виде модулей, типа ключей. Муторно уже паять простейшие схемы на макетках.

Вот так получилось.

2 драйвера, бп 5Вольт дежурное, 6 ключей для светодиодов, 2 ключа для твердотельных реле драйверов, esp32, 2 твердотельных реле .

Схему для себя не забудте нарисовать :grinning_face:

я боюсь даже представить, что там в коробочках/мыльницах :grinning_face_with_smiling_eyes:

Поскольку питание светодиодных модулей 60Вольт, то каждая коробочка - 2 ключа с mosfet 100V. Тем самым высоковольтная часть отдельно от низковольтной. Я не стал делать опторазвязку.

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

Осталось повесить на старое место. Теперь с Алисой нормально работает и пульт не нужен - пульт в смартфоне.