`noInterrupts()` заставляет arduino больше не отображаться в портах

Минимальный рабочий пример:

void setup() {
  // инициализируем цифровой вывод LED_BUILTIN как выход.
  noInterrupts();
  pinMode(LED_BUILTIN, OUTPUT);
}

// функция цикла запускается снова и снова навсегда
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // включаем светодиод (HIGH - уровень напряжения)
  delay(1000);                       // ждем секунду
  digitalWrite(LED_BUILTIN, LOW);    // выключаем светодиод, понижая напряжение
  delay(1000);                       // ждем секунду
}

При загрузке в мой Arduino Nano 3.3v BLE с моего M1 Mac Nano больше не отображается в меню портов. Чтобы он снова появился, мне нужно дважды нажать кнопку сброса на Nano, чтобы он сбрасывался на сценарий по умолчанию. После этого Nano снова будет доступен в меню портов.

Я также не могу увидеть Nano через cat /dev/cu.<TAB>, когда на него загружен этот скрипт.

Кто-нибудь знает, почему это происходит? Или, в качестве альтернативы (если это предполагаемое поведение), почему это не задокументировано в interrupts() или noInterrupts?

Я просмотрел несколько других сообщений, но не думаю, что они дублируют это:

Редактирует в ответ на ответы

Таким образом, MWE не совсем точно описал мою проблему, и некоторые ответы зациклились на этом (это моя вина). Я включил более подробное описание того, что я делаю ниже, чтобы описать, что я на самом деле делаю, но я также принял ответ, который, я думаю, отвечает на суть вопроса «почему прерывания заставляют Nano работать». не появляется в порту?".

На самом деле у меня есть два Arduino Nano (назовем их основным и дополнительным), подключенные через I2C и Wire.h. Каждый Arduino nano считывает 15 аналоговых входов (через мультиплексор). Затем вторичный Nano отправляет свои 15 аналоговых показаний первичному через I2C. Но у меня в аналоговых показаниях первичного Nano много шума, а во вторичном шумов нет. Этот шум исчезает, когда я отключаю I2C. Итак, моя теория заключалась в том, что цифровые провода SCL и SDA вызывали шум в проводах аналоговых датчиков, но я заметил, что шум будет возникать только в течение ~ 2 мс каждые ~ 10 мс. Я подумал, что отключу прерывания (и, следовательно, отключу Wire.h от пульсирующего SCL/SDA), пока считываю аналоговые датчики основного устройства, а затем включу прерывания. Из-за этого Nano не отображался на вкладке «Порты», а остальное — результат этого поста.

Теперь я думаю, что не включил подтягивающий резистор 4,7 Ом в SDA и SCL, который, кажется, включен только в официальные примеры Arduino и никогда в какие-либо случайные примеры из Интернета.

, 👍-1

Обсуждение

Я понятия не имею, что такое MWE, и вы отредактировали свой вопрос до такой степени, что мой ответ больше не синхронизировался с ним., @timemage

Извините, MWE=минимальный рабочий пример., @beyarkay


1 ответ


Лучший ответ:

2

Я не очень хорошо разбираюсь в Nano 3.3v BLE, однако оказалось, что он напрямую подключен к USB-порту, поэтому отключение прерываний также лишает его возможности реагировать на рукопожатия USB, поэтому он будет отображаться для хост, что он был отключен.

У оригинального Nano был отдельный чип (FT232RL), который обрабатывал интерфейс USB, поэтому отключение прерываний на этом Arduino не приводило к разрыву USB-соединения.

Или, в качестве альтернативы (если это задуманное поведение), почему это не задокументировано в interrupts() или noInterrupts?

Возможно, документация не обновлялась до более поздних выпусков продукта. Нередко документация отстает от того, что на самом деле делают выпущенные продукты.

Как указывает timemage в другом ответе, ваши попытки мигать светодиодами с отключенными прерываниями не увенчаются успехом. На самом деле отключение прерываний должно выполняться только на миллисекунды, а не навсегда. Я предполагаю, что это демонстрационный скетч, но все же... если вы отключите прерывания только на короткое время, проблема должна исчезнуть.

,

Да, я добавил уточнение о типичной временной шкале примерно за две минуты до того, как пришел этот ответ. Так что, вероятно, его не было, когда вы сочиняли. Это хорошее замечание о документации. Большая часть этого действительно ориентирована на ранние платы., @timemage

Спасибо! Да, светодиодная часть MWE на самом деле не имела отношения к полной проблеме, но вы все равно ответили на основной вопрос, почему это происходит. Я собираюсь отправить PR, чтобы обновить документы. Есть идеи, это только Nano или есть и другие платы?, @beyarkay

Меня не удивит, если это будет связано с более современными платами с новыми процессорами, однако я не в курсе, какие они могут быть., @Nick Gammon

@NickGammon Я избавился от своего ответа. Их вопрос, по-видимому, сейчас касается I2C... или что-то в этом роде. Не заинтересован в погоне за переопределением., @timemage