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 для промавтоматики и серверного оборудования в новых условиях» (02.06.2022)

Приглашаем всех желающих на вебинар, посвященный линейке продукции MEAN WELL для промышленной автоматизации и оборудования, систем охраны, серверного, телекоммуникационного оборудования и базовых станций 4G/5G. 

На вебинаре мы также рассмотрим продукцию компании MEAN WELL, которая может заменить часть источников питания от производителей, в данный момент ушедших с российского рынка, разберем, на что нужно обращать внимание при подборе той или иной замены, и какими особенностями обладает продукция MW для различных приложений. Подробнее>>

LDD-H-DA – понижающие DC/DC LED драйверы с управлением по DALI от MEAN WELL

Представляем семейство понижающих LED драйверов постоянного тока LDD-H с диммингом по протоколу DALI. Эта серия преобразователей LDD-H-DA выпускается на стандартные значения выходного тока: 350, 700, 1050, 1400 мА, обладает широким диапазоном входного напряжения 6…50 В и работает при температуре от -40 до 85°С.

Подробнее>>

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

Материалы вебинара: Возможности компании Mornsun в меняющихся условиях рынка. Источники питания для широкого спектра приложений

На вебинаре были представлены линейка компонентов для электропитания и интерфейсные модули. Мы рассмотрели популярные группы изолированных и неизолированных (PoL) DC/DC-преобразователей последних поколений, новые компактные модульные источники питания, устанавливаемые на печатную плату (открытые и корпусированные), источники питания, монтируемые как на шасси (в кожухе и открытые), так и на DIN-рейку.

Подробнее>>

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

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

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

Edited by Chuck Noland

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

Link to comment
Share on other sites

Выбираем специализированные источники питания MEAN WELL для промышленных устройств

К источникам питания для промышленных систем и оборудования предъявляются особые требования. Необходима долговременная работа без остановки на профилактику, снижение шумовой нагрузки на персонал и эксплуатационных расходов на обслуживание, обеспечение бесперебойной работы и надежного старта оборудования. Для решения подобных задач в номенклатуре MEAN WELL имеются ИП серии UHP с кондуктивным охлаждением и HRP/N, способные выдерживать перегрузку в 2,5 раза. 

Подробнее>>

Вы бы код для начала приложили в нормальном виде (файлом). И схему подключения (вдруг 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
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...