LCD выводит "крякозябры"
- Войдите на сайт для отправки комментариев
Здравствуйте, недавно купил себе Arduino UNO Rev3 и LCD WH1602D-YYK-CTK и сразу появились проблема, в которой, я надеюсь, Вы мне поможите. Попытался подключить его, схему взял со статьи про LiquidCrystal на официальном сайте, и оказалось что у моего LCD контакты + и - противоположны, нежели на схеме, но это пол беды. Первый же пример HelloWorld вызвал у меня шок. Сначало я нечего на экране не увидел, после парочки ресетов я увидел 2 строки постоянно меняющихся символов. Убрал весь код из loop и О БОЖЕ, строка hello, world! всетаки появилась. Потом я вернул код в loop и опять пустой экран. Изменил его для вывода текста (изначально там время работы ардуино) и крякозябры вернулись. В результате я вижу нормальный текст через раз при выводе лишь в setup, или невижу нечего. Либо выводя в loop - я вижу "анимированые" символы, либо опять таки пустой экран. Что это может быть и как это исправить? Очень прошу Вашей помощи.
P.S.: контакты я изначально припаял к LCD, дабы избежать "сопливости" контактов. И еще, один раз я всеже увидел нормально работающий HelloWorld с секундным индикатором работы (официальный скетч), но после записи своего скетча проблемы вернулись опять.
Попробовал пример со страницы
http://robocraft.ru/blog/arduino/503.html
и очень удивился когда первые строки отображались как надо, но затем опять пошли крякозябры. Удивительно уже то, что не по всему экрану, а лишь вместо некоторых букв. Так же добавлялись неведомые пиксели в символы отрисовываемые мной по маске.
Может ли такое происходить из-за того, что я изначально несколько раз подключал LCD по неправильной полярности (питание)?
нет, обычно при неверной полярности LCDM начинает жрать очень большой ток (около 2 А), но ему ничего от этого не становится. я убил один из своих экранов, запитав от 9В (их напряжение питания - не выше 7).
поможет вот этот PDF: http://bashel.bashel.ru/info5/sLCD_WS.pdf
следует обратить внимание что на винстарах идет сзади наклейка с типом изделия, а если ее отодрать - то под ней на плате тоже вытравлен тип, но как правило другой. правильный тот, что на наклейке.
ждемс народ, может еще что-то посоветуют.
Либо вы что-то неправильно напаяли, либо ошибка при инициализации дисплея (строчка типа LiquidCrystal lcd(8, 9, 4, 5, 6, 7);)
Либо вы что-то неправильно напаяли, либо ошибка при инициализации дисплея (строчка типа LiquidCrystal lcd(8, 9, 4, 5, 6, 7);)
А если "кракозябры" появляются через 20-30 мин. работы? На что здесь грешить?
>>А если "кракозябры" появляются через 20-30 мин. работы? На что здесь грешить?<<
На малый ограничительный резистор подсветки или на подстроечник регулирующий контраст.
А может и в программе ошибки есть. Показывайте.
Вот код (не судите строго, первый опыт):
Ардуино - "Северино", самоделка, индикатор WH1602D-TML-CT, 4-битное подключение.
А как правильно рассчитать резисторы контрастности и подсветки? Заранее спасибо!
На контраст любой трехногий переменник . Что то от 5 до 100Ком. На посветку постоянный 100-200Ом.
И что то не увидел я в вашей программе lcd.clear();. Хотябы раз в несколько минут , но надо.
Вот где, наверное, собака и порылась... Я всё думал, нужен ли clear? Решил не ставить, для экономии памяти. А придётся... Спасибо!!!
>>Решил не ставить, для экономии памяти<<
Очень сомнительная экономия - шесть байт.
Очищать дисплей хоть изредка необходимо. Даже с точки зрения элементарной логики.
Врядли дело в этом. Посмотрите код тут , я использовал lcd.clear() только в сетапе. Скорее всего у вас что-то отваливается или проблемы с питанием.
Скорее всего у вас что-то отваливается или проблемы с питанием.
Отваливается - вряд ли, всё на пайке, и до подключения индикатора "глюков" не наблюдалось. Питание стабильное, 4.98 в. Длина проводов до индикатора критична? Экранировать не нужно?
Так в том и дело что в сетапе. Т.е. один раз , при запуске программы. Дисплей нужно очищать. Пусть попробует ввести cler.
Если ничего не изменится , значит дело в другом.
Так вроде как в начале все нормально работает...
Всем спасибо! Проблема решилась укорачиванием проводов к индикатору с 40см. до 10см.
Народ, кто пользует библиотеку LiquidCrystal.h на частотах меньших от 16 МГц, при условии, что вы указали в boards.txt f_cpu меньше 16000000L?
Исходные данные:
Железо программатора USBasp на atmega8-16PI,
юзаемое под arduino как плата USBaspLoader - USBasp Programmer at 12MHz
boards.txt
LCD подключен непосредственно к ISP-разъёму программатора
Проблема:
В самом конце файла LiquidCrystal.ccp есть функция void LiquidCrystal::pulseEnable(void) в ней есть две строки с delayMicroseconds(1); попробуйте заменить на delayMicroseconds(3);. Если не поможет ,то по всему файлу увеличивайте задержки.
В самом конце файла LiquidCrystal.ccp есть функция void LiquidCrystal::pulseEnable(void) в ней есть две строки с delayMicroseconds(1); попробуйте заменить на delayMicroseconds(3);. Если не поможет ,то по всему файлу увеличивайте задержки.
Попробовал величить задержки - костыль выходит, частично лечит проблему, некоторые скетчи так и бьются.
Не задумывался особо, что у меня все выходы от процессора идут через резисторы 470 Ом (хотелось оставить полную совместимость с железом USBasp) - может в этом проблема глобальная кроется?
Попробовал установить f_cpu=15999999L - есть проблема.
f_cpu=16000000L - нет проблемы.
Походу не в задержках и сопротивлених дело - порою библиотеку, где там явно указано 16000000...
Хакнул глобально.
Чисто академичечкий вопрос: будет ли оно так же тупить при работе меги на 8 МГц от внутреннего RC?
Чисто академический ответ кроется в файле *\arduino-1.0.3\hardware\arduino\cores\arduino\wiring.c
, а чисто практический - взять и попробовать.
Правильное решение #15 здесь #2
Здравствуйте. Начал знакомится с ардуино,купил уно,кейпад шилд,пару датчиков,дс 18б20 и sht 21.Решил сделать инкубатор,на форуме "перепелка" скачал скетч,все работает,но после нескольких минут работы на экране появляются кракозябры.В чем может быть причина?Прошу помощи!
При нажатии на rst все становится на свои места,потом опять.
Проблема в электропитании 100%. Попробуй другой блок питания.
Спасибо за ответ!Сначала пробовал блок 9v, потом на прямую подключил 5,5 v от телефона!все тоже!
Что кроме экрана подключено? И вообще как подключено? На унах стабилизаторы слабенькие и если все нагрузки питаешь через него - проблемы обеспечены.
Подключено два датчика,реле.Подключение не через стаб,просто к 5в и к земле подключил зарядку от телефона.
Помогите с решением проблемы. Панель выводит такую ерунду при исполнении стандартного скетча LiquidCrystal и при выводе своего текста.
Мне удалось прочитать, это Hello, world!
А вот и табличка для чтения, учите новый алфавит,
правда не все символы совпадают,
но ничего, вы привыкнете......
или разбирайтесь как у вас появляется единичка в старшем разряде....
как думаете это брак дисплея или проблема в другом?
Посылайте символы с компа на дисплей и смотрите что он показыват.
вторую строку вообще отказывается отображать
проверяй, праильно ли пины с данными запхал в макетку. ну и наличие соплей тоже вероятно.
Вторая строка это 0,1 а не 0,2........
http://wikihandbk.com/wiki/Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%...
По моей табличке
3 это 0011 0011 у вас 3 0011 0011
4 это 0011 0100 у вас < 0011 1100
5 это 0011 0101 у вас = 0011 1101
6 это 0011 0110 у вас > 0011 1110
Попробуйте посылать бинарные данные......
Похоже на замыкание между третьим и четвёртым битом справа......
можно поподробнее про замыкание
Когда вы ставите в "1" третий бит
у вас почему-то вместе с ним ставится в "1" четвёртый.
прозвони DB2 и DB3 на икранчеге, нет ли кз
кз нет между контактами
ну я нинаю тогда. у меня плов поспел, мне синячить пора....
>>Решил не ставить, для экономии памяти<<
Очень сомнительная экономия - шесть байт.
Очищать дисплей хоть изредка необходимо. Даже с точки зрения элементарной логики.
Неловкий вопрос (особенно после стольких лет), но зачем? Это не попытка докопаться, просто действительно не очевидно. Зачем очищать экран?
Расскажу свой кейс. Возможно у меня были руки крюки изначально.
Дано Arduino Zero . Маркировка на плате HW-819 . Короче китайский клон с дофига памяти. ( Далее ардуина 1)
Дисплей СA1602F
Собираю я все это дело на макетке , запускаю и о чудо - крякозябры. Но стабильные как выше описанном случае когда возникает непонятно откуда 1 . Матерился, алфавит собирал , глючит стабильно. Заколебался . Но глюки стабильные. Кондюки хотел паять уже . Программно так и сяк извращался. Есть конечно мысля что я там чего-то программно нафигачил и чего-то в постоянной памяти осталось - но это только домыслы и вера в "мистику"
Между дело распечатал типа поддержку дисплея чтоб они удобно были сборкой с переменным резитором что контраст крутить . и проводов было меньше
Попробывал затем тестовый скетч собрать под чудо mh-tiny live с tiny88 ( Далее ардуина 2) . Потом психанул и припаял прям провода к ардуине 2. Залил Скетч и запустил - и оно заработало нормально. На удивление LiquidCrystal.h жрет мало памяти . Ну так вот перевернул я ардуину 1 и вижу надпись Logic Level = 3.3 V . Может это 3.3 и есть источник глюков ?