Перейти к содержанию

Медленно работает Oled


Рекомендуемые сообщения

Состав: Arduino nano + Oled 128-64 + энкодер.
Задача стоит вывозить вот такое число 3.657.350 по I2c на Oled 128-64. Число - это будет частота генератора.
Для этого создаю переменную bfo = 3657350

Далее делю это число с остатком, получается число из отдельных цифр:

millions = int(bfo/1000000);
hundredthousands = ((bfo/100000)%10);
tenthousands = ((bfo/10000)%10);
thousands = ((bfo/1000)%10);
hundreds = ((bfo/100)%10);
tens = ((bfo/10)%10);
ones = ((bfo/1)%10);

Далее вывожу каждую цифру отдельно на дисплей:

myOLED.setFont(MediumFontRus);
myOLED.setCursor(15,20);
myOLED.print(millions);
myOLED.print(".");
myOLED.print(hundredthousands);
myOLED.print(tenthousands);
myOLED.print(thousands);
myOLED.print(".");
myOLED.print(hundreds);
myOLED.print(tens);
myOLED.print(ones);

При повороте энкодера к bfo прибавляется число к примеру 1000.
Далее вызывается весь этот код, bfo делится на отдельные числа и вывод на экран. И это все что происходит в void loop. Больше ничем ардуино не занято.
Вопрос в том что ардуинка видимо не успевает считать (делить) число. При 5-ти поворотах энкодера срабатывает только 4 раза. Ардуинка явно отстаёт.

Этот же код работает на I2c но с 1602 дисплеем как пуля. В чем может быть причина?

IMG_20220503_190638.jpg

Падающая со стола деталь способна искривлять пространство и время.....

Ссылка на комментарий
Поделиться на другие сайты

У многих с этим нет проблем. Есть подобные схемы что я собираю но с быстрой реакцией. Скетчи этих схем достать не могу. Проблема 100% в коде

Падающая со стола деталь способна искривлять пространство и время.....

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

31 минуту назад, Chuck Noland сказал:

Далее вывожу каждую цифру отдельно на дисплей:

Какой в этом смысл? Это же криво-костыльно до жути. Будут же огромные накладные расходы. Что мешает собрать число в массив char и вывести за один раз? Это же в несколько раз быстрее будет.

 

13 минут назад, Chuck Noland сказал:

Проблема 100% в коде

Проблема в непонимании процессов, происходящих в коде.

 

31 минуту назад, Chuck Noland сказал:

И это все что происходит в void loop.

Неправильно. Работа с энкодером должна выполняться в прерывании, а вывод данных на дисплей в loop.

 

31 минуту назад, Chuck Noland сказал:

В чем может быть причина?

В том, что накладные расходы на отправку данных для OLED выше, чем в 1602 дисплее. Порядков так на несколько. Ибо в 1602 есть знакогенератор и для него символ - один байт данных, а графические дисплеи - тупое поле для вывода и в них символ - квадрат W*H пикселей, где W и H размеры символа. Но ардуинщики не умеют читать документацию и думать...

 

31 минуту назад, Chuck Noland сказал:

ones = ((bfo/1)%10);

А это просто верх гениальности даже с математической точки зрения...

Изменено пользователем BARS_
Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

2 часа назад, BARS_ сказал:

Работа с энкодером должна выполняться в прерывании

Есть у кого нибудь примеры...?
 

Изменено пользователем Chuck Noland

Падающая со стола деталь способна искривлять пространство и время.....

Ссылка на комментарий
Поделиться на другие сайты

Вы бы код для начала приложили в нормальном виде (файлом). И схему подключения (вдруг I2C программно эмулируется). И имя/версию библиотеки, с которой работаете, а там можно будет и поговорить. :-)

Но самое простое и очевидное — сконвертируйте ваше число в строку и выведите её одним махом. Наверняка там есть такая операция.

Ссылка на комментарий
Поделиться на другие сайты

Вот сам код и схема. Сейчас подключены только дисплей OLED и энкодер

Schematic_SINTEZ 3 BAND.png

Test-test.ino

Падающая со стола деталь способна искривлять пространство и время.....

Ссылка на комментарий
Поделиться на другие сайты

Это поможет, но не сильно. Пропуски в опросе энкодера будут до тех пор, пока он не опрашивается по прерыванию. Но что-то я сильно сомневаюсь, что ардуйня так вообще умеет... Скорость I2C тут максимум 400 КГц, что дает 44,4 Кб/с. без учета накладных расходов в виде управляющих команд. Размер шрифта, судя по фото, в районе 20х12 px, что дает 240 байт на один символ. В строке 9 символов, а это 2160 байт. А значит вывести строку чаще, чем 20 раз в секунду не получится никак. Добавляем сюда время на отправку управляющих команд + время формирования буфера вывода + время отработки ардуйня функций + время на расчеты и вряд ли получаем больше 10 кадров в секунду. Т.е. опрос энкодера никак не произойдет чаще, чем раз в 100 мс. А это мало, 100% будут пропуски.

1 час назад, Chuck Noland сказал:

у кого нибудь примеры

У Яндекса и других поисковиков

Ссылка на комментарий
Поделиться на другие сайты

Нашел заграничный код который работает как "пуля" на моем дислее. Пропусков нет, скорость норм. Применяется массив char.
Буду выдирать лишнее и разбираться с кодом.

Test-51.ino

Изменено пользователем Chuck Noland

Падающая со стола деталь способна искривлять пространство и время.....

Ссылка на комментарий
Поделиться на другие сайты

Ну и замечательно. :-)

У Вас очень много ненужных операций деления и взятия остатка над 4-х байтной переменной. Для ардуино (точнее её микроконтроллера) это весьма дорого, поскольку сам он 8-ми битный. Единократное преобразование в строку будет быстрее. Равно как и разовый её вывод.

Если же использовать Ваш изначальный подход, то его можно было бы упростить вот таким образом:

millions = bfo / 1000000;
bfo %= 1000000;
hundredsThousands = bfo / 1000;
bfo %= 1000;
hundreds = bfo;

Итого 2 деления и 2 остатка вместо ваших изначальных 7 делений и 6 остатков. Но пришлось бы добавить условий, чтобы сохранить формат "x.yyy.zzz".

Так что лучше всё-таки сразу в строку. :-)

Изменено пользователем El-Shang
Ссылка на комментарий
Поделиться на другие сайты

8 часов назад, El-Shang сказал:

Для ардуино (точнее её микроконтроллера) это весьма дорого, поскольку сам он 8-ми битный. Единократное преобразование в строку будет быстрее. Равно как и разовый её вывод.

Ардуйняйщикам бесполезно об этом говорить.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...