Попытка напечатать текст на жидкокристаллическом дисплее с Arduino trinket

lcd

Я пытаюсь просто запрограммировать брелок Arduino на отображение некоторого текста на жидкокристаллическом дисплее.

Я в основном пытаюсь следовать этомупримеру , за исключением того, что подключаю его к Trinket, а не к Arduino Uno. Цвет фона жидкокристаллического дисплея меняется, как и ожидалось от функции цикла в моем коде Arduino, но он просто отображает некоторые буквы o и стрелки для текста на жидкокристаллическом дисплее.

Я новичок в Arduino (и EE в целом), но я программист.

Что я делаю не так, что пример кода в приведенной выше ссылке не печатает текст на LCD дисплее?

, 👍0

Обсуждение

Поскольку вы упомянули, что целевая плата-это "Arduino Trinket" вместо "Arduino Uno", может ли быть какая-то разница в том, как был подключен ЖК-дисплей? Другими словами, назначение контакта может отличаться от ожидаемого в приведенном примере кода. В качестве диагностики вы можете попробовать пример LCD Hello World (в разделе File - Examples - LiquidCrystal - HelloWorld, если вы используете Arduino IDE). Если это не работает, то вам нужно найти схему для вашей платы, определить, какой ЖК-вывод подключается к какому контакту ATmega328, а затем какой контакт "Arduino", чтобы вы могли обновить исходный код., @MarkU

Не обращайте внимания на мой вышеприведенный комментарий; я неправильно истолковал этот вопрос; обычно Arduino + LCD означает ЖК-дисплей HD44780, подключенный непосредственно к ATmega328. Здесь дело не в этом. На самом деле у вас есть последовательное (RS232-подобное) соединение между двумя устройствами. Таким образом, реальная проблема, скорее всего, заключается в неправильной скорости передачи данных в бодах или какой-то другой проблеме, связанной с протоколом RS232., @MarkU

Глядя на первую фотографию, не было ли какой-то причины, по которой вы подключили белый последовательный провод передачи данных к "Цифре № 0" брелка, а не к "Цифре № 2", как в примере кода? Имейте в виду, что в Arduino UNO цифровой #0 используется для последовательного приема, поэтому использование этого контакта для последовательной передачи может вызвать проблемы. Похоже, что цифра №2 в настоящее время не используется на вашей плате., @MarkU

Наконец - то выследили, что такое Arduino Trinket: ATtiny85 не ATmega328-совсем другой зверь. Ваш связанный пример кода использует SoftwareSerial (ATtiny85 не имеет аппаратного серийного номера). Вы уверены, что у вас есть правильные настройки флага? Если ATtiny85 был установлен на внутреннюю тактовую частоту 1 МГц вместо внутренней тактовой частоты 8 МГц, то скорость передачи данных в бодах будет неправильной. Я даже не уверен, что внутренние часы достаточно стабильны, чтобы поддерживать последовательную связь. Если у "безделушки" есть внешний тактовый генератор, убедитесь, что флаги ATtiny85 правильно настроены для его использования. Попробуйте использовать осциллограф, чтобы проверить синхронизацию последовательной связи., @MarkU

@MarkU Причина, по которой я использовал #0, заключается в том, что b/c Я уже пробовал использовать #1 и #2 и не знал, есть ли разница между контактами., @Catfish

Как бы я проверил настройки флага? Кроме того, я почти уверен, что попробовал пример Hello World, и он не сработал., @Catfish

Пример кода liquid crystal hello world не работает., @Catfish

Вы можете попробовать этот учебник сначала, чтобы убедиться, что вы можете получить последовательную работу. Затем добавьте жидкокристаллический дисплей. https://learn.adafruit.com/trinket-bluetooth-alarm-system/code... Используйте последовательный раздел программного обеспечения для отладки связи с вашей безделушкой., @Mikael Patel


2 ответа


0

Внимание: У меня нет ATtiny85 и ЖК-дисплея, так что это чисто основано на том, что я нашел после некоторого чтения этого mcu.

Что бы я сделал в вашей ситуации: Поскольку брелок использует ATtiny85, у него нет аппаратного серийного номера. Поэтому необходим программный вариант.
Вы выбрали последовательное программное обеспечение (которое является самым очевидным в мире Arduino), но, похоже, это самое сложное решение. Согласно этому источнику, возможна последовательная связь с Teensy (и я цитирую)

возможно, вам придется настроить внутренний генератор, чтобы получить стабильное соединение.

Предполагая, что вашему ЖК-дисплею не нужно отправлять данные обратно; я бы попробовал TinyDebugSerial.

,

Имейте в виду, что добавление внешнего кристалла было бы самым простым/надежным. Но это будет стоить вам 2 определенных вывода ввода-вывода. Также могут возникнуть проблемы с памятью, так как ATtiny85 имеет гораздо меньше памяти, чем ATmega328. Arduino Nano (или pro micro) может соответствовать вашим требованиям к физическому размеру, будучи при этом намного более "мощным"., @Paul


1

Управление этим дисплеем не должно выходить за рамки возможностей ATtiny85. У меня есть один, использующий двустороннее последовательное соединение для процедуры настройки, которая изменяет значения EEPROM.


Во-первых, подключите ЖК-дисплей к рюкзаку с помощью USB-разъема и проверьте его там, чтобы исключить его неисправность.

В нижней части этой страницы:

Для получения дополнительных команд проверьте репозиторий github (см. вкладку Загрузки) на наличие скрипта python, который будет проверять все команды на дисплее.


Последовательный порт контрольной Trinket:

Что вы можете сделать, так это взять Trinket и запустить базовую программу последовательного подключения, чтобы проверить, отправляет ли Trinket правильную информацию.

Trinket:

#include <SoftwareSerial.h>
// Создайте последовательный порт программного обеспечения!
SoftwareSerial comm = SoftwareSerial(0, 1); //RX,TX
#define LEDPIN  PINB2
void setup() {
  //установить скорость порта
  comm.begin(9600);
  DDRB |= (1 << LEDPIN);  // установить режим вывода на контакте LED
}

void loop() {
  //выводите определенный символ один раз в секунду

  comm.println('a');
  PORTB |= (1 << LEDPIN); // включить LED
  delay(500);            // задержка 0,5 секунды
  PORTB &= ~(1 << LEDPIN); // выключить LED
  delay(1000);
}

Тогда вам понадобится еще один Arduino, например Uno, Леонардо:

// Для leonardo используйте Serial1 для подключения
void setup() {
  // Откройте последовательную связь и дождитесь открытия порта:
  Serial.begin(9600);
  while (!Serial) {
    ; // дождитесь подключения последовательного порта. Требуется только для собственного USB-порта
  }


  Serial.println("Ready...");

  // установите скорость передачи данных для порта SoftwareSerial
  Serial1.begin(9600);
}

void loop() { // run over and over
  if (Serial1.available()) {
    char incoming = Serial.read();
    Serial.println(incoming);
  }

}

Или стандартный скетч balnk и подключите последовательный вывод брелка к Arduino TX-> 1>.

При использовании UNO вы можете настроить стиль программного обеспечения, описанный выше.

Я скорее рекомендую этот USB-последовательный конвертер, так как он будет быстрее и чище.

Далее вам нужно посмотреть, что выходит. Если полученные данные верны, значит, на ЖК-дисплее возникла проблема, попробуйте повторно прошить ЖК-плату новой прошивкой.

Если данные поступают правильно, перейдите к использованию кода Adafruit и продолжайте подключать его к другим последовательным соединениям плат Arduino,заменив Serial.println(Serial1.read()); на Serial.println(Serial1.read (), ШЕСТНАДЦАТЕРИЧНЫЙ);.

Если данные по-прежнему поступают правильно, то данные неправильно принимаются ЖК-дисплеем.


ЖК-рюкзак

Вы должны протестировать плату дисплея с помощью другого Arduino, UNO или Leonardo (32u4).

Запустите обучающий код Adafruit и посмотрите результаты. Если код работает, то возникает проблема с Trinket и библиотекой программных материалов.

Если снова возникают ошибки, которые возникают с ЖК-дисплеем при использовании с "обычным" Arduino, то это проблема.


Рекомендации

Загрузите ядро ATtiny из High-Low Tech и запишите "загрузчик", чтобы сбросить настройки предохранителей до 8 МГц, также это хорошее ядро для использования, если вам нужно больше места на ATtiny.

Возможно, перепрошейте загрузчик Trinket и убедитесь, что внутренние часы 8 МГц; я полагаю, что библиотека программных материалов-это сенсорная.


,