реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Lcd12864, Какие есть идеи...или пишем видеодрайвер...
vooon
сообщение Nov 22 2006, 01:21
Сообщение #16


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401



Порылся нашел алгоритмы для расования линий и окружностей
что такое glcd_put_pixel(x, y, color); думаю понятно smile.gif (color != 0 - черная точка)

Код
/*************************************************************************
Рисование 8-связной развертки отрезка методом Брэзенхема

Начало в точке (x1,y1), конец в (x2,y2)
*************************************************************************/
void glcd_line(int x1, int y1, int x2, int y2,unsigned char color)
{
    int x;
    int y;
    int dx;
    int dy;
    int sx;
    int sy;
    int z;
    int e;
    int i;
    bit ch;

    x = x1;
    y = y1;
    dx = abs(x2-x1);
    dy = abs(y2-y1);
    sx = sign((double)(x2-x1));
    sy = sign((double)(y2-y1));
    if( dx==0&&dy==0 )
    {
        glcd_put_pixel(x1, y1, color);
        return;
    }
    if( dy>dx )
    {
        z = dx;
        dx = dy;
        dy = z;
        ch = true;
    }
    else
    {
        ch = false;
    }
    e = 2*dy-dx;
    i = 1;
    do
    {
        glcd_put_pixel(x, y, color);
        while(e>=0)
        {
            if( ch )
            {
                x += sx;
            }
            else
            {
                y += sy;
            }
            e -= 2*dx;
        }
        if( ch )
        {
            y += sy;
        }
        else
        {
            x += sx;
        }
        e += 2*dy;
        ++i;
    }
    while(i<=dx);
    glcd_put_pixel(x, y, color);
}

/*************************************************************************
Рисование развертки круга методом Брэзенхема

Центр в точке (xc, yc), радиус r.
*************************************************************************/
void glcd_circle(int xc, int yc, int r,char color)
{
    int x;
    int y;
    int d;

    x = 0;
    y = r;
    d = 3-2*r;
    while(y>=x)
    {
        glcd_put_pixel((x+xc), (y+yc), color);
        glcd_put_pixel((x+xc), (-y+yc), color);
        glcd_put_pixel((-x+xc), (y+yc), color);
        glcd_put_pixel((-x+xc), (-y+yc), color);
        glcd_put_pixel((y+xc), (x+yc), color);
        glcd_put_pixel((y+xc), (-x+yc), color);
        glcd_put_pixel((-y+xc), (x+yc), color);
        glcd_put_pixel((-y+xc), (-x+yc), color);
        
        if( d<0 )d += 4*x+6;
        else{
            d += 4*(x-y)+10;
            --y;
        }
        ++x;
    }
}
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 22 2006, 01:30
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(vooon @ Nov 22 2006, 05:21) *
Порылся нашел алгоритмы для расования линий и окружностей...
Код
/*************************************************************************
Рисование развертки круга методом Брэзенхема

Центр в точке (xc, yc), радиус r.
*************************************************************************/
void glcd_circle(int xc, int yc, int r,char color)
{
    int x;
    int y;
    int d;

    x = 0;
    y = r;
    d = 3-2*r;
    while(y>=x)
    {
        glcd_put_pixel((x+xc), (y+yc), color);
        glcd_put_pixel((x+xc), (-y+yc), color);
        glcd_put_pixel((-x+xc), (y+yc), color);
        glcd_put_pixel((-x+xc), (-y+yc), color);
        glcd_put_pixel((y+xc), (x+yc), color);
        glcd_put_pixel((y+xc), (-x+yc), color);
        glcd_put_pixel((-y+xc), (x+yc), color);
        glcd_put_pixel((-y+xc), (-x+yc), color);
        
        if( d<0 )d += 4*x+6;
        else{
            d += 4*(x-y)+10;
            --y;
        }
        ++x;
    }
}
Вот хоть один человек в тему ответил smile.gif

...Да уж, функция glcd_put_pixel не из быстрых...


--------------------
Go to the top of the page
 
+Quote Post
zorromen
сообщение Nov 22 2006, 08:17
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Ура...щас проверим...спасибо за кружечки.....

Сообщение отредактировал zorromen - Nov 22 2006, 08:19
Go to the top of the page
 
+Quote Post
at90
сообщение Nov 22 2006, 08:26
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 866
Регистрация: 31-03-05
Из: Краснодар
Пользователь №: 3 814



Вот выкладываю библиотеку GLCD для контроллера ks0108. Такой вроде стоит в MT12864.
Там есть куча функций рисования и отображения шрифтов. Может пригодится!
Прикрепленные файлы
Прикрепленный файл  glcd_ks0108_v11.zip ( 14.65 килобайт ) Кол-во скачиваний: 185
 


--------------------
<<Первая производная от чужой идеи - уже твоя идея.>>
Go to the top of the page
 
+Quote Post
zorromen
сообщение Nov 22 2006, 08:26
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Огромное спасибо. это просто супер java script:emoticon(':a14:', 'smid_4')
Go to the top of the page
 
+Quote Post
zorromen
сообщение Nov 22 2006, 08:52
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



тоже метод...я использую...
void LCD_DrawLine(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2, unsigned char set)
{
int x,y,count,xs,ys,xm,ym;

x = (int)x1; y = (int)y1;
xs = (int)x2 - (int)x1; ys = (int)y2 - (int)y1;
if(xs < 0) xm = -1; else if(xs > 0) xm = 1; else xm = 0;
if(ys < 0) ym = -1; else if(ys > 0) ym = 1; else ym = 0;
if(xs < 0) xs = -xs;
if(ys < 0) ys = -ys;

LCD_SetDot ((unsigned char)x,(unsigned char)y, 1);

if(xs > ys) // Ëèíèÿ < 45 ãðàäóñîâ
{
count = -(xs/2);
while(x != x2)
{
count = count + ys;
x = x + xm;
if(count > 0)
{
y = y + ym;
count = count - xs;
}
LCD_SetDot ((unsigned char)x,(unsigned char)y, set);
}
}
else // Ëèíèÿ >= 45 ãðàäóñîâ
{
count = -(ys/2);
while(y != y2)
{
count = count + xs;
y = y + ym;
if(count > 0)
{
x = x + xm;
count = count - ys;
}
LCD_SetDot ((unsigned char)x,(unsigned char)y, set);
}
}
}

Сообщение отредактировал zorromen - Nov 22 2006, 08:54
Go to the top of the page
 
+Quote Post
zorromen
сообщение Nov 22 2006, 19:13
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Сколько времени уходит на рисование точки?
Это на 12864
Также не указано, что при чтении информации из внутренней памяти индикатора нужно делать "пустой" цикл чтения - после команды установки адреса первый цикл чтения не выдаст полезной информации, реальные данные будут выданы только начиная со второго цикла чтения.

А для 12232 нада делать повторное чтение?

Сообщение отредактировал zorromen - Nov 22 2006, 19:59
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 22 2006, 20:14
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(zorromen @ Nov 22 2006, 23:13) *
А для 12232 нада делать повторное чтение?
Да


--------------------
Go to the top of the page
 
+Quote Post
zorromen
сообщение Nov 22 2006, 22:07
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Уважаемый prottoss не хачу надоедать...но придется...у тебя написано что для ачистки экрана надо 1.8 мсек...но я посчитал с учетом того что для выполнения одной операции требуется 10мксек...
122 на 32...значит есть 4 страницы...и как я вижу... активным может только один чип...
значит для каждой страницы мы выполняем такую последовательность

1.Установка Страницы =10мкс
2.Установка Адресса на ноль...=(10мкс)В уме держим то свойство что после записи байта происходит инкремент адресса в лцд
3. выводим 0х00 для случая очистки или 255 для закрашивания 122 раза*10мкс
и все это дело еще 3 раза всего повторить
итого 4(10мкс+10мкс+122*10мкс)=4960мкс это для условия когда активный только один чип
если одновременно выводить на оба то время уменьшим вдвое...Так вот я не пойму как время у тебя меньше теоретического предела?
неужели экран на обработку одной операции тратит около 4 мкс?
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 24 2006, 14:55
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(zorromen @ Nov 23 2006, 02:07) *
Уважаемый prottoss не хачу надоедать...но придется...у тебя написано что для ачистки экрана надо 1.8 мсек...но я посчитал с учетом того что для выполнения одной операции требуется 10мксек...
122 на 32...значит есть 4 страницы...и как я вижу... активным может только один чип...
значит для каждой страницы мы выполняем такую последовательность

1.Установка Страницы =10мкс
2.Установка Адресса на ноль...=(10мкс)В уме держим то свойство что после записи байта происходит инкремент адресса в лцд
3. выводим 0х00 для случая очистки или 255 для закрашивания 122 раза*10мкс
и все это дело еще 3 раза всего повторить
итого 4(10мкс+10мкс+122*10мкс)=4960мкс это для условия когда активный только один чип
если одновременно выводить на оба то время уменьшим вдвое...Так вот я не пойму как время у тебя меньше теоретического предела?
неужели экран на обработку одной операции тратит около 4 мкс?
Я не знаю, откуда Вы взяли 10 мкс? Все считается очень просто:

Цикл одного обращения к ЖКИ равен 1 мкс или более - это из даташита... 488 байтов ОЗУ ЖКИ (122 байта х 4 страницы) - это 488 мкс. Умножаем это число на два (нам надо прочитать-модифицировать-записать), получаем 976 мкс. Ну и плюс наложение масок, установка страниц, установка стартовых столбцов - вот и получается примерно 1,8 мс...


--------------------
Go to the top of the page
 
+Quote Post
zorromen
сообщение Nov 24 2006, 19:22
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Обрашения но...выполнение одной операции занимает около 10мкс...это невсегда есть в даташите..но это верно.даже на сайте МЕЛТ есть написано про это.я проверял когда сам выставлял тайминги..иначе система занята...или проверяй Busy тоже около того времени...у тяже есть жтаг...пасматри сам...если время меньше этого 10мкс то глюки наблюдаются...За это я отвечаю...

Цикл одного обращения к ЖКИ равен 1 мкс это для Busy какрас.....
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 24 2006, 20:17
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(zorromen @ Nov 24 2006, 23:22) *
Обрашения но...выполнение одной операции занимает около 10мкс...это невсегда есть в даташите..но это верно.даже на сайте МЕЛТ есть написано про это.я проверял когда сам выставлял тайминги..иначе система занята...или проверяй Busy тоже около того времени...у тяже есть жтаг...пасматри сам...если время меньше этого 10мкс то глюки наблюдаются...За это я отвечаю...
Цикл одного обращения к ЖКИ равен 1 мкс это для Busy какрас.....


1. Можете считать хоть 100 секунд - мне от этого не жарко не холодно.

2. Какая система занята? Которая колес объелась? Не мудрено, что глюки наблюдаются...

3. Везде смотрел, под столом, под кроватью, в холодильнике - житага нигде нет(((


--------------------
Go to the top of the page
 
+Quote Post
zorromen
сообщение Nov 24 2006, 21:03
Сообщение #28


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



На твоем сайте я вижу мегу16 ... и что влом собрать жтаг... копейки стоит...
я собрал и поэтому и говорю про время..

Рекомендации по применению ЖК индикаторов производства компании МЭЛТ

Работают ли ЖК индикаторы с высокоскоростными контроллёрами? Какова максимальная скорость заполнения?

Да, работают. Но надо не забывать про времена предустановки и удержания сигналов.

Максимальная скорость записи в индикаторы:
MT-12232 - 0.5-1 млн. байтов/сек (4-8 млн. точек/сек);
MT-12864 - 100-130 тысяч байтов/сек (1 млн. точек/сек).

Большие (из указанных) скорости достигаются при опросе готовности индикаторов - за исключением индикаторов MT-12232, для которых выгоднее выдержать паузу между сигналами E, чем опрашивать готовность индикатора.

Особенности ЖК индикатора MT-12864.

В нашей документации на ЖК индикатор забыто указание на минимальное время паузы между циклами обращения к индикатору: 10 мкс. Можно или выдерживать данное время, или проверять флаг занятости индикатора.

Ну вот ... и ответ... на мойже и вопрос)))
То что в 12864 нада ждать окончания операции...
Так что батенька учтите это в будущих разработках...
Go to the top of the page
 
+Quote Post
bodja74
сообщение Nov 24 2006, 21:05
Сообщение #29


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Молодец ,prottos, давно так не смеялся . smile.gif :D

А лучше проверять флаг занятости,сколько можно выжать по скорости ,столько и будет,
хотя 10милисекунд это уже 100 обновлений в сек,кристаллы не будут успевать разворачиватся,
я приходилось почти постоянно "тормозить" загрузку картинки на ЛСД

Сообщение отредактировал bodja74 - Nov 24 2006, 21:17
Go to the top of the page
 
+Quote Post
zorromen
сообщение Nov 24 2006, 21:47
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Фронт разворота =100 мсек... вот и выходит не чаще 5 кадров в сек...
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01525 секунд с 7
ELECTRONIX ©2004-2016