Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Lcd12864
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
zorromen
Решил написать видеодрайвер с набором всяких там функций...и собрать в отдельном блоке общающимся по SPI....типа а нарисуйка мне квадратик...говорим ей по спи...а она ..на тебе квадратик...или кружечек или даже диагдамму...
так вот проблема с кружочками и кольцами...выходят они не очень..мож есть идеи чтобы они стали круглыми?...если есть идеи какие добавить функции пишите...
bodja74
Чем то подобным prottos занимался,вроде не бесплатный драйвер был,а может щасс и бесплатный smile.gif
Коротче поройтесь по форуму.
Лично себе делал по TWI ,без квадратиков ,просто в качестве специализированного расширителя портов чисто для ЛСД.
prottoss
Цитата(bodja74 @ Nov 21 2006, 23:48) *
Чем то подобным prottos занимался,вроде не бесплатный драйвер был,а может щасс и бесплатный smile.gif
Коротче поройтесь по форуму.
Лично себе делал по TWI ,без квадратиков ,просто в качестве специализированного расширителя портов чисто для ЛСД.
Драйвер остался платным) 100 рублей, ИМХО, для ленивых не большие деньги. Но там нет кружочков и эллипсов - там есть куча быстрых скроллингов и текста из ПП и из внешней ЕЕПРОМ СПИ...

По поводу кружочков - поиск в гугле лучше, чем ждать советов на форуме. Наберите типа "Алгоритм вывода окружности С" и будет Вам счастье
zorromen
у тебя по TWI как я понял.
там есть куча быстрых скроллингов и текста из ПП и из внешней ЕЕПРОМ СПИ...
извеняюсь а что ты имеешь в виду под скроллингом и что такое ПП... и что она умеет если не секрет.....
какие функции тама...особенно с текстом...
у меня просто больше на графику акцент....хотя и с текстом интересно...извеняюсь просто за что 100 рублей? может чтота стоящее?
prottoss
Цитата(zorromen @ Nov 22 2006, 01:21) *
у тебя по TWI как я понял.
там есть куча быстрых скроллингов и текста из ПП и из внешней ЕЕПРОМ СПИ...
извеняюсь а что ты имеешь в виду под скроллингом и что такое ПП... и что она умеет если не секрет.....
какие функции тама...особенно с текстом...
у меня просто больше на графику акцент....хотя и с текстом интересно...извеняюсь просто за что 100 рублей? может чтота стоящее?
Вообще то у меня под подписью ссылка на мою страничку в сети))) Но уж, если лень мышкой тыкнуть вот ссылка, там все написанно http://pinokio3000.narod.ru/sourches/sed1520.htm
zorromen
Про ссылку не знал... а тайминги это для экрана 122х32?
1. Очистка всего экрана – 1,7 мс;
2. Закраска всего экрана – 1,86 мс;
3. Инвертирование всего экрана – 1,89 мс
для 128х64 пойдет?(не тайминги а программа без особых изменений)
мне чесно понравился размер!..но это без знакогенератора..ведь массив знаков место занимает немалое...это скока еще места...
канечно спасибо за новые идеи...хотя и размер будет больше (у меня)...но это ведь внешний видеодрайвер...и можна подзавязку его заполнить всякими функциями...

странно у тебя очистка всего экрана занимает почти столько сколько и инвертирование всего экрана...
prottoss
Цитата(zorromen @ Nov 22 2006, 02:02) *
Про ссылку не знал... а тайминги это для экрана 122х32?
да

Цитата(zorromen @ Nov 22 2006, 02:02) *
для 128х64 пойдет?(не тайминги а программа без особых изменений)
Так как команды, в принципе, одинаковые, то, человеку, хорошо знакомому с Си переделать под 128х64, ИМХО, большого труда не стоит. Кстати, на странице по ссылке выше, есть и безвозмездно(те даром)))) предлагаемый драйвер с описателями всех команд ЖКИ 122х32 на базе SED1520. Можете сравнить...

Цитата(zorromen @ Nov 22 2006, 02:02) *
мне чесно понравился размер!..но это без знакогенератора..ведь массив знаков место занимает немалое...это скока еще места...
канечно спасибо за новые идеи...хотя и размер будет больше (у меня)...но это ведь внешний видеодрайвер...и можна подзавязку его заполнить всякими функциями...
ИМХО лучше применить контроллер подешевле, а все константы хранить во внешней ЕЕПРОМе. Может быть М48 + 25256А или 45DBxxx

Цитата(zorromen @ Nov 22 2006, 02:02) *
странно у тебя очистка всего экрана занимает почти столько сколько и инвертирование всего экрана...
Так как экран графический, в любом случае приходится считывать весь байт, потом накладывать маску поля, с которым мы работаем, потом производить модификацию (инверсия или закраска, какая разница?), потом возвращать модифицированный байт на место
zorromen
Панятна...у тебя одна функция на очистку и на инверсию...но ведь на очистку целого экрана ненадо считывать байт...а просто записать 0х00, а это ведь экономия времени в 2 раза.
prottoss
Цитата(zorromen @ Nov 22 2006, 02:32) *
Панятна...у тебя одна функция на очистку и на инверсию...но ведь на очистку целого экрана ненадо считывать байт...а просто записать 0х00, а это ведь экономия времени в 2 раза.
Конечно. Можно написать отдельную функцию, которая будет очищать весь экран. Это тривиальная задача. Но если есть необходимость закрачить не весь экран а какую то область, заданную координатами? Для такой функции и даны тайминги.

Функция имеет вид LCD_SetScreen(x1, x2, y1, y2, option), где x1,y1 - верхний левый угол в пикселах, x2,y2 - нижний правый, option - действие (закраска, очистка, инверсия).

Кстати, здесь, на форуме, где то были исходники, не поленитесь, поищите. Но скроллинга и вывода графики там, по моему нет
zorromen
Небуду искать потому что я сам уже написал и пролне быструю...у тебя видимо происходит чтение байта из экрана когда ты пишешь 0 или 0хFF а зачем это потеря времени...я сделал проще дал условие если закрашиваемая или очищаемая область помещается в одной странице то байт не читаем из экрана..т.е. экономия и универсальность........
prottoss
Цитата(zorromen @ Nov 22 2006, 03:05) *
Небуду искать потому что я сам уже написал и пролне быструю...у тебя видимо происходит чтение байта из экрана когда ты пишешь 0 или 0хFF а зачем это потеря времени...я сделал проще дал условие если закрашиваемая или очищаемая область помещается в одной странице то байт не читаем из экрана..т.е. экономия и универсальность........
нюню... Если изменяемая область, допустим находится одном байте, к примеру с бита №3 по бит №5. Пишем в этот байт, а что за пределами этих битов нам по барабану... Круто... Ваши проекты, дяденька, только в космос... На солнце....Ночью...
bodja74
>>закрашиваемая или очищаемая область помещается в одной странице
Тоесть влазит в 512байт ,тоесть в оперативку м8\м16,тоесть читать можно из РАМ а не из ЛСД. smile.gif

ЗЫ у МТ12864 две страницы.
prottoss
Цитата(bodja74 @ Nov 22 2006, 03:32) *
>>закрашиваемая или очищаемая область помещается в одной странице
Тоесть влазит в 512байт ,тоесть в оперативку м8\м16,тоесть читать можно из РАМ а не из ЛСД. smile.gif
ЗЫ у МТ12864 две страницы.


Значит так: в МТ12864 есть 8 (восемь) страниц smile.gif , а не две, распередленных поровну между двумя кристаллами. Один управляет левой стороной, другой - как вы догадались, правой. У каждого кристалла таким образом четыре страницы. Каждая страница шириной в 64 пиксела и высотой в 8, т.о. байты в одной странице размещены вертикально.

Я написал свой драйвер так, что при желании его можно впихнуть даже в тини2313. ИМХО, использовать под ЖКИ 512 байт (для 122х32, для 128х64 - 1024 кБайт) расточительно, выйгрыш же по скорости (ИМХО) не значительный, поверьте - опыт есть)))
bodja74
Цитата(prottoss @ Nov 21 2006, 23:58) *
Значит так: в МТ12864 есть 8 (восемь) страниц smile.gif , а не две, распередленных поровну между двумя кристаллами. Один управляет левой стороной, другой - как вы догадались, правой. У каждого кристалла таким образом четыре страницы. Каждая страница шириной в 64 пиксела и высотой в 8, т.о. байты в одной странице размещены вертикально.

Неа,то что вы называете левой\правой стороной -называется страницами
А то что вы называете страницей,является строчкой.
Даже если рассуждать логичеки ,оно так и есть.
Цитата
Я написал свой драйвер так, что при желании его можно впихнуть даже в тини2313. ИМХО, использовать под ЖКИ 512 байт (для 122х32, для 128х64 - 1024 кБайт) расточительно, выйгрыш же по скорости (ИМХО) не значительный, поверьте - опыт есть)))

Согласен полностью,но подобное я к сожалению не смог применить для своего драйвера,мне нужно было принять данные по шине на приличной скорости не дожидаясь вывода на ЛСД,тоесть буфером служила РАМ.
prottoss
Цитата(bodja74 @ Nov 22 2006, 04:33) *
Неа,то что вы называете левой\правой стороной -называется страницами
А то что вы называете страницей,является строчкой.
Даже если рассуждать логичеки ,оно так и есть.
Да Бог с вами))) Называйте так, как Вам нравится, я называю так, как написанно в даташите на MT12864
vooon
Порылся нашел алгоритмы для расования линий и окружностей
что такое 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;
    }
}
prottoss
Цитата(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 не из быстрых...
zorromen
Ура...щас проверим...спасибо за кружечки.....
at90
Вот выкладываю библиотеку GLCD для контроллера ks0108. Такой вроде стоит в MT12864.
Там есть куча функций рисования и отображения шрифтов. Может пригодится!
zorromen
Огромное спасибо. это просто супер java script:emoticon(':a14:', 'smid_4')
zorromen
тоже метод...я использую...
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
Сколько времени уходит на рисование точки?
Это на 12864
Также не указано, что при чтении информации из внутренней памяти индикатора нужно делать "пустой" цикл чтения - после команды установки адреса первый цикл чтения не выдаст полезной информации, реальные данные будут выданы только начиная со второго цикла чтения.

А для 12232 нада делать повторное чтение?
prottoss
Цитата(zorromen @ Nov 22 2006, 23:13) *
А для 12232 нада делать повторное чтение?
Да
zorromen
Уважаемый 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 мкс?
prottoss
Цитата(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 мс...
zorromen
Обрашения но...выполнение одной операции занимает около 10мкс...это невсегда есть в даташите..но это верно.даже на сайте МЕЛТ есть написано про это.я проверял когда сам выставлял тайминги..иначе система занята...или проверяй Busy тоже около того времени...у тяже есть жтаг...пасматри сам...если время меньше этого 10мкс то глюки наблюдаются...За это я отвечаю...

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


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

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

3. Везде смотрел, под столом, под кроватью, в холодильнике - житага нигде нет(((
zorromen
На твоем сайте я вижу мегу16 ... и что влом собрать жтаг... копейки стоит...
я собрал и поэтому и говорю про время..

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

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

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

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

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

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

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

Ну вот ... и ответ... на мойже и вопрос)))
То что в 12864 нада ждать окончания операции...
Так что батенька учтите это в будущих разработках...
bodja74
Молодец ,prottos, давно так не смеялся . smile.gif :D

А лучше проверять флаг занятости,сколько можно выжать по скорости ,столько и будет,
хотя 10милисекунд это уже 100 обновлений в сек,кристаллы не будут успевать разворачиватся,
я приходилось почти постоянно "тормозить" загрузку картинки на ЛСД
zorromen
Фронт разворота =100 мсек... вот и выходит не чаще 5 кадров в сек...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.