OLED-дисплей выходит из строя при подключении USB

Я приобрел OLED-дисплей 16x2 (DEP 16201-Y, совместимый с контроллером HD44780) для своего Arduino Uno и заставил его работать в 4-битном режиме, но только если USB не подключен и он питается от источника питания 9 В.

Итак, моя рутина такова:

  • Подключите USB и блок питания
  • Загрузить код
  • --> Не работает
  • Отключите USB и блок питания
  • Просто подключите питание
  • --> Работы
  • Подключите USB
  • --> Сбои в работе дисплея

Итак, вкратце: если Arduino подключена к моему ПК через USB, с дополнительным источником питания или без него, дисплей не будет работать должным образом, произойдет сбой или Arduino даже перезагрузится. (какая-то ошибка памяти?)

У меня нет возможного объяснения этому..

Спасибо за помощь.

ПРАВКА: Я использую Ubuntu Mate Kernel 4.4.0-43-generic 64bit

Если я подключаю кабель без питания, дисплей работает нормально. Если я подключаю кабель с напряжением 5 В, но ПК выключен, то дисплей работает нормально. Чтобы дисплей вышел из строя, компьютер должен быть запущен.

Тестовый код:

#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);

void setup()
{
    //lcd.clear();
    lcd.begin(16, 2);
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print("Hello there");
    delay(1000);
}

void loop()
{
    lcd.setCursor(0,1);
    lcd.print("Hello World");

    lcd.setCursor(0,0);
    lcd.print("ABCDEFGHIJKLM");

    delay(1800);

    lcd.clear();

}

До После

, 👍4

Обсуждение

Это происходит только если ваш ПК работает? Если да: какую ОС вы используете?, @zimmerrol


2 ответа


2

Когда ваш компьютер загружается или когда вы подключаете плату с загруженной системой, скорее всего, созданный последовательный порт (/dev/ttyACM0) открывается процессом modem-manager. Это приведет к сбросу Arduino, что даст вам те же результаты, которые вы видите при сбросе платы другими способами.

У меня было бесконечное количество проблем с зеленой версией того же экрана. Лучший результат, который я получил, — это управление питанием дисплея и включение его при каждой загрузке. Вы можете сделать это с помощью простого P-канального логического уровня MOSFET или PNP-транзистора:

схема

Если вы выбрали, скажем, D3 (в качестве примера) в качестве управляющего GPIO, то вы должны сделать следующее:

void setup() {
    pinMode(3, OUTPUT);
    digitalWrite(3, LOW);
    delay(1000); // Дайте ему время успокоиться после включения
    ... остальной код настройки ...
}

Вы также можете использовать его для экономии энергии (если хотите), выключив дисплей — просто установите контакт обратно на ВХОД, и он будет выключен R1.

,

@LookAlterno А вы когда-нибудь пользовались одним из этих дисплеев? Они, мягко говоря, проблемные., @Majenko

@LookAlterno также, вы когда-нибудь замечали, что если вы загружаете компьютер с подключенным Arduino, Arduino сбрасывается в середине последовательности загрузки? Это modem-manager., @Majenko

@LookAlterno Я тоже, но я люблю спать по ночам, поэтому выключаю компьютер., @Majenko


0

У меня была та же проблема, но я решил ее с помощью следующего кода:
noDisplay(); display();, похоже, сбрасывает экран в правильное положение.

void LCDInit()
{
  lcd.begin(DISPLAY_LINE_LENGHT, DISPLAY_LINES);  
  // Нам нужно сделать это, чтобы сбросить настройки OLED-дисплея
  lcd.noDisplay();  
  lcd.display();
  lcd.clear();  
}
,