LGT8F328P уходит в reset loop

mishaMyers

✩✩✩✩✩✩✩
6 Дек 2025
7
0
Добрый день, снова я столкнулся проблемой, недавно спалил ардуино нано подав на нее 12 вольт случайно и решил переделать лампу на LGT8F328P. Загрузил скетч, вроде даже 30 минут поработало нормально пока тестировал энкодер. Но в случайный момент перестало работать: не считывался энкодер и случайно переходит в состояние, когда он постоянно перезагружается.
Не могу понять в чем проблема: В коде, В питании, В браке платки?
PS Пробовал и на 5 вольтах, 4.6 дал в надежде на чудо и по совету gpt

Скетч:
#include <FastLED.h>
#define LED_PIN 5    // пин
#define LED_NUM 60   // количество светодиодов
CRGB leds[LED_NUM];

#include <EncButton.h>
#define STEP 18
#define CLK 6
#define DT 4
#define SW 2
#define COLORSTEP 4


EncButton enc(CLK,DT,SW);
bool isBrightMode = true;


static uint32_t tmr;
bool isWhiteMode = true;
int saveLight = 128;
int colorOffset = 128;
int memoryBright = saveLight;
int bright = saveLight;


void applyColor() {
 
    CHSV color = CHSV(colorOffset, isWhiteMode?0:255, bright);
    fill_solid(leds, LED_NUM, color);
    FastLED.setBrightness(bright);
    FastLED.show();
}






void setup() {
  Serial.begin(9600);
  // put your setup code here, to run once:
  colorOffset = 128;
  isWhiteMode = true;
  isBrightMode = true;
  bright = saveLight;
  Serial.println("INIT: ");
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, LED_NUM);
  applyColor();

 

}



void colorOffsetPlus(){
  colorOffset = (colorOffset + STEP/COLORSTEP) % 256;
  applyColor();
  Serial.print("colorOffset: "); Serial.println(colorOffset);
}
void colorOffsetMinus(){
  colorOffset = (colorOffset - STEP/COLORSTEP) % 256;
  applyColor();
  Serial.print("colorOffset: "); Serial.println(colorOffset);
}


void brightPlus(){
  bright = constrain(bright+STEP,0,255);
  applyColor();
  Serial.print("Bright: "); Serial.println(bright);
}
void brightMinus(){
  bright = constrain(bright-STEP,0,255);
  applyColor();
  Serial.print("Bright: "); Serial.println(bright);
}



void loop() {
    enc.tick();

    if(enc.hasClicks(1)){
      isBrightMode = !isBrightMode;
      Serial.print("isBrightMode: "); Serial.println(isBrightMode);
    }
    
    if(enc.hasClicks(2)){
      isWhiteMode = !isWhiteMode;
      Serial.print("isWhiteMode: "); Serial.println(isWhiteMode);
      applyColor();
    }
    
    if(isBrightMode){
      if(enc.right()){
          brightPlus();
      }
      if(enc.left()){
          brightMinus();
      }
    }
    else{
      if(enc.right()){
          colorOffsetPlus();
      }
      if(enc.left()){
          colorOffsetMinus();
      }
    }
    
  if (enc.right()) {
    Serial.println("RIGHT");
  }
  if (enc.left()) {
    Serial.println("LEFT");
  }
  if (enc.press()) {
    Serial.println("PRESS");
  }
          
 
  if (millis() - tmr > 500) {
    tmr = millis();
    Serial.println("loop alive");
  }
}
2025-12-21 14-20-00.JPG2025-12-21 14-11-35.JPG2025-12-21 14-11-13.JPG
 

bort707

★★★★★★✩
21 Сен 2020
3,355
972
в случайный момент перестало работать: не считывался энкодер и случайно переходит в состояние, когда он постоянно перезагружается.
Такое обычно бывает из-за неверного подключения или плохих контактов. С учетом того, что одну плату вы уже сожгли, что-то перепутав - сценарий весьма вероятен. Судя по фото, у вас провода либо не припаяны совсем (просто засунуты в отверстия платы), либо припаяны очень плохо, с малым количеством припоя и непропаем.

Кроме того, код тоже вызывает вопросы. Например, читали ли вы описание на библиотеку энкодера? Насколько я вижу в мануале, вызывать методы типа enc.left() и enc.right() можно только один раз после каждого enc.tick()
 

mishaMyers

✩✩✩✩✩✩✩
6 Дек 2025
7
0
@bort707,
Попробую перепаять их еще раз, возможно это так. Я запаял только с одной стороны платы, а на вторую забил, так как снял изоляцию с недостаточно количества провода и решил ну может и так пойдет( ну оно действительно сначала работало)
Спалил прошлый я подав на него 12 вольт, когда пытался подключить понижающий dc и сначала подключил и только потом решил уменьшить напряжение.
Повторный вызов на самом деле временный код когда я отчаялся и пытался пробовать уже писать chatgpt
 

r4wabr

★✩✩✩✩✩✩
21 Май 2019
73
17
42
Ижевск
Рядом с контактами +5В и GND куда подано питание контакт RESET. Если на него провода будут коротить, то будет сброс и также плохой контакт питания будет причиной постоянного сброса.
 

mishaMyers

✩✩✩✩✩✩✩
6 Дек 2025
7
0
Не, ну проблема скорее всего не в контакте, пайка вроде нормальная, но хз.
Ну и в любом случае исход тот же при конекте к компу, правда там 4.2 вольта. Из-за этого я и припаивал внешние 5 вольт. Но ладно. Пока закажу вторую такую платку и попробую еще раз на новой. Может третью я не убью.

CM251222-212146001.jpg CM251222-212545002.jpg
 

Bruzzer

★★★★✩✩✩
23 Май 2020
752
230
@mishaMyers,
На поиск решения сильно влияет частота сбоев. Если сбои происходят очень часто, то по очереди отключаются внешние устройства, какие можно отключить, и смотрится, стало ли лучше. В вашем случае - отключаете полностью ленту и смотрите, перестало сбоить или нет, если перестало, то возможно лента слишком много потребляет для вашего БП. Если зависать не перестало, то думать дальше.
 

mishaMyers

✩✩✩✩✩✩✩
6 Дек 2025
7
0
@Bruzzer,
Голая платка, все что подключено это энкодер. Я буквально достал с пачки платку, прицепил энкодер и стал в Мониторе Порта проверять работу библиотеки и через минут 30 все перестало работать. Я не исключаю что я что-то замкнул на плате пока держал ее в руках, проверим через неделю