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

Вопросы от новичков
MTSnik1
Рядовой
Сообщения: 92
Зарегистрирован: 12 июл 2018, 17:06
Имя: Timofey

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

Сообщение MTSnik1 »

Ясно. И на том СПАСИБО. :smile9: :smile9: :smile9:
kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22 окт 2016, 14:22

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

Сообщение kalobyte »

скажи как должно работать, я перепишу завтра или на днях
MTSnik1
Рядовой
Сообщения: 92
Зарегистрирован: 12 июл 2018, 17:06
Имя: Timofey

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

Сообщение MTSnik1 »

В моём проекте пригодился бы блок где движение палок происходит от середины направо и налево одновременно.
kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22 окт 2016, 14:22

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

Сообщение kalobyte »

на одной строке или на разных?
MTSnik1
Рядовой
Сообщения: 92
Зарегистрирован: 12 июл 2018, 17:06
Имя: Timofey

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

Сообщение MTSnik1 »

На одной
kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22 окт 2016, 14:22

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

Сообщение kalobyte »

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

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

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

Сообщение kalobyte »

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

а что за блок для управления? можно линк глянуть? может быть его можно допилить до нормального состояния? в мелкасхему регулятора ведь тоже не отрицательные числа записываются :D
Аватара пользователя
Fuji1604
Сержант
Сообщения: 282
Зарегистрирован: 19 янв 2016, 06:09
Откуда: Березники
Имя: Сергей

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

Сообщение Fuji1604 »

Можно за среднюю точку принять какое либо число (например 50) и к нему прибавлять значение баланса. Т.Е. При 50 индикатор будет в среднем положении, при 20 в минусе, при 80 в плюсе.
когда мастерю обычно подсматриваю,
не рыли ли окоп в том же направлении,
не изобретали ли велосипед с такими-же квадратными как у меня колёсами,
а уже потом - не торопясь, торю свою лыжню
kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22 окт 2016, 14:22

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

Сообщение kalobyte »

[ref]av[/ref],
можно перепилить код, там отрицательные числа зачем-то конвертируются обратно в положительные
можно подавать на входы беззнаковые, а доделать выходы строковые, которые сразу на индикатор пойдут
или использовать блок масштабирования уже в своем проекте
Аватара пользователя
Fuji1604
Сержант
Сообщения: 282
Зарегистрирован: 19 янв 2016, 06:09
Откуда: Березники
Имя: Сергей

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

Сообщение Fuji1604 »

Зачем костыли, после сложения число станет положительным -30+50=20, только типы переменных после сложения привести к int
когда мастерю обычно подсматриваю,
не рыли ли окоп в том же направлении,
не изобретали ли велосипед с такими-же квадратными как у меня колёсами,
а уже потом - не торопясь, торю свою лыжню
kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22 окт 2016, 14:22

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

Сообщение kalobyte »

[ref]av[/ref],
я подправлю код, сейчас смотрю в даташите диапазоны чисел для всех этих регуляторов
сделано как-то все костыль на костыле
kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22 окт 2016, 14:22

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

Сообщение kalobyte »

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

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

т.к. в индикаторе тоже нет отрицательных строк или адресов памяти, то поэтому в моем блоке счет идет от 0 до 80 или до 100, если индикатор 20 символов
поэтому 100 влазит в 1 байт и я не использовал вход типа инт, куда влезет до 65535, т.к. это бесполезный расход озу, а я стараюсь все оптимизировать, т.к. флпрог вност кучу своих переменных и жрет память
kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22 окт 2016, 14:22

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

Сообщение 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
потрачен час на отлов несуществующего глюка
У вас нет необходимых прав для просмотра вложений в этом сообщении.
kalobyte
Лейтенант
Сообщения: 422
Зарегистрирован: 22 окт 2016, 14:22

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

Сообщение kalobyte »

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

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

писать тесты это как писать код, только еще сложнее и еще унылее
есть даже целая профессия - тестировщик кода, правда там платят меньше, чем программисту, который пишет этот код
а вот тестировать код для мк автоматом не выходит никак, приходится вот так по кускам на виртуальном или реальном желез + отладочная инфа в консоль или мигать светодиодом или дергать выводами, а логическим анализатором замерять время или передаваемую инфу по разным шинам
та еще работа, а платят тоже меньше, чем разработчику под мобильные платформы
MTSnik1
Рядовой
Сообщения: 92
Зарегистрирован: 12 июл 2018, 17:06
Имя: Timofey

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

Сообщение MTSnik1 »

Привет форумчане. Снова понадобился в моём проекте блок движения палочек, использую блок который любезно разработал
kalobyte "Горизонт.альный индикатор уровня"
вход блока в byte, можно как-то переделать в string? Или конвертировать. Нужно для соединения с выходом меню (переменная 1).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
RedSky
Лейтенант
Сообщения: 576
Зарегистрирован: 19 дек 2016, 20:07
Откуда: Днепропетровск
Имя: Алексей
Поблагодарили: 1 раз

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

Сообщение RedSky »

А почему бы не использовать значение из блока, который выводит уставку из меню?
А блок конвертирования строк работает в обе стороны.
MTSnik1
Рядовой
Сообщения: 92
Зарегистрирован: 12 июл 2018, 17:06
Имя: Timofey

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

Сообщение MTSnik1 »

Это как? :smile37: можно пример. :smile427:
Aleksandr1
Рядовой
Сообщения: 41
Зарегистрирован: 22 сен 2018, 02:46
Имя: Александр

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

Сообщение Aleksandr1 »

Уважаемые господа! Как вывести на дисплей символ "градус" в нужной строке в нужном месте? Прочитал все страницы! Ничего не понял. :smile37:
Аватара пользователя
AlexCrane
Капитан
Сообщения: 903
Зарегистрирован: 20 окт 2017, 13:22
Откуда: Ульяновск
Имя: Александр
Поблагодарили: 12 раз

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

Сообщение AlexCrane »

[ref]Aleksandr1[/ref], Вот так
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....
Aleksandr1
Рядовой
Сообщения: 41
Зарегистрирован: 22 сен 2018, 02:46
Имя: Александр

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

Сообщение Aleksandr1 »

[ref]AlexCrane[/ref], Александр, большое спасибо! Заработало!
Ответить

Вернуться в «Начинающим»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость