Jump to content

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


Recommended Posts

Состав: 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

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

ИП MEAN WELL для медицинских и промышленных устройств на складе Компэл

Компэл расширяет складскую программу по специальным ИП для применения в медицинских приборах и промышленных устройствах. Представлены ИП в диапазоне мощности от 5 до 500 Вт, по медицинскому стандарту EN60601-1 с двумя мерами защиты пациента (2хMOPP; тип BF) для устройств, контактирующих с пациентом.  

Все эти надежные источники питания могут применяться не только в медицинских устройствах, но и в промышленных устройствах и информационных системах.  Подробнее>>

Популярные модели литиевых батареек FANSO EVE Energy готовы к отправке
На складе КОМПЭЛ уже готовы к поставке одни из самых востребованных литиевых батареек типов ER и CR производства FANSO EVE Energy – одного из мировых лидеров на рынке первичных литиевых элементов питания.
Данные источники тока получили широкое применение в различных областях, будь то системы безопасности, приборы учета или мелкая бытовая техника.

Подробнее о применениях >>

Posted (edited)
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);

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

Edited by BARS_
Link to comment
Share on other sites

LED-драйверы MEAN WELL на складе – выбор больше, стоимость ниже

Компэл расширил и существенно пополнил склад LED-драйверами компании MEAN WELL, одновременно снизив цену на них. В настоящий момент на складе представлена широкая линейка продукции для наружного (семейства HLG, ELG, XLG, LPC, LPV), и для внутреннего (APC, LCM, SLD, APV) освещения.

Имеется большой выбор моделей с различными режимами стабилизации выходных параметров. Кроме того, есть в наличии и линейка DC/DC-драйверов, как понижающих (семейство LDD), так и повышающих (семейство LDH).

Подробнее>>

Posted (edited)
2 часа назад, BARS_ сказал:

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

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

Edited by Chuck Noland

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

Link to comment
Share on other sites

LIR-20 – модуль резервирования питания от MORNSUN
Компания MORNSUN расширила линейку продукции, монтируемой на DIN-рейку, выпустив модуль резервирования питания LIR-20 с максимальным током до 20 А на канал. Модуль можно использовать на шинах с напряжением 24 или 48 В (полный диапазон напряжения 22…60 В). Данный модуль применяется в системах, где даже выход из строя источника питания (ИП) не должен привести к потере напряжения. К модулю резервирования подключаются два источника питания, причем один из них может быть бесперебойным (ИБП; UPS), и нагрузка.

Читать подробнее >>

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

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

Link to comment
Share on other sites

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

Schematic_SINTEZ 3 BAND.png

Test-test.ino

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

Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites

Posted (edited)

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

Test-51.ino

Edited by Chuck Noland

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

Link to comment
Share on other sites

Posted (edited)

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

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

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

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

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

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

Edited by El-Shang
Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...