Страница 5 из 15
Добавлено: Пн мар 09, 2009 03:14:44
Evgen88
Недавно запустил дисплей 3310 - проблема таже - режет верхнюю сстроку.
Прочитав предыдущий пост и сходив по ссылке убедился что проблема не решена и там.
Путем проб выяснил:
1 контроллер поддерживает 102 колонки (экран отображает только 84 остальных не видно)
2 контроллер поддерживает более 48 строк экрана (так как кроме резаного верхнего (0-банка) еще режется и нижний (уже 6 банк))
3 контроллер имеет дополнительные инструкции (выяснилось по ссылке постом выше)
Из этих наблюдений становится ясно, что контроллер стоит не PCD8544 как считается, а какойто поновее.
Поискав контроллеры подходящие по условиям нашел следующие:
- PCF8813 - больше всего подходит
- STE2004 - шото рядом
- UC1602I - еще не пробывал
все они имеют дополнительные команды которые позволяют отображать на экране содержимое с любого места памяти, устанавливать прямую и инверсную адресацию и многое другое.
Определиться что за контроллер всетаки там стоит не получилось - почемуто дополнительные команду у меня както неадекватно работают (кроме инверсной адресации - она рботает как надо).
А так как 3310 наилучший дисплей для микроконтроллера (не вылазит размером экрана за 512 байт) давайте поднатужимся вместе и както решим эту проблему!
Остальные даташиты невлазят в форум по размеру - искать в гугле
Добавлено: Пн мар 09, 2009 16:08:18
krolaka
Evgen88, да польностю соглясен в контролер записывается 102 по х но отображается лиш часть у меня ето 96 пикселей у меня от 3410

и как выянилось там контролер точно PCF8812 или аналогичный OM6206

с работой дисплея уже разобрался только осталось как нить либу поправить

Добавлено: Вт мар 10, 2009 01:57:41
Evgen88
Помучал на досуге 3310 на предмет зарезервированных команд (зарезервированых для PCD8544)
Получился такой результат:
При Н= 0 или 1
#b 0_0_1_MX_MY_PD_V_H
добавились МХ - инверсия адресации по Х
МУ - инверсия адресации по У
остальное по даташиту
При Н=0 - ничего ни нашаманил
При Н=1
#b 0_0_0_0_1_DO_0_0
добавились DO - инверсия байта (меняется очередность записи битов в LCD (символы зеркалятся по вертикали)
и самое вкусное

#b 0_1_y_y_y_y_y_y
добавилось yyyyyy - смещение содержимого экрана по вертикали вверх в точках
При помощи этого смещения лечится обрезание

верхней строки
Есть 2 варианта:
1 сдвигаем картинку на 5 пикселей вверх, при этом прячется нулевой банк а снизу появляется 6 (недостаток - придется за начало экрана принимать не нулевой адрес а адрес первого банка)
2 сдвигаем картинку вверх на максимально возможное число 63, при этом происходит цикличнй сдвиг через всю память и первая строчка (нулевой банк) оказывается в начале экрана , целая нерезанная (недостаток - по ходу оказалось что первая строчка на 1 пиксел недотягивается до своего места а значит сверху (над нулевым банком) остается полоска в 1 пиксел и соответственно внизу 6 строчка (5 банк) обрезается снизу на 1 пиксел)
Такие извращения с командами не объясняют почему новые дисплеи адекватно работают в старых телефонах. Всетаки должна быть правильная последовательность инициализации дисплея для коректной работы при любых вариантах контроллеров LCD.
Продолжаем искать!
З.Ы. Интересная возможность такого смещения - простой способ организовать плавную прокрутку, например для удобного чтения текста.
З.З.Ы. Эх! найти бы способ как ограничить координаты по Х до 84 для автоматической адресации - былобы ваще хорошо!
Добавлено: Вт мар 10, 2009 20:31:07
Pahan
Лежал у меня года 2 дисплейчег от 3310 - никак лапы не доходили. Сегодня вот тоже оживил. У меня строго по даташиту, никаких отклонений.

Добавлено: Вт мар 10, 2009 21:19:34
VenomXP
Pahan писал(а):Лежал у меня года 2 дисплейчег от 3310 - никак лапы не доходили. Сегодня вот тоже оживил. У меня строго по даташиту, никаких отклонений.

Где такую прогу достать, которая как у вас на скрине? Если есть возможность выложите сюда плиз.
Добавлено: Вт мар 10, 2009 21:28:27
krolaka
VenomXP, а чем Fast LCD не устраивает?

я кучу фоток делал етой прогой для монохромного дисплея от нокии

даже шрифт пытался делать но не хватило терпения

Добавлено: Вт мар 10, 2009 21:54:15
Pahan
VenomXP писал(а):Где такую прогу достать, которая как у вас на скрине?
Нигде

Это я сам писал. Давно. Под дисплей от 6510, там 96x65 и протокол другой. Щас тока протокол переписал и уменьшил размер экрана. А зачем она тебе? Я ее делал тока чтоб дисплей проверить, фсеж на дельфях удобнее писать, чем на МК. А потом уж и к МК подключать. Если очень надо, могу конечно скинуть, но толку от неё не много - только если для проверки работоспособности. Т.е. это не редактор картинок (хотя в принципе можно), а прога для проверки LCD.
Добавлено: Ср мар 11, 2009 09:01:33
VenomXP
Благодарю за советы, да действительно, что то я забыл про FastLCD.

Добавлено: Пт мар 13, 2009 16:30:00
yakuzaa
Pahan писал(а):Лежал у меня года 2 дисплейчег от 3310 - никак лапы не доходили. Сегодня вот тоже оживил. У меня строго по даташиту, никаких отклонений.

Это потому, что дисплей у тебя Original Nokia.
Возьми тот, что сейчас продается в магазинах (с двумя полукругами на металлической рамке вверху) и изображение у тебя сместится вверх
А дисплейчики действительно стоящие - я по 50 рублей брал - дешего!
Добавлено: Пт мар 13, 2009 17:39:42
Pahan
yakuzaa писал(а):А дисплейчики действительно стоящие - я по 50 рублей брал - дешего!
Ну NOKIA 6310 мне больше нравицо. И точек больше, и на 1 ногу меньше надо. У него data/command не через ногу идет, а 9 битом в посылке. И есть команда read-modify, можно содержимое видеопамяти прочитать назад. Т.е. как буффер видеопамяти сам дисплей может выступать.
Добавлено: Пт мар 13, 2009 21:02:02
Evgen88
Evgen88 писал(а):
и самое вкусное

#b 0_1_y_y_y_y_y_y
добавилось yyyyyy - смещение содержимого экрана по вертикали вверх в точках
При помощи этого смещения лечится обрезание

верхней строки
Добавлено: Пт мар 13, 2009 21:38:37
VenomXP
Как добился такого, исходники в студию

Добавлено: Пт мар 13, 2009 22:02:34
Evgen88
VenomXP писал(а):Как добился такого, исходники в студию

Исходник тут нипричем.
Просто в новых дисплеях стоит новый контроллер.
У нового контроллера есть новые команды.
Добавь в свой исходник в облать инициализации дисплея (ну там де контрастность, опорное напряжение устанавливается) следующее:
#b01111111 -> SPI - будет первая строчка на пиксель ниже нужного положения
или
#b01000101 -> SPI - первая строчка пропадет, зато со второй строчки все будет отображатся как надо
Несколькими постами выше я писал какие команды получилось найти методом "Тыка"
http://radiokot.ru/forum/viewtopic.php?p=189466#189466
Найти бы какой контроллер там реально стоит - было бы проще.
Добавлено: Пт мар 13, 2009 22:21:40
VenomXP
Эм... Я пишу на С, как то пока непонятно куда это именно вставлять
Вот есть такое у меня
Код: Выделить всё
void LcdInit ( void )
{
static byte FirstInit = TRUE;
// Pull-up on reset pin.
PORTB |= LCD_RST_PIN;
// Set output bits on port B.
DDRB |= LCD_RST_PIN | LCD_DC_PIN | LCD_CE_PIN | SPI_MOSI_PIN | SPI_CLK_PIN | LCD_POWER;
PORTB |= LCD_POWER;
Delay();
// Toggle display reset pin.
PORTB &= ~LCD_RST_PIN;
Delay();
PORTB |= LCD_RST_PIN;
// Enable SPI port: No interrupt, MSBit first, Master mode, CPOL->0, CPHA->0, Clk/4
SPCR = 0x50;
// Disable LCD controller
PORTB |= LCD_CE_PIN;
LcdSend( 0x21, LCD_CMD ); // LCD Extended Commands.
LcdSend( 0xC8, LCD_CMD ); // Set LCD Vop (Contrast).
LcdSend( 0x06, LCD_CMD ); // Set Temp coefficent.
LcdSend( 0x13, LCD_CMD ); // LCD bias mode 1:48.
LcdSend( 0x20, LCD_CMD ); // LCD Standard Commands, Horizontal addressing mode.
LcdSend( 0x0C, LCD_CMD ); // LCD in normal mode.
if (FirstInit == TRUE)
{
LoWaterMark = LCD_CACHE_SIZE;
HiWaterMark = 0x00;
LcdClear();
FirstInit = FALSE;
}
else
{
LoWaterMark = 0;
HiWaterMark = LCD_CACHE_SIZE;
}
LcdUpdate();
}
void LcdContrast ( byte contrast )
{
/* LCD Extended Commands. */
LcdSend( 0x21, LCD_CMD );
/* Set LCD contrast level. */
LcdSend( 0x80 | contrast, LCD_CMD );
/* LCD Standard Commands, horizontal addressing mode. */
LcdSend( 0x20, LCD_CMD );
}
Укажите что надо куда вставить?
Добавлено: Пт мар 13, 2009 22:47:38
Evgen88
LcdSend( 0x21, LCD_CMD ); // LCD Extended Commands.
LcdSend( 0xC8, LCD_CMD ); // Set LCD Vop (Contrast).
LcdSend( 0x06, LCD_CMD ); // Set Temp coefficent.
LcdSend( 0x13, LCD_CMD ); // LCD bias mode 1:48.
LcdSend( 0x7F, LCD_CMD); // это для варианта 1
LcdSend( 0x45, LCD_CMD); // это вариант 2 (втавь шото одно)
LcdSend( 0x20, LCD_CMD ); // LCD Standard Commands, Horizontal addressing mode.
LcdSend( 0x0C, LCD_CMD ); // LCD in normal mode.
Добавлено: Пт мар 13, 2009 22:59:31
VenomXP
Бесконечно благодарен.

Добавлено: Пт мар 13, 2009 23:04:23
Evgen88
VenomXP писал(а):Бесконечно благодарен.

Ты проверил на своем LCD?
Работает?
Добавлено: Пт мар 13, 2009 23:25:02
VenomXP
Да, вроде что то есть, пока толком не пойму, но все четко и нигде сверху не пропадает ниче, тестить завтра дальше буду.
Добавлено: Вс мар 15, 2009 08:49:44
Bird55
Evgen88 писал(а):
и самое вкусное

#b 0_1_y_y_y_y_y_y
добавилось yyyyyy - смещение содержимого экрана по вертикали вверх в точках
При помощи этого смещения лечится обрезание

верхней строки
Есть 2 варианта:
1 сдвигаем картинку на 5 пикселей вверх, при этом прячется нулевой банк а снизу появляется 6 (недостаток - придется за начало экрана принимать не нулевой адрес а адрес первого банка)
2 сдвигаем картинку вверх на максимально возможное число 63, при этом происходит цикличнй сдвиг через всю память и первая строчка (нулевой банк) оказывается в начале экрана , целая нерезанная (недостаток - по ходу оказалось что первая строчка на 1 пиксел недотягивается до своего места а значит сверху (над нулевым банком) остается полоска в 1 пиксел и соответственно внизу 6 строчка (5 банк) обрезается снизу на 1 пиксел)
Такие извращения с командами не объясняют почему новые дисплеи адекватно работают в старых телефонах. Всетаки должна быть правильная последовательность инициализации дисплея для коректной работы при любых вариантах контроллеров LCD.
Продолжаем искать!
З.Ы. Интересная возможность такого смещения - простой способ организовать плавную прокрутку, например для удобного чтения текста.
З.З.Ы. Эх! найти бы способ как ограничить координаты по Х до 84 для автоматической адресации - былобы ваще хорошо!
Evgen88, большое спасибо, за проделанную работу.
Все отлично работает, я использовал 1-й вариант.
За основу взял вот этот
драйвер, исправив в нем процедуру инициализации и сброса кеша на ЖКИ.
В старых телефонах эти дисплеи работают, скорее всего, из-за того, что, во-первых, эта дополнительная строчка инициализации есть, но старыми дисплеями просто игнорируется. А во-вторых, заполнение памяти, видимо, организовано по-строчно, по 84 байта, а не передачей одного массива.
Добавлено: Вс мар 15, 2009 20:27:34
Pahan
Bird55 писал(а):В старых телефонах эти дисплеи работают, скорее всего, из-за того, что, во-первых, эта дополнительная строчка инициализации есть, но старыми дисплеями просто игнорируется.
Врядли. Я пробовал эту команду на своем старом дисплее. Так вот если стоят единицы типа 0_1_1_1_y_y_y_y , то диспей отрубаецо, т.е. изображение на дисплее пропадает вообще. Правда типа этого 0_1_0_0_1_1_1_1 воздействия визуально не оказывают.
Скорее фсего данные действительно передаюцо строками и в начале каждой посылки идут команды set X и set Y.