Значит так: по последнему - есть команда (посылаем команду) есть дата (посылаем данные) командой задавайте по "Y" банк по "Х" координату. Это в даташите. Если без координат, вывет в (0, 0); затем (1, 0);
По сдвигу это надо разобраться с побитовыми логическими операторами "и" (&), "или" (|). последний не путать с логическим или (||).
Установка бита
#define SCK_LCD_SET PORTB |= 1<<5
Запишем эквивалент в более понятной форме:
#define SCK_LCD_SET PORTB = PORTB | (1<<5)
Это тоже самое.
в результате бит регистра примит логическую еденицу если "или" данный бит "или" бит маски равен логической еденице. Остальные биты маски просто скрыты, поэтому другие регистры не затрагиваются (или просто остаются без изменений)
спасибо что подсказали. а то голову уже сломал как меньше оперативки тратить
блин ругается
sketch_nov14b:9: error: expected initializer before 'PROGMEM'
sketch_nov14b.ino: In function 'void setup()':
sketch_nov14b:72: error: 'mass' was not declared in this scope
sketch_nov14b:72: error: 'pgm_read_byte' was not declared in this scope
красота. наконец запустил шрифт 10*16 на тиньке. теперь оперативки хватает. правда только цифры. пока нужны в основном только они. вечером еще в железе проверю. хугобосс использовал твои шрифты. лень было рисовать))
чуть не забыл
Размер скетча в двоичном коде: 798 байт (из 1 024 байт максимум)
еще 226 байт. это радует. можно основную программу сделать
вообще это для тренировки чтобы понимать как работает и использования в будущем, но и цель конкретная есть - сделать свою прошивку для этого устройства:
благодаря ему я в свое время поверил что можно в принципе запустить жк дисплей от телефона
теперь хочу свою прошивку сделать в той же схеме (там ближе к концу я выкладывал измененные упрощенные схемы)
исходники там были, но ассемблер для меня казалось нереально тяжелым, хоть и сейчас не знаю асм (совсем немного) но зато могу сделать на си, а это для меня почти подвиг, так как очень сильно ограничены ресурсы, и требуется кроме вывода дисплея уметь инициализировать ацп на си (уже научился), разбивать число на цифры и тд. теперь моих знаний должно хватить
Растяни по ширене вдвое, это конечно не оптимизация, но место есть, цифры ещё крупнее будут
нельзя. памяти не хватит. сейчас 300байт занято под цифры. будет 600. еще 2 буквы надо будет и точку. а еще ацп, и вычисления. не хватит места. тогда уже на асме надо будет писать, а не хочу и не умею. ну или сложный алгоритм, так как в цифрах много одинаковых элементов. но не уверен что усложение алгоритма вывода цифр сильно уменьшит в объеме
каждый байт на счету))) это не на меге программить)))
ну вот и снова уперся в объем флеша у тиньки 13. уже не знаю что уменьшить, кроме как цифры сделать квадратными. даже точку не вывел не то что буквы. пришлось закоментить
На сколько я помню, ты цифры в координатох печатаешь, ну так отодвинь немного десятые и сотые, а точку между ними поставь
да думал уже об этом. но это внешний вид. а вот уменьшить еще код можно не используя для точки переход в координаты и в 3 ряду для цифры выводить точку (цифры состоят из 3 строк)
вот думаю использовать переход в координаты только 1 раз. должно уменьшить код прилично, а вот совсем отказаться думаю не получится, нужно будет следить в каком месте находится "курсор" и со временем возможен глюк, хотя и не факт
Наверное не в тему,извините. Собрал устройство на макетке использующее бибу с этой темы,дисплей от нокиа 1110,все хорошо,но рисует медленно, решил заменить дисплей на 1202(кто то где то писал что пошустрее работает) и тут началось, инверсия по горизонтали,исправил ,нормально,пошло. Отключаю от USB и подаю внешнее питание 12 вольт в дуину,инверсия, нажал рессет, нормальная картинка. выключаю питание,включаю опять инверсия. после рессета - нормально.Если запитываю от USB то проблема не появляется. В чем трабла,кто что посоветует?
Блок питания от компа атх, 12 вольт в дуину,болячка сегодня не рассосалась сама,при подаче питания картинка инверсная,рессет нажал - все отлично. проверено раз 20. С USB всегда нормальный запуск. В целях чистоты эксперимента достал с полки блок питания ATTEN APS,с него запуск происходит нормально.
Делаю выводы что как то связано именно с питанием,хотя подключаю модуль с дисплеем от 1110 и любой источник питания таких проблем не возникает. Завтра еще один дисплей 1202 возьму и попробую с ним.
да там перемычка. какие именно файлы вам нужны? я теперь их храню в отдельной папке и не удаляю
конденсатор для драйвера последний раз ставил 100мкф, далее стабилизатор на 5В и снова кондесатор керамика на 1мкф
для обычной платы с измерениями и без теперь ставлю керамику 10мкф 1206
вот например
там радиомодуль, дисплей и 2 аналоговых входа для измерения напряжения. пока 10мкф хватает. если есть мотор например, или полевик управляемый шимом тут нужно конечно больше и разделять цепи резистором 100ом например по плюсу с конденасаторами с каждой стороны чтобы всплески в силовой части не влияли на цифровую часть. для аналоговых еще лучше надо делать
из файлов интересуют всякие вкусности для дисплея 1100. библиотека и пару пробных скетчей.
можно схему вот этого момента в картинках "сли есть мотор например, или полевик управляемый шимом тут нужно конечно больше и разделять цепи резистором 100ом например по плюсу с конденасаторами с каждой стороны"
хорошо. библиотеку чуть позже брошу. вот схемы чтобы понятнее было
в 1 схеме забыл поправить там 5 вольт. номиналы и количество светодиодов чисто для понимания что нагрузка большая. и что помехи от шим например или от икрения щеток двигателя не должны попадать в питание микроконтроллера
не лишним будет добавить паралельно электролиту тоже керамику. электролит не любит высокие частоты. и если ток большой будет греться, а керамика легко переносит и эффективно гасит. электролит в данном случае для гашения провалов питания например в момент пуска двигателя, когда ток особенно приличный и напряжение может просесть что может привести разным последствиям. зависит еще и от источника
+ вот папка с архивом 2 библиотек. там есть примеры к каждой
Значит так: по последнему - есть команда (посылаем команду) есть дата (посылаем данные) командой задавайте по "Y" банк по "Х" координату. Это в даташите. Если без координат, вывет в (0, 0); затем (1, 0);
По сдвигу это надо разобраться с побитовыми логическими операторами "и" (&), "или" (|). последний не путать с логическим или (||).
Установка бита
Запишем эквивалент в более понятной форме:
Это тоже самое.
в результате бит регистра примит логическую еденицу если "или" данный бит "или" бит маски равен логической еденице. Остальные биты маски просто скрыты, поэтому другие регистры не затрагиваются (или просто остаются без изменений)
Для нескольких портов можно писать так:
тут постфиксный (с права от оператора присвоения"=") "или" просто объеденяет битовые маски.
Для сброса бита регистра добавим ещё один оператор побитового инвертирования "~" и поменяем все биты маски.
С ним (~) оператор (&) установит только те биты которые с маской равны "1", остальные останутся нетронутые
Линия должна появиться в координатах 0,0.
Переход к другим координатам осуществляется 3мя командами:
Где х,у соответствующие координаты х[0..96], y[0,8]
Линия должна появиться в координатах 0,0.
Так я о чём!? Если не задавать координат, там и появится.
Переход к другим координатам осуществляется 3мя командами:
а если не "почистить" экран, и не задавать координаты, вторая появится в координатах (1, 0)
спасибо. дальше думаю разберусь
я путал & и &&, а также | и ||. Ломал голову как может логическая операция менять бит, и не подумал что это логический оператор изменения битов
Ну тогда еще вопрос:
этот код понимать так?:
или так?
Чтобы установить PB0 ничего сдвигать вообще не надо просто
Устанавливает 1 в PORTB.5, т.к сдвигает на 5 разрядов от 0го.
PB 7654 3210
Было 0000 0001 << 5 //сдвинули пять раз
Получили 0010 0000 // profit!
спасибо. буду мучать дальше дисплей
хотя еще впорос все таки есть. зачем для изменения бита требуется сдвиг? неужели нет способа проще для работы напрямую с битом байта
Чтобы установить PB0 ничего сдвигать вообще не надо просто
не рекомендую так делать, правельно не правельно, опять же теряется визуально с каким пином порта работаем.
Чтобы установить PB0 ничего сдвигать вообще не надо просто
не рекомендую так делать, правельно не правельно, опять же теряется визуально с каким пином порта работаем.
то есть эта запись тоже правильная? точнее рабочая
то есть эта запись тоже правильная? точнее рабочая
Да, только наглядней и универсальней.
хотя еще впорос все таки есть. зачем для изменения бита требуется сдвиг? неужели нет способа проще для работы напрямую с битом байта
Можно просто передать число, которое будет соответсвовать нужной маске порта:
Но как заметил hugoboss317:
А не лучше писать чтоб было более наглядно какой именно бит регистра устанавливается или сбрасывается? например так:
понятно. спасибо что все разъяснили
почему сдвигаем для CS 2 бита?
может должно быть
почему сдвигаем для CS 2 бита?
может должно быть
аха, оппечатка.
ну тогда еще впорос. самый простой способ очистить дисплей это записать в него нули?
ну тогда еще впорос. самый простой способ очистить дисплей это записать в него нули?
угу, т.к. контроллер дисплея не имеет комманды стирания.
ну тогда еще впорос. самый простой способ очистить дисплей это записать в него нули?
угу, т.к. контроллер дисплея не имеет комманды стирания.
хорошо. вечером попробую запустить
ну вот получилось))
Всё-таки замутил, красавчик.
Ага. спасибо igorok107 и hugoboss317 за помощь.
Все работает кроме инвертирования
по вертикали работает, а по горизонтали нет. подскажите с чем это может быть связано?
выкладываю весь код. может кому понадобится
Все работает кроме инвертирования
по вертикали работает, а по горизонтали нет. подскажите с чем это может быть связано?
Странно что не работает, у меня что в железе, что в протеусе инвертирование работает.
Кстати массив с данными можно разместить в программую память, так оперативки меньше будет кушать:
спасибо что подсказали. а то голову уже сломал как меньше оперативки тратить
блин ругается
все разобрался. надо было подключить
красота. наконец запустил шрифт 10*16 на тиньке. теперь оперативки хватает. правда только цифры. пока нужны в основном только они. вечером еще в железе проверю. хугобосс использовал твои шрифты. лень было рисовать))
чуть не забыл
еще 226 байт. это радует. можно основную программу сделать
Я бы добавил путой столбец а того и два при выводе символа/цифры, что бы не смотрелись так слитно, разрешение позволяет: 96/8 = 10+2.
А что вообще за проэкт такой делайте?
я специально их слитно делал
вообще это для тренировки чтобы понимать как работает и использования в будущем, но и цель конкретная есть - сделать свою прошивку для этого устройства:
Вольтамперваттметр на тиньке13
http://vrtp.ru/index.php?showtopic=20096
благодаря ему я в свое время поверил что можно в принципе запустить жк дисплей от телефона
теперь хочу свою прошивку сделать в той же схеме (там ближе к концу я выкладывал измененные упрощенные схемы)
исходники там были, но ассемблер для меня казалось нереально тяжелым, хоть и сейчас не знаю асм (совсем немного) но зато могу сделать на си, а это для меня почти подвиг, так как очень сильно ограничены ресурсы, и требуется кроме вывода дисплея уметь инициализировать ацп на си (уже научился), разбивать число на цифры и тд. теперь моих знаний должно хватить
проверил в железе. работает
Ну рад что шрифт пригодился :))
Проэкт интересный и полезный, держи в курсе дела
решил увеличить шрифт. все таки пришлось самому делать. теперь 10*24.
и только 2 строки. напряжение и ток. мощность не особо нужна
а также переходить на CVAVR, а то почти закончилась память.
было в ардуино
Оставалось всего 86 байт
в CVAVR с оптимизацией скорости стало
с оптимизацией по размеру
теперь остается 212 байт.
так что пока памяти вроде хватает. посмотрим что дальше будет
надо будет добавить еще 2 символа V и A
после этого наши библиотеки скомпилированные на 4К и выше кажутся монстрами неоптимальными
может что подскажите еще по оптимизации. вот код CVAVR
Растяни по ширене вдвое, это конечно не оптимизация, но место есть, цифры ещё крупнее будут
Растяни по ширене вдвое, это конечно не оптимизация, но место есть, цифры ещё крупнее будут
нельзя. памяти не хватит. сейчас 300байт занято под цифры. будет 600. еще 2 буквы надо будет и точку. а еще ацп, и вычисления. не хватит места. тогда уже на асме надо будет писать, а не хочу и не умею. ну или сложный алгоритм, так как в цифрах много одинаковых элементов. но не уверен что усложение алгоритма вывода цифр сильно уменьшит в объеме
каждый байт на счету))) это не на меге программить)))
Не, ты не понял, не 20х24 шрифт, свой оставь только в коде пиши не
,а
а понял. вечером может попробую. если нормльно будет выглядеть то оставлю
проверил в железе
по моему получилось слишком широко
ты меня натолкнул на мысль как сделать крупный шрифт, при этом сэкономив память. в билжайшее время сделаю
Да, жирновато. Я шрифт немного не такой рисовал, поэтому у меня не так жирно кажется.
ну вот сделал
при этом еще сэкономил память 32 байта
дальше усложнять алгоритм вывода текста не вижу смысл, сам алгоритм съедает память.
например до этого шрифты занимали 10*30 = 300 байт
а целиком программа 812 байт
теперь шрифты занимают 10*21= 210 байт
а целиком программа 780
итого: разница в объеме массива шрифтов 90 байт, а разница в объеме всей программы всего 32
ну вот и снова уперся в объем флеша у тиньки 13. уже не знаю что уменьшить, кроме как цифры сделать квадратными. даже точку не вывел не то что буквы. пришлось закоментить
но хотя бы измеряет
На сколько я помню, ты цифры в координатох печатаешь, ну так отодвинь немного десятые и сотые, а точку между ними поставь
На сколько я помню, ты цифры в координатох печатаешь, ну так отодвинь немного десятые и сотые, а точку между ними поставь
да думал уже об этом. но это внешний вид. а вот уменьшить еще код можно не используя для точки переход в координаты и в 3 ряду для цифры выводить точку (цифры состоят из 3 строк)
вот думаю использовать переход в координаты только 1 раз. должно уменьшить код прилично, а вот совсем отказаться думаю не получится, нужно будет следить в каком месте находится "курсор" и со временем возможен глюк, хотя и не факт
Наверное не в тему,извините. Собрал устройство на макетке использующее бибу с этой темы,дисплей от нокиа 1110,все хорошо,но рисует медленно, решил заменить дисплей на 1202(кто то где то писал что пошустрее работает) и тут началось, инверсия по горизонтали,исправил ,нормально,пошло. Отключаю от USB и подаю внешнее питание 12 вольт в дуину,инверсия, нажал рессет, нормальная картинка. выключаю питание,включаю опять инверсия. после рессета - нормально.Если запитываю от USB то проблема не появляется. В чем трабла,кто что посоветует?
проверьте побольше раз чтобы точно выяснить причину. мне лично это тоже интересно
Блок питания от компа атх, 12 вольт в дуину,болячка сегодня не рассосалась сама,при подаче питания картинка инверсная,рессет нажал - все отлично. проверено раз 20. С USB всегда нормальный запуск. В целях чистоты эксперимента достал с полки блок питания ATTEN APS,с него запуск происходит нормально.
Делаю выводы что как то связано именно с питанием,хотя подключаю модуль с дисплеем от 1110 и любой источник питания таких проблем не возникает. Завтра еще один дисплей 1202 возьму и попробую с ним.
От usb питание более-мение стабильное, вы 12 вольт крените? если да, то ёмкость надо обязательно на низкой стороне ставить.
и по входу тоже лучше поставить
вот и дотравилось. спаяю макетки буду проверять
плата местами черная потому что тонер при стирании ацетоном частично впитывается в текстолит и больше не стирается. это еще кисточкой. ватой еще хуже
какой номинал лучше брать для конденсатора?
gnd-gnd там просто перемычка, так ведь?
и обновите ссылки на библиотеку и скетчи, пишет файлы не найдены
спасибо
да там перемычка. какие именно файлы вам нужны? я теперь их храню в отдельной папке и не удаляю
конденсатор для драйвера последний раз ставил 100мкф, далее стабилизатор на 5В и снова кондесатор керамика на 1мкф
для обычной платы с измерениями и без теперь ставлю керамику 10мкф 1206
вот например
там радиомодуль, дисплей и 2 аналоговых входа для измерения напряжения. пока 10мкф хватает. если есть мотор например, или полевик управляемый шимом тут нужно конечно больше и разделять цепи резистором 100ом например по плюсу с конденасаторами с каждой стороны чтобы всплески в силовой части не влияли на цифровую часть. для аналоговых еще лучше надо делать
из файлов интересуют всякие вкусности для дисплея 1100. библиотека и пару пробных скетчей.
можно схему вот этого момента в картинках "сли есть мотор например, или полевик управляемый шимом тут нужно конечно больше и разделять цепи резистором 100ом например по плюсу с конденасаторами с каждой стороны"
не совсем понял что имелось ввиду
хорошо. библиотеку чуть позже брошу. вот схемы чтобы понятнее было
в 1 схеме забыл поправить там 5 вольт. номиналы и количество светодиодов чисто для понимания что нагрузка большая. и что помехи от шим например или от икрения щеток двигателя не должны попадать в питание микроконтроллера
не лишним будет добавить паралельно электролиту тоже керамику. электролит не любит высокие частоты. и если ток большой будет греться, а керамика легко переносит и эффективно гасит. электролит в данном случае для гашения провалов питания например в момент пуска двигателя, когда ток особенно приличный и напряжение может просесть что может привести разным последствиям. зависит еще и от источника
+ вот папка с архивом 2 библиотек. там есть примеры к каждой
http://yadi.sk/d/CXjuENmaEEwun