STM32 Arduino IDE и дисплей 1602
- Войдите на сайт для отправки комментариев
Всем привет! Имеется стандартная синяя плата на STM32. В нее был успешно записан ардуиновский бутлоадер. Теперь я могу спокойно прошиваться по USB. Blink заработал вообще без проблем. Решил сразу подключить дисплей 1602 со стандартной библиотекой. Прописал новые выводы, вгрузил. Но дисплей к сожалению показывает рандомные символы, но иногда проскакивает пара-тройка букв из слов, которые должны выводиться.
Перепробовал много всего, разные версии ардуины, разные библиотеки, другие порты, другие дисплеи но результат един.
Частично помогло только изменение CPU SPEED во вкладке Инструменты. Раньше стояло 72мгц, я же поставил 48мгц. Теперь при включении на первые секунды слова выводятся правильно, но все равно иногда некорректно, в первой строчке "Interfacing LCD", во второй -CircuitDigest после этого дисплей затягивает каракулями и на этом все.
Пример кода:
#include <LiquidCrystal.h> // include the LCD library const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; //mention the pin names to with LCD is connected to LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //Initialize the LCD void setup() { lcd.begin(16, 2);//We are using a 16*2 LCD lcd.setCursor(0, 0); //At first row first column lcd.print("Interfacing LCD"); //Print this lcd.setCursor(0, 1); //At secound row first column lcd.print("-CircuitDigest"); //Print this delay(2000); //wait for two secounds lcd.clear(); //Clear the screen } void loop() { lcd.setCursor(0, 0); //At first row first column lcd.print("STM32 -Blue Pill"); //Print this lcd.setCursor(0, 1); //At secound row first column lcd.print(millis() / 1000); //Print the value of secounds }
А если после lcd.begin и lcd.clear задержки на 2 секунды поставить что будет?
Ничего хорошего, к сожалению не получилось. На частоте 72мгц вообще глухо, на 42 реакция такая-же, только теперь с задержками в 2с.
А с другими ардуинами этот дисплей пробовали? У меня есть дисплеи которые clear выполняют больше секунды и setCursor 200 мс. Если раньше подать другую команду раньше, то дисплей перестаёт нормально отображать. Но ещё бы я проверил линию Е тестером.
У меня есть много дисплеев 1602, даже от факса где-то валяется. Сейчас использую качественный дисплей DV16230, с ним проблем на ардуине никаких не было. Пробовал и китайские с али, не работают.
Не знаю, может загрузчик не тот, но если блинк работает, то и это тоже должно
pixel28, а как вы включили дисплей? То, что он 5-вольтовый, а МК 3х вольтовый учли?
Подключал как и обычно, сам дисплей к 5ти вольтам. Выводы D7-D4, RS, EN к STM32. Попробовал даже подтянуть эти выводы к 5ти вольтам, ничего не изменилось. Как будто дисплей просто не успевает за STM32...
Помно, когда изучал Ассемблер и мк 8051 была проблема с 1602, потому что мк был слишком скоростной. Какими-то костылями и задержками удалось это исправить
Посмотрите в библиотеку. Как там сделаны задержки при инициализации. Наверняка дело в них. Если nop-ами, то понятно, что в них. Сделайте нормальные задержки и жизнь наладится.
Из стандартной библиотеки. Задержки через честные п.п. С этой библиотекой точно должно работать.
Да, задержки во всех библиотеках, которые я пробовал были сделаны именно так. Сегодня попробовал очередную библиотеку LiquidCrystal, с моим кодом дисплей спокойно завелся на частоте 72мгц, но после отработки Lcd.clear(); появляются кракозябры и дисплей больше не работает. Кажется я понял в чем была вся проблема) Не правильная работа Lcd.clear();
В итоге заменил все Lcd.clear(); на что-то типа lcd.print(" "); Отдельно для первой и второй строки и о чудо - работает!
Но почему же тогда Lcd.clear отказывается работать только у меня:?? У всех остальных она спокойно отрабатывает на STM32. Да, понимаю, что Arduino IDE на STM32 это полнейший бред, но я перешел на STM32 только из-за хорошего АЦП и ЦАП, буду осваивать их и хочу получить точность измерения напряжения в 3 знака после запятой.
Вот мой код:
Ты будешь смеяться, но и у меня много дисплеев не переваривают lcd.clear. Вернее переваривают, но подавать команду после них надо с большой задержкой. И задержку надо подбирать. Но больше 2 секунд ни разу не было. Поэтому я тоже чищу пробелами. Так получается быстрее.
Добрый день, использую nucleo f030R8. не работает библиотека LiquidCrystal.h
Проверил задержки -
стоят правильно,
думал, может дисплей неисправен, запрограммировал через Micropascal - дисплей завелся сразу, но с русским языком какие то накладки.
Подскажите, как запустить дисплей
А он (дисплей) точно кириллицу поддерживает?
А он (дисплей) точно кириллицу поддерживает?
Да нет, конечно! Но почитать интересно. Там создать десяток символов - и все дела. А тут - целая тема..
Ну бывают и с поддержкой. Тут уж 50 на 50.
Поддерживает - русские символы появляются , но буквам не соответствуют. - это в микропаскале
В Ардуино - сплошной верхний ряд - прямоугольники... - не походит инициализация почему то...
Поддерживает - русские символы появляются , но буквам не соответствуют. - это в микропаскале
В Ардуино - сплошной верхний ряд - прямоугольники... - не походит инициализация почему то...
Ну измените библиотеку по Вашим опытам. И опубликуйте на гигхабе. И будет Вам частье!
Я бы изменил библиотеку.... если бы знал, что менять...
Максимум попробовал задержки поставить не 1мкс, а 5 )) - не заработало:
void LiquidCrystal::pulseEnable(void)
Я бы изменил библиотеку....
И вот такой чувственный вдох.
Чего менять - так изображение символов. Русских
Тут не доходит дело до символов, потому что ничего не отображается - сплошной верхний ряд - прямоугольники вместо ЛЮБЫХ символов , не только русских букв.
Верхний ряд прямоугольников - это значит нет начальной инициализации.
Как сделать инициализацию?? Использую стандартную библиотеку LiquidCrystal.h плата Nucleo F030R8. Дисплей 16*2,
питание +5В - управление +3,3 (Дисплей проверен - работает в MicroPascal - символы отображаются)
Примеры к этой стандартной библиотеке работают?
нет, не работают. я пример и пытался запустить
Поддерживает - русские символы появляются , но буквам не соответствуют.
Так это почти всегда так. Перекодировать надо.
Как сделать инициализацию?? Использую стандартную библиотеку LiquidCrystal.h плата Nucleo F030R8. Дисплей 16*2,
вы в какой среде прогрпммируете? Ардуино? какой аддон? Библиотека хотя бы компилируется?
Выложите код и схему подключения
Схема подключения : https://yapx.ru/v/K47VM
ответов на вопросы не увидел.
Еще выложите ссылку на библиотеку. библиотек с названием LiquidCrystal.h - минимум десяток
Библиотека компилируется , Arduino 1.8.5. - в ней стандартная библиотека LiquidCrystal.h : https://yadi.sk/d/eQcECrWSUGXPTw
в ней стандартная библиотека LiquidCrystal.h : https://yadi.sk/d/eQcECrWSUGXPTw
Простите, а отвечать нормально на вопросы можно? Или надо все клещами тянуть?
Стандартная Ардуино не поддерживает СТМ32. Вы должны были сами ставить пакет для СТМ, я вас спросил какой - ответа нет.
Сссылка на ваш яндекс-диск для библиотеки меня не интересует. каждая библиотека ардуина лежит на гитхабе. дайте ссылку туда. откуда вы ее скачивали.
Вот этот пакет :
https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json
я отдельно не скачивал ее с гитхаба...
Вот этот пакет :
https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json
я отдельно не скачивал ее с гитхаба...
в указанном Вами пакете нет такой библиотеки. Из чего следует, что вы используете библиотеку для контроллеров АВР и ее работу в СТМ32 никто не гарантирует.
С точки зрения программиста - раз у вас дисплей на этой плате в Паскале работает, то проще всего взять секцию инициализации из паскаля и сравнить ее с инициализацией в библиотеке на Си.
А вам только могу посоветовать поискать в Гугле по комбинации названия библиотеки и обозначения вашей платы, может кто уже разбирался
Да. еще вопрос - а схемы подключения в Микропаскале и в обсуждаемой библиотеке - совпадают? все пины одни и те же используются?
Микропаскаль - штука очень удобная, но денег стоит и очень специфична, если что то доработать надо.
Спасибо за подсказку - теперь остается библиотеку как то прикрутить... а какая библиотека подойдет??
Микропаскаль - штука очень удобная, но денег стоит и очень специфична, если что то доработать надо.
Спасибо за подсказку - теперь остается библиотеку как то прикрутить... а какая библиотека подойдет??
Например эта