Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Где часто? Мне кажется, Ваше изменение сильно замедлит работу с дисплеем из-за постоянных установок/сбросов RS, и переноса цикла while() в конец ls020WriteData(). В своё время я, переделывал что-то в стиле "наоборот": https://github.com/WiseLord/ampcontrol/commit/dc886eb Но у меня ls020 никогда не было, поэтому насчёт того как оно на реальном железе работает, я не в курсе. Просто знаю, что работает.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Вот здесь-то и будет самое большое замедление. В изначальном варианте мы сразу же выскакиваем из функции (что тоже занимает какое-то время) и обрабатываем код дальше. А в это время параллельно и аппаратно идёт передача по SPI.
А в Вашем варианте Вы зачем-то перед выходом из функции ждёте окончания передачи. Это сильно уменьшает скорость вывода, поскольку именно запись данных тут основная операция.
Единственное в моём случае - когда передаётся "пачка" данных (заполняется какой-то прямоугольник, например), то в конце нужно ещё один раз сделать while(!(SPSR & (1<<SPIF))); перед дёрганьем CS.
А CS у меня дёргается редко - перед отправкой большой пачки данных уходит в 0, по окончании - в 1, как и положено. Не знаю, почему Вам показалось, что часто.
Обратите внимание, LS020_HEIGHT, похоже, опечатка (у меня в коде в том числе) Теоретически, это как-то должно развернуть на 90 градусов. Символы шрифта будут при этом рисоваться неправильно, и тут уже можно поиграть параметрами направления отрисовки окна при инициализации дисплея:
Это потому что символы отрисовываюься в другом направлении. Тут надо или этот параметр обхода окна менять при инициализации, или в другом порядке биты символа выводить
Это потому что символы отрисовываюься в другом направлении. Тут надо или этот параметр обхода окна менять при инициализации, или в другом порядке биты символа выводить
- поиграться с 0xE0 согласно тому, что там у Вас в комментариях для этой команды прописано. Это самый простой вариант, если получится - повезло. Либо с выводом символа ls020WriteChar() поиграть. Тут уже посложнее, придётся немного подумать и, во первых, понять, как вывод символа происходит. Вот сам символ, например, 'A':
Легко понять, как он построен. Это массив из 10 * 3 (ширина на высоту) байтов: Теперь смотрим, в коде как реализован вывод символа после того, как сформировано "окно" (для наглядности убрал дефайн LS020_ROTATE_180:
Код:
for (k = 0; k < fp[FONT_HEIGHT]; k++) { for (j = 0; j < swd; j++) { pgmData[j] = pgm_read_word(_font + oft + ((fp[FONT_HEIGHT] - k - 1)) * swd + j); } for(i = 0; i < 8; i++) { for (my = 0; my < fp[FONT_MULT]; my++) { for (j = 0; j < swd; j++) { if (pgmData[j] & (128>>i)) { for (mx = 0; mx < fp[FONT_MULT]; mx++) ls020WriteData(fp[FONT_COLOR]); } else { for (mx = 0; mx < fp[FONT_MULT]; mx++) ls020WriteData(COLOR_BCKG); } } } } }
Верхний цикл - проход по высоте шрифта. В нашем случае три раза - k = 0, 1, 2. Дальше, вложенный шрифт - проходим по ширине символа, и вычитываем в массив pgmData текущую "линию" А уже затем - пробегаемся по битам (i = 0..7) шрифта и выводим либо цветом шрифта (1), либо цветом фона (0). При этом, если фонт масштабированный, то делается это два раза подряд. В Вашем случае надо просто разобраться с направлением вывода. Можно просто вставить задержку здесь и смотреть на дисплей. Должны поочерёдно выводиться вертикальные столбики шрифта снизу вверх (а если мысленно дисплей повернуть на 90 градусов по часовой стрелке, к его "родному" портретному режиму, получится просто последовательный вывод горизонтальных строк - ровно как и мы пишем в тетради).
Вот как происходит отрисовка символа на LS020 (эмуляция в Proteus):
Наложите на свои исходники такой же патч, чтобы посмотреть, в каком месте рисуется символ и в каком направлении идёт его отрисовка в Вашем случае. Спойлер
@@ -56,6 +57,15 @@ int main(void) // Init hardware hwInit();
+ + ls020LoadFont(font_ks0066_ru_24, COLOR_CYAN, 1); + while(1) + { + ls020SetXY(10, 30); + ls020WriteChar('A'); + ls020Clear(); + } + while (1) { // Control temperature if (extFunc == USE_DS18B20) {
Вообще идеально - проверить с разными вариантами Memory Access Control. А если ещё и на видео снимете, как это происходит с разными его вариантами, тогда будет понятнее, что и как менять.
И ещё: проблема только в шрифтах? Вся прочая графика отрисовывается нормально или не очень? Подозреваю, что прогрессбары должны быть ОК, столбики всякие тоже, потому что это просто сплошной заливки прямоугольники, а вот иконки тоже должны отрисовываться аналогично шрифтам.
в дисплее косяк он с изначальным кодом рисует правильно но не дорисовывает в конце 4 часть экрана. там просто обрезок с мусором иконки отображаются правильно
Добавлено after 9 hours 28 minutes 37 seconds: Re: Темброблок/спектроанализатор на ATmega16, TDA7439 и SG12864 а вот тут упоминание сего косяка http://cxem.net/mc/mc221.php
Тогда нужно для начала, путём манипуляций с шириной-высотой-x-y добиться того, чтобы - дисплей умел закрашивался целиком; - сплошные прямоугольники рисовались там где нужно. А уже потом разбираться "внутри" прямоугольников, в каком порядке в них подавать биты шрифта или иконки.
Сейчас этот форум просматривают: Slo1958 и гости: 35
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения