Arduino Mega2560 перезагружается после двух последовательных обращений к analogWrite - PullRequest
0 голосов
/ 16 марта 2020

Почему этот код приводит к постоянному сбросу Arduino Mega2560?

void setup() {
  Serial.begin(9600);
  Serial.println("SETUP");
  delay(500);             //without this line Serial prints "SESESESESE"
  analogWrite(10, 100);
  analogWrite(11, 50);    //reboots after this line
}

void loop() {
  Serial.println("LOOP"); //doesn't reach here
}

Последовательные выходы Arduino следующие:

SETUP
SETUP
SETUP
SETUP
SETUP
SETUP
SETUP
SETUP

Примечания:

1) Arduino не перезагружается, если я заменяю контакты 10 и 11 некоторыми другими (например, 8 и 9), но он также перезагружается с контактами 12 и 13 (я думаю, что контакты 10-13 являются чем-то особенным).

2) Arduino не перезагружается, если я использую равные значения в вызовах analogWrite (например, 100 и 100).

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Судя по всему, виноваты оптимизации компилятора. После добавления этих двух строк в начале программы она, наконец, работает следующим образом:

void setup() __attribute__((optimize("-O1")));
void loop() __attribute__((optimize("-O1")));
1 голос
/ 17 марта 2020

Такое поведение не должно происходить, если вы установите ваши контакты на:

 void setup() {
    pinMode(10, OUTPUT);  // sets the pin as output
    pinMode(11, OUTPUT);  // sets the pin as output

Такие сбросы типичны для плохого источника питания, шума или плохого соединения (плохой прототип) или плохого вывода светодиода (например, слишком маленький или поврежденный резистор, или поврежденный контакт, и т. д. c). Если ваш мега не имеет HW-дефекта и достаточного источника питания или дополнительного HW, который вызывает этот дефект, он должен работать как положено.

...