Дисплей Nokia 3410 (3310)
Недавно запустил дисплей 3310 - проблема таже - режет верхнюю сстроку.
Прочитав предыдущий пост и сходив по ссылке убедился что проблема не решена и там.
Путем проб выяснил:
1 контроллер поддерживает 102 колонки (экран отображает только 84 остальных не видно)
2 контроллер поддерживает более 48 строк экрана (так как кроме резаного верхнего (0-банка) еще режется и нижний (уже 6 банк))
3 контроллер имеет дополнительные инструкции (выяснилось по ссылке постом выше)
Из этих наблюдений становится ясно, что контроллер стоит не PCD8544 как считается, а какойто поновее.
Поискав контроллеры подходящие по условиям нашел следующие:
- PCF8813 - больше всего подходит
- STE2004 - шото рядом
- UC1602I - еще не пробывал
все они имеют дополнительные команды которые позволяют отображать на экране содержимое с любого места памяти, устанавливать прямую и инверсную адресацию и многое другое.
Определиться что за контроллер всетаки там стоит не получилось - почемуто дополнительные команду у меня както неадекватно работают (кроме инверсной адресации - она рботает как надо).
А так как 3310 наилучший дисплей для микроконтроллера (не вылазит размером экрана за 512 байт) давайте поднатужимся вместе и както решим эту проблему!
Остальные даташиты невлазят в форум по размеру - искать в гугле
Прочитав предыдущий пост и сходив по ссылке убедился что проблема не решена и там.
Путем проб выяснил:
1 контроллер поддерживает 102 колонки (экран отображает только 84 остальных не видно)
2 контроллер поддерживает более 48 строк экрана (так как кроме резаного верхнего (0-банка) еще режется и нижний (уже 6 банк))
3 контроллер имеет дополнительные инструкции (выяснилось по ссылке постом выше)
Из этих наблюдений становится ясно, что контроллер стоит не PCD8544 как считается, а какойто поновее.
Поискав контроллеры подходящие по условиям нашел следующие:
- PCF8813 - больше всего подходит
- STE2004 - шото рядом
- UC1602I - еще не пробывал
все они имеют дополнительные команды которые позволяют отображать на экране содержимое с любого места памяти, устанавливать прямую и инверсную адресацию и многое другое.
Определиться что за контроллер всетаки там стоит не получилось - почемуто дополнительные команду у меня както неадекватно работают (кроме инверсной адресации - она рботает как надо).
А так как 3310 наилучший дисплей для микроконтроллера (не вылазит размером экрана за 512 байт) давайте поднатужимся вместе и както решим эту проблему!
Остальные даташиты невлазят в форум по размеру - искать в гугле
- Вложения
-
- PCF8813.pdf
- (241.29 КБ) 1076 скачиваний
Помучал на досуге 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 для автоматической адресации - былобы ваще хорошо!
Получился такой результат:
При Н= 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 для автоматической адресации - былобы ваще хорошо!
- krolaka
- Нашел транзистор. Понюхал.
- Сообщения: 169
- Зарегистрирован: Пн мар 02, 2009 12:23:37
- Контактная информация:
VenomXP, а чем Fast LCD не устраивает?
я кучу фоток делал етой прогой для монохромного дисплея от нокии
даже шрифт пытался делать но не хватило терпения 
- Вложения
-
- FastLCD.rar
- (63.23 КБ) 920 скачиваний
- Pahan
- Мучитель микросхем
- Сообщения: 487
- Зарегистрирован: Чт ноя 23, 2006 22:47:35
- Контактная информация:
VenomXP писал(а):Где такую прогу достать, которая как у вас на скрине?
Нигде
-
yakuzaa
- Встал на лапы
- Сообщения: 88
- Зарегистрирован: Чт июл 24, 2008 12:35:30
- Контактная информация:
Pahan писал(а):Лежал у меня года 2 дисплейчег от 3310 - никак лапы не доходили. Сегодня вот тоже оживил. У меня строго по даташиту, никаких отклонений.
Это потому, что дисплей у тебя Original Nokia.
Возьми тот, что сейчас продается в магазинах (с двумя полукругами на металлической рамке вверху) и изображение у тебя сместится вверх
А дисплейчики действительно стоящие - я по 50 рублей брал - дешего!
- Pahan
- Мучитель микросхем
- Сообщения: 487
- Зарегистрирован: Чт ноя 23, 2006 22:47:35
- Контактная информация:
yakuzaa писал(а):А дисплейчики действительно стоящие - я по 50 рублей брал - дешего!
Ну NOKIA 6310 мне больше нравицо. И точек больше, и на 1 ногу меньше надо. У него data/command не через ногу идет, а 9 битом в посылке. И есть команда read-modify, можно содержимое видеопамяти прочитать назад. Т.е. как буффер видеопамяти сам дисплей может выступать.
Evgen88 писал(а):и самое вкусное
#b 0_1_y_y_y_y_y_y
добавилось yyyyyy - смещение содержимого экрана по вертикали вверх в точках
При помощи этого смещения лечится обрезаниеверхней строки
- Вложения
-
- MVI_6925.00.zip
- Плавный скролинг текста
- (250.04 КБ) 1019 скачиваний
-
- IMG_6920.jpg
- Как стало
- (60.29 КБ) 1590 скачиваний
-
- IMG_6918.jpg
- Как было
- (60.18 КБ) 1699 скачиваний
VenomXP писал(а):Как добился такого, исходники в студию
Исходник тут нипричем.
Просто в новых дисплеях стоит новый контроллер.
У нового контроллера есть новые команды.
Добавь в свой исходник в облать инициализации дисплея (ну там де контрастность, опорное напряжение устанавливается) следующее:
#b01111111 -> SPI - будет первая строчка на пиксель ниже нужного положения
или
#b01000101 -> SPI - первая строчка пропадет, зато со второй строчки все будет отображатся как надо
Несколькими постами выше я писал какие команды получилось найти методом "Тыка"
http://radiokot.ru/forum/viewtopic.php?p=189466#189466
Найти бы какой контроллер там реально стоит - было бы проще.
- VenomXP
- Грызет канифоль
- Сообщения: 293
- Зарегистрирован: Пн дек 24, 2007 07:09:09
- Контактная информация:
Эм... Я пишу на С, как то пока непонятно куда это именно вставлять
Вот есть такое у меня
Укажите что надо куда вставить?
Вот есть такое у меня
Код: Выделить всё
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 );
}
Укажите что надо куда вставить?
Даташит - библия моя...


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.
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.
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 байта, а не передачей одного массива.
- Pahan
- Мучитель микросхем
- Сообщения: 487
- Зарегистрирован: Чт ноя 23, 2006 22:47:35
- Контактная информация:
Bird55 писал(а):В старых телефонах эти дисплеи работают, скорее всего, из-за того, что, во-первых, эта дополнительная строчка инициализации есть, но старыми дисплеями просто игнорируется.
Врядли. Я пробовал эту команду на своем старом дисплее. Так вот если стоят единицы типа 0_1_1_1_y_y_y_y , то диспей отрубаецо, т.е. изображение на дисплее пропадает вообще. Правда типа этого 0_1_0_0_1_1_1_1 воздействия визуально не оказывают.
Скорее фсего данные действительно передаюцо строками и в начале каждой посылки идут команды set X и set Y.