Добавить форум Lasers.fonarevka.ru в Избранное ×
LASERS.FONAREVKA.RU - Всё о лазерах и лазерной технике  

Вернуться   Форум Lasers.fonarevka.ru > Электроника > Микроконтроллеры
Забыли пароль? Регистрация
Темы с вашим участием Новые сообщения Сообщения за день

  • Бесплатные розыгрыши призов
  • Для гостей форума
  • Пожертвования (Donate)
На форуме ежемесячно проходят бесплатные розыгрыши призов для зарегистрированных и активно общающихся форумчан. Вы можете выиграть не только различные лазерные указки и другое лазерное оборудование, но и фонарики, зарядные устройства, аккумуляторы и другие аксессуары известных брендов, а также фонари и компоненты от известных кастомщиков и мелкосерийных производителей. Также разыгрываются и другие призы, такие как мультитулы, ножи, рюкзаки и другое снаряжение. Все проходящие розыгрыши призов являются действительно абсолютно бесплатными для самих участников, т.к. все расходы берут на себя организаторы (т.е. владельцы данного форума) и сами спонсоры, которые предоставляют тот или иной приз для наших розыгрышей призов. Форумчане не несут никаких имущественных рисков, связанных с участием в данных розыгрышах (т.е. вы ничего не оплачиваете и ничем не рискуете). Вам достаточно нажать кнопку "Принять участие" и ждать результата!

На данный момент проходит 1 розыгрыш призов.

1. Зарядное устройство XTAR XP4 Panzer + 2 аккумулятора Panasonic NCR18650B 3400 мАч

Рекомендуем Вам подписаться на тему (оптимальнее с уведомлением на ваш E-mail), где публикуется информация о новых розыгрышах призов.
Подробная информация по ссылке
Искренне рады видеть Вас на нашем независимом проекте о лазерах и лазерной технике!

Что Вам даст регистрация на нашем проекте:


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

и много других приятных привилегий

Искренне надеемся, что Вам у нас понравится!
Если вы хотите финансово поддержать работу проекта LASERS.FONAREVKA.RU, будем искренне благодарны!
Даже самая малая сумма поможет дальнейшему развитию и прогрессу нашего с вами уже общего проекта.


Ответ
Просмотров в теме 114465   Ответов в теме 119   Подписчиков на тему 10   Добавили в закладки 0
Опции темы
Старый 05.01.2011, 18:53   61
INFERION
Старший модератор
 
Аватар для INFERION
 
Регистрация: 15.02.2010
Адрес: Украина, Полтава
Сообщений: 1498
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
По умолчанию

Делай программный ШИМ, но с прерываниями от таймера(ов). Между прерываниями программа будет заниматься своими делами, и переключать состояния пинов по прерыванию. Такты считать не придётся, лишь бы хватило производительности...

У меня в RGB индикаторе так реализовано. В принципе туда можно сколько угодно так каналов налепить, особенно если они все будут работать в динамическом режиме (один мультиплексируемый канал)...
INFERION вне форума   Ответить с цитированием Вверх
Старый 06.01.2011, 01:25   62
Ryazanec
Переводчик
 
Регистрация: 04.05.2010
Последняя активность: 13.03.2019 20:23
Адрес: Рязань
Сообщений: 2389
Сказал(а) спасибо: 6
Поблагодарили 7 раз(а) в 6 сообщениях
По умолчанию

производительности хватает - реализации есть, просто начинаю изучать
Спасибо за совет.
Ryazanec вне форума   Ответить с цитированием Вверх
Старый 06.01.2011, 13:56   63
Gall
Старший научный сотрудник
 
Аватар для Gall
 
Регистрация: 21.06.2010
Последняя активность: 02.08.2015 00:26
Адрес: Екатеринбург
Сообщений: 205
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от SviMik :
Gall Расскажи, как вообще в Си принято работать со строками. Для меня, после пхп, работать с "массивом букв" - это кошмар
Это кошмар и в PHP тоже, если знать, что именно происходит внутри машины при выполнении операции $a .= $b; (это одна из самых медленных операций вообще...)

Си имеет сокращенную запись для строки. Массив
c[] = { 'H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', 0 };
может быть записан следующим образом:
c[] = "Hello world";
Это абсолютно одно и то же, только более короткая запись.

Копирование, конкатенация и прочие операции над строками делаются с помощью циклов. Поскольку в конце каждой строки стоит байт с кодом 0, обычно используется цикл while. В стандартной библиотеке C имеется набор готовых функций на основе таких циклов:
strlen - определяет длину строки
strcpy - копирует побайтно строку (массив в массив)
strnlen - то же самое, но обрезает строку, если она не влезает в отведенное для нее место (strlen в этом случае молча портит содержимое памяти)
memcpy - копирует содержимое массива побайтно (на 0 в конце строк внимания не обращает, число байтов указывается)
strcmp - сравнивает две строки побайтно
memcmp - сравнивает два массива байтов побайтно
strcat - конкатенация двух строк, сокращение для strlen+memcpy+memcpy
Все эти функции объявлены в string.h.
Для форматирования строк для вывода на экран можно использовать sprintf или snprintf.

Описание всех этих функций есть в любом руководстве по Си, дублировать его я не буду.

Следует иметь в виду, что работа со строками (копирование и т.п.) всегда крайне медленна и затратна. PHP и Pascal скрывают эту сложность, Си - нет. На микроконтроллере использования string.h вообще лучше избегать, построив программу таким образом, чтобы она вообще использовала только константные строки.

На большом компьютере (не на микроконтроллере) есть еще выделение памяти. Там появляются дополнительные функции:
malloc - выделить память
free - освободить память
strdup - сокращенная запись strlen+malloc+memcpy
На микроконтроллере они бесполезны.

Использование строк на микроконтроллере имеет свою специфику. Там строки и массивы бывают двух видов - в оперативной памяти и в памяти программ. Поэтому у таких функций, как strcpy, появляются двойники, отличающиеся тем, что читают строку из флеша, а не из ОЗУ. Их описание есть в документации на AVR-LIBC.
Gall вне форума   Ответить с цитированием Вверх
Старый 06.01.2011, 16:26   64
SviMik
Администратор
 
Аватар для SviMik
 
Регистрация: 26.02.2010
Последняя активность: 18.08.2015 19:47
Адрес: Tallinn, Estonia
Сообщений: 1101
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Цитата:
c[] = "Hello world";
Это только для создания массива. Если прочёл внимательно, мне надо заменить лишь часть созданного массива.
Мой код с листингом выглядит так:
Код:
		lcd[2]='M';
 56e:	8d e4       	ldi	r24, 0x4D	; 77
 570:	80 93 02 01 	sts	0x0102, r24
		lcd[3]='H';
 574:	88 e4       	ldi	r24, 0x48	; 72
 576:	80 93 03 01 	sts	0x0103, r24
		lcd[4]='z';
 57a:	8a e7       	ldi	r24, 0x7A	; 122
 57c:	80 93 04 01 	sts	0x0104, r24
Обрати внимание, здесь нет циклов, и не используется ОЗУ. И вообще только один регистр. Что предлагаешь ты? Сначала создать второй массив в ОЗУ, а потом его копировать? Ну ясен пень, для мк это будет затратно!

Цитата:
На микроконтроллере использования string.h вообще лучше избегать, построив программу таким образом, чтобы она вообще использовала только константные строки.
Ну я например не очень представляю, как мне это сделать, если мне надо в произвольном месте экрана накладывать произвольный текст.
SviMik вне форума   Ответить с цитированием Вверх
Старый 06.01.2011, 20:46   65
Gall
Старший научный сотрудник
 
Аватар для Gall
 
Регистрация: 21.06.2010
Последняя активность: 02.08.2015 00:26
Адрес: Екатеринбург
Сообщений: 205
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от SviMik :
Обрати внимание, здесь нет циклов, и не используется ОЗУ. И вообще только один регистр. Что предлагаешь ты? Сначала создать второй массив в ОЗУ, а потом его копировать?
Здесь имеется неявный массив в программе и раскрученный цикл. Это эквивалентно вызову функции memcpy_P из pgmspace.h:

Код:
memcpy_P(lcd+2, PSTR("MHz"), 3);
На самом деле, работу с LCD лучше делать вообще без создания массивов, подобных lcd[]. Вместо этого лучше воспользоваться fprintf(), создав соответствующие функции-хуки для вывода байтов (см. документацию здесь: http://www.nongnu.org/avr-libc/user-...vr__stdio.html )

Добавлено через 1 минуту
Цитата:
Посмотреть сообщение Сообщение от SviMik :
Ну я например не очень представляю, как мне это сделать, если мне надо в произвольном месте экрана накладывать произвольный текст.
Код:
lcd_gotoxy(1, 3);
lcd_put_text(PSTR("MHz"));
Подразумевается, что функции, отдающие команды LCD, называются lcd_gotoxy и lcd_put_text (заменить на настоящие названия). То есть, не держать в памяти никаких строк вообще, слать сразу байты на экран. Не нужны тут строки. Это чистейший overhead, то есть бесполезная трата ресурсов.

PSTR - это специальный макрос, указывающий, что строка не должна размещаться в оперативной памяти. Такая строка либо кладется во флеш и грузится инструкцией lpm, либо непосредственно подставляется в инструкции ldi.
Gall вне форума   Ответить с цитированием Вверх
Старый 06.01.2011, 20:47   66
SviMik
Администратор
 
Аватар для SviMik
 
Регистрация: 26.02.2010
Последняя активность: 18.08.2015 19:47
Адрес: Tallinn, Estonia
Сообщений: 1101
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Gall Так если дисплей я могу обновлять только целиком, значит должен где-то в памяти быть буффер всего экрана, как иначе?
SviMik вне форума   Ответить с цитированием Вверх
Старый 06.01.2011, 21:02   67
Gall
Старший научный сотрудник
 
Аватар для Gall
 
Регистрация: 21.06.2010
Последняя активность: 02.08.2015 00:26
Адрес: Екатеринбург
Сообщений: 205
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от SviMik :
Gall Так если дисплей я могу обновлять только целиком, значит должен где-то в памяти быть буффер всего экрана, как иначе?
Что за дисплей такой, который можно обновлять только целиком? Все известные мне дисплеи, которые можно подключить к AVR, можно обновлять по частям.
Gall вне форума   Ответить с цитированием Вверх
Старый 06.01.2011, 21:10   68
SviMik
Администратор
 
Аватар для SviMik
 
Регистрация: 26.02.2010
Последняя активность: 18.08.2015 19:47
Адрес: Tallinn, Estonia
Сообщений: 1101
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Ну например у дисплея 3310 такая хитрая адресация, что обновлять можно только по строкам в 8 пикселей в высоту. А если я хочу шрифт сделать чуть больше - тут надо весь экран перерисовывать, т.к. будут задеваться соседние строки.

Тоесть: в нём 6 строк по 8 пикселей в высоту, и если мне надо что-то перерисовать - затираться будет именно столбиками по 8 пикселей. Дурацкая адресация
SviMik вне форума   Ответить с цитированием Вверх
Старый 08.01.2011, 16:00   69
Gall
Старший научный сотрудник
 
Аватар для Gall
 
Регистрация: 21.06.2010
Последняя активность: 02.08.2015 00:26
Адрес: Екатеринбург
Сообщений: 205
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от SviMik :
Ну например у дисплея 3310 такая хитрая адресация, что обновлять можно только по строкам в 8 пикселей в высоту. А если я хочу шрифт сделать чуть больше - тут надо весь экран перерисовывать, т.к. будут задеваться соседние строки.

Тоесть: в нём 6 строк по 8 пикселей в высоту, и если мне надо что-то перерисовать - затираться будет именно столбиками по 8 пикселей. Дурацкая адресация
Это совершенно стандартная адресация для всех графических дисплеев. Она, однако, не мешает работать с текстом по частям, если используется моноширинный шрифт (а кто-то использует не моноширинный?). Промежуточный буфер при этом используется, но хранит не байты текста, а битовые маски пикселей. В зависимости от конкретной программы, возможно, придется подумать об оптимальной организации хранения таблиц шрифта знакогенератора.

Если ширина знакоместа равна одному целому или половине блока битов, ширина трех знакомест равна двум блокам и т.п., то имеет смысл оперировать соответствующими группами байтов (диграммами или триграммами) вместо отдельных символов. При 8-битном экране и шрифте 6x8 работать триграммами - самое милое дело. При этом больше трех символов в памяти никогда не хранится, а биты не хранятся совсем. Отрисовка экрана при этом происходит "вразнобой", но на большинстве экранов это никак не сказывается на быстродействии.

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

Если по какой-то причине надо обновлять часть изображения (не текста) на экране, например, при рисовании графиков, это можно сделать за счет организации фреймбуфера. В памяти располагается битовая маска, соответствующая пикселам экрана. Рисование делается на фреймбуфере непосредственно (это не проблема), после чего его часть переносится на дисплей. Этот режим работы вполне соответствует графике на мониторе CGA, EGA или ZX Spectrum, поэтому относительно такого метода рисования отсылаю к соответствующей литературе. Может случиться, однако, что памяти под организацию фреймбуфера не хватает. В этом случае используется возможность подгрузки частей изображения обратно из дисплея в контроллер для организации частичного фреймбуфера (в пределе - 1-байтного). Для такого режима имеются исключительно эффективные алгоритмы, например, алгоритм рисования прямых линий Брезенхэма.

[Исправлено: Gall, 08.01.2011 в 16:06].
Gall вне форума   Ответить с цитированием Вверх
Старый 08.01.2011, 23:58   70
AVSel
Глобальный модератор
 
Аватар для AVSel
 
Регистрация: 15.02.2010
Последняя активность: 26.05.2019 19:08
Адрес: Москва
Сообщений: 3138
Сказал(а) спасибо: 79
Поблагодарили 107 раз(а) в 76 сообщениях
По умолчанию

Не понял проблемы. 8МГц AVR-ки хватает, чтоб перерисовывать весь экран десятки раз в секунду. Вы чего, с килогерцовой частотой экран обновлять хотите? Так глаз все равно это не отследит Проблема возникает, если интерфейс с дисплеем медленный, тогда может и есть смысл мозги напрягать.
AVSel вне форума   Ответить с цитированием Вверх
Старый 09.01.2011, 12:57   71
Gall
Старший научный сотрудник
 
Аватар для Gall
 
Регистрация: 21.06.2010
Последняя активность: 02.08.2015 00:26
Адрес: Екатеринбург
Сообщений: 205
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
По умолчанию

Сразу видно, ни разу с дисплеями не работал Чтобы перерисовывать, может и хватает, а вот чтобы ХРАНИТЬ изображение, памяти не хватит. А скорости интерфейсов дисплеев всегда медленные.
Gall вне форума   Ответить с цитированием Вверх
Старый 09.01.2011, 23:39   72
AVSel
Глобальный модератор
 
Аватар для AVSel
 
Регистрация: 15.02.2010
Последняя активность: 26.05.2019 19:08
Адрес: Москва
Сообщений: 3138
Сказал(а) спасибо: 79
Поблагодарили 107 раз(а) в 76 сообщениях
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от Gall :
Сразу видно, ни разу с дисплеями не работал Чтобы перерисовывать, может и хватает, а вот чтобы ХРАНИТЬ изображение, памяти не хватит. А скорости интерфейсов дисплеев всегда медленные.
Непонял, зачем хранить изображение для текстового дисплея, если можно просто хранить последний текст. А еще проще, по неким событиям перегенерить текст экрана заново. Хранить пяток байт последних событий необременительно. А скорости паралельных или SPI интерфейсов у дисплеев вполне приличные, с другими дисплейчиками я не связывался
AVSel вне форума   Ответить с цитированием Вверх
Старый 10.01.2011, 15:13   73
Gall
Старший научный сотрудник
 
Аватар для Gall
 
Регистрация: 21.06.2010
Последняя активность: 02.08.2015 00:26
Адрес: Екатеринбург
Сообщений: 205
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
По умолчанию

Цитата:
Посмотреть сообщение Сообщение от AVSel :
Непонял, зачем хранить изображение для текстового дисплея, если можно просто хранить последний текст. А еще проще, по неким событиям перегенерить текст экрана заново. Хранить пяток байт последних событий необременительно. А скорости паралельных или SPI интерфейсов у дисплеев вполне приличные, с другими дисплейчиками я не связывался
Для ТЕКСТОВОГО дисплея, имеющего собственный знакогенератор, не надо вообще ничего ХРАНИТЬ. Достаточно посылать только новые КУСОЧКИ текста - то, что должно изменяться.

Для ГРАФИЧЕСКОГО дисплея в чисто текстовом режиме можно использовать тот же подход. Кусок изображения, поверх которого выводятся новые символы, все равно затирается.

Для графического дисплея, на котором текст чередуется с настоящей графикой, необходимо либо хранить пиксели, либо заново рендерить.
Gall вне форума   Ответить с цитированием Вверх
Старый 10.01.2011, 18:52   74
SviMik
Администратор
 
Аватар для SviMik
 
Регистрация: 26.02.2010
Последняя активность: 18.08.2015 19:47
Адрес: Tallinn, Estonia
Сообщений: 1101
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Gall, давай я попробую картинкой обьяснить, что я хочу. Вот допустим кусок дисплея от 3310, адресация там по строкам в 8 пикселей в высоту. А я допустим хочу написать текст шрифтом 12 пикселей.

Нажмите на изображение для увеличения
Название: 3310lcd12pxfont.png
Просмотров: 1097
Размер:	1.2 Кб
ID:	3072

В итоге, если я захочу перерисовать "строка текста #2", я обязан перерисовать "строка дисплея #2". А эта строка захватила обе текстовых строки, и я ну никак не могу её перерисовать, если я до этого не хранил "строка текста #1".

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

Конечно можно "строка дисплея #2" прочесть из дисплея назад в мк, изменить её нижнюю половину, и залить назад, но это крайне затратно по скорости такого обновления и тактам мк...

В итоге, у меня ГРАФИЧЕСКИЙ дисплей в чисто текстовом режиме, но я не могу вот так влоб обновить лишь одну из строк.
SviMik вне форума   Ответить с цитированием Вверх
Старый 10.01.2011, 20:19   75
Gall
Старший научный сотрудник
 
Аватар для Gall
 
Регистрация: 21.06.2010
Последняя активность: 02.08.2015 00:26
Адрес: Екатеринбург
Сообщений: 205
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
По умолчанию

Существует и третье решение. А именно, научиться определять нужные символы, не храня строки полностью. Для отображения цифр оно как правило оптимально, поскольку число в памяти скорее всего хранится, определение цифры по числу - операция легкая.

Если же более удобным кажется организация теневой видеопамяти (именно так по-научному называется хранение строк для отображения в памяти), то это лучше делать не как строки, а как ДВУМЕРНЫЙ массив символов. Каждому элементу такого массива однозначно соответствует некоторая позиция экрана. Изменения отдельных элементов массива делается прямым присваиванием, а групп элементов - memcpy / memcpy_P или в цикле. На таком массиве можно сделать исключительно эффективный алгоритм перевода двоичных чисел в символы. Правильный тип такого массива - char[M][N] для экрана MxN символов.

Если памяти микроконтроллера достаточно, можно сделать теневую видеопамять не символов, а пикселей (фреймбуфер). Тогда каждому пикселю экрана будет соответствовать 1 бит. Правильный тип такого массива - uint8_t[M/8][N] для экрана разрешением MxN. Такая организация позволяет легко рисовать линии и окружности, выводить графики. По сравнению с чисто текстовой памятью требуется в 5-8 раз больше байтов, поэтому решение подходит только для МК с достаточно большим ОЗУ или с подключенной внешней памятью. При подключении 64к внешнего ОЗУ возможен вывод сложных изображений на телевизор, как в "Денди".
Gall вне форума   Ответить с цитированием Вверх
Старый 11.01.2011, 12:58   76
AVSel
Глобальный модератор
 
Аватар для AVSel
 
Регистрация: 15.02.2010
Последняя активность: 26.05.2019 19:08
Адрес: Москва
Сообщений: 3138
Сказал(а) спасибо: 79
Поблагодарили 107 раз(а) в 76 сообщениях
По умолчанию

SviMik, ты бы подробнее описал, для чего дисплей, какой МК, и т.д. Тогда и советы были бы конкретнее.

Одно дело чисто интерфейсный дисплейчик, который подключается к примеру в USB. Тут на МК нужен просто тупой транслятор из USB в экран. Шрифты, видеопамять, логику можно вынести в драйвер/управляющее ПО.
И совсем другой вариант - автономный контроллер с экранчиком.

И кстати, при разработке девайсов на МК, есть еще пара аспектов:

1. Экономический. При небольшой партии устройств, скажем до 100..1000шт, может быть выгодней упростить(и удешевить) разработку ПО, за счет применения более дорогих комлектующих(с большим объемом памяти, быстродействием и т.д). При больших объемах (от 10000..100000шт) наоборот, выгоднее экономить на комплектующих, за счет усложнения ПО и разработки в целом. При средних- соответственно середина на половину

2. Надежность устройства и удобство поддержки. Принцип тут простой: чем сложнее алгоритм, тем больше вероятность глюков и сложнее эти глюки лечить.
Из личных наблюдений: У простых программ и глюки простые- зависла или свалилась. А вот начиная с определенного уровня сложности, программа уже начинает жить какой-то своей жизнью....
AVSel вне форума   Ответить с цитированием Вверх
Старый 11.01.2011, 18:00   77
SviMik
Администратор
 
Аватар для SviMik
 
Регистрация: 26.02.2010
Последняя активность: 18.08.2015 19:47
Адрес: Tallinn, Estonia
Сообщений: 1101
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

AVSel Естественно, автономный! МК - мега48 (но ОЗУ уже осталось мало), дисплей - третий раз пишу, от нокии 3310
SviMik вне форума   Ответить с цитированием Вверх
Старый 11.01.2011, 18:34   78
AVSel
Глобальный модератор
 
Аватар для AVSel
 
Регистрация: 15.02.2010
Последняя активность: 26.05.2019 19:08
Адрес: Москва
Сообщений: 3138
Сказал(а) спасибо: 79
Поблагодарили 107 раз(а) в 76 сообщениях
По умолчанию

Мда, не особо развернешся...
У тебя вроде все тексты константные, сделай теневую видеопамять, где будут храниться индексы выведенных на экран строк. Всего 5..10 байт потребуется. Или мегу88 ставь и сразу будет вагон запасной памяти. Которая правда тоже быстро закончится
AVSel вне форума   Ответить с цитированием Вверх
Старый 16.01.2011, 20:05   79
Gall
Старший научный сотрудник
 
Аватар для Gall
 
Регистрация: 21.06.2010
Последняя активность: 02.08.2015 00:26
Адрес: Екатеринбург
Сообщений: 205
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
По умолчанию

Сжатие спасет. И константы в ПЗУ. Хранить индексы массивов из ПЗУ дешевле, чем строки из ОЗУ. Если количество разнообразных выводимых строк невелико, это спасает.

Что касается сжатия, то даже элементарное RLE может иногда жать в 10 раз. Иногда - Хаффман. Эти алгоритмы достаточно быстры, чтобы не напрягать процессор, и достаточно малы, чтобы лезть в память.

Пример "продвинутой" работы с дисплеем nokia есть в коде Yampp (www.myplace.nu).

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

А еще есть мега168.
Gall вне форума   Ответить с цитированием Вверх
Старый 19.12.2011, 22:30   80
MUR(Z)
Лазеростроитель
 
Регистрация: 19.12.2011
Последняя активность: 30.12.2011 19:41
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
По умолчанию

Доброго времени суток жителям форума! Вопрос вот в чем, накидал програмку для tyni13. Должна по внешнеу событию переключать порта.
Ткните пож. носом где и что не так.

P.S. Программу пишу первый раз, языков не знаю, но оч нужно!
#include <avr/io.h>

int main()
{

DDRB = 0x07;//конфигурируем порты
PORTB = 0x07;//горят все LED
if (PINB == 0x27)
{
PORTB = 0x01;//горит красный
}
else
{
PORTB = 0x07;
}

while (1)//циклим программу
{
if (PINB == 0x21)
{
PORTB = 0x01;//горит красный
}
else
{
PORTB = 0x07;
}
if (PINB == 0x21)
{
PORTB = 0x03;//горит grin red
}
else
{
PORTB = 0x01;
}
if (PINB == 0x23)
{
PORTB = 0x02;//grin
}
else
{
PORTB = 0x03;
}
if (PINB == 0x22)
{
PORTB = 0x06;//bluu grin
}
else
{
PORTB = 0x02;
}
if (PINB == 0x26)
{
PORTB = 0x04;//bluu
}
else
{
PORTB = 0x06;
}
if (PINB == 0x24)
{
PORTB = 0x05;//red bluu
}
else
{
PORTB = 0x04;
}
}

return 0;
}
Вложения
Тип файла: zip rgb моргалка.zip (416 байт, 267 просмотров)
MUR(Z) вне форума   Ответить с цитированием Вверх
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 05:27. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2019, vBulletin Solutions, Inc. Перевод: zCarot
Template-Modifications by TMS

Copyright ©2010 - 2015, Hobbi.TV & FONAREVKA.RU.

Если Вы не являетесь правообладателем того или иного контента размещенного на форуме (фото/видео/текст),
то при любом использовании материалов форума необходимо получить письменное разрешение
на использование того или иного материала у администрации форума.

При использовании материалов форума ссылка на Lasers.fonarevka.ru обязательна.

Украинский портАл CATALOG.METKA.RU
Каталог webplus.info Каталог сайтов Zabor.com