Форум РадиоКот https://radiokot.ru/forum/ |
|
Начинаю разбираться с графическим диплеем. Кое-что неясно. https://radiokot.ru/forum/viewtopic.php?f=20&t=11126 |
Страница 1 из 1 |
Автор: | megasvintus [ Чт окт 09, 2008 17:42:59 ] |
Заголовок сообщения: | Начинаю разбираться с графическим диплеем. Кое-что неясно. |
Здравствуйте все! Начал я разбираться потихоньку с графическим дисплеем, почитал статью в разделе "Лаборатория", и сразу столкнулся с первой проблемой: Я не понимаю каким образом каждый символ в файле symvol.h кодируется всего пятью числами? к примеру- {0x7e,0x11,0x11,0x11,0x7e}, //Буква A По столбикам вертикально чтоли? Копался долго в инете, а ничего, где принципы данных девайсов подробно разжеваны на русском не нашел. ![]() |
Автор: | Krik99 [ Чт окт 09, 2008 17:57:16 ] |
Заголовок сообщения: | |
Я недавно осваивал LCD от Nokia3310 и там в даташите всё прикросно расказывается как выводятся данные по 8 пикселей вертекально за одну команду по SPI. Рекомендую почитать даташит. ![]() |
Автор: | megasvintus [ Чт окт 09, 2008 18:27:13 ] |
Заголовок сообщения: | |
а по-русски есть чего? Можешь кинуть, к примеру на рапиду или депозит, чтоб долго не искать? |
Автор: | BerZerK-ku [ Пт окт 10, 2008 11:16:12 ] |
Заголовок сообщения: | |
А чего тут жевать-то? Если речь идет о дисплее подобном тому, что в примере, то 1 точка на экране - 1 бит. Стандартный шрифт 5 на 8 точек. Вот и получается, что информация об 1 символе хранится в 5 байтах. И ваше предположение верно - в этом случае именно по столбикам. Можно и по строкам хранить. У каждого из способов свои достоинства и недостатки. Информацию на экран можно выводить как байтом, так и битом. |
Автор: | Krik99 [ Пт окт 10, 2008 14:00:13 ] | ||
Заголовок сообщения: | |||
Ну рассмотрим пример с LCD от Nokia 3310. За один раз можно вывести только один столбец по вертикале на 8 пикселей. Командой такого типа 0b01110111... 1-пиксель горит. 0-пиксел не горит. После того как был выведенодин столбец, ЖК сам автоматически переходит на слебуйший столбец, и так до конца матрицы. Вот цветная илюстрация работы с LCD 3310.
|
Автор: | clawham [ Пн ноя 03, 2008 17:00:54 ] |
Заголовок сообщения: | |
Ребят, мне б ваши проблемы ![]() Ладно выводить буквы - просто и так далее....а вот кто ответит на вопрос - как выводить графику? например кружочек 8х8 точек это понятно и просто.....да вот нет....а как его теперь перечеркнуть? для этого надо побитовое или....а для него надо старое значение столбика ![]() |
Автор: | Krik99 [ Пн ноя 03, 2008 17:48:06 ] |
Заголовок сообщения: | |
А зачем с него читать?! ![]() Вот до сих пор все работали с ним, и никто не жалаовался. ![]() Тем более что там стоит односторонний SPI поправте если ошибаюсь... Может кто подключал дисплей от ERICSSON T28 к МК, знаю что работает по i2c, каие команды для инициализации? |
Автор: | clawham [ Вт ноя 04, 2008 12:40:59 ] |
Заголовок сообщения: | |
Хорошо, ответь мне на вопрос как мне нарисовав кружочек 01111110 10000001 10000001 10000001 10000001 10000001 10000001 01111110 выводя столбиками байты теперь перечеркнуть его по типу 01111110 10000001 10000001 11110001 10001111 10000001 10000001 01111110 при этом я не знаю что этот кружочек там был(фотовая картинка например загружена была) мне надо взять с экрана первый столбик - 01111110 и следать лог ИЛИ с 00010000 = 01111110 - записать его в память экрана потом взять второй байт - 10000001 и тоже ИЛИ с 00010000 = 10010001 и записать в память экрана и так далее! мне нужно попиксельное рисование а не побайтово-столбиковое ![]() да....побайтово-столбиком УДОБНО ВЫВОДИТЬ БУКВЫ ибо на фоне букв нету ничего....а мне надо например разлиновать сеткой пунктирной экран с шагом в 5 пикселов(5 пустых шестой - точка , 7...пустых и т.д.) и потом туда по точке рисовать график ну допустим тупой - температурный, причём с возможностями приближать участок(значения каждые 5 минут читаются и пишутся в еепром)вот минимум это весь день а максимум - это одна точка каждые 5 минут - вот это мне надо......с этого экранчика.....следовательно мне надо либо хранить весь массив точек на экране зажженных либо юзать память экрана что есть более правильно и так далее....но надо научиться считывать биты или байты-столбики с экрана |
Автор: | Aheir [ Вт ноя 04, 2008 12:58:45 ] |
Заголовок сообщения: | |
Если мне память не изменяет, этот экран на контроллере KS0066? а он, по-моему, не умеет управлять областью отобажения побитово (поправьте, если ошибаюсь). Если это очень критично, возьмите что-нибудь на T6963 от Toshiba, там эта функция точно есть (вот практически сейчас разбираюсь с таким экранчиком 240х128), но опять таки, надо все равно впихивать в индикатор чельный байт, чтобы зажечь/погасить точку. |
Автор: | clawham [ Вт ноя 04, 2008 15:29:46 ] |
Заголовок сообщения: | |
Цитата: Lcd
First we need to extract/salvage the LCD from the Nokia 3310 mobile phone. Be extremely careful and patient during this process, because as you know the display is just a thin piece of glass that is very sensitive. There is an 8 pin connector on the back of the display, in our case it's glued to the glass (Nokia 3210 has “rubber” connectors so this one is much easier to use). This is a Phillips PCD8544 display, it can be easily found on the net if you want more information about it. єто цитатка из инструкции по изготовлению популярнейшего цифротермометра на ПИКе.....тут ясно сказано - контроллер Филипс PCD8544http://www.myplace.nu/mp3/files/pcd8544.pdf |
Автор: | Krik99 [ Вт ноя 04, 2008 17:57:08 ] | ||
Заголовок сообщения: | |||
Вот даташит нашол на ERICSSON T28, но в нём про инициализацию ничего вразумительного не нашол, может кто обяснит как провести инициализацию? ![]()
|
Автор: | dps [ Пт янв 02, 2009 23:43:47 ] |
Заголовок сообщения: | |
вот есть такая ссылка http://sandiding.tripod.com/lcdt28.html вообще там лежит инфа про многие дисплеи от мобил и немного про работу с каждым из них. |
Автор: | vlad145 [ Вт мар 17, 2009 19:18:19 ] |
Заголовок сообщения: | |
clawham писал(а): Ребят, мне б ваши проблемы
![]() Ладно выводить буквы - просто и так далее....а вот кто ответит на вопрос - как выводить графику? например кружочек 8х8 точек это понятно и просто..... А можно по подробнее тупому, как мне вывести рисунок например 10х10? Желательно в CVAVR. |
Автор: | clawham [ Сб апр 11, 2009 18:36:53 ] |
Заголовок сообщения: | |
Есть два варианта ещё из школы на паскале - либо ты хранишь все свои данные в массиве (оперативка) типа BOOLEAN(тоесть 0 или 1) а размер массива - 48 на 84. рисую графики сетки подписи и т.д. - рисуешь как хочешь и чем хочешь в своём массиве а по таймеру там например или какому-то другому источнику - "Обновляешь" экран - тоесть запускаешь процедурку которая твой массив постолбиково выгружает полностью на только что сброшенный и переинициализированный экранчик НО...есть одно большое но - памяти то у нас малавата.....потому можно ещё 2 варианта придумать - например хранить базовые "фоны" как картинки - тоесть в еепром зашить массивы из БАЙТОВ расположенных по строчкам и столбцам(ну чтоб легче было) а потом при входе например в закладку - график(в программе) перед выводом точки сначала высчитать номер строки(8-мибитовой) а потом сделать ИЛИ уже той точки и того что в этом месте в ЕЕПРОМЕ написано ну или третий вариант - просто сетка - это уравнение....и условие его просто х=2*у например....тогда опять же в конце вывода делать ИЛИ того что даст уравнение и того что дал график Например вот я рисую синусоиду на этом дисплее Код: void lcd_putdot(char x, char y)
{ if(y>46) y=46; if(y<1) y=1; if(x<1>84) x=84; writecomm((0x80|x)); // х - это номер столбика - он у нас один в один writecomm((0x40|y/8)); DC = 1; spi(0b00000001 <<y>167) { motor_step = 1; lcd_clear(); } // бум выводить синусоиду lcd_putdot(motor_step/2, (char)(24+10*sin((float)(motor_step-24)/8))); switch(motor_step/40){ case 1: PORTC = 0b00001001; break; case 2: PORTC = 0b10010000; break; case 3: PORTC = 0b00000110; break; case 4: PORTC = 0b01100000; break; } OCR0=0xFF; } ну здесь я ещё лампочками дергаю ![]() ![]() |
Автор: | clawham [ Вс апр 12, 2009 16:06:08 ] |
Заголовок сообщения: | |
Это чтото раз 5 пытался 2 процедуры выложить - всё время какой-то бред получается Вот обработка прерывания таймера Код: interrupt [TIM0_COMP] void timer0_comp_isr(void)
{ // Place your code here // по таймеру шагать будет наш шаговый моторь // шагов у нас пока что 4 motor_step+=1; if(motor_step>167) { motor_step = 1; lcd_clear(); } // бум выводить синусоиду lcd_putdot(motor_step/2, (char)(24+10*sin((float)(motor_step-24)/8))); switch(motor_step/40){ case 1: PORTC = 0b00001001; break; case 2: PORTC = 0b10010000; break; case 3: PORTC = 0b00000110; break; case 4: PORTC = 0b01100000; break; } OCR0=0xFF; } |
Автор: | clawham [ Вс апр 12, 2009 16:07:11 ] |
Заголовок сообщения: | |
а это процедура рисования тоучи к абсолютных координатах монитора Код: void lcd_putdot(char x, char y)
{ if(y>46) y=46; if(y<1) y=1; if(x<1>84) x=84; writecomm((0x80|x)); // х - это номер столбика - он у нас один в один writecomm((0x40|y/8)); DC = 1; spi(0b00000001 << y%8); } |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |