дисплей Nokia-1616 - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » дисплей Nokia-1616 (работа с дисплеем)
дисплей Nokia-1616
доцент2 Дата: Чт, 26.02.2015, 10:24  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 316
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

делаю первые шаги по переходу с монохрома Nokia-1202 на цветной 1616. подключение у них одинаковое.
А вот библиотека отличается.
Начал переделывать библиотеку от 1202, но пока особо не получается.
В протеусе есть вроде похожий дисплей Nokia-6610, попробую на нем отработать то, что получиться.
Прошу помощи с инициализацией и работой с цветом.

Добавлено (26.02.2015, 00:47)
---------------------------------------------
помогите найти модель дисплея Nokia-1616 для протеуса.

Добавлено (26.02.2015, 10:24)
---------------------------------------------
1. инициализация прошла успешно в железе! (в протеусе к сожалению модельки нет).
пока не со всеми настройками разобрался...
2. научился заливать цветом прямоугольные области по координатам и выводить "цветной пиксель".
с выбором цвета пока не все ясно, так методом тыка от 0000 до FFFF перебираю.
(купил пивка - отметил!).
3. вопрос: установив координату, как загнать первую строчку или колонку любого символа 8х8?
Прикрепления: _Nokia-1616.inc(6Kb)
ЯНДЕКС Дата: 26.02.2015
anatol Дата: Пт, 27.02.2015, 11:44  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 547
Репутация: 14   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Пока минутка свободная поискал за вас
В дисплее контроллер SPFD54124Bhttp://master-electrix.at.ua/lcd_controler/SPFD54124B-6101-.pdf
есть все команды, разбирать 200 страниц мне лень.
Здесь статья - http://radiokot.ru/articles/53/      адаптируйте.
На изи http://we.easyelectronics.ru/lcd_gfx....лючение дисплея Nokia 1616 на примере LPC1343

Сообщение отредактировал anatol - Пт, 27.02.2015, 11:46
доцент2 Дата: Вс, 01.03.2015, 18:56  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 316
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

это все я видел. Сейчас с СИ пытаюсь код переделать, но глухо как в танке (Си не знаю!).
Понять не могу как вывести байт, например 10011001. Пока получается задать область вывода, но байт выводиться в виде 11111111 (полоска).

Добавлено (27.02.2015, 20:53)
---------------------------------------------
получилось вывести символ. надо код причесывать. потом на текст и графику переходить.

Добавлено (01.03.2015, 18:56)
---------------------------------------------
разобрался с вариантами инверсии и поворота.
цвет тоже могу задать в виду двух байт. На Си видел константы в виде одного байта Const Yellow = &11111100
Подскажите ка преобразовать их в два байта.

ivan_fd Дата: Пн, 02.03.2015, 11:19  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Специалист
Сообщений: 888
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

А зачем там два байта? Что нужно передать в дисплей?

Меня все время преследуют умные мысли...но я быстрее!!!
ivan_fd Дата: Пн, 02.03.2015, 11:42  |                                                                                                                Сообщение # 5
Группа: Модераторы
Ранг:  Специалист
Сообщений: 888
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Вот из исходников - цвета.

Код
#define rgb_color_pack(r, g, b)         ((rgb_color16bit)r << 11) | ((rgb_color16bit)g << 5) | ((rgb_color16bit)b)
// repack from 16bit presentation into color structure
#define rgb_color_repack(color)         (rgb_color16bit)color
#define rgb_color_red(color)         (color >> 11) | 0x1F
#define rgb_color_green(color)         (color >> 5) | 0x3F
#define rgb_color_blue(color)         (color | 0x1F)

#define LCD_VGA_BLACK      rgb_color_repack(0x0000)
#define LCD_VGA_WHITE      rgb_color_repack(0xFFFF)
#define LCD_VGA_RED         rgb_color_repack(0xF800)
#define LCD_VGA_GREEN      rgb_color_repack(0x1FE0)
#define LCD_VGA_BLUE      rgb_color_repack(0x001F)
#define LCD_VGA_SILVER      rgb_color_repack(0xC618)
#define LCD_VGA_GRAY      rgb_color_repack(0x8410)
#define LCD_VGA_MAROON      rgb_color_repack(0x8000)
#define LCD_VGA_YELLOW      rgb_color_repack(0xFFE0)
#define LCD_VGA_OLIVE      rgb_color_repack(0x8400)
#define LCD_VGA_LIME      rgb_color_repack(0x07E0)
#define LCD_VGA_AQUA      rgb_color_repack(0x07FF)
#define LCD_VGA_TEAL      rgb_color_repack(0x0410)
#define LCD_VGA_NAVY      rgb_color_repack(0x0010)
#define LCD_VGA_FUCHSIA      rgb_color_repack(0xF81F)
#define LCD_VGA_PURPLE      rgb_color_repack(0x8010)


Меня все время преследуют умные мысли...но я быстрее!!!
доцент2 Дата: Пн, 02.03.2015, 22:19  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 316
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

почти вся инфа для этого дисплея передается по два байта, в том числе и цвет в 16-битном режиме.
не совсем понятно, как например из этого RED rgb_color_repack(0xF800), сделать вот это:
   1 байт                       2 байт
RRRRR GGG       GGG BBBBB
можно конечно подобрать значения байтов, но хотелось бы воспользоваться уже готовыми константами из других библиотек.
anatol Дата: Вт, 03.03.2015, 08:53  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 547
Репутация: 14   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

доцент2, 0xF800 = F800 в 16-тиричном представлении. Это формат записи HEX чисел в некоторых языках программирования, кажется пошло от  UNIX систем.
Соответственно 0xF800 = F800 = F8  00 = 11111000   00000000 = RRRRR GGG       GGG BBBBB = все биты красного включены (R=RED=красный, G=GREEN=зеленый, B=BLUE=синий), остальные выключены. Здесь единицы в разрядах = уровень яркости в двоичном коде. А получить цвет, например салатовый или зеленый получится только подбором - дисплеи разные. На монитор который ты сейчас смотришь в его драйвере имеется перекодировщик цвета называемый цветовым профилем.
Можно изменять цвет в каждом канале R G B отдельно и потом путем сдвига, сложение по маске по "и" получить необходимые два байта
ivan_fd Дата: Вт, 03.03.2015, 14:33  |                                                                                                                Сообщение # 8
Группа: Модераторы
Ранг:  Специалист
Сообщений: 888
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

В принципе anatol уже Вам написал как можно.
Напишу еще и я.

Код
$define rgb_color_pack(r, g, b) ( r << 11) | ( g << 5) | ( b)

Dim color As Word
Dim colorlow As Byte
Dim colorhi As Byte

main:

   color = rgb_color_pack(31,0,0)
   colorhi = color.HighByte
   colorlow = color.LowByte
    
   
GoTo main


Меня все время преследуют умные мысли...но я быстрее!!!
доцент2 Дата: Вт, 03.03.2015, 18:34  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 316
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

anatol, ivan_fd спасибо! теперь понятно. буду на макетке пробовать.
следующим шагом будет графика....
доцент2 Дата: Вт, 10.03.2015, 19:38  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 316
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

добрался до графики.
для рисования круга использовал кусок от библиотеки Nokia-3310 с небольшой переделкой.
xc = 0
p = 0
X2 = X1
Y2 = Y1
p = 3 - (radius << 1)
While xc <= radius                      'выполняем пока не исполниться условие
      X1 = X2 + xc : Y1 = Y2 + radius
      GoSub Pixsel_Set: GoSub Nokia_Color

      X1 = X2 + xc : Y1 = Y2 - radius
      GoSub Pixsel_Set: GoSub Nokia_Color

      X1 = X2 - xc : Y1 = Y2 + radius
      GoSub Pixsel_Set: GoSub Nokia_Color

      X1 = X2 - xc : Y1 = Y2 - radius
      GoSub Pixsel_Set: GoSub Nokia_Color

      X1 = X2 + radius : Y1 = Y2 + xc
      GoSub Pixsel_Set: GoSub Nokia_Color

      X1 = X2 + radius : Y1 = Y2 - xc
      GoSub Pixsel_Set: GoSub Nokia_Color

      X1 = X2 - radius : Y1 = Y2 + xc
      GoSub Pixsel_Set: GoSub Nokia_Color

      X1 = X2 - radius : Y1 = Y2 - xc
      GoSub Pixsel_Set: GoSub Nokia_Color

      If p < 0 Then
         Inc xc
         p = p + (xc << 2) + 6
      Else
         Inc xc
         Dec radius
         p = p + ((xc - radius) << 2) + 10
      End If
Wend
на экране от Nokia-3310 при маленьком радиусе получается пародия на круг.
на 1616 тоже круг получается с "ушками". подскажите можно от этого избавиться?
за качество картинки извиняюсь.
Прикрепления: 5045435.jpg(170Kb)
anatol Дата: Пт, 13.03.2015, 21:57  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 547
Репутация: 14   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

доцент2, а на бумаге в клеточку слабо нарисовать правильный круг? Что вам эти ушки - народ квадратом Малевича  восхищается и невдомек почему тот квадрат нарисовал. Ему бы вашу задачу - и пропал бы талант даром.
Сообщение отредактировал anatol - Пт, 13.03.2015, 21:58
доцент2 Дата: Пт, 13.03.2015, 23:56  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 316
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

anatol нарисовать на бумаге не проблема.
Проблема вывести на экран нормальный круг, а не эту пародию. Поэтому и прошу помощи.
anatol Дата: Сб, 14.03.2015, 10:33  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 547
Репутация: 14   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

доцент2, я и шутил и не шутил. Чтобы был нормальный круг его надо сначала нарисовать в формате пикселей дисплея (в принципе, в случае симметричности, достаточно части круга, четверти). Отсчитываете квадратики, циркулем проводите окружность, закрашиваете "пиксели" и если нравится на - на дисплей. Подсветка знакоместа производится по формулам из геометрии (X=R*sin a, Y=R*cos a) или из таблиц. При этом надо учесть смещение точки отсчета (угол дисплея). Рассчитывать синусы-косинусы = сожрать хороший кусок памяти. Проще по таблицам (заранее рассчитанным значениям). Учитывая размеры дисплея и "симметричность" синуса и косинуса достаточно через 1 градус (в реале боле дробные значения на малых углах и побольше набольших), выльется это в 45 байт. Или в 128 (для дисплея 256х256) со снятыми, с нарисованной окружности, значениями.
Задача тривиальна, нарисовать ломанной кривой прямую линию.  Великолепно показывает разницу между аналоговым и цифровым мирами. Человеческое восприятие окружающего мира никто не отменял.
А по готовым решениям - я не сторонник их давать (кстати в интернете полно разных решений, только адаптировать). Причина банальна решать чужие задачи самому нет желания, а также  стойкое желание просто направить на какой то путь решения. Свои решения никогда не забываются и приносят массу положительных эмоций.
доцент2 Дата: Сб, 14.03.2015, 14:11  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 316
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

anatol вариантов в инете много, но они в основном на Си. То что смог адаптировать не улучшило рисование круга. Результат тот же или хуже. Попробовал через цикл задавать угол от 0 до 360 и уравнения с cos и sin, но получился просто набор точек на экране (надо еще раз посмотреть...).
anatol (без обид) я думаю, что люди обращаются на форум для обмена решениями, опытом, заготовками, совместным решением каких либо задач, поиска направления решения и т.д. Иначе каждый будет изобретать свой велосипед и ни к чему это не приведет. Представьте себе школу в которой учителя будут говорить: я знаю, но вам не скажу. сами учитесь писать и придумайте таблицу умножения и т.д.
Такими ответами вы снижаете популярность программирования у начинающих.
anatol Дата: Сб, 14.03.2015, 22:25  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 547
Репутация: 14   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

У вас целый сайт в руках.
По этой кнопке http://www.picbasic.ru/dir/  страница ссылок.
Внизу страницы ссылка на этот сайт http://terrarus.ucoz.ru/proton_plus_ide/index.html
в нем есть статья http://terrarus.ucoz.ru/proton_....le.html по рисованию окружности. (если вместо букв абракадабра - включите в кодировке юникод).
К тому же у вас есть целая книга (правда на аглицком) встроенная в Протон.

Я уже полгода не открывал Протон на работе, а дома вообще пока не установлен. Причина простая - ничего создавать не нужно, а на баловство нет времени. Вот когда буду без работы - тогда...
Форум Picbasic.ru » Программирование МК » Proton PicBasic » дисплей Nokia-1616 (работа с дисплеем)
Страница 1 из 212»
Поиск: