ATMEGA2560 умер внутри схемы аркадной игры
Я создаю аркадную игру с 10 кнопками игрока (по 5 для каждого игрока) и одной кнопкой запуска. Все кнопки имеют встроенный светодиод внутри. Кнопки проигрывателя имеют светодиод на 12 В, а кнопка запуска — на 5 В. Я использую кабана ATMEGA2560 pro. У меня также есть 4 дисплея TM1637 (по два для каждого игрока), показывающие время и счет. Я использую адаптер 12 В. Это моя схема:
Это тестовый код, который у меня был:
#include <Arduino.h>
#include <TM1637Display.h>
#define BTN_A1_PIN 16
#define BTN_A2_PIN 18
#define BTN_A3_PIN 28
#define BTN_A4_PIN 26
#define BTN_A5_PIN 47
#define BTN_B1_PIN 44
#define BTN_B2_PIN 36
#define BTN_B3_PIN 39
#define BTN_B4_PIN 46
#define BTN_B5_PIN 37
#define LED_A1_PIN 13
#define LED_A2_PIN 17
#define LED_A3_PIN 11
#define LED_A4_PIN 15
#define LED_A5_PIN 19
#define LED_B1_PIN 25
#define LED_B2_PIN 27
#define LED_B3_PIN 23
#define LED_B4_PIN 21
#define LED_B5_PIN 29
#define BTN_START_PIN 32
#define LED_START_PIN 35
#define DISPLAY_A_SCORE_CLK 20
#define DISPLAY_A_SCORE_DIO 10
#define DISPLAY_A_TIME_CLK 40
#define DISPLAY_A_TIME_DIO 43
#define DISPLAY_B_SCORE_CLK 42
#define DISPLAY_B_SCORE_DIO 33
#define DISPLAY_B_TIME_CLK 34
#define DISPLAY_B_TIME_DIO 38
typedef struct
{
uint8_t btnIn;
uint8_t ledOut;
} btn_t;
btn_t btn[] = {
{
.btnIn = BTN_A1_PIN,
.ledOut = LED_A1_PIN,
},
{
.btnIn = BTN_A2_PIN,
.ledOut = LED_A2_PIN,
},
{
.btnIn = BTN_A3_PIN,
.ledOut = LED_A3_PIN,
},
{
.btnIn = BTN_A4_PIN,
.ledOut = LED_A4_PIN,
},
{
.btnIn = BTN_A5_PIN,
.ledOut = LED_A5_PIN,
},
{
.btnIn = BTN_B1_PIN,
.ledOut = LED_B1_PIN,
},
{
.btnIn = BTN_B2_PIN,
.ledOut = LED_B2_PIN,
},
{
.btnIn = BTN_B3_PIN,
.ledOut = LED_B3_PIN,
},
{
.btnIn = BTN_B4_PIN,
.ledOut = LED_B4_PIN,
},
{
.btnIn = BTN_B5_PIN,
.ledOut = LED_B5_PIN,
},
{
.btnIn = BTN_START_PIN,
.ledOut = LED_START_PIN,
},
};
TM1637Display displayAScore(DISPLAY_A_SCORE_CLK, DISPLAY_A_SCORE_DIO);
TM1637Display displayATime(DISPLAY_A_TIME_CLK, DISPLAY_A_TIME_DIO);
TM1637Display displayBScore(DISPLAY_B_SCORE_CLK, DISPLAY_B_SCORE_DIO);
TM1637Display displayBTime(DISPLAY_B_TIME_CLK, DISPLAY_B_TIME_DIO);
void setup()
{
for (int i = 0; i < 11; i++)
{
pinMode(btn[i].btnIn, INPUT_PULLUP);
pinMode(btn[i].ledOut, OUTPUT);
}
displayAScore.setBrightness(0x0f);
displayATime.setBrightness(0x0f);
displayBScore.setBrightness(0x0f);
displayBTime.setBrightness(0x0f);
displayAScore.showNumberDec(1111, false);
displayATime.showNumberDec(2222, false);
displayBScore.showNumberDec(3333, false);
displayBTime.showNumberDec(4444, false);
}
void loop()
{
for (size_t i = 0; i < 11; i++)
{
if(0 == digitalRead(btn[i].btnIn))
{
digitalWrite(btn[i].ledOut, HIGH);
}
else
{
digitalWrite(btn[i].ledOut, LOW);
}
}
}
А вот как это выглядит внутри:
Проблема в том, что ATMEGA2560 только что сгорел. Сначала я тестировал его без TM1637 (они были подключены к питанию, но в то время я не использовал для них lib), и все работало нормально (кнопки загорались при нажатии).
Затем я добавил в код библиотеку для TM1637 и в течение 2 секунд видел "1111" «2222»; ... итак как в коде, чтобы не было плохого соединения. Но через 2 секунды начал гудеть (видимо сработала температурная защита линейного регулятора) и ATMEGA просто сгорела.
Теперь, когда я подключаю 12 В, MCU довольно быстро нагревается. Я могу измерить напряжение 5 В на линейном регуляторе, чтобы он не был закорочен. Я всегда подключал только 12В и никакого питания от USB. Я знаю, что мои провода не самые короткие, но я бы не ожидал, что MCU выйдет из строя. Не могли бы вы помочь, пожалуйста? Я не хочу вставлять следующую фишку в 20 евро только для того, чтобы увидеть еще один дорогой дым.
@andz, 👍2
Обсуждение1 ответ
Лучший ответ:
Вы поджарили его, потому что нарушили правило №1: «Ардуино НЕ является источником питания!». Ваши дисплеи сами по себе могут вытянуть 320 мА. Это более 2 Вт мощности, прежде всего. Когда вы купите новый, купите понижающий преобразователь и запитайте светодиоды от него с выходным напряжением 5 В, а для питания используйте 12 В. Насколько я понимаю, рекомендуемая максимальная рассеиваемая мощность регулятора Mega составляет 1 Вт. Таким образом, при подаче на стабилизатор 12 В максимальный ток составляет около 140 мА (1 Вт / (12 В – 5 В)). Это не считая ваших светодиодов.
Я рассчитывал на схему защиты регулятора, у этих линейных она есть. Но странно, почему ATMEGA сгорела, а регулятор выдает 5В. Я использовал отдельное питание для ATMEGA и дисплеев, и теперь оно работает. Спасибо за ответ., @andz
- Как сбросить или отформатировать Arduino?
- Какие контакты Ramps есть на моем Arduino Mega?
- Сбой Arduino во время последовательной печати без очевидной причины
- Будет ли адаптер питания 12В постоянного тока, 1А подавать слишком большую мощность и повредит Arduino Mega 2560?
- Как запрограммировать Robotdyn Mega 2560 PRO MINI?
- Отключите автоматический сброс Mega 2560 на последовательном мониторе, открытом с помощью резистора 60 Ом.
- Можно ли изменить официальную библиотеку шилдов arduino GSM для работы с аппаратным serial на mega?
- Программирование пользовательских Arduino Mega с Arduino Uno
либо что-то неправильно подключено, либо компонент не тот, что вы думаете... возможно, кнопки имеют внутреннюю связь между переключателем и светодиодным индикатором, @jsotola
@jsotola спасибо за ответ. Я дважды проверил каждое соединение, и оно было правильным. Нет, кнопки не связаны со светодиодами, @andz
Контакт 5 В на плате, вероятно, не является подходящим местом для подачи питания на дисплеи. Я уверен, что это больше, чем он может дать. В идеале у них должен быть собственный источник питания., @Delta_G