Страница 4 из 5

1602 или 0802 свои символы

Добавлено: 29 авг 2018, 20:07
MTSnik1
Ясно. И на том СПАСИБО. :smile9: :smile9: :smile9:

1602 или 0802 свои символы

Добавлено: 29 авг 2018, 20:38
kalobyte
скажи как должно работать, я перепишу завтра или на днях

1602 или 0802 свои символы

Добавлено: 30 авг 2018, 04:24
MTSnik1
В моём проекте пригодился бы блок где движение палок происходит от середины направо и налево одновременно.

1602 или 0802 свои символы

Добавлено: 30 авг 2018, 10:38
kalobyte
на одной строке или на разных?

1602 или 0802 свои символы

Добавлено: 30 авг 2018, 11:49
MTSnik1
На одной

1602 или 0802 свои символы

Добавлено: 30 авг 2018, 12:04
kalobyte
сделаю сегодня наверное универсальный индикатор слево и вправо на любой строке любой длины с минимальным расходом озу и пзу
на плату надо будет добавить основной индикатор + основной блок пользовательского индикатора + блок отрисовки полоски и выставить там параметры
надо только понимать, что максимальный входной уровень будет зависеть от длины строки и составляет количество мест * 5
если индикатор 16 мест и на одной строке по 2 индикатора, то максимальный уровень для каждого будет 8 * 5 = 40

это сделано для сокращения расхода кода, все вычисления, которые можно сделать в голове заранее - должны быть сделаны в голове заранее
в худшем случае использовать стандартный блок подгонки значений, забыл как он там называется
---
разобрался в индикаторе, как в него залить сразу все символы без затрат памяти контроллера и использовании кучи высокоуровневых функций :D

1602 или 0802 свои символы

Добавлено: 30 авг 2018, 12:34
kalobyte
это все усложняет намного, т.к. я стараюсь избегать отрицательных чисел, т.к. их в природе не существует и еще не придумали такой процессор, который бы понимал отрицательные числа

а что за блок для управления? можно линк глянуть? может быть его можно допилить до нормального состояния? в мелкасхему регулятора ведь тоже не отрицательные числа записываются :D

1602 или 0802 свои символы

Добавлено: 30 авг 2018, 14:03
Fuji1604
Можно за среднюю точку принять какое либо число (например 50) и к нему прибавлять значение баланса. Т.Е. При 50 индикатор будет в среднем положении, при 20 в минусе, при 80 в плюсе.

1602 или 0802 свои символы

Добавлено: 30 авг 2018, 15:38
kalobyte
[ref]av[/ref],
можно перепилить код, там отрицательные числа зачем-то конвертируются обратно в положительные
можно подавать на входы беззнаковые, а доделать выходы строковые, которые сразу на индикатор пойдут
или использовать блок масштабирования уже в своем проекте

1602 или 0802 свои символы

Добавлено: 30 авг 2018, 15:47
Fuji1604
Зачем костыли, после сложения число станет положительным -30+50=20, только типы переменных после сложения привести к int

1602 или 0802 свои символы

Добавлено: 30 авг 2018, 15:53
kalobyte
[ref]av[/ref],
я подправлю код, сейчас смотрю в даташите диапазоны чисел для всех этих регуляторов
сделано как-то все костыль на костыле

1602 или 0802 свои символы

Добавлено: 30 авг 2018, 16:45
kalobyte
[ref]av[/ref],
изначально автор темы хотел отображать не просто целые блоки, а чтобы еще в каждом блоке было по вертикальной линии, тем самым увеличив точность шкалы
а как у тебя на картинках, то там вообще все просто - надо забить всю шкалу черными блоками, а потом двигать строку в области видеопамяти
она будет тупо уходить за границы видимости, но будет оставаться все 16 символов черными

Отправлено спустя 8 минут 15 секунд:
av писал(а): 30 авг 2018, 15:56 Я просто спросил есть ли возможность сделать блок с входным значением в (int).
ты можеш прилепить к байтовому входу выход инт от своего блока
просто мой байт он беззнаковый, поэтому твой знаковый инт будет неправильно интерпретирован

т.к. в индикаторе тоже нет отрицательных строк или адресов памяти, то поэтому в моем блоке счет идет от 0 до 80 или до 100, если индикатор 20 символов
поэтому 100 влазит в 1 байт и я не использовал вход типа инт, куда влезет до 65535, т.к. это бесполезный расход озу, а я стараюсь все оптимизировать, т.к. флпрог вност кучу своих переменных и жрет память

1602 или 0802 свои символы

Добавлено: 31 авг 2018, 00:06
kalobyte
[ref]av[/ref],
я имел в виду свой алгоритм работы, чтобы не вычислять подстроку для отрисовки пустого символа для затирания черных блоков
можно просто двигать всю строку черных блоков вправо и тогда слева будет автоматом пустое место
это более эффективный алгоритм, правда он работает только на уровне целых блоков, а если использовать полосочки в одном блоке, то не прокатит

это я говорю, если вдруг гому хватает индикатора как выше приведено - в виде целых блоков

Отправлено спустя 6 часов 23 минуты 59 секунд:
бен, ай нид хелп :smile37:

кажется моя оптимизация проваливается
если массив находится в озу, то все работает
если читается из пзу, то почему-то в озу индикатора он пишется 2 раза, но только первая его половина

Код: Выделить всё

const uint8_t cgram[64] PROGMEM = {
                    0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, // left1
                    0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, // left2
                    0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, // left3
                    0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, // left4 
                    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // right1
                    0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, // right2
                    0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, // right3
                    0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f  // right4
                    };
все это правильно выводится в консоль, правда в протеусе, но в индикатор не заходит правильно

Код: Выделить всё

 _lcd1.command(LCD_SETCGRAMADDR);    
  for (byte i=0; i<64; i++){
  
     _lcd1.write(pgm_read_byte(cgram +i)); 

  }
ставим указатель на адрес озу индикатора и записываем туда байты все за раз, счетчик адреса озу сам увеличивается
все байты как раз занимают весь объем озу в 8 символов
глюк возник именно с PROGMEM , когда данные читаются из флеша
из озу контроллера все норм работает, вторые 4 символа должны быть зеркальным отображением первых 4х

если кому не лень - проверьте в железе, завтра попробую сам, а то индикаторы эти надо еще поискать и уже 11 вечера

Отправлено спустя 5 минут :
так, я тут помедитировал на картинку с индикатором с минуту и таки узрел, что все таки отображается все правильно
это у меня в голове уже шарики за ролики заходят и пора спать, а то я с 7 утра сижу :smile250:

специально внизу вывел 8 полных блоков, чтобы на их фоне видеть разницу в верхних блоках и все равно глаз замылился :D
потрачен час на отлов несуществующего глюка

1602 или 0802 свои символы

Добавлено: 31 авг 2018, 00:48
kalobyte
av писал(а): 31 авг 2018, 00:22Если две то они увеличиваются в одном направлении.
это обман зрения, сравнивай с нижней строкой где края первого символа и 5го - они по разные стороны знакоместа, как и должно быть
av писал(а): 31 авг 2018, 00:22 Вот только не понятно в первой строке две шкалы или одна ?
это пока только образцы символов, просто выведены для наглядности
не знаю как у других, но я пишу код по кускам и каждый кусок тестирую
вот тут тестируется пока правильное отображение всех кастомных символов, потому что если они неправильно отображаются, то весь последущий код будет неправильным

кстати в программировании под кп есть т.н. юниттесты, когда специальная приблуда вызывает отдельно нужные функции твоего кода, передает туда нужные параметры и получает ответы, потом сравнивает с заранее правильными ответами
если все совпало, то тест пройден

писать тесты это как писать код, только еще сложнее и еще унылее
есть даже целая профессия - тестировщик кода, правда там платят меньше, чем программисту, который пишет этот код
а вот тестировать код для мк автоматом не выходит никак, приходится вот так по кускам на виртуальном или реальном желез + отладочная инфа в консоль или мигать светодиодом или дергать выводами, а логическим анализатором замерять время или передаваемую инфу по разным шинам
та еще работа, а платят тоже меньше, чем разработчику под мобильные платформы

1602 или 0802 свои символы

Добавлено: 29 ноя 2018, 09:43
MTSnik1
Привет форумчане. Снова понадобился в моём проекте блок движения палочек, использую блок который любезно разработал
kalobyte "Горизонт.альный индикатор уровня"
вход блока в byte, можно как-то переделать в string? Или конвертировать. Нужно для соединения с выходом меню (переменная 1).

1602 или 0802 свои символы

Добавлено: 29 ноя 2018, 11:03
RedSky
А почему бы не использовать значение из блока, который выводит уставку из меню?
А блок конвертирования строк работает в обе стороны.

1602 или 0802 свои символы

Добавлено: 29 ноя 2018, 11:47
MTSnik1
Это как? :smile37: можно пример. :smile427:

1602 или 0802 свои символы

Добавлено: 24 дек 2018, 21:21
Aleksandr1
Уважаемые господа! Как вывести на дисплей символ "градус" в нужной строке в нужном месте? Прочитал все страницы! Ничего не понял. :smile37:

1602 или 0802 свои символы

Добавлено: 24 дек 2018, 21:53
AlexCrane
[ref]Aleksandr1[/ref], Вот так

1602 или 0802 свои символы

Добавлено: 25 дек 2018, 04:35
Aleksandr1
[ref]AlexCrane[/ref], Александр, большое спасибо! Заработало!