Leonardo: отключить TX - и RX-светодиоды
У меня есть (более или менее) Леонардо-совместимая плата Olimexino-32u4. Оба светодиода TX - и RX-постоянно включены. Чтобы уменьшить энергопотребление, я хочу отключить их с помощью программного обеспечения. Каков надежный способ сделать это?
@Thomas S., 👍3
Обсуждение3 ответа
Лучший ответ:
Попробуйте добавить это в свою процедуру настройки:
TXLED0;
RXLED0;
Эти макросы (и их двоюродные братья TXLED1, RXLED1) используются для управления светодиодами TX и RX на Leonardo. Они определены в https://github.com/arduino/ArduinoCore-avr/blob/9f8d27f09f3bbd1da1374b5549a82bda55d45d44/variants/leonardo/pins_arduino.h#L95-L98
Если это не сработает, вы можете попробовать решения, предложенные здесь: http://forum.arduino.cc/index.php?topic=145262.0
Переключение IDE для загрузки в "Микро" вместо "Леонардо" действительно решило проблему со светодиодами., @Thomas S.
Смотрите мой новый ответ для более подробного объяснения и, возможно, лучшего решения., @user2973
Альтернативно: отображение контактов в мире Arduino-это D17 для RX и D30 для TX, поэтому вместо TXLED1 вы также можете использовать digitalWrite(30, HIGH)., @volzo
TXled подключен к физическому контакту 22 или PD5. RXled подключен к контакту 8 или PB0. Они подключены к катоду светодиода, поэтому они должны быть ВЫСОКИМИ, чтобы выключить светодиоды.
Чтобы превратить их в ВЫСОКОЕ использование:
PORTD |= (1<<PORTD5);
PORTB |= (1<<PORTB0);
Не уверен, что делает прошивка, и время от времени ли она снова выключает светодиоды. Поэтому в дополнение я бы предложил также установить эти контакты на входы.
DDRD &= ~(1<<DDD5);
DDRB &= ~(1<<DDB0);
Olimexino-32u4 подключает светодиоды к GND, но, как написано в моем комментарии, этот подход не работает., @Thomas S.
Прочитав ответ Гербена, я понял суть проблемы: светодиоды TX/RX на Leonardo имеют проводной вывод-светодиод-5 В(общий анод), тогда как на Olimexino-32U4 они имеют проводной вывод-светодиод-GND(общий катод). Таким образом, двум платам понадобятся обратные сигналы для одного и того же визуального вывода.
Сравните:
http://arduino.cc/en/uploads/Main/arduino-leonardo-schematic_3b.pdf
https://www.olimex.com/Products/Duino/AVR/OLIMEXINO-32U4/resources/OLIMEXINO-32U4_rev_A3.pdf
Наиболее элегантным решением будет добавление нового типа платы (приведенный ниже код предназначен для IDE 1.0.x):
В вашем альбоме для рисования создайте папку "оборудование", а внутри нее "олимексино". В папке olimexino создайте файл boards.txt с этим содержанием:
olimexino32u4.name=Olimexino-32U4 olimexino32u4.upload.protocol=avr109 olimexino32u4.upload.maximum_size=28672 olimexino32u4.upload.speed=57600 olimexino32u4.upload.disable_flushing=true olimexino32u4.bootloader.low_fuses=0xff olimexino32u4.bootloader.high_fuses=0xd8 olimexino32u4.bootloader.extended_fuses=0xcb olimexino32u4.bootloader.path=caterina olimexino32u4.bootloader.file=Caterina-Leonardo.hex olimexino32u4.bootloader.unlock_bits=0x3F olimexino32u4.bootloader.lock_bits=0x2F olimexino32u4.build.mcu=atmega32u4 olimexino32u4.build.f_cpu=16000000L olimexino32u4.build.vid=0x2341 olimexino32u4.build.pid=0x8036 olimexino32u4.build.core=arduino:arduino olimexino32u4.build.variant=olimexino32u4
Создайте еще одну папку "варианты" внутри папки olimexino.
- Внутри этого создайте папку "olimexino32u4".
- Теперь скопируйте "arduino/оборудование/arduino/варианты/леонардо/pins_arduino.h' к этой папке
- Откройте копию для редактирования - путь должен быть "альбом для рисования/оборудование/olimexino/варианты/olimexino32u4/pins_arduino.h".
Измените раздел, посвященный TXLED и RXLED, заменив макросы, заканчивающиеся на 1, на макросы, заканчивающиеся на 0. Это должно выглядеть так:
#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0) #define TXLED1 PORTD |= (1<<5) #define TXLED0 PORTD &= ~(1<<5) #define RXLED1 PORTB |= (1<<0) #define RXLED0 PORTB &= ~(1<<0)
У меня нет платы, поэтому я не могу протестировать решение. Я надеюсь, что это решит вашу проблему - просто выберите "Olimexino-32U4" в меню "Сервис" -> "Плата".
Я попробовал оба значения на TXLED и RXLED - одно не сработало. Сработал только выбор платы "Микро"., @Thomas S.
Это лучшее решение. Проблема связана с тем, что активность UART берет на себя управление светодиодами Tx и Rx. Переключение на «микро» плату просто меняет состояния этих светодиодов. Создание пользовательской платы pins_arduino.h и пустое определение этих макросов полностью отключит их использование UART, сделав их простыми GPIO., @Scott
- Как использовать SPI на Arduino?
- Нажать клавишу Windows, используя «keyboard.press();»
- Как подключить вывод INT MPU 6050?
- Улучшенное циклическое переключение цветов RGB.
- Проблема с загрузкой моего скетча на Ардуино
- Отправка мультимедийных клавиш клавиатуры с помощью библиотеки клавиатур
- Распиновка аналога Arduino Pro Micro
- Как преобразовать скетч примера Arduino в полный проект C++?
Изучите схему и определите, подключены ли они к источникам питания или к выводам ввода-вывода. Если есть источники питания, снимите соответствующие резисторы. Если контакты ввода-вывода остаются включенными, измените загрузчик и USB-ядро, чтобы оставить их выключенными, или попробуйте выдать необработанный доступ ввода-вывода ATmega, чтобы отключить их, если они просто остаются включенными после загрузчика и не постоянно перегружаются USB-трафиком., @Chris Stratton
@ChrisStratton почему бы просто не удалить их в первую очередь? Я вообще не знаю, почему было бы плохо отпаять светодиод..., @Anonymous Penguin
Просто заклейте их скотчем..., @DeveloperACE
Модификации программного обеспечения дешевле и проще реверсировать. Лента не экономит энергию., @Chris Stratton
Как они управляются в настоящее время? Прямой путь с использованием digitalWrite(pin, LOW) не работает. pinMode(pin, INPUT) тоже не работает., @Thomas S.