Как увеличить размер шрифта в библиотеке для Nokia 1100
- Войдите на сайт для отправки комментариев
Вс, 30/06/2013 - 22:10
Здравствуйте. Подскажите как изменить библиотеку чтобы увеличить размер шрифта с 6х8 до 10х16.
прикладываю код простого счетчика для теста библиотеки
#include <Arduino.h> #include "driver_nokia_1100.h" //LCD_PIN_CS 10 //LCD_PIN_Data 11 //LCD_PIN_CLK 12 void setup(){ lcd_init(); lcd_clear(); lcd_gotoyx(0,0); } void loop(){ int chas=0;//значение часов char* sl; for (int i = 0; i < 100; i++) { int temp_c=i; int c2=temp_c%10;// здесь мы получаем последнюю цифру temp_c/=10;// n=n/10 тем самым отбрасываем последнюю цифру int c1=temp_c%10; lcd_gotoyx(0,0); itoa (c1, sl, 10); lcd_string(sl); itoa (c2, sl, 10); lcd_string(sl); delay(500); //lcd_clear(); } }
Не просто. Попробую обьяснить. На данный дисплей информация выводится последованельно. Но не просто по точке слева-напрва и так несколько строк, а определенным образом - один байт соответствует вертикальному столбцу из 8 точек, то есть высота строки 8 точек и так несколько строк. По вашей ссылке - символ 6х8 это 6 байт:
Выводим эти 6 байт и получаем символ. Тут все просто. А вот для того что бы вывести символ 10х16 нужно сначала сформировать такую же таблицу только один символ будет состоять из 20 байт, а выводить прийдется сначала 10 байт верхней части символа , а затем на следующей строке под верхней частью символа 10 байт нижней части символа. В общем как-то так.
Можно попробовать библиотку GLCD.
Ну нарисовать символы не проблема. Только время
а вот с выводом действительно проблема
но все равно спасибо. буду знать куда копать
Вроде б то как всё нормально только вторую строку символов выводит не под первой, а рядом с ней, уже перепробовал что приходило в голову (даже смог расширить символы *2, *3, а заставить выводить с низу не получается. Подскажете... :(((
Хотябы в общих чертах какая функция отвечает за переводпечати вправо или вниз.
Эта lcd_gotoyx(y,x); не работает?
работала раньше. только не абсолютные координаты дисплея, а разбитый на участки 8 строк на 16 колонок кажется или около того
нет. В библиотеке, с которой я сейчас работаю, такой функции нет. Если нужно переместится печатаю пустой символ через for.
я подумал вы про библиотеку одного индуса о которой как то уже писали
Если быть точным это не библиотека а набор функций в коде позволяющий выводить буквы на экран.
только маленькие очень получаются. Чуть бы увеличить...в ширину растянул, вот бы в высоту ещё немного.
Функцию goto(x, y); добавить не могу как и в другой библиотеке.
Блин, четыре библиотеки и не одну до ума не могу довести. Наверное от большого ума. Прошу прашения за тафтологию:))
какого ума? большой шрифт?
Ну неужели никаких идей?? Хотябы плюньте ссылкой о формировании бибы для графических ЖКИ.
Ладно, давайте может так!? Шрифт 10х16. Печатаю верхнюю часть в нулевом банке, нижнюю часть в первом банке. Ну как бы рядом с истиной только нижнюю половину по ИКСу продолжает печатать с того места где закончилась верхняя часть. Ответ буквально крутится в голове но никак не вылеЗЕт, подскажите...
Наверное у автора этой темы Как разобрать на части показания датчика DS18B20 уже есть ответ на последние вопросы ))
Нет у него ответа.
Вопрос тут в том что нужно посмотреть либу, в которой используются команды для перемещения "курсора" и добавить в свой код. Или второй вариант, выделить память (массив байт) соответствующий размеру памяти дисплея, в нем (в массиве) полностью формировать изображение, то есть залонить массив "по нужным координатам" и весь массив выводить в дисплей.
Дело ещё в том что стал вопрос, точнее проблема с использованием Амт16 и Атм8 и если делать так как рекомендует maksim
->>выделить память (массив байт) соответствующий размеру памяти дисплея, в нем (в массиве) полностью формировать изображение<<-
операвтивка забивается под жвак и делов нет совсем.
Я решил этот вопрос следующим образом:
Набросал шрифты 10х16 и 10х21. ( только цифры) И т.к. из видеопамяти прочесь нельзя, печатаю туда по символу прямо из програмной памяти (не загружая "ничего" в оперативку) верхний набор, затем спускаю координаты (по Y) на один банк вниз и по X на 10 назад (если шрифт 10х21) повторяю ещё раз. Затем, после вывода символа возвращаю координаты в нужный банк (который задавался функцией GotoXY (которой небыло и пришлось писать самому)) и по Х добавляю к размеру шрифта один пиксель(расстояние) 10х21 вывожу растянутым вдвое т.е. после вывода символа, точнее отправки данных в видеопамять значение Х увеличиваю на 21 пиксель.
Сейчас на дисплее с килобайтной опиративкой (Атмега168)одновревенно работает шрифт 5х8(полный) 10х16(цифры) тот же 10х16 растянутый вдвое и 10х21 растянутый вдвое. Причём замешал их таким образом что, к примеру, вывожу целые значения температуры 10х21(*2) затем точку из 10х16 затем десятые доли, затем опять символ из 10х16.
с аналогово датчика целые 10х16(*2) точка 10х16, десятые 10х16(*2) символ 10х16.
Не знаю на сколько заполнена оперативка но глюков, пикселей и подобного нет. Чёкая корректная работа. Размер скетча 8 с копейками но там много лишнего, под Атм 8 подогнать можно.
В общем фишка в том что шрифт помещён п програмную память и выводится прям оттуда а значения координат по Х и по У протягиваю через весь цикл по всем функциям.
выкладывайте. тоже хочу попробовать
jeka_tm, биба ещё зелёная совсем и "грязная". Давайте я подправлю, добавлю всё таки графику и выложу в нормальном виде?
Хотя одна голова хорошо, а две - уже змей горыныч :)) Сейчас коментов навешаю и сверну сюда. Есть ряд проблем.У Вас голова получше работает может поможите решить.
смотри сам. ты уже в теме как именно делать
Вобщем смотри. Вот сама биба:
Работает почти всё:
со шрифтом 10х16 точка немного взлетевшая- это результат того что верхний шрифт 10х21 а не 10х24
основная проблемка в том что вывод происходит только по строкам (адрес банков) а не в пикселях, но координаты нужно задавать в пикселях т.е. пишем у = 12 или у = 14, напечатает в первой строке и т.д.
ну и отлично. лучше выложи в формате библиотеки с папками. не хочется честно сказать самому делать
в принцпе вы говорили что занимает много места. можно по задаче редактировать библиотеку символов что сильно уменьшит размер
Так. Вроде с пикселем получилось. Задаю координаты и передаю байт в контроллер мимо видеобуфера.
->>лучше выложи в формате библиотеки с папками.<<-
так папок то особо нет. пока ещё. Функции и шрифт в одном файле, тоже пока. Немного упорядочил только (шрифт в низ запхнул) позже уберу в отдельный файл.
а пока достаточно скопировать библиотеку в буфер, открыть любой файл с расширением .h , вставить туда и сохранить как "nokia_1100_lib" и так же включаешь. Исходник будет выглядить так:
Хотя она уже не актуальна. Добавил пиксель. Только включаю. Добавлю выключение и инвертирование и уйду в тему библиотеки (как ты подметил). Уплотню графикой чтоб явно видеть что РАМу не перегружаю
тема с дисплейчиками от мобильников весьма интересна
а я вот освоил монохром от нокия 1202, но это не самое интересное, куда интересней тот, что сейчас осваиваю - цветной дисплей от нокия 1616. 161 на 129 точек, 12/16/18 битная цветность. В режиме 16 бит отсылается два байта на точку - очень удобно, нет ограничений по банкам памяти, в общем то благодаря этому может и буфер в памяти не понадобиться, да и если не ошибаюсь читать из него данные можно, еще не проверял
рекомендую, стоит в Москве 60р
Хорошо вечером проверю что у меня получится
а насчет 1616 хотелось бы увидеть картинки и библиотеку когда сделаете. и сколько оперативки нужно для вывода на дисплей
axill, давайте фото, что там получается, и средний размер кода.
ниже фото дисплея от 1202. симпатичный монохромный дисплей. Библиотеку брал без изменений с digitalchip.ru. их там две версии с видеобуфером и без, без буфера умеет только текст. Покупал в магазине профи по 35р. К сожалению много бракованных попадается. Кстати дисплей совместим с 1100 и библиотека тоже.
ниже 1616, покупал там же по 60р, пока еще все не тестировал, но первый дисплей работает полностью. Пришлось повозиться. Имеющаяся информация о том, что дисплей совместим с 6100/6610 оказалось ошибочной. Есть буквально пара примеров на рускоязычных сайтах и один англоязычный проект. Используя их дисплей удалось запустить. При чтении даташита вяснилось, что и эти примеры кривые, вот и пишу свою библиотеку. Но дисплей очень понравился, все таки цвет для 8-ми битных МК это приятно, цена приятная, ниже чем для nokia3310/5100, да и после 1616 3310/5100 смотрится ушербно. Для многих моих устройств 1616 самое то. Что приятно - можно изображение чисто аппаратно повернуть в любую сторону
библиотека пока умеет только текст выводить и только шрифт однобайтовой высоты (ширина может быть любая). Буду делать возможность использовать любые шрифты. Сейчас просто Hello world cо шрифтом лат+русс занимает 1700 байт, бещ русского на 300 байт меньше, шрифт 5х7.
платку под дисплей сделал универсальную по схеме с digitalchip. Плата подходит как для 1202 так и для 1616. Несмотря на то, что один монохромный, а второй цветной - у них совершенно одинаковый шлейф, только напряжение подсветки разное, поэтому на плате у меня стоит микросхема max1044 умножения напряжения (1616 требует 7в подсветки). Дисплейски можно припаять или прицепить канцелярско прищепкой (только на губки наклеен толстый скотч чтобы мягче придавливало и не коротило). Платка сделана ЛУТом за полчаса без отверстий, вырезана обычными канцелярскими ножницами из тектсолита толщиной 0.5мм
Насчет брака 1202 пока не было такого. уже 5 дисплеев использовал, все работали. все из профи. последние больше понарвились. подсветка приятнее. работали даже после многочисленных перепаек. причем на входах у меня не делитель стоит а по резистору 4.7к и все норм. подключал и 3.3 в (на плате уже был еще стабилизатор 3.3)подсветка изза этого конечно не светилась мочти. совсем еле еле. но дисплей работал все равно как надо. ну может мне везло
может мне не повезло) причем так конкретно - из 10 штук два вообщен не работают, у двоих две полосы битых точек, у двух по одной полосе
а подсветка отлично светит если через 100 ом подключить к 3.3в. у 1616 требуется 7в, я ее питаю от умножителя (5в умножается + потери на диодах выходит 9.8в) через 250 ом
я до этого вообще напрямую к 3.3 подлюкчал. теперь буду ставить резистор наверно все таки
у вас подсветка бело-голубая или розово-голубая?
вроде бело-голубая, по крайней мере явно выраженного розового нет
понятно. просто у меня все рабочие пока. просто в старой партии, которую покупал год или больше назад подсветка розоватая, а те что недавно белоголубая, и последние мне гораздо больше нравятся по внешнему виду
говорят эти дисплеи все китайская версия и брак не редкость, но все е надеюсь это именно в этот раз мне так не повезло)
хотя даже с учетом брака цена сопоставима с дисплеями 5100 из китая, так что не сильно расстраиваюсь
я купил один 5100. так он сволочь и не запустился. да и пинов ему нужно больше для управления
я несколько 5100 покупал, все работают кроме одного раздавленого при пересылке
но 1202 и тем более 1616 обыгрывают 5100 и по симпаичности и по цене
я несколько 5100 покупал, все работают кроме одного раздавленого при пересылке
но 1202 и тем более 1616 обыгрывают 5100 и по симпаичности и по цене
это точно. и паяется прямо на плату
Давайте поточнее говорить, особенно о том, какая библиотека к чему подходит. Биба подходит не к дисплею, а к контроллеру (или контроллерам) который (-рые) управляют экранчиками. Если уж на самом экране не написано (на обратной стороне или торце) то великий и могучий гугл даст ответ. Платы то травить не лень, и гуглить не лень должно быть. Поэтому 1616 и 6100 не одно и то же.
Обычно дисплеи продаются с тремя ценами - китай, - качественная копия (китай) и оригинал. Продавец на первое не то, что гарантию не даёт а прямо говорит что может не работать. Те цены что вы называете ..... ну понятно что, и следовательно лотарея, повезёт - не повезёт.
По поводу 1616, действительно заслуживает внимания.
попробовал u8glib библиотеку. Очень интересное решение. Можно было бы самому дописать к ней драйвер для нового дисплея (1100 или 1616). Нужно всего пару функций описать и автоматом получаешь работу с текстом и графикой и несколько десятков шрифтов разного размера (до 49 точек по высоте). Но! размер скетча не радует совсем. Попробовал на примере дисплея нокия 5100, скетч Helloq World. Даже в варианте длф AVR у меня вышло 1.2к с моей библиотекой и 6к с u8glib
может что-то не так компилирую. пробовал кто эту библиотеку?
Я пробовал на контроллере ST7920.
Несколько специфическая библиотека. Пока научился "рисовать" для неё шрифт, вынес весь мозг форумчанам. Были мысли "приспособить" её для вышеоговариваемых дисплейчиков, но дело в том, xто у нас с jeka_tm задача то какая!? Есть готорвые и отлично работающие библиотеки. Но для их работы нужно не менее 2-х "килограмм" оперативки при выведении текста и графики. Я пытаюсь сотворить так, чтоб это было возможно на 1К.
и вроде у вас получилось. правда сам никак не попробую то что у вас получилось
Вот из переписки с разработчиком одного измерительного приборчика
так что жду его библиотеку и как он выводит графику без буфера
графики у него немного, но и оперативной в PIC16F628 всего 224 байта. так что он еще больше ограничен был в оперативке. как он отпишется выложу
Да да, давай. обязательно выложи. У меня с гафикой не всё пока гладко. Нужно преобразовать однобайтное значение в геометрически прогрессируюшее значение, пока нет времени. А графику что тебе обещали можно дополнить. Важна сама концепция.
на 1616 графику можно выводить без буфера (адресовать можно одну отдельную точку), правда может оказаться очень медленно. если буфер делать то памяти ни в какой ардуино не хватит - нужно два байта на кажду точку
на 1616 графику можно выводить без буфера (адресовать можно одну отдельную точку), правда может оказаться очень медленно. если буфер делать то памяти ни в какой ардуино не хватит - нужно два байта на кажду точку
да в этом минус цветных дисплеев. хотя медленно это тоже понятие относительное. если спектр в реальном времени выводить может и медленно, а если более менее статичную картинку то и не принципиально
человек отписался. дал свою библиотеку по выводу на 1100. по выводу графики пока не отписался.
правда написано на микрос но думаю понять все равно можно
смысл по сути тот же. и еще. он для минимального вывода тескта не держит весь шрифт, а выводит прямо кусок из массива
если нужно будет ужиматься по памяти тоже можно так сделать
шрифты у него только цифры и + -
http://yadi.sk/d/FbyCT5TnBVCcw
можно кучу места сэкономить если каждую букву определить как отдельный массив и переписать вывод текста как обращение к отдельным массивам точек отдельных букв. Таким образом линковщик выбросит из HEX кода все неиспользованные буквы
тоже вариант. надо будет попробовать как нибудь
Зачем на всём этом заморачиваться? Перед компелированием под проэкт можно просто закоментировать ненужные символы. В этой библиотеке шрифт не помещается в программную память. Это шаг назад. Со шрифтом я вопрос решил. Как решу с графикой, нарисую ещё, разных размеров. Что там слышно по графике?
->>места сэкономить если каждую букву определить как отдельный массив и переписать вывод текста как обращение к отдельным массивам
сэкономим на шрифте, добавим код, и что получится, экономия 50 байт!?
не совсем по теме: попалась статья как можно в мегу 8 88 168 или 328 залить бутлоадер, и прошивать через USB
только разница с обычным бутлоадером ардуины в том что не нужен переходник USB-RS232, USB подключается напрямую к пинам меги. терминал конечно работать не будет (в системе кстати определится как USBASP программатор) но зато не нужно подключать пополнительных программаторов или конвертеров. уже купил несколько micro usb мама коннесторов на плату. как придут буду проверять
програмироть становится еще проще. воткнул в самодельную плату micro или mini usb кабель, предвариельно замкнув джампер, выставил в иде нужный микроконтроллер и программатор USBASP и нажал програмировать с помощью программатора.
по моему очень удобно
без ложки дегтя никак.
1. работает только на внешнем кварце 12, 15 или 16 МГц
2. бутлоадер съест 2К флеша микроконтроллера
http://www.obdev.at/products/vusb/usbasploader.html
Зачем на всём этом заморачиваться? Перед компелированием под проэкт можно просто закоментировать ненужные символы. В этой библиотеке шрифт не помещается в программную память. Это шаг назад. Со шрифтом я вопрос решил. Как решу с графикой, нарисую ещё, разных размеров. Что там слышно по графике?
->>места сэкономить если каждую букву определить как отдельный массив и переписать вывод текста как обращение к отдельным массивам
сэкономим на шрифте, добавим код, и что получится, экономия 50 байт!?
по графике пока ничего. закоментировать просто нельзя. сошлешься на следующий символ после закоментированного и попадешь дальше еще на один. тут немного сложнее
тут уже вопрос о уменьшении занимаемого флеша
добавим код да, но думаю выигрыш будет приличнее
я когда перерисовал свои символы (ну которые нарисованы графикой) и вместо скругленного прямугольника нарисовал все быстрыми линиями, при 3 цифрах (18 сегментов было) разница была почти 1К флеша. так что все равно попробовать как нибудь можно будет
Зачем на всём этом заморачиваться?
глобально согласен) зачем морочиться при современной стоимости МК проще взять МК с большей памятью и вообще не поднимать вопроса ни о размере скетча ни о размере оперативной памяти
если глобально/грубо да. но вставлять в каждое устройство ардуину? когда можно воткнуть мегу8 например или тиньку. при этом плату развести под конкретную задачу, а не куча проводов
постоянное увеличение мощности микроконтроллеров процессоров памяти мощности видеокарт расслабило разработчиков, теперь мало заморачиваются надо оптимизацией, и получается железо с каждым годом мощнее, а прирост производительности программ не соответствует приросту производительности железа. лично я для себя поставил планку что большинство проектов не больше 8 меги. этого итак выше крыши, просто коды неоптимальные