тогда бы числа и по другой координате рядом встретилось
240 239 00 EF
320 319 01 3F
360 359 01 67
400 399 01 8F
432 431 01 AF
480 479 01 DF
640 639 02 7F
800 799 03 1F
еще один из вариантов , принудительно повыбиратьь иниты в библиотеках UTFT, adafruit , adafruit LG4535 , .... MCUfriend_kvb .
в UTFT и так вручную выбирать надо, предварительно в memorysaver.h закоментить все disable (для ардуины меги памяти хватит на все активированные иниты) , пробовать и старые и новые версии (в новых вырезана поддержка уже старых и редких контроллерв)
// попробуйте в читалке с поста #comment-410547 увеличить цикл с 255 до 600 , лог можно не выкладывать , просто посмотрите если что там дальше интересного , к примеру в регистрах около регистров 0x0200 ... 0x0213
что-то пока сомневаюсь что там UPD161710 , уж много чего не сходится.
croc19 , можете глянуть прошивку LG gm360 i ? Что там за контроллер . Нашел у себя такой дисплей . по фоткам в инете вроде похожи , мож и взаимозаменяемые . Только подпаять провода не легко будет , к такому мелкому разьему. Валерон , покажите фотку как вы подпаяли . У gm360i прямоугольный разъем с мелким шагом.
// пробовал поискать в инете у кого еще Horizontal RAM address 0x1A - не особо .
возможно надо подставлять у распростаненных контроллеров вместо 0x2A 0x2B 0x2C
Slider, спасибо за предоставленную инфу, многое уже видел. Т.к. я не программист, только как говорится балуюсь (опыта еще мало) я не смог для себя там что-то найти полезного. Сейчас уже вижу что-то есть.
slider пишет:
Валерон , покажите фотку как вы подпаяли . У gm360i прямоугольный разъем с мелким шагом.
У меня дисп от GS-290, но тоже такая хрень. Разъем я отпаял с мамки сотика и делал переходную плату. На плату заодно поставил контроллер подсветки, LDO на 2.9В и всякую мелочь. Фотку показать сейчас не могу - на работе. Если очень интересно то скину после 19.30.
Из форума на радиокоте: "...LS030B3UX05 с чипом uPD161710, название дисплея у меня на самой железной крышке, 3-й вывод соединен с землей...". На крышке дисплея надпись соответствует?
Из форума на радиокоте: "...LS030B3UX05 с чипом uPD161710, название дисплея у меня на самой железной крышке, 3-й вывод соединен с землей...". На крышке дисплея надпись соответствует?
У меня на крышке надпись 033h026829aqh. Инет по этому номеру молчит.
Тогда строчкой выше из того-же форума: "...IM300IBN1A с чипом R61509, название дисплея на шлейфе под железной крышкой, 3-й вывод соединен с шиной питания..." Есть возможность заглянуть под крышку?
Тогда строчкой выше из того-же форума: "...IM300IBN1A с чипом R61509, название дисплея на шлейфе под железной крышкой, 3-й вывод соединен с шиной питания..." Есть возможность заглянуть под крышку?
Я уже заглядывал под крышку. На шлейфе какой-то номер и интернет по нему тоже молчит. 3-вывод соединен с землей железно! Чип R61509 отпадает.
LG gm360 i все тоже самое, что и на GS-290. D54 в прошивках не находится.
Похоже контроллер PD161710.
Контроллер оказался D54E4PA7551. Инит прошел тот, который дал Slider. Спасибо ему. На экране появился шум, а вот залить его каким-нибудь цветом у меня не получается.
Спасибо croc19, это я видел из предыдущего поста. Так как опыта в програмировании у меня мало, то пока не получается. Вроде алгоритм рисовании линии понимаю, но в какой регистр что запмсывать пока не въезжаю. Если не трудно подскажи.
Уважаемые, подскажите кто в курсе, почему при заливке диспа одним цветом появляются другие цвета? Заливаю красным, появляется синия полоса во весь экран. Может быть в одном месте, может быть в нескольких местах, может быть на половину экрана. С другими цветами также. только с черным нормально.
Я не пишу для ардуины. Поэтому почитай как пишутся скетчи. Там все доступно.
Теперь попробую описать примерный алгоритм.
Сначала в SETUP обозначаешь, какие ноги как будут называться ( у тебя это в define) и в каком режиме будут работать -- pinMode(LCD_D0, OUTPUT); В принципе все ноги на цифровой выход.
Далее инициализация дисплея.
Дальше в LOOP . Пишешь координаты прямоугольника в регистры. Если весь экран, то начало по Х=0, конец Х=239 ,
начало по Y=0, конец по Y=399. И команду 0х03 . Затем цикл на 240*400=96000 , внутри которого пишешь
цвет ( это у тебя в программе есть ) .
Ну а дальше что душа пожелает.
Все подпрограммы с Read в урну, читать ничего не нужно. Контроллер ты знаешь.
croc19 я тоже не пишу для ардуино и не планирую. Програмированием занимаюсь от случая к случаю. В даный момент я просто хочу понять алгоритм програмирования диспов. Да и ардуино досталась на халяву, вот решил заюзать первый попавшийся дисп. Я в основном работаю с пиками. Ладно это все лирика.
Алгоритм понял, буду пробывать, спасибо.
Ксати функция чтения не мешает. Этот скетч рабочий вариант, правленный для моего диспа.
Блин, заливка правильная. Почему же полосы появляются другого цвета. Даже когда квадрат рисую на фоне, тоже полосы другого цвета в квадрате появляются.
Без второго подопытного диспа, скетч кажется норм.
Собрал за ночь эксперимент на макетке , дисплей от LG GM360i .
Да хорошо эта заливка работает , и это на 10ком резисторах.
Дисплей работает гораздо быстрее ардуины , поэтому попробовал ускорить этот код.
Заливка цветом:
22сек - изначально заливает
14сек - заменил на выдачу байта сразу в порт PORTA , а не по каждому пину.
10сек - убрал CS, RD
8сек - заменил медленные digitalWrite на быстрые битовые ( ускорение может быть до 20раз . из либы CyberLib.h )
или конструкциями из любой библиотек (adafruit, UTFT, ...)
Чтоб не использовать счетчик, заменил delayMicroseconds(2); после WR_Low; на еще один WR_Low; , чтоб добавить небольшую задержку , возможно это сказался завал импульса через 10ком резистор, надо пробовать как будет на преобразователях уровнях или 3.3в логике.
11 и 19 пины диспа (IF_mode IF1 IF0) пока ниуда не подключал, не экспериментировал с битностью, работает и так .
lcdWriteRegister(0x18, 0x01); /* - Vertical end address, high byte 01 конец*/
231
lcdWriteCommand (0x03); /* - RAM access mode */
232
233
uint32_t i = 400; // uint32_t
234
i *=240;// 96000
235
do{
236
lcdWriteData (color >> 8);
237
lcdWriteData (color);
238
}while( i-- );
239
}
// да проскакивала синяя заливка, но это при попытках чрезмерно ускорить через заваливающие фронты 10ком резисторы. Возможно где то у вас не контакт в схеме или "залипуха" с припоя или флюса. М.б. из-за питания. Дисп от LG 360i запитал от 3.3в через 33 0м резистор и белый светодиод + светодиоды подсветки, в итоге на питание диспа идет 2,7в .
//// надо бы закинуть этот инит в либу ( adafruit, utft , mcufrieng_kvb ), и регистры рисования подменить. Тогда и проще рисовать будет. B библиотеках заливка должна осуществляться еще быстрее, т.к. изпользуется автоинкримент средствами контроллера дисплея, при ненадобности заново вводить цвет и координаты последующегося пикселя в строке.
slider с твоим скетчем что-то у меня заливается только четверть экрана, хотя заливка написана на весь экран. Может где небольшой косячок есть, найти не могу.
Если предположить что не так с чтением , то надо подключать по 16бит - дело верняк, чтение будет 100%.
Размах , и осцил не надо, достаточно померить мультиметром куда постоянно подается лог.1 Reset , RD .
питание ардуины 5.00в , на стабе 3.30в , через 10 Ом на белых светодиодах (1+~5подсветки) 2.80в , на пинах Reset , RD 3.40в (вольтметр высокоточный) , оно и понятно , в микросхемах же ставят защитные диоды на вывода, к + и - питания. Лог.1 5.0в идет через 10ком , на защитном диоде осело 0.6в , ушло на питание. (при наргеве и морозе будут немного другое напряжение на "стабилитроне") .
Если бы не поставил параллельно питанию диспа , белые светодиоды ограничивающие напряжение как стабилитроны, то питание 3.3в взятое с ардуины , взлетело бы выше 4.5 и спалило бы дисп, из-за много лог.1 через 10ком , пересиливающие потребности контроллера диспа на старте , когда еще инит ему не скормлен и внутренние преобразователи не запущены.
В даташитах иногда пишут , что напряжения на входах не должно превышать напряжение питания на 0.6в , оно и понятно , иначе пересилится питание контроллера и он скончается.
Валерон пишет:
slider, в крайнем скетче что ты скинул можно убрать двойные WR_Low; WR_Low; и оствить один и будет нормально работать.
Я поменял резисторы в преобразователе уровней. Поставил 680 и 1к и работает на ура.
Можно ли к скетчу как-нибудь прилепить шрифты из какой-нибудь библиотеки?
ну если 680 и 1к то хорошо тока хватит, а через 10к он слабый, даже если тыкнуться мультиметром или осциллографом после них ( WR, RS(CD) ) , уже дисп косячит , то другие цвета покажет , то типа битые пиксели. Вот и приходится ставить задержки.
Зачем лепить шрифты из либы? проще подменить в понравившейся либе, инит на свой , и номера регистров посредством которых идет рисование.
К примеру UTFT C:\Users\.....\Documents\Arduino\libraries\UTFT\tft_drivers\ili9325c
по аналогии с ILI9325 , названия регистров в setxy.h посмотреть с его даташита или в initlcd.h они расписаны. x1 x2 y1 y2 оставляем (либа заносит в них координаты, цвет, сдвигает для 8бит )
В initlcd.h забить данные со своего инита.
Ну а дальше как обычно.
распаковать в Arduino\libraries . Пример запустить UTFT\examples\Arduino (AVR)\UTFT_Demo_400x240
даташиты UPD161710.pdf UPD161704A.pdf (он по красивше цветастей про регистры, стр122) на всяк случай закинул их в UTFT\tft_drivers\ili9325c
setxy.h составил методом тыка , что то наобум , надо сильно вдумываться и экспериментировать чтоб сделать поуму , иногда от очередности очень сильно зависит. От старшего байта по Y(X) м.б. избавиться , поэспериментировать закомментить , ибо 240 не больше 255 . (это в другой координате 400пикс больше 255 , и используется старший байт) , как получилось здесь избавиться #comment-93736
Надо еще отзеркалить , для этого надо экспериментировать в initlcd.h , не все там регистры , смотреть даташиты , искать (scan , mirror ) хоть какие-то сходства в "родственниках" попавшегося контроллера. Увеличить частоту обновления экрана, еще бы.
!!! LCD_Write_COM_DATA(0x30,0x01); /* 0x81 Select the display-RAM data */ // 0x01 Зеркалит по горизонтали !!!
но буквы по прежнему наоборот , хотя уже на своих местах.
Есть подозрения , что это надо setxy.h правильно сделать. мож что croc19 подскажет. Как будто библиотека рисует букву наоборот.
и помнить , что в даташитах UPD... , регистры написали в десятичной системе , надо помнить переводить.
// на крайняк , попробуйте инит в старый Adafruit внедрить к похожему по рисованию ili9320 контроллеру. В споследних Adafruit , MCUfriend_kvb м.б. будет трудно разобраться.
код контроллера по даташиту должен лежать в 96 регистре и равен 1710.
хотя судя по по 10-12 регистрам у тебя читается разрешение экрана 240х400.
В общем геморно все это. Пробуй инициализацию от этого контроллера.
Либо пиши свой скетч для чтения регистров контроллера в 8 битном режиме.
код контроллера по даташиту должен лежать в 96 регистре и равен 1710
Это я в курсе. Но он там не "лежит".
хотя судя по по 10-12 регистрам у тебя читается разрешение экрана 240х400.
Про это тоже в курсе. Если не секрет как это вычисляется по коду в логе?
В общем геморно все это. Пробуй инициализацию от этого контроллера.
Почему геморно? Инит пробывал - глухо. Читалка 5.2 зажигала экран белым цветом только.
Либо пиши свой скетч для чтения регистров контроллера в 8 битном режиме.
Они уже написаны до этого. Если точно знать какой контроллер стоит (могут быть разные варианты), многие вопросы отпали бы.
0F = 240 0190 = 400 похоже на разрешение стекла.
тогда бы числа и по другой координате рядом встретилось
240 239 00 EF
320 319 01 3F
360 359 01 67
400 399 01 8F
432 431 01 AF
480 479 01 DF
640 639 02 7F
800 799 03 1F
еще один из вариантов , принудительно повыбиратьь иниты в библиотеках UTFT, adafruit , adafruit LG4535 , .... MCUfriend_kvb .
в UTFT и так вручную выбирать надо, предварительно в memorysaver.h закоментить все disable (для ардуины меги памяти хватит на все активированные иниты) , пробовать и старые и новые версии (в новых вырезана поддержка уже старых и редких контроллерв)
// попробуйте в читалке с поста #comment-410547 увеличить цикл с 255 до 600 , лог можно не выкладывать , просто посмотрите если что там дальше интересного , к примеру в регистрах около регистров 0x0200 ... 0x0213
что-то пока сомневаюсь что там UPD161710 , уж много чего не сходится.
По даташиту в 10 и 11 регистре лежат maxX и maxY.
Думаю нужно поискать готовый инит от контроллера, а не самому по даташиту
писать.
В MCUFRIEND_kbv есть UPD161704. Он правда 240х320. Но вдруг.
В MCUFRIEND_kbv есть UPD161704. Он правда 240х320. Но вдруг.
Сегодня не могу уже посмотреть, только завтра вечером. Ткните мне в каком файле он в с писке, а то я с ардуино пока на ВЫ.
что-то пока сомневаюсь что там UPD161710 , уж много чего не сходится.
Есть версия что там может стоять контроллер D54E4PA7551, но на него не могу найти даташит. Да и в читалках ничего похожего нет.
скачал прошивку на телефон. UPD161710 там упоминается. А рядом Toshiba LS030B. Что это не нашел.
Возможно тоже контроллер дисплея.
croc19 , можете глянуть прошивку LG gm360 i ? Что там за контроллер . Нашел у себя такой дисплей . по фоткам в инете вроде похожи , мож и взаимозаменяемые . Только подпаять провода не легко будет , к такому мелкому разьему. Валерон , покажите фотку как вы подпаяли . У gm360i прямоугольный разъем с мелким шагом.
здесь https://radiokot.ru/forum/viewtopic.php?f=61&t=44185&start=1100 у кого-то получилось запустить LS030B3UX05 с чипом uPD161710 и D54E4PA7551 на 16бит , на 8бит проблемы с цветом (где-то тож в теме выкладывал подобный случай)
/// в Service Manual LG GM360i
LCD LS030B3UX05 SHARP 8bit access 2 time transmission
дисплей тож 16бит , подключен по 8бит
В гугле за LS030B3UX05 находится D54E4PA7551 ,
контроллер MagnaChip D54E4PA7551 , типа есть в библиотеках
SEGGER от EmWIN . https://github.com/Arie001/cortex-m3-applications.ssdglcddriver/blob/master/LCDConf.c
и у Micrium https://www.micrium.com/rtos/gui/
Даташиты находится , но не скачиваются
http://www.panelook.com/LS030B3UX05_SHARP_3.0_LCM_overview_18719.html
http://www.2ic.cc/datasheet/pdf/D54E4PA7551.html
https://datasheet.datasheetarchive.com/originals/library/Datasheets-SW13/DSASW00248681.pdf (рекламка походу)
вот файлы из библиотеки Segger: (искать в них D54E4PA7551 и 66706 )
https://arm-stm.blogspot.com/2017/04/guidrvcompactcolor16c-h.html
вроде бы сам инит init code D54E4PA7551
http://read.pudn.com/downloads119/sourcecode/embed/504841/Sample/Tutorial/MULTILAYER_ScreenRotationS/LCDConf.h__.htm
001
<a href=
"http://www.pudn.com"
title=
"www.pudn.com"
rel=
"nofollow"
>www.pudn.com</a> > emwintrial_v410_16bpp.zip > LCDConf.h, change:2007-05-10,size:10558b
002
003
004
005
006
/*********************************************************************
007
* SEGGER MICROCONTROLLER SYSTEME GmbH *
008
* Solutions for real time microcontroller applications *
009
**********************************************************************
010
* *
011
* (c) 1996 - 2007 SEGGER Microcontroller Systeme GmbH *
012
* *
013
* Internet: <a href="http://www.segger.com" title="www.segger.com" rel="nofollow">www.segger.com</a> Support: <a href="mailto:support@segger.com">support@segger.com</a> *
014
* *
015
**********************************************************************
016
017
** emWin V4.10 - Graphical user interface for embedded applications **
018
emWin is protected by international copyright laws. Knowledge of the
019
source code may not be used to write a similar product. This file may
020
only be used in accordance with a license and should not be re-
021
distributed in any way. We appreciate your understanding and fairness.
022
----------------------------------------------------------------------
023
File : LCDConf.h
024
Purpose : sAMPLE configuration file
025
----------------------------------------------------------------------
026
*/
027
028
#ifndef LCDCONF_H
029
#define LCDCONF_H
030
031
#define LCD_ALLOW_NON_OPTIMIZED_MODE 1
032
033
/*********************************************************************
034
*
035
* Equal for all layers
036
*/
037
#define _CONTROLLER 66706
038
#define _BITSPERPIXEL 16
039
#define _SWAP_RB 1
040
#define _XSIZE 240
041
#define _YSIZE 400
042
043
/*********************************************************************
044
*
045
* Layer 0
046
*/
047
#define LCD_CONTROLLER_0 _CONTROLLER
048
#define LCD_BITSPERPIXEL_0 _BITSPERPIXEL
049
#define LCD_SWAP_RB_0 _SWAP_RB
050
#define LCD_XSIZE_0 _XSIZE
051
#define LCD_YSIZE_0 _YSIZE
052
#define LCD_MIRROR_X_0 1
053
#define LCD_MIRROR_Y_0 0
054
#define LCD_SWAP_XY_0 0
055
056
/*********************************************************************
057
*
058
* Layer 1
059
*/
060
#define LCD_CONTROLLER_1 _CONTROLLER
061
#define LCD_BITSPERPIXEL_1 _BITSPERPIXEL
062
#define LCD_SWAP_RB_1 _SWAP_RB
063
#define LCD_XSIZE_1 _YSIZE
064
#define LCD_YSIZE_1 _XSIZE
065
#define LCD_MIRROR_X_1 0
066
#define LCD_MIRROR_Y_1 0
067
#define LCD_SWAP_XY_1 1
068
069
/*********************************************************************
070
*
071
* Layer 2
072
*/
073
#define LCD_CONTROLLER_2 _CONTROLLER
074
#define LCD_BITSPERPIXEL_2 _BITSPERPIXEL
075
#define LCD_SWAP_RB_2 _SWAP_RB
076
#define LCD_XSIZE_2 _XSIZE
077
#define LCD_YSIZE_2 _YSIZE
078
#define LCD_MIRROR_X_2 0
079
#define LCD_MIRROR_Y_2 1
080
#define LCD_SWAP_XY_2 0
081
082
/*********************************************************************
083
*
084
* Layer 3
085
*/
086
#define LCD_CONTROLLER_3 _CONTROLLER
087
#define LCD_BITSPERPIXEL_3 _BITSPERPIXEL
088
#define LCD_SWAP_RB_3 _SWAP_RB
089
#define LCD_XSIZE_3 _YSIZE
090
#define LCD_YSIZE_3 _XSIZE
091
#define LCD_MIRROR_X_3 1
092
#define LCD_MIRROR_Y_3 1
093
#define LCD_SWAP_XY_3 1
094
095
/*********************************************************************
096
*
097
* Prototypes of interface routines
098
*/
099
void
LCD_X_Write01(
char
c);
100
void
LCD_X_Write00(
char
c);
101
void
LCD_X_WriteM01(
char
* pData,
int
NumBytes);
102
void
LCD_X_WriteM00(
char
* pData,
int
NumBytes);
103
char
LCD_X_Read00(
void
);
104
char
LCD_X_Read01(
void
);
105
void
LCD_X_ReadM01 (
char
* pData,
int
NumBytes);
106
107
/*********************************************************************
108
*
109
* Use the same interface routines for all layers
110
*/
111
#define LCD_WRITE_A0_0(Byte) LCD_X_Write00(Byte)
112
#define LCD_WRITE_A1_0(Byte) LCD_X_Write01(Byte)
113
#define LCD_WRITEM_A0_0(Byte, NumBytes) LCD_X_WriteM00(Byte, NumBytes)
114
#define LCD_WRITEM_A1_0(Byte, NumBytes) LCD_X_WriteM01(Byte, NumBytes)
115
#define LCD_READ_A0_0(Byte) Byte = LCD_X_Read00()
116
#define LCD_READ_A1_0(Byte) Byte = LCD_X_Read01()
117
#define LCD_READM_A1_0(Byte, NumBytes) LCD_X_ReadM01(Byte, NumBytes)
118
119
#define LCD_WRITE_A0_1(Byte) LCD_X_Write00(Byte)
120
#define LCD_WRITE_A1_1(Byte) LCD_X_Write01(Byte)
121
#define LCD_WRITEM_A0_1(Byte, NumBytes) LCD_X_WriteM00(Byte, NumBytes)
122
#define LCD_WRITEM_A1_1(Byte, NumBytes) LCD_X_WriteM01(Byte, NumBytes)
123
#define LCD_READ_A0_1(Byte) Byte = LCD_X_Read00()
124
#define LCD_READ_A1_1(Byte) Byte = LCD_X_Read01()
125
#define LCD_READM_A1_1(Byte, NumBytes) LCD_X_ReadM01(Byte, NumBytes)
126
127
#define LCD_WRITE_A0_2(Byte) LCD_X_Write00(Byte)
128
#define LCD_WRITE_A1_2(Byte) LCD_X_Write01(Byte)
129
#define LCD_WRITEM_A0_2(Byte, NumBytes) LCD_X_WriteM00(Byte, NumBytes)
130
#define LCD_WRITEM_A1_2(Byte, NumBytes) LCD_X_WriteM01(Byte, NumBytes)
131
#define LCD_READ_A0_2(Byte) Byte = LCD_X_Read00()
132
#define LCD_READ_A1_2(Byte) Byte = LCD_X_Read01()
133
#define LCD_READM_A1_2(Byte, NumBytes) LCD_X_ReadM01(Byte, NumBytes)
134
135
#define LCD_WRITE_A0_3(Byte) LCD_X_Write00(Byte)
136
#define LCD_WRITE_A1_3(Byte) LCD_X_Write01(Byte)
137
#define LCD_WRITEM_A0_3(Byte, NumBytes) LCD_X_WriteM00(Byte, NumBytes)
138
#define LCD_WRITEM_A1_3(Byte, NumBytes) LCD_X_WriteM01(Byte, NumBytes)
139
#define LCD_READ_A0_3(Byte) Byte = LCD_X_Read00()
140
#define LCD_READ_A1_3(Byte) Byte = LCD_X_Read01()
141
#define LCD_READM_A1_3(Byte, NumBytes) LCD_X_ReadM01(Byte, NumBytes)
142
143
/*********************************************************************
144
*
145
* Initialization
146
*/
147
#define DELAY(Cnt) { volatile U32 i, j; j = Cnt << 8; for (i = 0; i < j; i++); }
148
149
#define INIT_CONTROLLER() \
150
DELAY(10); \
151
LCD_X_Init(); \
152
DELAY(10); \
153
LCD_WRITE_A0(0xC0); LCD_WRITE_A1(0x00);
/* Internal EEPROM */
\
154
LCD_WRITE_A0(0xC0); LCD_WRITE_A1(0x02);
/* Internal EEPROM */
\
155
DELAY(10); \
156
LCD_WRITE_A0(0xC0); LCD_WRITE_A1(0x00);
/* Internal EEPROM */
\
157
LCD_WRITE_A0(0x68); LCD_WRITE_A1(0x41);
/* COM-pp */
\
158
LCD_WRITE_A0(0x69); LCD_WRITE_A1(0x7D);
/* COM-center */
\
159
LCD_WRITE_A0(0x01); LCD_WRITE_A1(0x02);
/* 8bit 8/8 transfer */
\
160
LCD_WRITE_A0(0x08); LCD_WRITE_A1(0x00);
/* Normally black */
\
161
LCD_WRITE_A0(0x10); LCD_WRITE_A1(0xF0);
/* Panel X-size=240 */
\
162
LCD_WRITE_A0(0x11); LCD_WRITE_A1(0x90);
/* Panel Y-size=400 */
\
163
LCD_WRITE_A0(0x12); LCD_WRITE_A1(0x01);
/* Panel Y-size=400 */
\
164
LCD_WRITE_A0(0x1E); LCD_WRITE_A1(0x50);
/* Number of vertical line=400 */
\
165
LCD_WRITE_A0(0x1D); LCD_WRITE_A1(0x07);
/* RAM write direction :landscape */
\
166
LCD_WRITE_A0(0x1A); LCD_WRITE_A1(0xEF);
/* RAM pointer X */
\
167
LCD_WRITE_A0(0x1B); LCD_WRITE_A1(0x8F);
/* RAM pointer Y */
\
168
LCD_WRITE_A0(0x1C); LCD_WRITE_A1(0x01);
/* RAM pointer Y */
\
169
LCD_WRITE_A0(0x30); LCD_WRITE_A1(0x81);
/* Select the display-RAM data */
\
170
LCD_WRITE_A0(0x33); LCD_WRITE_A1(0x02);
/* Non-display data color */
\
171
LCD_WRITE_A0(0x42); LCD_WRITE_A1(0x70);
/* Vertical front poach=112h */
\
172
LCD_WRITE_A0(0x43); LCD_WRITE_A1(0x01);
/* Vertical back poach=1h */
\
173
LCD_WRITE_A0(0x44); LCD_WRITE_A1(0x3F);
/* H scan interval=96clock */
\
174
LCD_WRITE_A0(0x45); LCD_WRITE_A1(0x14);
/* GSP start position=10clock */
\
175
LCD_WRITE_A0(0x46); LCD_WRITE_A1(0x0F);
/* GCK start position=15clock */
\
176
LCD_WRITE_A0(0x48); LCD_WRITE_A1(0x03);
/* COM inversion position=3clock */
\
177
LCD_WRITE_A0(0x4A); LCD_WRITE_A1(0x01);
/* Signal setting */
\
178
LCD_WRITE_A0(0x4B); LCD_WRITE_A1(0xA8);
/* SSD setting */
\
179
LCD_WRITE_A0(0x4C); LCD_WRITE_A1(0x12);
/* ASW start position=18clock */
\
180
LCD_WRITE_A0(0x5A); LCD_WRITE_A1(0x00);
/* Battery pull-out detection off */
\
181
LCD_WRITE_A0(0x62); LCD_WRITE_A1(0x52);
/* ASW width10, interval2clock */
\
182
LCD_WRITE_A0(0x65); LCD_WRITE_A1(0x02);
/* AMP bias current setting */
\
183
LCD_WRITE_A0(0x66); LCD_WRITE_A1(0x06);
/* VGM5.2V */
\
184
LCD_WRITE_A0(0x6A); LCD_WRITE_A1(0x02);
/* VCOM output */
\
185
LCD_WRITE_A0(0x81); LCD_WRITE_A1(0x44);
/* VR,VS boost clock setting */
\
186
LCD_WRITE_A0(0x82); LCD_WRITE_A1(0x2D);
/* DCK,DCKB timing setting */
\
187
LCD_WRITE_A0(0x83); LCD_WRITE_A1(0x25);
/* DCDC Dual, AVR,5.2V,DCDC drivability=min */
\
188
LCD_WRITE_A0(0x84); LCD_WRITE_A1(0x17);
/* VR setting */
\
189
LCD_WRITE_A0(0x85); LCD_WRITE_A1(0x27);
/* DCDC Dual, AVS5.4V,DCDC drivability=min */
\
190
LCD_WRITE_A0(0x86); LCD_WRITE_A1(0x17);
/* VS setting */
\
191
LCD_WRITE_A0(0x90); LCD_WRITE_A1(0x25);
/* Auto ON timing setting */
\
192
LCD_WRITE_A0(0x91); LCD_WRITE_A1(0x05);
/* Auto ON/OFF setting(1V) */
\
193
LCD_WRITE_A0(0x92); LCD_WRITE_A1(0x15);
/* Auto OFF timing setting */
\
194
LCD_WRITE_A0(0x31); LCD_WRITE_A1(0x01);
/* VAL */
\
195
LCD_WRITE_A0(0x19); LCD_WRITE_A1(0x01);
/* Window access mode */
\
196
LCD_WRITE_A0(0x3E); LCD_WRITE_A1(0x01);
/* Auto ON sequence */
\
197
DELAY(120)
198
199
#define LCD_INIT_CONTROLLER_0() INIT_CONTROLLER()
200
#define LCD_INIT_CONTROLLER_1() INIT_CONTROLLER()
201
#define LCD_INIT_CONTROLLER_2() INIT_CONTROLLER()
202
#define LCD_INIT_CONTROLLER_3() INIT_CONTROLLER()
203
204
#endif /* LCDCONF_H */
в верхнем файле либы можно подсмотреть через какие регистры и как осуществляется рисование:
рисуется через регистры 0x1A 0x1B 0x1C , запись - 0x03
01
#elif (LCD_CONTROLLER == 66706) /* MagnaChip D54E4PA7551 */
02
/* Register definitions */
03
#define REG_INC_MODE 0x1D /* - Entry mode */
04
#define REG_SET_HRAM_S 0x13 /* - Horizontal start address */
05
#define REG_SET_HRAM_E 0x16 /* - Horizontal end address */
06
#define REG_SET_VRAM_S_LB 0x14 /* - Vertical start address, low byte */
07
#define REG_SET_VRAM_S_HB 0x15 /* - Vertical start address, high byte */
08
#define REG_SET_VRAM_E_LB 0x17 /* - Vertical end address, low byte */
09
#define REG_SET_VRAM_E_HB 0x18 /* - Vertical end address, high byte */
10
#define REG_RAM_ADDR_H 0x1A /* - Horizontal RAM address */
11
#define REG_RAM_ADDR_V_LB 0x1B /* - Vertical RAM address, low byte */
12
#define REG_RAM_ADDR_V_HB 0x1C /* - Vertical RAM address, high byte */
13
#define REG_RAM_ACCESS 0x03 /* - RAM access mode */
вот так: (можно поискать аналогичные в UTFT , adafruit , MCUfriend)
01
/*********************************************************************
02
*
03
* _SetPhysRAMAddr and _SetRect for the following display controllers:
04
*
05
* - Sharp LCY-A06003
06
* - MagnaChip D54E4PA7551
07
*/
08
/*********************************************************************
09
*
10
* _SetPhysRAMAddr
11
*/
12
#elif (LCD_CONTROLLER == 66704) || /* Sharp LCY-A06003 */ \
13
(LCD_CONTROLLER == 66706)
/* MagnaChip D54E4PA7551 */
14
static
void
_SetPhysRAMAddr(
int
x,
int
y) {
15
x -= _x0;
16
y -= _y0;
17
LCD_WRITE_A0(REG_RAM_ADDR_H);
18
LCD_WRITE_A1(x);
19
LCD_WRITE_A0(REG_RAM_ADDR_V_LB);
20
LCD_WRITE_A1(y & 0xff);
21
LCD_WRITE_A0(REG_RAM_ADDR_V_HB);
22
LCD_WRITE_A1(y >> 8);
23
LCD_WRITE_A0(REG_RAM_ACCESS);
24
}
описалово на русском работы либы
https://arm-stm.blogspot.com/2014/09/
https://arm-stm.blogspot.com/2014/09/emwin-display-driver.html
и на англ.
http://read.pudn.com/downloads153/ebook/676859/UM030021_emWin.pdf
// пробовал поискать в инете у кого еще Horizontal RAM address 0x1A - не особо .
возможно надо подставлять у распростаненных контроллеров вместо 0x2A 0x2B 0x2C
Slider, спасибо за предоставленную инфу, многое уже видел. Т.к. я не программист, только как говорится балуюсь (опыта еще мало) я не смог для себя там что-то найти полезного. Сейчас уже вижу что-то есть.
Валерон , покажите фотку как вы подпаяли . У gm360i прямоугольный разъем с мелким шагом.
У меня дисп от GS-290, но тоже такая хрень. Разъем я отпаял с мамки сотика и делал переходную плату. На плату заодно поставил контроллер подсветки, LDO на 2.9В и всякую мелочь. Фотку показать сейчас не могу - на работе. Если очень интересно то скину после 19.30.
LG gm360 i все тоже самое, что и на GS-290. D54 в прошивках не находится.
Начало прошивок один в один.
Похоже контроллер PD161710.
Из форума на радиокоте: "...LS030B3UX05 с чипом uPD161710, название дисплея у меня на самой железной крышке, 3-й вывод соединен с землей...". На крышке дисплея надпись соответствует?
3-й вывод соединен с землей...
Так и есть. Надпись есть какая-то, сейчас не помню. Вечером посмотрю.
Из форума на радиокоте: "...LS030B3UX05 с чипом uPD161710, название дисплея у меня на самой железной крышке, 3-й вывод соединен с землей...". На крышке дисплея надпись соответствует?
У меня на крышке надпись 033h026829aqh. Инет по этому номеру молчит.
Тогда строчкой выше из того-же форума: "...IM300IBN1A с чипом R61509, название дисплея на шлейфе под железной крышкой, 3-й вывод соединен с шиной питания..." Есть возможность заглянуть под крышку?
Тогда строчкой выше из того-же форума: "...IM300IBN1A с чипом R61509, название дисплея на шлейфе под железной крышкой, 3-й вывод соединен с шиной питания..." Есть возможность заглянуть под крышку?
Я уже заглядывал под крышку. На шлейфе какой-то номер и интернет по нему тоже молчит. 3-вывод соединен с землей железно! Чип R61509 отпадает.
Сравнивал выходы с даташитом ILI 9488. Все совпадает. Есть вывод на шлейф IM. но похоже он переключает с 24 бит на 18.
Соглано определению выводов на фото выходы располагаются так:
1
LG gm360 i все тоже самое, что и на GS-290. D54 в прошивках не находится.
Похоже контроллер PD161710.
Контроллер оказался D54E4PA7551. Инит прошел тот, который дал Slider. Спасибо ему. На экране появился шум, а вот залить его каким-нибудь цветом у меня не получается.
#elif (LCD_CONTROLLER == 66706) /* MagnaChip D54E4PA7551 */
/* Register definitions */
#define REG_INC_MODE 0x1D /* - Entry mode */
#define REG_SET_HRAM_S 0x13 /* - Horizontal start address */
#define REG_SET_HRAM_E 0x16 /* - Horizontal end address */
#define REG_SET_VRAM_S_LB 0x14 /* - Vertical start address, low byte */
#define REG_SET_VRAM_S_HB 0x15 /* - Vertical start address, high byte */
#define REG_SET_VRAM_E_LB 0x17 /* - Vertical end address, low byte */
#define REG_SET_VRAM_E_HB 0x18 /* - Vertical end address, high byte */
#define REG_RAM_ADDR_H 0x1A /* - Horizontal RAM address */
#define REG_RAM_ADDR_V_LB 0x1B /* - Vertical RAM address, low byte */
#define REG_RAM_ADDR_V_HB 0x1C /* - Vertical RAM address, high byte */
#define REG_RAM_ACCESS 0x03 /* - RAM access mode */
#elif (LCD_CONTROLLER == 66706) /* MagnaChip D54E4PA7551 */
/* Register definitions */
#define REG_INC_MODE 0x1D /* - Entry mode */
#define REG_SET_HRAM_S 0x13 /* - Horizontal start address */
#define REG_SET_HRAM_E 0x16 /* - Horizontal end address */
#define REG_SET_VRAM_S_LB 0x14 /* - Vertical start address, low byte */
#define REG_SET_VRAM_S_HB 0x15 /* - Vertical start address, high byte */
#define REG_SET_VRAM_E_LB 0x17 /* - Vertical end address, low byte */
#define REG_SET_VRAM_E_HB 0x18 /* - Vertical end address, high byte */
#define REG_RAM_ADDR_H 0x1A /* - Horizontal RAM address */
#define REG_RAM_ADDR_V_LB 0x1B /* - Vertical RAM address, low byte */
#define REG_RAM_ADDR_V_HB 0x1C /* - Vertical RAM address, high byte */
#define REG_RAM_ACCESS 0x03 /* - RAM access mode */
Спасибо croc19, это я видел из предыдущего поста. Так как опыта в програмировании у меня мало, то пока не получается. Вроде алгоритм рисовании линии понимаю, но в какой регистр что запмсывать пока не въезжаю. Если не трудно подскажи.
сначала закрасить прямоугольник.
Попробуй так. Запиши последовательно в регистры
сом 0x1а
data 0x0
com 0x1b
data 0x0
com 0x1c
data 0x0
com 0x13
data 0x0
com 0x16
data 0x66
com 0x14
data 0x0
com 0x15
data 0x0
com 0x17
data 0x63
com 0x18
data 0x0
com 0x03
цикл на 10000 повторений внутри которого пишешь
data 0x0
data 0xf8
На экране должен появиться красный квадрат 100х100 точек.
croc19 спасибо, получилось.
Уважаемые, подскажите кто в курсе, почему при заливке диспа одним цветом появляются другие цвета? Заливаю красным, появляется синия полоса во весь экран. Может быть в одном месте, может быть в нескольких местах, может быть на половину экрана. С другими цветами также. только с черным нормально.
Выложи программу и фото.
Кто-нибудь работал с либой GLCD или имел дело с монохромными дисплеями на SED1520 ?
Отзовитесь пожалуйста .
1
Выложи программу и фото.
001
/*********************************************************************
002
*
003
* LCD_ID_Reader
004
*
005
* This sketch is meant only to attempt to read the driver ID code
006
* from inexpensive touchscreen LCDs found on eBay without needing to
007
* load any additional libraries. The hope is to identify the most
008
* common varieties and choose the best library for the screen you have.
009
*
010
* This has been successfully tested so far on 992X and 778X variety
011
* screens.
012
*
013
* Usage:
014
*
015
* Compile the sketch and run it on your board with the screen
016
* attached. In the serial monitor, you should see a message containing
017
* the driver code. The tricky thing is that if it does not work, the
018
* results may be undetermined. However, if we can compile a list,
019
* the difference between working and not may become more evident.
020
*
021
* Please visit <a href="http://misc.ws/lcd_information" title="http://misc.ws/lcd_information" rel="nofollow">http://misc.ws/lcd_information</a> for more information.
022
*
023
* Version 1.2 - January 29th, 2015
024
*
025
*********************************************************************/
026
027
028
029
/*********************************************************************
030
*
031
* PIN ASSIGNMENTS
032
*
033
* You can alter the pin assignments to reflect any configuration you
034
* wish. I've provided the default shield configuration, which works
035
* on both the Arduino UNO and Mega 2560.
036
*
037
*********************************************************************/
038
//-- Arduino UNO or Mega 2560 Plugged as shield
039
#define LCD_RST 41//4
040
#define LCD_CS 40//A3
041
#define LCD_RS 38//A2
042
#define LCD_WR 39//A1
043
#define LCD_RD 45//A0
044
045
#define LCD_D0 22//8
046
#define LCD_D1 23//9
047
#define LCD_D2 24//2
048
#define LCD_D3 25//3
049
#define LCD_D4 26//4
050
#define LCD_D5 27//
051
#define LCD_D6 28//6
052
#define LCD_D7 29//7
053
054
055
#define BLACK 0x0000
056
#define BLUE 0x001F
057
#define RED 0xF800
058
#define GREEN 0x07E0
059
#define CYAN 0x07FF
060
#define MAGENTA 0xF81F
061
#define YELLOW 0xFFE0
062
#define WHITE 0xFFFF
063
064
/*********************************************************************
065
*
066
* Attempt to initialize and reset LCD, then read its Driver Code
067
* at register index 0.
068
*
069
*********************************************************************/
070
void
setup
() {
071
072
char
hexString[7];
073
uint16_t id;
074
075
Serial
.begin(9600);
076
Serial
.println(
"Initializing LCD..."
);
077
lcdInit();
078
delay(100);
079
080
lcdReset();
081
082
delay(500);
083
084
Serial
.print(
"Reading ID..."
);
085
id = lcdReadID();
086
sprintf(hexString,
"0x%0.4X"
, id);
087
Serial
.println( hexString );
088
089
lcdRegisterOther();
// инит
090
lcd_clr(RED);
// заливка всего экрана
091
//print_all_regs();
092
}
093
094
095
void
print_all_regs() {
096
097
char
str[600];
098
uint16_t i, val;
099
100
for
(i=0; i < 256; i++ )
101
{
102
delay(20);
103
val = lcdReadRegister(i);
104
sprintf(str,
"Register 0x%0.4X : 0x%0.4X"
, i, val);
105
Serial
.println( str );
106
}
107
}
108
109
void
loop
() {
110
lcdFillScreen_1(MAGENTA);
111
delay(500);
112
lcdFillScreen_1(GREEN);
113
delay(500);
114
}
115
116
/*********************************************************************
117
*
118
* LCD Functions - Inefficient but should be good enough
119
* to read the ID.
120
*
121
*********************************************************************/
122
123
124
void
lcdRegisterOther() {
125
Serial
.println(
"Loading LCD registers..."
);
126
lcdWriteRegister(0xC0, 0x00);
//
127
lcdWriteRegister(0xC0, 0x02);
128
delay(10);
129
lcdWriteRegister(0xC0, 0x00);
//
130
lcdWriteRegister(0x68, 0x41);
//
131
lcdWriteRegister(0x69, 0x7D);
132
lcdWriteRegister(0x01, 0x02);
133
lcdWriteRegister(0x08, 0x00);
// черный
134
lcdWriteRegister(0x10, 0xF0);
135
lcdWriteRegister(0x11, 0x90);
136
lcdWriteRegister(0x12, 0x01);
137
lcdWriteRegister(0x1E, 0x50);
138
lcdWriteRegister(0x1D, 0x07);
139
lcdWriteRegister(0x1A, 0xEF);
140
lcdWriteRegister(0x1B, 0x8E);
141
lcdWriteRegister(0x1C, 0x01);
142
lcdWriteRegister(0x30, 0x81);
143
lcdWriteRegister(0x33, 0x02);
144
lcdWriteRegister(0x42, 0x70);
145
lcdWriteRegister(0x43, 0x01);
146
lcdWriteRegister(0x44, 0x3F);
147
lcdWriteRegister(0x45, 0x14);
148
lcdWriteRegister(0x46, 0x0F);
149
lcdWriteRegister(0x4A, 0x01);
150
lcdWriteRegister(0x4B, 0xA8);
151
lcdWriteRegister(0x4C, 0x12);
152
lcdWriteRegister(0x5A, 0x00);
153
lcdWriteRegister(0x62, 0x52);
154
lcdWriteRegister(0x65, 0x02);
155
lcdWriteRegister(0x66, 0x06);
156
lcdWriteRegister(0x6A, 0x02);
157
lcdWriteRegister(0x81, 0x44);
158
lcdWriteRegister(0x82, 0x2D);
159
lcdWriteRegister(0x83, 0x25);
160
lcdWriteRegister(0x84, 0x17);
161
lcdWriteRegister(0x85, 0x27);
162
lcdWriteRegister(0x86, 0x17);
163
lcdWriteRegister(0x90, 0x25);
164
lcdWriteRegister(0x91, 0x05);
165
lcdWriteRegister(0x92, 0x15);
166
lcdWriteRegister(0x31, 0x01);
167
lcdWriteRegister(0x19, 0x01);
168
lcdWriteRegister(0x3E, 0x01);
169
delay(120);
170
}
171
172
void
lcdInit() {
173
pinMode(LCD_CS, OUTPUT);
174
digitalWrite(LCD_CS, HIGH);
175
pinMode(LCD_RS, OUTPUT);
176
digitalWrite(LCD_RS, HIGH);
177
pinMode(LCD_WR, OUTPUT);
178
digitalWrite(LCD_WR, HIGH);
179
pinMode(LCD_RD, OUTPUT);
180
digitalWrite(LCD_RD, HIGH);
181
pinMode(LCD_RST, OUTPUT);
182
digitalWrite(LCD_RST, HIGH);
183
}
184
185
void
lcdReset() {
186
digitalWrite(LCD_RST, LOW);
187
delay(50);
188
digitalWrite(LCD_RST, HIGH);
189
190
delay(50);
191
//lcdWriteRegister(0x00,0x01);
192
193
//delay(500);
194
195
}
196
197
void
lcdWrite8(uint8_t data) {
// было uint16_t
198
digitalWrite(LCD_D0, data & 1);
199
digitalWrite(LCD_D1, (data & 2) >> 1);
200
digitalWrite(LCD_D2, (data & 4) >> 2);
201
digitalWrite(LCD_D3, (data & 8) >> 3);
202
digitalWrite(LCD_D4, (data & 16) >> 4);
203
digitalWrite(LCD_D5, (data & 32) >> 5);
204
digitalWrite(LCD_D6, (data & 64) >> 6);
205
digitalWrite(LCD_D7, (data & 128) >> 7);
206
}
207
208
uint16_t lcdRead8() {
209
uint8_t result = digitalRead(LCD_D7);
// было uint16_t
210
result <<= 1;
211
result |= digitalRead(LCD_D6);
212
result <<= 1;
213
result |= digitalRead(LCD_D5);
214
result <<= 1;
215
result |= digitalRead(LCD_D4);
216
result <<= 1;
217
result |= digitalRead(LCD_D3);
218
result <<= 1;
219
result |= digitalRead(LCD_D2);
220
result <<= 1;
221
result |= digitalRead(LCD_D1);
222
result <<= 1;
223
result |= digitalRead(LCD_D0);
224
225
return
result;
226
}
227
228
void
lcdSetWriteDir() {
229
pinMode(LCD_D0, OUTPUT);
230
pinMode(LCD_D1, OUTPUT);
231
pinMode(LCD_D2, OUTPUT);
232
pinMode(LCD_D3, OUTPUT);
233
pinMode(LCD_D4, OUTPUT);
234
pinMode(LCD_D5, OUTPUT);
235
pinMode(LCD_D6, OUTPUT);
236
pinMode(LCD_D7, OUTPUT);
237
}
238
void
lcdSetReadDir() {
239
pinMode(LCD_D0, INPUT);
240
pinMode(LCD_D1, INPUT);
241
pinMode(LCD_D2, INPUT);
242
pinMode(LCD_D3, INPUT);
243
pinMode(LCD_D4, INPUT);
244
pinMode(LCD_D5, INPUT);
245
pinMode(LCD_D6, INPUT);
246
pinMode(LCD_D7, INPUT);
247
}
248
249
void
lcdWriteData(uint8_t data) {
// было uint16_t
250
251
lcdSetWriteDir();
252
digitalWrite(LCD_CS, LOW);
253
digitalWrite(LCD_RS, HIGH);
254
digitalWrite(LCD_RD, HIGH);
255
digitalWrite(LCD_WR, HIGH);
256
257
/* lcdWrite8(data >> 8);
258
digitalWrite(LCD_WR, LOW);
259
delayMicroseconds(10);
260
digitalWrite(LCD_WR, HIGH);
261
*/
262
// delayMicroseconds(2);
263
264
lcdWrite8(data);
265
digitalWrite(LCD_WR, LOW);
266
delayMicroseconds(2);
267
digitalWrite(LCD_WR, HIGH);
268
digitalWrite(LCD_CS, HIGH);
269
}
270
271
272
void
lcdWriteCommand(uint8_t command) {
// было uint16_t
273
lcdSetWriteDir();
274
digitalWrite(LCD_CS, LOW);
275
digitalWrite(LCD_RS, LOW);
276
digitalWrite(LCD_RD, HIGH);
277
digitalWrite(LCD_WR, HIGH);
278
279
/* lcdWrite8(command >> 8);
280
digitalWrite(LCD_WR, LOW);
281
delayMicroseconds(10);
282
digitalWrite(LCD_WR, HIGH);
283
delayMicroseconds(10);///////////////////////////
284
*/
285
lcdWrite8(command);
286
digitalWrite(LCD_WR, LOW);
287
delayMicroseconds(2);
288
digitalWrite(LCD_WR, HIGH);
289
290
291
digitalWrite(LCD_CS, HIGH);
292
digitalWrite(LCD_RS, HIGH);
///////////////
293
}
294
295
296
int
lcdReadData() {
297
uint8_t result;
// было uint16_t
298
lcdSetReadDir();
299
300
301
digitalWrite(LCD_RS, HIGH);
302
digitalWrite(LCD_RD, HIGH);
303
digitalWrite(LCD_WR, HIGH);
304
digitalWrite(LCD_CS, LOW);
305
306
//digitalWrite(LCD_RD, LOW);
307
// result = lcdRead8() << 8;
308
// digitalWrite(LCD_RD, HIGH);
309
//delayMicroseconds(10);
310
311
digitalWrite(LCD_RD, LOW);
312
313
result = lcdRead8();
// было result |= lcdRead8();
314
delayMicroseconds(10);
315
digitalWrite(LCD_CS, HIGH);
316
digitalWrite(LCD_RD, HIGH);
317
return
result;
318
}
319
320
321
void
lcdWriteRegister(uint8_t addr, uint8_t data){
// было {uint16_t addr, uint16_t data}
322
lcdWriteCommand(addr);
323
lcdWriteData(data);
324
}
325
326
uint8_t lcdReadRegister(uint8_t reg) {
// было uint16_t lcdReadRegister(uint16_t reg)
327
lcdWriteCommand(reg);
328
return
lcdReadData();
329
}
330
331
/*uint16_t lcdReadID() {
332
uint16_t number;
333
number = (lcdReadRegister(0)<< 8);
334
delayMicroseconds(10);
335
number |= lcdReadData();
336
return number;
337
}
338
*/
339
uint16_t lcdReadID() {
340
return
lcdReadRegister(0);
341
}
342
343
void
lcd_clr(uint16_t color) {
//заливка цветом
344
345
Serial
.println(
"Filling the screen..."
);
346
//lcdWriteRegister(0x1D, 0x07); /* - Entry mode */
347
// lcdWriteRegister(0x1A, 0x00); /* - Horizontal RAM address */
348
//lcdWriteRegister(0x1B, 0x00); /* - Vertical RAM address, low byte */
349
//lcdWriteRegister(0x1C, 0x00); /* - Vertical RAM address, high byte */
350
lcdWriteRegister(0x13, 0x00);
/* - Horizontal start address */
351
lcdWriteRegister(0x16, 0xEF);
/* - Horizontal end address F0 конец*/
352
lcdWriteRegister(0x14, 0x00);
/* - Vertical start address, low byte */
353
lcdWriteRegister(0x15, 0x00);
/* - Vertical start address, high byte */
354
lcdWriteRegister(0x17, 0x8F);
/* - Vertical end address, low byte 90 конец*/
355
lcdWriteRegister(0x18, 0x01);
/* - Vertical end address, high byte 01 конец*/
356
lcdWriteCommand (0x03);
/* - RAM access mode */
357
358
359
uint32_t i = 400;
360
i *=240;
361
do
{
362
lcdWriteData (color >> 8);
363
//delayMicroseconds(10);
364
lcdWriteData (color);
365
//delayMicroseconds(10);
366
367
/* lcdWrite8(color >> 8);
368
digitalWrite(LCD_WR, LOW);
369
delayMicroseconds(10);
370
digitalWrite(LCD_WR, HIGH);
371
372
373
lcdWrite8(color);
374
digitalWrite(LCD_WR, LOW);
375
delayMicroseconds(10);
376
digitalWrite(LCD_WR, HIGH);
377
*/
378
}
while
( i-- );
379
380
// digitalWrite(LCD_CS, HIGH);
381
Serial
.println(
"Done filling..."
);
382
383
}
384
385
386
void
lcdFillScreen_1(uint16_t color){
//заливка квадрата
387
lcdWriteRegister(0x13, 0x50);
/* - Horizontal start address */
388
lcdWriteRegister(0x16, 0xAA);
/* - Horizontal end address F0 конец*/
389
lcdWriteRegister(0x14, 0x50);
/* - Vertical start address, low byte */
390
lcdWriteRegister(0x15, 0x00);
/* - Vertical start address, high byte */
391
lcdWriteRegister(0x17, 0x50);
/* - Vertical end address, low byte 90 конец*/
392
lcdWriteRegister(0x18, 0x01);
/* - Vertical end address, high byte 01 конец*/
393
lcdWriteCommand (0x03);
/* - RAM access mode */
394
395
uint32_t i = 100;
396
i *=240;
397
do
{
398
lcdWriteData (color >> 8);
399
//delayMicroseconds(10);
400
lcdWriteData (color);
401
//delayMicroseconds(10);
402
}
while
( i-- );
403
}
фотка при заливе красным цветом
ZEL, попробуй библиотеку u8g2
Неужели хоть кто - то отозвался!!! Спасибо попробую.. гдето вроде уже скачана ...
Полное описание проблеммы здесь:
http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=41#comment-411100
Валерон.
Я не пишу для ардуины. Поэтому почитай как пишутся скетчи. Там все доступно.
Теперь попробую описать примерный алгоритм.
Сначала в SETUP обозначаешь, какие ноги как будут называться ( у тебя это в define) и в каком режиме будут работать -- pinMode(LCD_D0, OUTPUT); В принципе все ноги на цифровой выход.
Далее инициализация дисплея.
Дальше в LOOP . Пишешь координаты прямоугольника в регистры. Если весь экран, то начало по Х=0, конец Х=239 ,
начало по Y=0, конец по Y=399. И команду 0х03 . Затем цикл на 240*400=96000 , внутри которого пишешь
цвет ( это у тебя в программе есть ) .
Ну а дальше что душа пожелает.
Все подпрограммы с Read в урну, читать ничего не нужно. Контроллер ты знаешь.
Да, на будущее. Экран может работать в разных режимах. Развертка может быть слева направо и наоборот,
снизу вверх и наоборот. По вертикали или по горизонтали. цвет может выводиться в RGB или в BGR. Все это задается в
регистрах определенными битами.
В какой режим устанавливает дисплей эта инициализация неизвестно. Без даташита не подскажу.
croc19 я тоже не пишу для ардуино и не планирую. Програмированием занимаюсь от случая к случаю. В даный момент я просто хочу понять алгоритм програмирования диспов. Да и ардуино досталась на халяву, вот решил заюзать первый попавшийся дисп. Я в основном работаю с пиками. Ладно это все лирика.
Алгоритм понял, буду пробывать, спасибо.
Ксати функция чтения не мешает. Этот скетч рабочий вариант, правленный для моего диспа.
Не мешает, это да. Но лишнее в программе не камильфо.
Можешь покопать библиотеку из которой инициализация. В ней может быть поворот экрана.
С выводом прямоугольников понятно. В них можно выводить и картинки.
А регистры 1А, 1В, 1С установка вывода в нужную стартовую точку.
croc19, разве у меня заливка не првильно релизована?
А регистры 1А, 1В, 1С установка вывода в нужную стартовую точку.
Мне кажется они устанавливают размер экрана.
Все правильно. Делеи можешь убрать. Дисплей гораздо быстрее, чем ардуина.
Просто у тебя в программе большая мешанина. А я не спец в скетчах. Я напрямую с АВР дружу.
Блин, заливка правильная. Почему же полосы появляются другого цвета. Даже когда квадрат рисую на фоне, тоже полосы другого цвета в квадрате появляются.
Лишнее убери и выложи прогу.
Лишнее убери и выложи прогу.
001
/*********************************************************************
002
*
003
* PIN ASSIGNMENTS
004
*
005
* You can alter the pin assignments to reflect any configuration you
006
* wish. I've provided the default shield configuration, which works
007
* on both the Arduino UNO and Mega 2560.
008
*
009
*********************************************************************/
010
//-- Arduino UNO or Mega 2560 Plugged as shield
011
#define LCD_RST 41//4
012
#define LCD_CS 40//A3
013
#define LCD_RS 38//A2
014
#define LCD_WR 39//A1
015
#define LCD_RD 45//A0
016
017
#define LCD_D0 22//8
018
#define LCD_D1 23//9
019
#define LCD_D2 24//2
020
#define LCD_D3 25//3
021
#define LCD_D4 26//4
022
#define LCD_D5 27//
023
#define LCD_D6 28//6
024
#define LCD_D7 29//7
025
026
027
#define BLACK 0x0000
028
#define BLUE 0x001F
029
#define RED 0xF800
030
#define GREEN 0x07E0
031
#define CYAN 0x07FF
032
#define MAGENTA 0xF81F
033
#define YELLOW 0xFFE0
034
#define WHITE 0xFFFF
035
036
/*********************************************************************
037
*
038
* Attempt to initialize and reset LCD, then read its Driver Code
039
* at register index 0.
040
*
041
*********************************************************************/
042
void
setup
() {
043
lcdInit();
044
delay(100);
045
lcdReset();
046
delay(500);
047
lcdRegisterOther();
// инит
048
}
049
050
void
loop
() {
051
lcd_clr(RED);
// заливка всего экрана
052
delay(500);
053
lcd_clr(GREEN);
054
delay(500);
055
}
056
057
void
lcdRegisterOther() {
058
lcdWriteRegister(0xC0, 0x00);
059
lcdWriteRegister(0xC0, 0x02);
060
delay(10);
061
lcdWriteRegister(0xC0, 0x00);
062
lcdWriteRegister(0x68, 0x41);
063
lcdWriteRegister(0x69, 0x7D);
064
lcdWriteRegister(0x01, 0x02);
065
lcdWriteRegister(0x08, 0x00);
066
lcdWriteRegister(0x10, 0xF0);
067
lcdWriteRegister(0x11, 0x90);
068
lcdWriteRegister(0x12, 0x01);
069
lcdWriteRegister(0x1E, 0x50);
070
lcdWriteRegister(0x1D, 0x07);
071
lcdWriteRegister(0x1A, 0xEF);
072
lcdWriteRegister(0x1B, 0x8E);
073
lcdWriteRegister(0x1C, 0x01);
074
lcdWriteRegister(0x30, 0x81);
075
lcdWriteRegister(0x33, 0x02);
076
lcdWriteRegister(0x42, 0x70);
077
lcdWriteRegister(0x43, 0x01);
078
lcdWriteRegister(0x44, 0x3F);
079
lcdWriteRegister(0x45, 0x14);
080
lcdWriteRegister(0x46, 0x0F);
081
lcdWriteRegister(0x4A, 0x01);
082
lcdWriteRegister(0x4B, 0xA8);
083
lcdWriteRegister(0x4C, 0x12);
084
lcdWriteRegister(0x5A, 0x00);
085
lcdWriteRegister(0x62, 0x52);
086
lcdWriteRegister(0x65, 0x02);
087
lcdWriteRegister(0x66, 0x06);
088
lcdWriteRegister(0x6A, 0x02);
089
lcdWriteRegister(0x81, 0x44);
090
lcdWriteRegister(0x82, 0x2D);
091
lcdWriteRegister(0x83, 0x25);
092
lcdWriteRegister(0x84, 0x17);
093
lcdWriteRegister(0x85, 0x27);
094
lcdWriteRegister(0x86, 0x17);
095
lcdWriteRegister(0x90, 0x25);
096
lcdWriteRegister(0x91, 0x05);
097
lcdWriteRegister(0x92, 0x15);
098
lcdWriteRegister(0x31, 0x01);
099
lcdWriteRegister(0x19, 0x01);
100
lcdWriteRegister(0x3E, 0x01);
101
delay(120);
102
}
103
104
void
lcdInit() {
105
pinMode(LCD_CS, OUTPUT);
106
digitalWrite(LCD_CS, HIGH);
107
pinMode(LCD_RS, OUTPUT);
108
digitalWrite(LCD_RS, HIGH);
109
pinMode(LCD_WR, OUTPUT);
110
digitalWrite(LCD_WR, HIGH);
111
pinMode(LCD_RD, OUTPUT);
112
digitalWrite(LCD_RD, HIGH);
113
pinMode(LCD_RST, OUTPUT);
114
digitalWrite(LCD_RST, HIGH);
115
}
116
117
void
lcdReset() {
118
digitalWrite(LCD_RST, LOW);
119
delay(50);
120
digitalWrite(LCD_RST, HIGH);
121
delay(50);
122
}
123
124
void
lcdWrite8(uint8_t data) {
// было uint16_t
125
digitalWrite(LCD_D0, data & 1);
126
digitalWrite(LCD_D1, (data & 2) >> 1);
127
digitalWrite(LCD_D2, (data & 4) >> 2);
128
digitalWrite(LCD_D3, (data & 8) >> 3);
129
digitalWrite(LCD_D4, (data & 16) >> 4);
130
digitalWrite(LCD_D5, (data & 32) >> 5);
131
digitalWrite(LCD_D6, (data & 64) >> 6);
132
digitalWrite(LCD_D7, (data & 128) >> 7);
133
}
134
135
uint16_t lcdRead8() {
136
uint8_t result = digitalRead(LCD_D7);
// было uint16_t
137
result <<= 1;
138
result |= digitalRead(LCD_D6);
139
result <<= 1;
140
result |= digitalRead(LCD_D5);
141
result <<= 1;
142
result |= digitalRead(LCD_D4);
143
result <<= 1;
144
result |= digitalRead(LCD_D3);
145
result <<= 1;
146
result |= digitalRead(LCD_D2);
147
result <<= 1;
148
result |= digitalRead(LCD_D1);
149
result <<= 1;
150
result |= digitalRead(LCD_D0);
151
152
return
result;
153
}
154
155
void
lcdSetWriteDir() {
156
pinMode(LCD_D0, OUTPUT);
157
pinMode(LCD_D1, OUTPUT);
158
pinMode(LCD_D2, OUTPUT);
159
pinMode(LCD_D3, OUTPUT);
160
pinMode(LCD_D4, OUTPUT);
161
pinMode(LCD_D5, OUTPUT);
162
pinMode(LCD_D6, OUTPUT);
163
pinMode(LCD_D7, OUTPUT);
164
}
165
void
lcdSetReadDir() {
166
pinMode(LCD_D0, INPUT);
167
pinMode(LCD_D1, INPUT);
168
pinMode(LCD_D2, INPUT);
169
pinMode(LCD_D3, INPUT);
170
pinMode(LCD_D4, INPUT);
171
pinMode(LCD_D5, INPUT);
172
pinMode(LCD_D6, INPUT);
173
pinMode(LCD_D7, INPUT);
174
}
175
176
void
lcdWriteData(uint8_t data) {
177
178
lcdSetWriteDir();
179
digitalWrite(LCD_CS, LOW);
180
digitalWrite(LCD_RS, HIGH);
181
digitalWrite(LCD_RD, HIGH);
182
digitalWrite(LCD_WR, HIGH);
183
184
lcdWrite8(data);
185
digitalWrite(LCD_WR, LOW);
186
delayMicroseconds(2);
187
digitalWrite(LCD_WR, HIGH);
188
digitalWrite(LCD_CS, HIGH);
189
}
190
191
192
void
lcdWriteCommand(uint8_t command) {
193
lcdSetWriteDir();
194
digitalWrite(LCD_CS, LOW);
195
digitalWrite(LCD_RS, LOW);
196
digitalWrite(LCD_RD, HIGH);
197
digitalWrite(LCD_WR, HIGH);
198
199
lcdWrite8(command);
200
digitalWrite(LCD_WR, LOW);
201
delayMicroseconds(2);
202
digitalWrite(LCD_WR, HIGH);
203
204
digitalWrite(LCD_CS, HIGH);
205
digitalWrite(LCD_RS, HIGH);
206
}
207
208
void
lcdWriteRegister(uint8_t addr, uint8_t data){
209
lcdWriteCommand(addr);
210
lcdWriteData(data);
211
}
212
213
void
lcd_clr(uint16_t color) {
//заливка цветом
214
215
lcdWriteRegister(0x13, 0x00);
/* - Horizontal start address */
216
lcdWriteRegister(0x16, 0xEF);
/* - Horizontal end address F0 конец*/
217
lcdWriteRegister(0x14, 0x00);
/* - Vertical start address, low byte */
218
lcdWriteRegister(0x15, 0x00);
/* - Vertical start address, high byte */
219
lcdWriteRegister(0x17, 0x8F);
/* - Vertical end address, low byte 90 конец*/
220
lcdWriteRegister(0x18, 0x01);
/* - Vertical end address, high byte 01 конец*/
221
lcdWriteCommand (0x03);
/* - RAM access mode */
222
223
uint32_t i = 400;
224
i *=240;
// 96000
225
do
{
226
lcdWriteData (color >> 8);
227
lcdWriteData (color);
228
}
while
( i-- );
229
}
Лишнее убери и выложи прогу.
...
Без второго подопытного диспа, скетч кажется норм.
Собрал за ночь эксперимент на макетке , дисплей от LG GM360i .
Да хорошо эта заливка работает , и это на 10ком резисторах.
Дисплей работает гораздо быстрее ардуины , поэтому попробовал ускорить этот код.
Заливка цветом:
22сек - изначально заливает
14сек - заменил на выдачу байта сразу в порт PORTA , а не по каждому пину.
10сек - убрал CS, RD
8сек - заменил медленные digitalWrite на быстрые битовые ( ускорение может быть до 20раз . из либы CyberLib.h )
// можно ускорить через cbi sbi http://arduino.ru/forum/proekty/miniatyurnyi-komnatnyi-termometr-na-attiny85-c-oled#comment-32533 .
01
#ifndef cbi
02
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
03
#endif
04
#ifndef sbi
05
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
06
#endif
07
08
#define RS_High sbi(PORTD,7) // PD 7 D38
09
#define RS_Low cbi(PORTD,7) // PD 7 D38
10
11
#define WR_High sbi(PORTG,2) // PG 2 D39
12
#define WR_Low cbi(PORTG,2) // PG 2 D39
или конструкциями из любой библиотек (adafruit, UTFT, ...)
Чтоб не использовать счетчик, заменил delayMicroseconds(2); после WR_Low; на еще один WR_Low; , чтоб добавить небольшую задержку , возможно это сказался завал импульса через 10ком резистор, надо пробовать как будет на преобразователях уровнях или 3.3в логике.
11 и 19 пины диспа (IF_mode IF1 IF0) пока ниуда не подключал, не экспериментировал с битностью, работает и так .
ваш скетч не требующий либ, немного ускоренный:
001
/*********************************************************************
002
*
003
* PIN ASSIGNMENTS
004
*
005
* You can alter the pin assignments to reflect any configuration you
006
* wish. I've provided the default shield configuration, which works
007
* on both the Arduino UNO and Mega 2560.
008
*
009
*********************************************************************/
010
//-- Arduino UNO or Mega 2560 Plugged as shield
011
#define LCD_RST 41//4
012
#define LCD_CS 40//A3
013
#define LCD_RS 38//A2
014
#define RS_High PORTD|=B10000000 // PD 7 D38
015
#define RS_Low PORTD&=B01111111 // PD 7 D38
016
#define LCD_WR 39//A1
017
#define WR_High PORTG|=B00000100 // PG 2 D39
018
#define WR_Low PORTG&=B11111011 // PG 2 D39
019
#define LCD_RD 42//45 A0
020
021
#define LCD_D0 22//8
022
#define LCD_D1 23//9
023
#define LCD_D2 24//2
024
#define LCD_D3 25//3
025
#define LCD_D4 26//4
026
#define LCD_D5 27//
027
#define LCD_D6 28//6
028
#define LCD_D7 29//7
029
030
031
#define BLACK 0x0000
032
#define BLUE 0x001F
033
#define RED 0xF800
034
#define GREEN 0x07E0
035
#define CYAN 0x07FF
036
#define MAGENTA 0xF81F
037
#define YELLOW 0xFFE0
038
#define WHITE 0xFFFF
039
040
041
042
043
/*********************************************************************
044
*
045
* Attempt to initialize and reset LCD, then read its Driver Code
046
* at register index 0.
047
*
048
*********************************************************************/
049
void
setup
() {
050
lcdInit();
051
delay(100);
052
lcdReset();
053
delay(500);
054
lcdRegisterOther();
// инит
055
}
056
057
void
loop
() {
058
lcd_clr(RED);
// заливка всего экрана
059
delay(500);
060
lcd_clr(GREEN);
061
delay(500);
062
}
063
064
void
lcdRegisterOther() {
065
lcdWriteRegister(0xC0, 0x00);
066
lcdWriteRegister(0xC0, 0x02);
067
delay(10);
068
lcdWriteRegister(0xC0, 0x00);
069
lcdWriteRegister(0x68, 0x41);
070
lcdWriteRegister(0x69, 0x7D);
071
lcdWriteRegister(0x01, 0x02);
072
lcdWriteRegister(0x08, 0x00);
073
lcdWriteRegister(0x10, 0xF0);
074
lcdWriteRegister(0x11, 0x90);
075
lcdWriteRegister(0x12, 0x01);
076
lcdWriteRegister(0x1E, 0x50);
077
lcdWriteRegister(0x1D, 0x07);
078
lcdWriteRegister(0x1A, 0xEF);
079
lcdWriteRegister(0x1B, 0x8E);
080
lcdWriteRegister(0x1C, 0x01);
081
lcdWriteRegister(0x30, 0x81);
082
lcdWriteRegister(0x33, 0x02);
083
lcdWriteRegister(0x42, 0x70);
084
lcdWriteRegister(0x43, 0x01);
085
lcdWriteRegister(0x44, 0x3F);
086
lcdWriteRegister(0x45, 0x14);
087
lcdWriteRegister(0x46, 0x0F);
088
lcdWriteRegister(0x4A, 0x01);
089
lcdWriteRegister(0x4B, 0xA8);
090
lcdWriteRegister(0x4C, 0x12);
091
lcdWriteRegister(0x5A, 0x00);
092
lcdWriteRegister(0x62, 0x52);
093
lcdWriteRegister(0x65, 0x02);
094
lcdWriteRegister(0x66, 0x06);
095
lcdWriteRegister(0x6A, 0x02);
096
lcdWriteRegister(0x81, 0x44);
097
lcdWriteRegister(0x82, 0x2D);
098
lcdWriteRegister(0x83, 0x25);
099
lcdWriteRegister(0x84, 0x17);
100
lcdWriteRegister(0x85, 0x27);
101
lcdWriteRegister(0x86, 0x17);
102
lcdWriteRegister(0x90, 0x25);
103
lcdWriteRegister(0x91, 0x05);
104
lcdWriteRegister(0x92, 0x15);
105
lcdWriteRegister(0x31, 0x01);
106
lcdWriteRegister(0x19, 0x01);
107
lcdWriteRegister(0x3E, 0x01);
108
delay(120);
109
}
110
111
void
lcdInit() {
112
pinMode(LCD_CS, OUTPUT);
113
// digitalWrite(LCD_CS, HIGH);
114
digitalWrite(LCD_CS, LOW);
115
pinMode(LCD_RS, OUTPUT);
116
digitalWrite(LCD_RS, HIGH);
117
pinMode(LCD_WR, OUTPUT);
118
digitalWrite(LCD_WR, HIGH);
119
pinMode(LCD_RD, OUTPUT);
120
digitalWrite(LCD_RD, HIGH);
121
pinMode(LCD_RST, OUTPUT);
122
digitalWrite(LCD_RST, HIGH);
123
}
124
125
void
lcdReset() {
126
digitalWrite(LCD_RST, LOW);
127
delay(50);
128
digitalWrite(LCD_RST, HIGH);
129
delay(50);
130
}
131
132
void
lcdWrite8(uint8_t data) {
// было uint16_t
133
/*
134
digitalWrite(LCD_D0, data & 1);
135
digitalWrite(LCD_D1, (data & 2) >> 1);
136
digitalWrite(LCD_D2, (data & 4) >> 2);
137
digitalWrite(LCD_D3, (data & 8) >> 3);
138
digitalWrite(LCD_D4, (data & 16) >> 4);
139
digitalWrite(LCD_D5, (data & 32) >> 5);
140
digitalWrite(LCD_D6, (data & 64) >> 6);
141
digitalWrite(LCD_D7, (data & 128) >> 7);
142
*/
143
PORTA=data;
144
}
145
146
uint16_t lcdRead8() {
147
uint8_t result = digitalRead(LCD_D7);
// было uint16_t
148
result <<= 1;
149
result |= digitalRead(LCD_D6);
150
result <<= 1;
151
result |= digitalRead(LCD_D5);
152
result <<= 1;
153
result |= digitalRead(LCD_D4);
154
result <<= 1;
155
result |= digitalRead(LCD_D3);
156
result <<= 1;
157
result |= digitalRead(LCD_D2);
158
result <<= 1;
159
result |= digitalRead(LCD_D1);
160
result <<= 1;
161
result |= digitalRead(LCD_D0);
162
163
return
result;
164
}
165
166
void
lcdSetWriteDir() {
167
pinMode(LCD_D0, OUTPUT);
168
pinMode(LCD_D1, OUTPUT);
169
pinMode(LCD_D2, OUTPUT);
170
pinMode(LCD_D3, OUTPUT);
171
pinMode(LCD_D4, OUTPUT);
172
pinMode(LCD_D5, OUTPUT);
173
pinMode(LCD_D6, OUTPUT);
174
pinMode(LCD_D7, OUTPUT);
175
}
176
void
lcdSetReadDir() {
177
pinMode(LCD_D0, INPUT);
178
pinMode(LCD_D1, INPUT);
179
pinMode(LCD_D2, INPUT);
180
pinMode(LCD_D3, INPUT);
181
pinMode(LCD_D4, INPUT);
182
pinMode(LCD_D5, INPUT);
183
pinMode(LCD_D6, INPUT);
184
pinMode(LCD_D7, INPUT);
185
}
186
187
void
lcdWriteData(uint8_t data) {
188
189
lcdSetWriteDir();
190
// digitalWrite(LCD_CS, LOW);
191
RS_High;
// digitalWrite(LCD_RS, HIGH);
192
// digitalWrite(LCD_RD, HIGH);
193
WR_High;
// digitalWrite(LCD_WR, HIGH);
194
195
lcdWrite8(data);
196
WR_Low; WR_Low;
// digitalWrite(LCD_WR, LOW);
197
// delayMicroseconds(2);
198
WR_High;
// digitalWrite(LCD_WR, HIGH);
199
// digitalWrite(LCD_CS, HIGH);
200
}
201
202
203
void
lcdWriteCommand(uint8_t command) {
204
lcdSetWriteDir();
205
// digitalWrite(LCD_CS, LOW);
206
RS_Low;
// digitalWrite(LCD_RS, LOW);
207
// digitalWrite(LCD_RD, HIGH);
208
WR_High;
//digitalWrite(LCD_WR, HIGH);
209
210
lcdWrite8(command);
211
WR_Low; WR_Low;
// digitalWrite(LCD_WR, LOW);
212
// delayMicroseconds(2);
213
WR_High;
// digitalWrite(LCD_WR, HIGH);
214
// digitalWrite(LCD_CS, HIGH);
215
RS_High;
// digitalWrite(LCD_RS, HIGH);
216
}
217
218
void
lcdWriteRegister(uint8_t addr, uint8_t data){
219
lcdWriteCommand(addr);
220
lcdWriteData(data);
221
}
222
223
void
lcd_clr(uint16_t color) {
//заливка цветом
224
225
lcdWriteRegister(0x13, 0x00);
/* - Horizontal start address */
226
lcdWriteRegister(0x16, 0xEF);
/* - Horizontal end address F0 конец*/
227
lcdWriteRegister(0x14, 0x00);
/* - Vertical start address, low byte */
228
lcdWriteRegister(0x15, 0x00);
/* - Vertical start address, high byte */
229
lcdWriteRegister(0x17, 0x8F);
/* - Vertical end address, low byte 90 конец*/
230
lcdWriteRegister(0x18, 0x01);
/* - Vertical end address, high byte 01 конец*/
231
lcdWriteCommand (0x03);
/* - RAM access mode */
232
233
uint32_t i = 400;
// uint32_t
234
i *=240;
// 96000
235
do
{
236
lcdWriteData (color >> 8);
237
lcdWriteData (color);
238
}
while
( i-- );
239
}
// да проскакивала синяя заливка, но это при попытках чрезмерно ускорить через заваливающие фронты 10ком резисторы. Возможно где то у вас не контакт в схеме или "залипуха" с припоя или флюса. М.б. из-за питания. Дисп от LG 360i запитал от 3.3в через 33 0м резистор и белый светодиод + светодиоды подсветки, в итоге на питание диспа идет 2,7в .
//// надо бы закинуть этот инит в либу ( adafruit, utft , mcufrieng_kvb ), и регистры рисования подменить. Тогда и проще рисовать будет. B библиотеках заливка должна осуществляться еще быстрее, т.к. изпользуется автоинкримент средствами контроллера дисплея, при ненадобности заново вводить цвет и координаты последующегося пикселя в строке.
slider с твоим скетчем что-то у меня заливается только четверть экрана, хотя заливка написана на весь экран. Может где небольшой косячок есть, найти не могу.
У себя в скетче переделал:
Экран стал заливаться за 3 сек. Но проблема с полосами осталась.
подправил на обратно
233
uint32_t i = 400;
на вид около 0.5сек бешенная заливка !!! для arduino mega2560 , и это еще на 8 бит , а не 16.
потестируйте
001
#define LCD_RST 41//4
002
#define LCD_CS 40//A3
003
#define LCD_RS 38//A2
004
#define RS_High PORTD|=B10000000 // PD 7 D38
005
#define RS_Low PORTD&=B01111111 // PD 7 D38
006
#define LCD_WR 39//A1
007
#define WR_High PORTG|=B00000100 // PG 2 D39
008
#define WR_Low PORTG&=B11111011 // PG 2 D39
009
#define LCD_RD 42//45 A0
010
011
#define LCD_D0 22//8
012
#define LCD_D1 23//9
013
#define LCD_D2 24//2
014
#define LCD_D3 25//3
015
#define LCD_D4 26//4
016
#define LCD_D5 27//
017
#define LCD_D6 28//6
018
#define LCD_D7 29//7
019
020
021
#define BLACK 0x0000
022
#define BLUE 0x001F
023
#define RED 0xF800
024
#define GREEN 0x07E0
025
#define CYAN 0x07FF
026
#define MAGENTA 0xF81F
027
#define YELLOW 0xFFE0
028
#define WHITE 0xFFFF
029
030
/*********************************************************************
031
*
032
* Attempt to initialize and reset LCD, then read its Driver Code
033
* at register index 0.
034
*
035
*********************************************************************/
036
void
setup
() {
037
lcdSetWriteDir();
// конфиг . пинов на выход
038
lcdInit();
039
delay(100);
040
lcdReset();
041
delay(500);
042
lcdRegisterOther();
// инит
043
}
044
045
void
loop
() {
046
lcd_clr(RED);
// заливка всего экрана
047
delay(500);
048
lcd_clr(GREEN);
049
delay(500);
050
}
051
052
void
lcdRegisterOther() {
053
lcdWriteRegister(0xC0, 0x00);
054
lcdWriteRegister(0xC0, 0x02);
055
delay(10);
056
lcdWriteRegister(0xC0, 0x00);
057
lcdWriteRegister(0x68, 0x41);
058
lcdWriteRegister(0x69, 0x7D);
059
lcdWriteRegister(0x01, 0x02);
060
lcdWriteRegister(0x08, 0x00);
061
lcdWriteRegister(0x10, 0xF0);
062
lcdWriteRegister(0x11, 0x90);
063
lcdWriteRegister(0x12, 0x01);
064
lcdWriteRegister(0x1E, 0x50);
065
lcdWriteRegister(0x1D, 0x07);
066
lcdWriteRegister(0x1A, 0xEF);
067
lcdWriteRegister(0x1B, 0x8E);
068
lcdWriteRegister(0x1C, 0x01);
069
lcdWriteRegister(0x30, 0x81);
070
lcdWriteRegister(0x33, 0x02);
071
lcdWriteRegister(0x42, 0x70);
072
lcdWriteRegister(0x43, 0x01);
073
lcdWriteRegister(0x44, 0x3F);
074
lcdWriteRegister(0x45, 0x14);
075
lcdWriteRegister(0x46, 0x0F);
076
lcdWriteRegister(0x4A, 0x01);
077
lcdWriteRegister(0x4B, 0xA8);
078
lcdWriteRegister(0x4C, 0x12);
079
lcdWriteRegister(0x5A, 0x00);
080
lcdWriteRegister(0x62, 0x52);
081
lcdWriteRegister(0x65, 0x02);
082
lcdWriteRegister(0x66, 0x06);
083
lcdWriteRegister(0x6A, 0x02);
084
lcdWriteRegister(0x81, 0x44);
085
lcdWriteRegister(0x82, 0x2D);
086
lcdWriteRegister(0x83, 0x25);
087
lcdWriteRegister(0x84, 0x17);
088
lcdWriteRegister(0x85, 0x27);
089
lcdWriteRegister(0x86, 0x17);
090
lcdWriteRegister(0x90, 0x25);
091
lcdWriteRegister(0x91, 0x05);
092
lcdWriteRegister(0x92, 0x15);
093
lcdWriteRegister(0x31, 0x01);
094
lcdWriteRegister(0x19, 0x01);
095
096
lcdWriteRegister(0x13, 0x00);
/* - Horizontal start address */
097
lcdWriteRegister(0x16, 0xEF);
/* - Horizontal end address F0 конец*/
098
lcdWriteRegister(0x14, 0x00);
/* - Vertical start address, low byte */
099
lcdWriteRegister(0x15, 0x00);
/* - Vertical start address, high byte */
100
lcdWriteRegister(0x17, 0x8F);
/* - Vertical end address, low byte 90 конец*/
101
lcdWriteRegister(0x18, 0x01);
/* - Vertical end address, high byte 01 конец*/
102
lcdWriteCommand (0x03);
103
104
lcdWriteRegister(0x3E, 0x01);
105
delay(120);
106
}
107
108
void
lcdInit() {
109
pinMode(LCD_CS, OUTPUT); digitalWrite(LCD_CS, LOW);
110
pinMode(LCD_RS, OUTPUT); digitalWrite(LCD_RS, HIGH);
111
pinMode(LCD_WR, OUTPUT); digitalWrite(LCD_WR, HIGH);
112
pinMode(LCD_RD, OUTPUT); digitalWrite(LCD_RD, HIGH);
113
pinMode(LCD_RST, OUTPUT); digitalWrite(LCD_RST, HIGH);
114
}
115
116
void
lcdReset() {
117
digitalWrite(LCD_RST, LOW);
118
delay(50);
119
digitalWrite(LCD_RST, HIGH);
120
delay(50);
121
}
122
123
void
lcdWrite8(uint8_t data) {
// было uint16_t
124
PORTA=data;
125
}
126
127
128
129
void
lcdSetWriteDir() {
130
pinMode(LCD_D0, OUTPUT);
131
pinMode(LCD_D1, OUTPUT);
132
pinMode(LCD_D2, OUTPUT);
133
pinMode(LCD_D3, OUTPUT);
134
pinMode(LCD_D4, OUTPUT);
135
pinMode(LCD_D5, OUTPUT);
136
pinMode(LCD_D6, OUTPUT);
137
pinMode(LCD_D7, OUTPUT);
138
}
139
140
141
void
lcdWriteData(uint8_t data) {
142
143
// digitalWrite(LCD_CS, LOW);
144
RS_High;
// digitalWrite(LCD_RS, HIGH);
145
// digitalWrite(LCD_RD, HIGH);
146
WR_High;
// digitalWrite(LCD_WR, HIGH);
147
148
lcdWrite8(data);
149
150
WR_Low; WR_Low;
// digitalWrite(LCD_WR, LOW);
151
// delayMicroseconds(2);
152
WR_High;
// digitalWrite(LCD_WR, HIGH);
153
// digitalWrite(LCD_CS, HIGH);
154
}
155
156
157
void
lcdWriteCommand(uint8_t command) {
158
// digitalWrite(LCD_CS, LOW);
159
RS_Low;
// digitalWrite(LCD_RS, LOW);
160
// digitalWrite(LCD_RD, HIGH);
161
WR_High;
//digitalWrite(LCD_WR, HIGH);
162
163
lcdWrite8(command);
164
165
WR_Low; WR_Low;
// digitalWrite(LCD_WR, LOW);
166
//delayMicroseconds(2);
167
WR_High;
// digitalWrite(LCD_WR, HIGH);
168
// digitalWrite(LCD_CS, HIGH);
169
RS_High;
170
}
171
172
void
lcdWriteRegister(uint8_t addr, uint8_t data){
173
lcdWriteCommand(addr);
174
lcdWriteData(data);
175
}
176
177
void
lcd_clr(uint16_t color) {
//заливка цветом
178
179
lcdWriteRegister(0x13, 0x00);
/* - Horizontal start address */
180
lcdWriteRegister(0x16, 0xEF);
/* - Horizontal end address F0 конец*/
181
lcdWriteRegister(0x14, 0x00);
/* - Vertical start address, low byte */
182
lcdWriteRegister(0x15, 0x00);
/* - Vertical start address, high byte */
183
lcdWriteRegister(0x17, 0x8F);
/* - Vertical end address, low byte 90 конец*/
184
lcdWriteRegister(0x18, 0x01);
/* - Vertical end address, high byte 01 конец*/
185
lcdWriteCommand (0x03);
/* - RAM access mode */
186
187
// digitalWrite(LCD_CS, LOW);
188
RS_High;
// digitalWrite(LCD_RS, HIGH);
189
// digitalWrite(LCD_RD, HIGH);
190
WR_High;
// digitalWrite(LCD_WR, HIGH);
191
192
uint32_t i = 400;
//432
193
i *=240;
194
do
{
195
lcdWrite8 (color >> 8);
196
WR_Low; WR_Low;
// digitalWrite(LCD_WR, LOW);
197
WR_High;
// digitalWrite(LCD_WR, HIGH);
198
lcdWrite8 (color);
199
WR_Low; WR_Low;
// digitalWrite(LCD_WR, LOW);
200
WR_High;
// digitalWrite(LCD_WR, HIGH);
201
}
while
( i-- );
202
// digitalWrite(LCD_CS, HIGH);
203
RS_High;
// digitalWrite(LCD_RS, HIGH);
204
}
RD 42 на свой 45вспомните поменять .
лог читалки тож по 00 регистру лежит id 0x0A0A
001
// читалка ID дисплеев V3.1beta только для 8ми битных дисплеев,
002
003
1p 2p 3p 4p 5p 6p 7p 8parameter(
byte
)
004
005
register 00 0A 0A 0A 0A 0A 0A 0A 0A ***
006
007
register 00 0A 0A 0A 0A 0A 0A 0A 0A ***
008
register 01 00 00 00 00 00 00 00 00
009
register 02 01 01 01 01 01 01 01 01
010
register 03 04 23 0F 29 07 2C 3B 22
011
register 04 01 01 01 01 01 01 01 01 ***
012
register 05 01 01 01 01 01 01 01 01
013
register 06 01 01 01 01 01 01 01 01
014
register 07 01 01 01 01 01 01 01 01
015
register 08 02 02 02 02 02 02 02 02
016
register 09 01 01 01 01 01 01 01 01
017
register 0A 01 01 01 01 01 01 01 01
018
register 0B 01 01 01 01 01 01 01 01
019
register 0C 01 01 01 01 01 01 01 01
020
register 0D 01 01 01 01 01 01 01 01
021
register 0E 01 01 01 01 01 01 01 01
022
register 0F 01 01 01 01 01 01 01 01
023
register 10 F0 F0 F0 F0 F0 F0 F0 F0
024
register 11 90 90 90 90 90 90 90 90
025
register 12 01 01 01 01 01 01 01 01
026
register 13 00 00 00 00 00 00 00 00
027
register 14 00 00 00 00 00 00 00 00
028
register 15 00 00 00 00 00 00 00 00
029
register 16 00 00 00 00 00 00 00 00
030
register 17 00 00 00 00 00 00 00 00
031
register 18 00 00 00 00 00 00 00 00
032
register 19 00 00 00 00 00 00 00 00
033
register 1A 00 00 00 00 00 00 00 00
034
register 1B 00 00 00 00 00 00 00 00
035
register 1C 00 00 00 00 00 00 00 00
036
register 1D 00 00 00 00 00 00 00 00
037
register 1E 50 50 50 50 50 50 50 50
038
register 1F 01 01 01 01 01 01 01 01
039
register 20 00 00 00 00 00 00 00 00
040
register 21 00 00 00 00 00 00 00 00
041
register 22 00 00 00 00 00 00 00 00
042
register 23 00 00 00 00 00 00 00 00
043
register 24 00 00 00 00 00 00 00 00
044
register 25 00 00 00 00 00 00 00 00
045
register 26 01 01 01 01 01 01 01 01
046
register 27 01 01 01 01 01 01 01 01
047
register 28 01 01 01 01 01 01 01 01
048
register 29 01 01 01 01 01 01 01 01
049
register 2A 01 01 01 01 01 01 01 01
050
register 2B 01 01 01 01 01 01 01 01
051
register 2C 01 01 01 01 01 01 01 01
052
register 2D 01 01 01 01 01 01 01 01
053
register 2E 01 01 01 01 01 01 01 01
054
register 2F 01 01 01 01 01 01 01 01
055
register 30 80 80 80 80 80 80 80 80
056
register 31 00 00 00 00 00 00 00 00
057
register 32 01 01 01 01 01 01 01 01
058
register 33 00 00 00 00 00 00 00 00
059
register 34 00 00 00 00 00 00 00 00
060
register 35 00 00 00 00 00 00 00 00
061
register 36 00 00 00 00 00 00 00 00
062
register 37 00 00 00 00 00 00 00 00
063
register 38 00 00 00 00 00 00 00 00
064
register 39 00 00 00 00 00 00 00 00
065
register 3A 00 00 00 00 00 00 00 00
066
register 3B 00 00 00 00 00 00 00 00
067
register 3C 00 00 00 00 00 00 00 00
068
register 3D 00 00 00 00 00 00 00 00
069
register 3E 00 00 00 00 00 00 00 00
070
register 3F 00 00 00 00 00 00 00 00
071
register 40 00 00 00 00 00 00 00 00
072
register 41 01 01 01 01 01 01 01 01
073
register 42 33 33 33 33 33 33 33 33
074
register 43 01 01 01 01 01 01 01 01
075
register 44 09 09 09 09 09 09 09 09
076
register 45 02 02 02 02 02 02 02 02
077
register 46 05 05 05 05 05 05 05 05
078
register 47 01 01 01 01 01 01 01 01
079
register 48 01 01 01 01 01 01 01 01
080
register 49 01 01 01 01 01 01 01 01
081
register 4A 00 00 00 00 00 00 00 00
082
register 4B 00 00 00 00 00 00 00 00
083
register 4C 06 06 06 06 06 06 06 06
084
register 4D 01 01 01 01 01 01 01 01
085
register 4E 01 01 01 01 01 01 01 01
086
register 4F 00 00 00 00 00 00 00 00
087
register 50 00 00 00 00 00 00 00 00
088
register 51 00 00 00 00 00 00 00 00
089
register 52 01 01 01 01 01 01 01 01
090
register 53 01 01 01 01 01 01 01 01
091
register 54 02 02 02 02 02 02 02 02
092
register 55 01 01 01 01 01 01 01 01
093
register 56 01 01 01 01 01 01 01 01
094
register 57 01 01 01 01 01 01 01 01
095
register 58 01 01 01 01 01 01 01 01
096
register 59 01 01 01 01 01 01 01 01
097
register 5A 00 00 00 00 00 00 00 00
098
register 5B 00 00 00 00 00 00 00 00
099
register 5C 00 00 00 00 00 00 00 00
100
register 5D 01 01 01 01 01 01 01 01
101
register 5E 01 01 01 01 01 01 01 01
102
register 5F 01 01 01 01 01 01 01 01
103
register 60 00 00 00 00 00 00 00 00
104
register 61 00 00 00 00 00 00 00 00
105
register 62 29 29 29 29 29 29 29 29
106
register 63 00 00 00 00 00 00 00 00
107
register 64 00 00 00 00 00 00 00 00
108
register 65 02 02 02 02 02 02 02 02
109
register 66 03 03 03 03 03 03 03 03
110
register 67 01 01 01 01 01 01 01 01
111
register 68 07 07 07 07 07 07 07 07
112
register 69 07 07 07 07 07 07 07 07
113
register 6A 02 02 02 02 02 02 02 02
114
register 6B 02 02 02 02 02 02 02 02
115
register 6C 01 01 01 01 01 01 01 01
116
register 6D 01 01 01 01 01 01 01 01
117
register 6E 01 01 01 01 01 01 01 01
118
register 6F 01 01 01 01 01 01 01 01
119
register 70 00 00 00 00 00 00 00 00
120
register 71 00 00 00 00 00 00 00 00
121
register 72 29 29 29 29 29 29 29 29
122
register 73 00 00 00 00 00 00 00 00
123
register 74 00 00 00 00 00 00 00 00
124
register 75 02 02 02 02 02 02 02 02
125
register 76 03 03 03 03 03 03 03 03
126
register 77 01 01 01 01 01 01 01 01
127
register 78 01 01 01 01 01 01 01 01
128
register 79 01 01 01 01 01 01 01 01
129
register 7A 01 01 01 01 01 01 01 01
130
register 7B 01 01 01 01 01 01 01 01
131
register 7C 01 01 01 01 01 01 01 01
132
register 7D 01 01 01 01 01 01 01 01
133
register 7E 01 01 01 01 01 01 01 01
134
register 7F 01 01 01 01 01 01 01 01
135
register 80 81 81 81 81 81 81 81 81
136
register 81 44 44 44 44 44 44 44 44
137
register 82 15 15 15 15 15 15 15 15
138
register 83 3C 3C 3C 3C 3C 3C 3C 3C
139
register 84 17 17 17 17 17 17 17 17
140
register 85 20 20 20 20 20 20 20 20
141
register 86 17 17 17 17 17 17 17 17
142
register 87 01 01 01 01 01 01 01 01
143
register 88 01 01 01 01 01 01 01 01
144
register 89 01 01 01 01 01 01 01 01
145
register 8A 01 01 01 01 01 01 01 01
146
register 8B 01 01 01 01 01 01 01 01
147
register 8C 01 01 01 01 01 01 01 01
148
register 8D 01 01 01 01 01 01 01 01
149
register 8E 01 01 01 01 01 01 01 01
150
register 8F 01 01 01 01 01 01 01 01
151
register 90 15 15 15 15 15 15 15 15
152
register 91 01 01 01 01 01 01 01 01
153
register 92 15 15 15 15 15 15 15 15
154
register 93 01 01 01 01 01 01 01 01
155
register 94 01 01 01 01 01 01 01 01
156
register 95 01 01 01 01 01 01 01 01
157
register 96 01 01 01 01 01 01 01 01
158
register 97 01 01 01 01 01 01 01 01
159
register 98 01 01 01 01 01 01 01 01
160
register 99 01 01 01 01 01 01 01 01
161
register 9A 01 01 01 01 01 01 01 01
162
register 9B 01 01 01 01 01 01 01 01
163
register 9C 01 01 01 01 01 01 01 01
164
register 9D 01 01 01 01 01 01 01 01
165
register 9E 01 01 01 01 01 01 01 01
166
register 9F 01 01 01 01 01 01 01 01
167
register A0 00 00 00 00 00 00 00 00
168
register A1 00 00 00 00 00 00 00 00
169
register A2 00 00 00 00 00 00 00 00
170
register A3 00 00 00 00 00 00 00 00
171
register A4 00 00 00 00 00 00 00 00
172
register A5 00 00 00 00 00 00 00 00
173
register A6 00 00 00 00 00 00 00 00
174
register A7 00 00 00 00 00 00 00 00
175
register A8 01 01 01 01 01 01 01 01
176
register A9 01 01 01 01 01 01 01 01
177
register AA 01 01 01 01 01 01 01 01
178
register AB 01 01 01 01 01 01 01 01
179
register AC 01 01 01 01 01 01 01 01
180
register AD 01 01 01 01 01 01 01 01
181
register AE 01 01 01 01 01 01 01 01
182
register AF 01 01 01 01 01 01 01 01
183
register B0 01 01 01 01 01 01 01 01
184
register B1 01 01 01 01 01 01 01 01
185
register B2 01 01 01 01 01 01 01 01
186
register B3 01 01 01 01 01 01 01 01
187
register B4 01 01 01 01 01 01 01 01
188
register B5 01 01 01 01 01 01 01 01
189
register B6 01 01 01 01 01 01 01 01
190
register B7 01 01 01 01 01 01 01 01
191
register B8 01 01 01 01 01 01 01 01
192
register B9 01 01 01 01 01 01 01 01
193
register BA 01 01 01 01 01 01 01 01
194
register BB 01 01 01 01 01 01 01 01
195
register BC 01 01 01 01 01 01 01 01
196
register BD 01 01 01 01 01 01 01 01
197
register BE 01 01 01 01 01 01 01 01
198
register BF 01 01 01 01 01 01 01 01 ***
199
register C0 02 02 02 02 02 02 02 02
200
register C1 08 08 08 08 08 08 08 08
201
register C2 08 08 08 08 08 08 08 08
202
register C3 01 01 01 01 01 01 01 01
203
register C4 00 00 00 00 00 00 00 00
204
register C5 00 00 00 00 00 00 00 00
205
register C6 00 00 00 00 00 00 00 00
206
register C7 00 00 00 00 00 00 00 00
207
register C8 01 01 01 01 01 01 01 01
208
register C9 FF FF FF FF FF FF FF FF
209
register CA 01 01 01 01 01 01 01 01
210
register CB FF FF FF FF FF FF FF FF
211
register CC 01 01 01 01 01 01 01 01
212
register CD FF FF FF FF FF FF FF FF
213
register CE 01 01 01 01 01 01 01 01
214
register CF FF FF FF FF FF FF FF FF
215
register D0 6F 6F 6F 6F 6F 6F 6F 6F
216
register D1 76 76 76 76 76 76 76 76
217
register D2 00 00 00 00 00 00 00 00
218
register D3 08 08 08 08 08 08 08 08 ***
219
register D4 08 08 08 08 08 08 08 08
220
register D5 01 01 01 01 01 01 01 01
221
register D6 FF FF FF FF FF FF FF FF
222
register D7 01 01 01 01 01 01 01 01
223
register D8 FF FF FF FF FF FF FF FF
224
register D9 01 01 01 01 01 01 01 01
225
register DA FF FF FF FF FF FF FF FF ***
226
register DB 01 01 01 01 01 01 01 01 ***
227
register DC FF FF FF FF FF FF FF FF ***
228
register DD 01 01 01 01 01 01 01 01
229
register DE 01 01 01 01 01 01 01 01
230
register DF 01 01 01 01 01 01 01 01
231
register E0 01 01 01 01 01 01 01 01
232
register E1 00 00 00 00 00 00 00 00
233
register E2 00 00 00 00 00 00 00 00
234
register E3 01 01 01 01 01 01 01 01
235
register E4 01 01 01 01 01 01 01 01
236
register E5 01 01 01 01 01 01 01 01
237
register E6 01 01 01 01 01 01 01 01
238
register E7 01 01 01 01 01 01 01 01
239
register E8 01 01 01 01 01 01 01 01
240
register E9 01 01 01 01 01 01 01 01
241
register EA 01 01 01 01 01 01 01 01
242
register EB 01 01 01 01 01 01 01 01
243
register EC 01 01 01 01 01 01 01 01
244
register ED 01 01 01 01 01 01 01 01
245
register EE 01 01 01 01 01 01 01 01
246
register EF 01 01 01 01 01 01 01 01 ***
247
register F0 01 01 01 01 01 01 01 01
248
register F1 01 01 01 01 01 01 01 01
249
register F2 01 01 01 01 01 01 01 01
250
register F3 01 01 01 01 01 01 01 01
251
register F4 01 01 01 01 01 01 01 01
252
register F5 01 01 01 01 01 01 01 01
253
register F6 01 01 01 01 01 01 01 01
254
register F7 01 01 01 01 01 01 01 01
255
register F8 01 01 01 01 01 01 01 01
256
register F9 01 01 01 01 01 01 01 01
257
register FA 01 01 01 01 01 01 01 01
258
register FB 01 01 01 01 01 01 01 01
259
register FC 01 01 01 01 01 01 01 01
260
register FD 01 01 01 01 01 01 01 01
261
register FE 01 01 01 01 01 01 01 01
262
register FF 01 01 01 01 01 01 01 01
slider работает отлично.
Сделаю другой преобразователь на шине управления, стоят резисторы 6,8к и 10к. Уж шибко фронты завалены. Может и проблема с заливкой цвета уйдет.
Что-то ID странный.
slider у тебя размах сигнала на пинах диспа какой?
Народ помогите или наставьте на путь.
Д-цать постов назад запускали монохромный экран 640х240.
Есть аналог sharp lm089hb1t03, есть желание выводить на него показания с датчиков (ет если осилю управление им)
скетч от Слайдера для вывода 2-х строк выводится только на половину экрана
1
001
// вывод 2х строчек шрифтов на монохромный дисп 640x240
002
//#include "CyberLib.h"
003
// если менять пины , то подсмотреть либу CyberLib.h , как их заменить на высокоскоростное переключение
004
#define Cp1 36 // строки , дернуть после передачи строки из 80 байт - это = 640 пикселей в строчке
005
#define Cp2 35 // data , дергать чтобы передался байт = 8 пикселям в строке
006
#define S 37 // отработать кадры совместно с CP1 , дергать совместно с CP1 - перед началом каждого кадра
007
008
009
/*
010
LP - линейный импульсный сигнал для фиксации буфера сегмента к драйверу сегмента.
011
CP - сигнал тактового импульса, для смещения данных (d0-d3) в сегментный буфер
012
FLP - метка первой линии
013
DISPOFF - дсплей ON/OFF 0-off 1-on
014
*/
015
016
017
int
i,j,ii=0;
018
byte
mass[80][16];
// видео ОЗУ , 80байт(640пикселей) на 16строк из640
019
byte
mass8[8];
// вспомогательный массивчик 8х8 бит для переворачивания баита шрифта из вдоль на поперек (с роризонтали на вертикаль)
020
//byte a;
021
//int b;
022
023
// the setup function runs once when you press reset or power the board
024
void
setup
() {
025
// initialize digital pin 13 as an output.
026
pinMode(Cp1, OUTPUT); digitalWrite(Cp1, LOW);
027
pinMode(Cp2, OUTPUT); digitalWrite(Cp2, LOW);
028
pinMode(S, OUTPUT); digitalWrite(S, LOW);
029
DDRA=0xFF;
// конф. порт на выход (ардуиновские пины D0-D7)
030
PORTA=0x00;
// уст. в 0
031
032
// set up the LCD's number of columns and rows:
033
// lcd.begin(16, 2);
034
// Print a message to the LCD.
035
// lcd.print("hello, world!");
036
037
// очистка массива видео ОЗУ
038
for
(j=0; j<16; j++)
// 16
039
{
040
for
(i=0; i<80; i++) {
// 80
041
mass[i][j]=0;
042
}
043
}
044
045
// шрифты из библиотеки Adafruit_GFX_Library pcd8544 nokia 5510 , UTFT , U8Glib
046
047
static
const
byte
lcd_font[][5] PROGMEM =
//
048
{
049
{ 0x00, 0x00 },
050
{ 0x00, 0x00, 0x00, 0x00, 0x00 },
// sp
051
{ 0x00,0x00, 0x00 },
052
{ 0x00, 0x00, 0x2f, 0x00, 0x00 },
// !
053
{0x00, 0x00, 0x00 },
054
{ 0x00, 0x07, 0x00, 0x07, 0x00 },
// "
055
{ 0x00, 0x00, 0x00 },
056
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 },
// #
057
{ 0x00 ,0x00, 0x00 },
058
{ 0x24, 0x2a, 0x7f, 0x2a, 0x12 },
// $
059
{ 0x00,0x00, 0x00 },
060
{ 0x23, 0x13, 0x08, 0x64, 0x62 },
// %
061
/*
062
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 },
063
{ 0x00, 0x00, 0x00, 0x00, },
064
{ 0x00, 0x00, 0x00, 0x01, },
065
{ 0xff, 0x00, 0xff, 0x00, 0x00 },
066
{ 0x00, 0xff, 0x00, 0xff, 0xff },
067
{ 0xff, 0x00, 0xff, 0x00, 0x00 },
068
{ 0xff, 0xff, 0xff, 0xff, 0xff },
069
{ 0x00, 0x00, 0x00, 0x00, 0x00 },
070
{ 0x00, 0x00, 0x00, 0x01, 0x01 },
071
{ 0x14, 0x7f, 0x14, 0x7f, 0x14 },
072
*/
073
{ 0x00, 0x00, 0x00, 0x00, 0x00 },
074
{ 0x36, 0x49, 0x55, 0x22, 0x50 },
// &
075
{ 0x00, 0x00, 0x00, 0x00, 0x00 },
076
{ 0x00, 0x05, 0x03, 0x00, 0x00 },
// '
077
{ 0x00, 0x00, 0x00, 0x00, 0x00 },
078
{ 0x00, 0x1c, 0x22, 0x41, 0x00 },
// (
079
{ 0x00, 0x00, 0x00, 0x00, 0x00 },
080
{ 0x00, 0x41, 0x22, 0x1c, 0x00 },
// )
081
{ 0x00, 0x00, 0x00, 0x00, 0x00 },
082
{ 0x14, 0x08, 0x3E, 0x08, 0x14 },
// *
083
{ 0x08, 0x08, 0x3E, 0x08, 0x08 },
// +
084
{ 0x00, 0x00, 0x50, 0x30, 0x00 },
// ,
085
{ 0x10, 0x10, 0x10, 0x10, 0x10 },
// -
086
{ 0x00, 0x60, 0x60, 0x00, 0x00 },
// .
087
{ 0x20, 0x10, 0x08, 0x04, 0x02 },
// /
088
{ 0x3E, 0x51, 0x49, 0x45, 0x3E },
// 0
089
{ 0x00, 0x42, 0x7F, 0x40, 0x00 },
// 1
090
{ 0x42, 0x61, 0x51, 0x49, 0x46 },
// 2
091
{ 0x21, 0x41, 0x45, 0x4B, 0x31 },
// 3
092
{ 0x18, 0x14, 0x12, 0x7F, 0x10 },
// 4
093
{ 0x27, 0x45, 0x45, 0x45, 0x39 },
// 5
094
{ 0x3C, 0x4A, 0x49, 0x49, 0x30 },
// 6
095
{ 0x01, 0x71, 0x09, 0x05, 0x03 },
// 7
096
{ 0x36, 0x49, 0x49, 0x49, 0x36 },
// 8
097
{ 0x06, 0x49, 0x49, 0x29, 0x1E },
// 9
098
099
100
{ 0x00, 0x36, 0x36, 0x00, 0x00 },
// :
101
{ 0x00, 0x56, 0x36, 0x00, 0x00 },
// ;
102
{ 0x08, 0x14, 0x22, 0x41, 0x00 },
// <
103
{ 0x14, 0x14, 0x14, 0x14, 0x14 },
// =
104
{ 0x00, 0x41, 0x22, 0x14, 0x08 },
// >
105
{ 0x02, 0x01, 0x51, 0x09, 0x06 },
// ?
106
{ 0x32, 0x49, 0x59, 0x51, 0x3E },
// @
107
{ 0x7E, 0x11, 0x11, 0x11, 0x7E },
// A
108
{ 0x7F, 0x49, 0x49, 0x49, 0x36 },
// B
109
{ 0x3E, 0x41, 0x41, 0x41, 0x22 },
// C
110
{ 0x7F, 0x41, 0x41, 0x22, 0x1C },
// D
111
{ 0x7F, 0x49, 0x49, 0x49, 0x41 },
// E
112
{ 0x7F, 0x09, 0x09, 0x09, 0x01 },
// F
113
{ 0x3E, 0x41, 0x49, 0x49, 0x7A },
// G
114
{ 0x7F, 0x08, 0x08, 0x08, 0x7F },
// H
115
{ 0x00, 0x41, 0x7F, 0x41, 0x00 },
// I
116
{ 0x20, 0x40, 0x41, 0x3F, 0x01 },
// J
117
{ 0x7F, 0x08, 0x14, 0x22, 0x41 },
// K
118
{ 0x7F, 0x40, 0x40, 0x40, 0x40 },
// L
119
{ 0x7F, 0x02, 0x0C, 0x02, 0x7F },
// M
120
{ 0x7F, 0x04, 0x08, 0x10, 0x7F },
// N
121
{ 0x3E, 0x41, 0x41, 0x41, 0x3E },
// O
122
{ 0x7F, 0x09, 0x09, 0x09, 0x06 },
// P
123
{ 0x3E, 0x41, 0x51, 0x21, 0x5E },
// Q
124
{ 0x7F, 0x09, 0x19, 0x29, 0x46 },
// R
125
{ 0x46, 0x49, 0x49, 0x49, 0x31 },
// S
126
{ 0x01, 0x01, 0x7F, 0x01, 0x01 },
// T
127
{ 0x3F, 0x40, 0x40, 0x40, 0x3F },
// U
128
{ 0x1F, 0x20, 0x40, 0x20, 0x1F },
// V
129
{ 0x3F, 0x40, 0x38, 0x40, 0x3F },
// W
130
{ 0x63, 0x14, 0x08, 0x14, 0x63 },
// X
131
{ 0x07, 0x08, 0x70, 0x08, 0x07 },
// Y
132
{ 0x61, 0x51, 0x49, 0x45, 0x43 },
// Z
133
{ 0x00, 0x7F, 0x41, 0x41, 0x00 },
// [
134
{ 0x55, 0x2A, 0x55, 0x2A, 0x55 },
// 55
135
{ 0x00, 0x41, 0x41, 0x7F, 0x00 },
// ]
136
{ 0x04, 0x02, 0x01, 0x02, 0x04 },
// ^
137
{ 0x40, 0x40, 0x40, 0x40, 0x40 },
// _
138
{ 0x00, 0x01, 0x02, 0x04, 0x00 },
// '
139
{ 0x20, 0x54, 0x54, 0x54, 0x78 },
// a
140
{ 0x7F, 0x48, 0x44, 0x44, 0x38 },
// b
141
{ 0x38, 0x44, 0x44, 0x44, 0x20 },
// c
142
{ 0x38, 0x44, 0x44, 0x48, 0x7F },
// d
143
{ 0x38, 0x54, 0x54, 0x54, 0x18 },
// e
144
{ 0x08, 0x7E, 0x09, 0x01, 0x02 },
// f
145
{ 0x0C, 0x52, 0x52, 0x52, 0x3E },
// g
146
{ 0x7F, 0x08, 0x04, 0x04, 0x78 },
// h
147
{ 0x00, 0x44, 0x7D, 0x40, 0x00 },
// i
148
{ 0x20, 0x40, 0x44, 0x3D, 0x00 },
// j
149
{ 0x7F, 0x10, 0x28, 0x44, 0x00 },
// k
150
{ 0x00, 0x41, 0x7F, 0x40, 0x00 },
// l
151
{ 0x7C, 0x04, 0x18, 0x04, 0x78 },
// m
152
{ 0x7C, 0x08, 0x04, 0x04, 0x78 },
// n
153
{ 0x38, 0x44, 0x44, 0x44, 0x38 },
// o
154
{ 0x7C, 0x14, 0x14, 0x14, 0x08 },
// p
155
{ 0x08, 0x14, 0x14, 0x18, 0x7C },
// q
156
{ 0x7C, 0x08, 0x04, 0x04, 0x08 },
// r
157
{ 0x48, 0x54, 0x54, 0x54, 0x20 },
// s
158
{ 0x04, 0x3F, 0x44, 0x40, 0x20 },
// t
159
{ 0x3C, 0x40, 0x40, 0x20, 0x7C },
// u
160
{ 0x1C, 0x20, 0x40, 0x20, 0x1C },
// v
161
{ 0x3C, 0x40, 0x30, 0x40, 0x3C },
// w
162
{ 0x44, 0x28, 0x10, 0x28, 0x44 },
// x
163
{ 0x0C, 0x50, 0x50, 0x50, 0x3C },
// y
164
{ 0x44, 0x64, 0x54, 0x4C, 0x44 },
// z
165
166
{ 0x08, 0x08, 0x36, 0x41, 0x41 },
// {
167
{ 0x00, 0x00, 0x7F, 0x00, 0x00 },
// |
168
{ 0x41, 0x41, 0x36, 0x08, 0x08 },
// }
169
{ 0x02, 0x01, 0x02, 0x02, 0x01 },
// ~
170
171
{ 0x7E, 0x11, 0x11, 0x11 },
// А
172
{ 0x7E, 0x00, 0x7F, 0x49, },
//aб
173
{ 0x49, 0x49, 0x33, 0x00, },
// Б
174
{ 0x7F, 0x49, 0x49, 0x49, },
175
{ 0x36, 0x00, 0x7F, 0x01, },
// В
176
177
{ 0x01, 0x01, 0x03 },
// Г
178
{ 0x00, 0x00, 0x00, 0x00, 0x00 },
179
{ 0xE0, 0x51, 0x4F, 0x41, 0xFF },
// Д
180
{ 0x7F, 0x49, 0x49, 0x49, 0x49 },
// Е
181
{ 0x77, 0x08, 0x7F, 0x08, 0x77 },
// Ж
182
{ 0x49, 0x49, 0x49, 0x49, 0x36 },
// З
183
{ 0x7F, 0x10, 0x08, 0x04, 0x7F },
// И
184
{ 0x7C, 0x21, 0x12, 0x09, 0x7C },
// Й
185
{ 0x7F, 0x08, 0x14, 0x22, 0x41 },
// К
186
{ 0x20, 0x41, 0x3F, 0x01, 0x7F },
// Л
187
{ 0x7F, 0x02, 0x0C, 0x02, 0x7F },
// М
188
{ 0x7F, 0x08, 0x08, 0x08, 0x7F },
// Н
189
{ 0x3E, 0x41, 0x41, 0x41, 0x3E },
// О
190
{ 0x7F, 0x01, 0x01, 0x01, 0x7F },
// П
191
{ 0x7F, 0x09, 0x09, 0x09, 0x06 },
// Р
192
{ 0x3E, 0x41, 0x41, 0x41, 0x22 },
// С
193
{ 0x01, 0x01, 0x7F, 0x01, 0x01 },
// Т
194
{ 0x27, 0x48, 0x48, 0x48, 0x3F },
// У
195
{ 0x1C, 0x22, 0x7F, 0x22, 0x1C },
// Ф
196
{ 0x63, 0x14, 0x08, 0x14, 0x63 },
// Х
197
{ 0x7F, 0x40, 0x40, 0x40, 0xFF },
// Ц
198
{ 0x07, 0x08, 0x08, 0x08, 0x7F },
// Ч
199
{ 0x7F, 0x40, 0x7F, 0x40, 0x7F },
// Ш
200
{ 0x7F, 0x40, 0x7F, 0x40, 0xFF },
// Щ
201
{ 0x01, 0x7F, 0x48, 0x48, 0x30 },
// Ъ
202
{ 0x7F, 0x48, 0x30, 0x00, 0x7F },
// Ы
203
{ 0x7F, 0x48, 0x48, 0x30, 0x00 },
// Ь
204
{ 0x22, 0x41, 0x49, 0x49, 0x3E },
// Э
205
{ 0x7F, 0x08, 0x3E, 0x41, 0x3E },
// Ю
206
{ 0x46, 0x29, 0x19, 0x09, 0x7F },
// Я
207
{ 0x20, 0x54, 0x54, 0x54, 0x78 },
// а
208
{ 0x3C, 0x4A, 0x4A, 0x49, 0x31 },
// б
209
{ 0x7C, 0x54, 0x54, 0x28, 0x00 },
// в
210
{ 0x7C, 0x04, 0x04, 0x04, 0x0C },
// г
211
{ 0xE0, 0x54, 0x4C, 0x44, 0xFC },
// д
212
{ 0x38, 0x54, 0x54, 0x54, 0x08 },
// е
213
{ 0x6C, 0x10, 0x7C, 0x10, 0x6C },
// ж
214
{ 0x44, 0x44, 0x54, 0x54, 0x28 },
// з
215
{ 0x7C, 0x20, 0x10, 0x08, 0x7C },
// и
216
{ 0x78, 0x42, 0x24, 0x12, 0x78 },
// й
217
{ 0x7C, 0x10, 0x28, 0x44, 0x00 },
// к
218
{ 0x20, 0x44, 0x3C, 0x04, 0x7C },
// л
219
{ 0x7C, 0x08, 0x10, 0x08, 0x7C },
// м
220
{ 0x7C, 0x10, 0x10, 0x10, 0x7C },
// н
221
{ 0x38, 0x44, 0x44, 0x44, 0x38 },
// о
222
{ 0x7C, 0x04, 0x04, 0x04, 0x7C },
// п
223
{ 0x7C, 0x14, 0x14, 0x14, 0x08 },
// р
224
{ 0x38, 0x44, 0x44, 0x44, 0x44 },
// с
225
{ 0x04, 0x04, 0x7C, 0x04, 0x04 },
// т
226
{ 0x0C, 0x50, 0x50, 0x50, 0x3C },
// у
227
{ 0x18, 0x24, 0x7E, 0x24, 0x18 },
// ф
228
{ 0x44, 0x28, 0x10, 0x28, 0x44 },
// х
229
{ 0x7C, 0x40, 0x40, 0x40, 0xFC },
// ц
230
{ 0x0C, 0x10, 0x10, 0x10, 0x7C },
// ч
231
{ 0x7C, 0x40, 0x7C, 0x40, 0x7C },
// ш
232
{ 0x7C, 0x40, 0x7C, 0x40, 0xFC },
// щ
233
{ 0x04, 0x7C, 0x50, 0x50, 0x20 },
// ъ
234
{ 0x7C, 0x50, 0x20, 0x00, 0x7C },
// ы
235
{ 0x7C, 0x50, 0x50, 0x20, 0x00 },
// ь
236
{ 0x28, 0x44, 0x54, 0x54, 0x38 },
// э
237
238
239
{ 0x7C, 0x10, 0x38, 0x44, 0x38 },
// ю
240
{ 0x08, 0x54, 0x34, 0x14, 0x7C }
// я
241
};
242
243
244
/*
245
for (i=0; i<80; i++) // шрифт как есть, повернут на 90 град.
246
{
247
// mass[80][16]=lcd_font[150][5];
248
mass[i][0]=0;
249
mass[i][1]=pgm_read_byte( &lcd_font[i][0] );
250
mass[i][2]=pgm_read_byte( &lcd_font[i][1] );
251
mass[i][3]=pgm_read_byte( &lcd_font[i][2] );
252
mass[i][4]=pgm_read_byte( &lcd_font[i][3] );
253
mass[i][5]=pgm_read_byte( &lcd_font[i][4] );
254
mass[i][6]=0;
255
mass[i][7]=0;
256
}
257
*/
258
259
// первые 8 линий на дисплее с переворотом букв шрифта
260
for
(i=0; i<80; i++)
261
{
262
// размерности mass[80][16] lcd_font[150][5];
263
mass8[0]=pgm_read_byte( &lcd_font[i][0] );
264
mass8[1]=pgm_read_byte( &lcd_font[i][1] );
265
mass8[2]=pgm_read_byte( &lcd_font[i][2] );
266
mass8[3]=pgm_read_byte( &lcd_font[i][3] );
267
mass8[4]=pgm_read_byte( &lcd_font[i][4] );
268
mass8[5]=0;
269
mass8[6]=0;
270
mass8[7]=0;
271
for
( ii=0; ii<8; ii++ )
272
{
273
bitWrite( mass[i][0],ii,bitRead(mass8[7-ii],0) );
/////
274
bitWrite( mass[i][1],ii,bitRead(mass8[7-ii],1) );
275
bitWrite( mass[i][2],ii,bitRead(mass8[7-ii],2) );
276
bitWrite( mass[i][3],ii,bitRead(mass8[7-ii],3) );
277
bitWrite( mass[i][4],ii,bitRead(mass8[7-ii],4) );
278
bitWrite( mass[i][5],ii,bitRead(mass8[7-ii],5) );
279
bitWrite( mass[i][6],ii,bitRead(mass8[7-ii],6) );
280
}
281
mass[i][15]=0;
282
}
283
284
285
286
// следующие 8 линий на дисплее с переворотом букв шрифта
287
for
(i=0; i<80; i++)
288
{
289
// размерности mass[80][16] lcd_font[150][5];
290
mass8[0]=pgm_read_byte( &lcd_font[i+80][0] );
291
mass8[1]=pgm_read_byte( &lcd_font[i+80][1] );
292
mass8[2]=pgm_read_byte( &lcd_font[i+80][2] );
293
mass8[3]=pgm_read_byte( &lcd_font[i+80][3] );
294
mass8[4]=pgm_read_byte( &lcd_font[i+80][4] );
295
mass8[5]=0;
296
mass8[6]=0;
297
mass8[7]=0;
298
299
for
( ii=0; ii<8; ii++ )
300
{
301
bitWrite( mass[i][8],ii,bitRead(mass8[7-ii],0) );
/////
302
bitWrite( mass[i][9],ii,bitRead(mass8[7-ii],1) );
303
bitWrite( mass[i][10],ii,bitRead(mass8[7-ii],2) );
304
bitWrite( mass[i][11],ii,bitRead(mass8[7-ii],3) );
305
bitWrite( mass[i][12],ii,bitRead(mass8[7-ii],4) );
306
bitWrite( mass[i][13],ii,bitRead(mass8[7-ii],5) );
307
bitWrite( mass[i][14],ii,bitRead(mass8[7-ii],6) );
308
}
309
mass[i][15]=0;
310
}
311
312
313
}
//end Void
314
315
316
317
// the loop function runs over and over again forever
318
void
loop
() {
319
320
PORTC|=B00000001 ;
// digitalWrite(S, 1);
321
cp1();
// вызов кадрового импульса
322
PORTC&=B11111110 ;
// digitalWrite(S, 0);
323
324
//первая строчка
325
326
for
(j=0; j<16; j++)
//20-видать будет какойто счетчик, в оперативке j<16
327
{
328
for
(i=0; i<80; i++) {
// 80->160
329
PORTA=mass[i][j];
330
//if (i==j) PORTD=0xFF; else PORTD=0x00;
331
cp2();
332
}
333
cp1();
// перевод строки (вызов кадрового импульса)
334
}
335
336
337
// все остальные строчки
338
PORTA=0;
339
for
(j=0; j<224; j++) {
// 224 240-16строк=224пустые
340
//for (i=0; i<80; i++) { cp2(); } // можно и убрать это заполнение пустышками оставшейся площади
341
// но из-за значительно увеличившейся скорости , надо будет настроить контрастность
342
cp1();
343
}
344
345
346
347
// глянем скока FPS
348
//if (iii==25) { PORTB|=B00100000 ; } // D13_High;
349
//if (iii==26) { PORTB &=B11011111 ; iii=0; } // D13_Low
350
//iii++;
351
352
}
353
354
355
356
void
cp1()
357
{
358
//digitalWrite(CP1, 1); digitalWrite(CP1, 0); - это оооочень медленно
359
PORTC|=B00000010;
// D9_High; - это быстрее в 20раз!!!!
360
PORTC&=B11111101;
// D9_Low;
361
}
362
363
void
cp2()
364
{
365
PORTC |=B00000100;
// D10_High;
366
PORTC &=B11111011;
// D10_Low;
367
//digitalWrite(CP2, 1); digitalWrite(CP2, 0);
368
}
у меня 4-х битный экран, выходы управления подправил под мегу. немогу понять как заставить печатать во второй полвине экрана
шлейф:
lcd-adj # lcd +24v # ld3 # ld2 # ld1 # ld0 # lcd +24v # gnd # +5v # cp # lp # flm # nc # dsp-off
я правильно понимаю, шрифтов в нём нет всё придётся как в скетче побайтно рисовать?
slider, в крайнем скетче что ты скинул можно убрать двойные WR_Low; WR_Low; и оствить один и будет нормально работать.
Я поменял резисторы в преобразователе уровней. Поставил 680 и 1к и работает на ура.
Можно ли к скетчу как-нибудь прилепить шрифты из какой-нибудь библиотеки?
Что-то ID странный.
slider у тебя размах сигнала на пинах диспа какой?
ID такой же как у вас 0A0A , в чем странность?
вот лог с LCD_ID_Reader33.ino #comment-410547
001
Read Registers on MCUFRIEND UNO shield
002
controllers either read
as
single 16-bit
003
e.g. the ID
is
at readReg(0)
004
or
as
a sequence of 8-bit values
005
in
special locations (first
is
dummy)
006
007
reg(0x0000) 0A 0A 0A 0A 0A 0A 0A f.k
008
reg(0x0001) 00 00 00 00 00 00 00 f.k
009
reg(0x0002) 01 01 01 01 01 01 01 f.k
010
reg(0x0003) F8 3F F8 3F F8 3F F8 f.k
011
reg(0x0004) 01 01 01 01 01 01 01 f.k
012
reg(0x0005) 01 01 01 01 01 01 01 f.k
013
reg(0x0006) 01 01 01 01 01 01 01 f.k
014
reg(0x0007) 01 01 01 01 01 01 01 f.k
015
reg(0x0008) 02 02 02 02 02 02 02 f.k
016
reg(0x0009) 01 01 01 01 01 01 01 f.k
017
reg(0x000A) 01 01 01 01 01 01 01 f.k
018
reg(0x000B) 01 01 01 01 01 01 01 f.k
019
reg(0x000C) 01 01 01 01 01 01 01 f.k
020
reg(0x000D) 01 01 01 01 01 01 01 f.k
021
reg(0x000E) 01 01 01 01 01 01 01 f.k
022
reg(0x000F) 01 01 01 01 01 01 01 f.k
023
reg(0x0010) F0 F0 F0 F0 F0 F0 F0 f.k
024
reg(0x0011) 90 90 90 90 90 90 90 f.k
025
reg(0x0012) 01 01 01 01 01 01 01 f.k
026
reg(0x0013) 00 00 00 00 00 00 00 f.k
027
reg(0x0014) 00 00 00 00 00 00 00 f.k
028
reg(0x0015) 00 00 00 00 00 00 00 f.k
029
reg(0x0016) 00 00 00 00 00 00 00 f.k
030
reg(0x0017) 00 00 00 00 00 00 00 f.k
031
reg(0x0018) 00 00 00 00 00 00 00 f.k
032
reg(0x0019) 00 00 00 00 00 00 00 f.k
033
reg(0x001A) 00 00 00 00 00 00 00 f.k
034
reg(0x001B) 00 00 00 00 00 00 00 f.k
035
reg(0x001C) 00 00 00 00 00 00 00 f.k
036
reg(0x001D) 00 00 00 00 00 00 00 f.k
037
reg(0x001E) 50 50 50 50 50 50 50 f.k
038
reg(0x001F) 01 01 01 01 01 01 01 f.k
039
reg(0x0020) 00 00 00 00 00 00 00 f.k
040
reg(0x0021) 00 00 00 00 00 00 00 f.k
041
reg(0x0022) 00 00 00 00 00 00 00 f.k
042
reg(0x0023) 00 00 00 00 00 00 00 f.k
043
reg(0x0024) 00 00 00 00 00 00 00 f.k
044
reg(0x0025) 00 00 00 00 00 00 00 f.k
045
reg(0x0026) 01 01 01 01 01 01 01 f.k
046
reg(0x0027) 01 01 01 01 01 01 01 f.k
047
reg(0x0028) 01 01 01 01 01 01 01 f.k
048
reg(0x0029) 01 01 01 01 01 01 01 f.k
049
reg(0x002A) 01 01 01 01 01 01 01 f.k
050
reg(0x002B) 01 01 01 01 01 01 01 f.k
051
reg(0x002C) 01 01 01 01 01 01 01 f.k
052
reg(0x002D) 01 01 01 01 01 01 01 f.k
053
reg(0x002E) 01 01 01 01 01 01 01 f.k
054
reg(0x002F) 01 01 01 01 01 01 01 f.k
055
reg(0x0030) 80 80 80 80 80 80 80 f.k
056
reg(0x0031) 00 00 00 00 00 00 00 f.k
057
reg(0x0032) 01 01 01 01 01 01 01 f.k
058
reg(0x0033) 00 00 00 00 00 00 00 f.k
059
reg(0x0034) 00 00 00 00 00 00 00 f.k
060
reg(0x0035) 00 00 00 00 00 00 00 f.k
061
reg(0x0036) 00 00 00 00 00 00 00 f.k
062
reg(0x0037) 00 00 00 00 00 00 00 f.k
063
reg(0x0038) 00 00 00 00 00 00 00 f.k
064
reg(0x0039) 00 00 00 00 00 00 00 f.k
065
reg(0x003A) 00 00 00 00 00 00 00 f.k
066
reg(0x003B) 00 00 00 00 00 00 00 f.k
067
reg(0x003C) 00 00 00 00 00 00 00 f.k
068
reg(0x003D) 00 00 00 00 00 00 00 f.k
069
reg(0x003E) 00 00 00 00 00 00 00 f.k
070
reg(0x003F) 00 00 00 00 00 00 00 f.k
071
reg(0x0040) 00 00 00 00 00 00 00 f.k
072
reg(0x0041) 01 01 01 01 01 01 01 f.k
073
reg(0x0042) 33 33 33 33 33 33 33 f.k
074
reg(0x0043) 01 01 01 01 01 01 01 f.k
075
reg(0x0044) 09 09 09 09 09 09 09 f.k
076
reg(0x0045) 02 02 02 02 02 02 02 f.k
077
reg(0x0046) 05 05 05 05 05 05 05 f.k
078
reg(0x0047) 01 01 01 01 01 01 01 f.k
079
reg(0x0048) 01 01 01 01 01 01 01 f.k
080
reg(0x0049) 01 01 01 01 01 01 01 f.k
081
reg(0x004A) 00 00 00 00 00 00 00 f.k
082
reg(0x004B) 00 00 00 00 00 00 00 f.k
083
reg(0x004C) 06 06 06 06 06 06 06 f.k
084
reg(0x004D) 01 01 01 01 01 01 01 f.k
085
reg(0x004E) 01 01 01 01 01 01 01 f.k
086
reg(0x004F) 00 00 00 00 00 00 00 f.k
087
reg(0x0050) 00 00 00 00 00 00 00 f.k
088
reg(0x0051) 00 00 00 00 00 00 00 f.k
089
reg(0x0052) 01 01 01 01 01 01 01 f.k
090
reg(0x0053) 01 01 01 01 01 01 01 f.k
091
reg(0x0054) 02 02 02 02 02 02 02 f.k
092
reg(0x0055) 01 01 01 01 01 01 01 f.k
093
reg(0x0056) 01 01 01 01 01 01 01 f.k
094
reg(0x0057) 01 01 01 01 01 01 01 f.k
095
reg(0x0058) 01 01 01 01 01 01 01 f.k
096
reg(0x0059) 01 01 01 01 01 01 01 f.k
097
reg(0x005A) 00 00 00 00 00 00 00 f.k
098
reg(0x005B) 00 00 00 00 00 00 00 f.k
099
reg(0x005C) 00 00 00 00 00 00 00 f.k
100
reg(0x005D) 01 01 01 01 01 01 01 f.k
101
reg(0x005E) 01 01 01 01 01 01 01 f.k
102
reg(0x005F) 01 01 01 01 01 01 01 f.k
103
reg(0x0060) 00 00 00 00 00 00 00 f.k
104
reg(0x0061) 00 00 00 00 00 00 00 f.k
105
reg(0x0062) 29 29 29 29 29 29 29 f.k
106
reg(0x0063) 00 00 00 00 00 00 00 f.k
107
reg(0x0064) 00 00 00 00 00 00 00 f.k
108
reg(0x0065) 02 02 02 02 02 02 02 f.k
109
reg(0x0066) 03 03 03 03 03 03 03 f.k
110
reg(0x0067) 01 01 01 01 01 01 01 f.k
111
reg(0x0068) 07 07 07 07 07 07 07 f.k
112
reg(0x0069) 07 07 07 07 07 07 07 f.k
113
reg(0x006A) 02 02 02 02 02 02 02 f.k
114
reg(0x006B) 02 02 02 02 02 02 02 f.k
115
reg(0x006C) 01 01 01 01 01 01 01 f.k
116
reg(0x006D) 01 01 01 01 01 01 01 f.k
117
reg(0x006E) 01 01 01 01 01 01 01 f.k
118
reg(0x006F) 01 01 01 01 01 01 01 f.k
119
reg(0x0070) 00 00 00 00 00 00 00 f.k
120
reg(0x0071) 00 00 00 00 00 00 00 f.k
121
reg(0x0072) 29 29 29 29 29 29 29 f.k
122
reg(0x0073) 00 00 00 00 00 00 00 f.k
123
reg(0x0074) 00 00 00 00 00 00 00 f.k
124
reg(0x0075) 02 02 02 02 02 02 02 f.k
125
reg(0x0076) 03 03 03 03 03 03 03 f.k
126
reg(0x0077) 01 01 01 01 01 01 01 f.k
127
reg(0x0078) 01 01 01 01 01 01 01 f.k
128
reg(0x0079) 01 01 01 01 01 01 01 f.k
129
reg(0x007A) 01 01 01 01 01 01 01 f.k
130
reg(0x007B) 01 01 01 01 01 01 01 f.k
131
reg(0x007C) 01 01 01 01 01 01 01 f.k
132
reg(0x007D) 01 01 01 01 01 01 01 f.k
133
reg(0x007E) 01 01 01 01 01 01 01 f.k
134
reg(0x007F) 01 01 01 01 01 01 01 f.k
135
reg(0x0080) 81 81 81 81 81 81 81 f.k
136
reg(0x0081) 44 44 44 44 44 44 44 f.k
137
reg(0x0082) 15 15 15 15 15 15 15 f.k
138
reg(0x0083) 3C 3C 3C 3C 3C 3C 3C f.k
139
reg(0x0084) 17 17 17 17 17 17 17 f.k
140
reg(0x0085) 20 20 20 20 20 20 20 f.k
141
reg(0x0086) 17 17 17 17 17 17 17 f.k
142
reg(0x0087) 01 01 01 01 01 01 01 f.k
143
reg(0x0088) 01 01 01 01 01 01 01 f.k
144
reg(0x0089) 01 01 01 01 01 01 01 f.k
145
reg(0x008A) 01 01 01 01 01 01 01 f.k
146
reg(0x008B) 01 01 01 01 01 01 01 f.k
147
reg(0x008C) 01 01 01 01 01 01 01 f.k
148
reg(0x008D) 01 01 01 01 01 01 01 f.k
149
reg(0x008E) 01 01 01 01 01 01 01 f.k
150
reg(0x008F) 01 01 01 01 01 01 01 f.k
151
reg(0x0090) 15 15 15 15 15 15 15 f.k
152
reg(0x0091) 01 01 01 01 01 01 01 f.k
153
reg(0x0092) 15 15 15 15 15 15 15 f.k
154
reg(0x0093) 01 01 01 01 01 01 01 f.k
155
reg(0x0094) 01 01 01 01 01 01 01 f.k
156
reg(0x0095) 01 01 01 01 01 01 01 f.k
157
reg(0x0096) 01 01 01 01 01 01 01 f.k
158
reg(0x0097) 01 01 01 01 01 01 01 f.k
159
reg(0x0098) 01 01 01 01 01 01 01 f.k
160
reg(0x0099) 01 01 01 01 01 01 01 f.k
161
reg(0x009A) 01 01 01 01 01 01 01 f.k
162
reg(0x009B) 01 01 01 01 01 01 01 f.k
163
reg(0x009C) 01 01 01 01 01 01 01 f.k
164
reg(0x009D) 01 01 01 01 01 01 01 f.k
165
reg(0x009E) 01 01 01 01 01 01 01 f.k
166
reg(0x009F) 01 01 01 01 01 01 01 f.k
167
reg(0x00A0) 00 00 00 00 00 00 00 f.k
168
reg(0x00A1) 00 00 00 00 00 00 00 f.k
169
reg(0x00A2) 00 00 00 00 00 00 00 f.k
170
reg(0x00A3) 00 00 00 00 00 00 00 f.k
171
reg(0x00A4) 00 00 00 00 00 00 00 f.k
172
reg(0x00A5) 00 00 00 00 00 00 00 f.k
173
reg(0x00A6) 00 00 00 00 00 00 00 f.k
174
reg(0x00A7) 00 00 00 00 00 00 00 f.k
175
reg(0x00A8) 01 01 01 01 01 01 01 f.k
176
reg(0x00A9) 01 01 01 01 01 01 01 f.k
177
reg(0x00AA) 01 01 01 01 01 01 01 f.k
178
reg(0x00AB) 01 01 01 01 01 01 01 f.k
179
reg(0x00AC) 01 01 01 01 01 01 01 f.k
180
reg(0x00AD) 01 01 01 01 01 01 01 f.k
181
reg(0x00AE) 01 01 01 01 01 01 01 f.k
182
reg(0x00AF) 01 01 01 01 01 01 01 f.k
183
reg(0x00B0) 01 01 01 01 01 01 01 f.k
184
reg(0x00B1) 01 01 01 01 01 01 01 f.k
185
reg(0x00B2) 01 01 01 01 01 01 01 f.k
186
reg(0x00B3) 01 01 01 01 01 01 01 f.k
187
reg(0x00B4) 01 01 01 01 01 01 01 f.k
188
reg(0x00B5) 01 01 01 01 01 01 01 f.k
189
reg(0x00B6) 01 01 01 01 01 01 01 f.k
190
reg(0x00B7) 01 01 01 01 01 01 01 f.k
191
reg(0x00B8) 01 01 01 01 01 01 01 f.k
192
reg(0x00B9) 01 01 01 01 01 01 01 f.k
193
reg(0x00BA) 01 01 01 01 01 01 01 f.k
194
reg(0x00BB) 01 01 01 01 01 01 01 f.k
195
reg(0x00BC) 01 01 01 01 01 01 01 f.k
196
reg(0x00BD) 01 01 01 01 01 01 01 f.k
197
reg(0x00BE) 01 01 01 01 01 01 01 f.k
198
reg(0x00BF) 01 01 01 01 01 01 01 f.k
199
reg(0x00C0) 02 02 02 02 02 02 02 f.k
200
reg(0x00C1) 08 08 08 08 08 08 08 f.k
201
reg(0x00C2) 08 08 08 08 08 08 08 f.k
202
reg(0x00C3) 01 01 01 01 01 01 01 f.k
203
reg(0x00C4) 00 00 00 00 00 00 00 f.k
204
reg(0x00C5) 00 00 00 00 00 00 00 f.k
205
reg(0x00C6) 00 00 00 00 00 00 00 f.k
206
reg(0x00C7) 00 00 00 00 00 00 00 f.k
207
reg(0x00C8) 01 01 01 01 01 01 01 f.k
208
reg(0x00C9) FF FF FF FF FF FF FF f.k
209
reg(0x00CA) 01 01 01 01 01 01 01 f.k
210
reg(0x00CB) FF FF FF FF FF FF FF f.k
211
reg(0x00CC) 01 01 01 01 01 01 01 f.k
212
reg(0x00CD) FF FF FF FF FF FF FF f.k
213
reg(0x00CE) 01 01 01 01 01 01 01 f.k
214
reg(0x00CF) FF FF FF FF FF FF FF f.k
215
reg(0x00D0) 6F 6F 6F 6F 6F 6F 6F f.k
216
reg(0x00D1) 76 76 76 76 76 76 76 f.k
217
reg(0x00D2) 00 00 00 00 00 00 00 f.k
218
reg(0x00D3) 08 08 08 08 08 08 08 f.k
219
reg(0x00D4) 08 08 08 08 08 08 08 f.k
220
reg(0x00D5) 01 01 01 01 01 01 01 f.k
221
reg(0x00D6) FF FF FF FF FF FF FF f.k
222
reg(0x00D7) 01 01 01 01 01 01 01 f.k
223
reg(0x00D8) FF FF FF FF FF FF FF f.k
224
reg(0x00D9) 01 01 01 01 01 01 01 f.k
225
reg(0x00DA) FF FF FF FF FF FF FF f.k
226
reg(0x00DB) 01 01 01 01 01 01 01 f.k
227
reg(0x00DC) FF FF FF FF FF FF FF f.k
228
reg(0x00DD) 01 01 01 01 01 01 01 f.k
229
reg(0x00DE) 01 01 01 01 01 01 01 f.k
230
reg(0x00DF) 01 01 01 01 01 01 01 f.k
231
reg(0x00E0) 01 01 01 01 01 01 01 f.k
232
reg(0x00E1) 00 00 00 00 00 00 00 f.k
233
reg(0x00E2) 00 00 00 00 00 00 00 f.k
234
reg(0x00E3) 01 01 01 01 01 01 01 f.k
235
reg(0x00E4) 01 01 01 01 01 01 01 f.k
236
reg(0x00E5) 01 01 01 01 01 01 01 f.k
237
reg(0x00E6) 01 01 01 01 01 01 01 f.k
238
reg(0x00E7) 01 01 01 01 01 01 01 f.k
239
reg(0x00E8) 01 01 01 01 01 01 01 f.k
240
reg(0x00E9) 01 01 01 01 01 01 01 f.k
241
reg(0x00EA) 01 01 01 01 01 01 01 f.k
242
reg(0x00EB) 01 01 01 01 01 01 01 f.k
243
reg(0x00EC) 01 01 01 01 01 01 01 f.k
244
reg(0x00ED) 01 01 01 01 01 01 01 f.k
245
reg(0x00EE) 01 01 01 01 01 01 01 f.k
246
reg(0x00EF) 01 01 01 01 01 01 01 f.k
247
reg(0x00F0) 01 01 01 01 01 01 01 f.k
248
reg(0x00F1) 01 01 01 01 01 01 01 f.k
249
reg(0x00F2) 01 01 01 01 01 01 01 f.k
250
reg(0x00F3) 01 01 01 01 01 01 01 f.k
251
reg(0x00F4) 01 01 01 01 01 01 01 f.k
252
reg(0x00F5) 01 01 01 01 01 01 01 f.k
253
reg(0x00F6) 01 01 01 01 01 01 01 f.k
254
reg(0x00F7) 01 01 01 01 01 01 01 f.k
255
reg(0x00F8) 01 01 01 01 01 01 01 f.k
256
reg(0x00F9) 01 01 01 01 01 01 01 f.k
257
reg(0x00FA) 01 01 01 01 01 01 01 f.k
258
reg(0x00FB) 01 01 01 01 01 01 01 f.k
259
reg(0x00FC) 01 01 01 01 01 01 01 f.k
260
reg(0x00FD) 01 01 01 01 01 01 01 f.k
261
reg(0x00FE) 01 01 01 01 01 01 01 f.k
262
reg(0x00FF) 01 01 01 01 01 01 01 f.k
Если предположить что не так с чтением , то надо подключать по 16бит - дело верняк, чтение будет 100%.
Размах , и осцил не надо, достаточно померить мультиметром куда постоянно подается лог.1 Reset , RD .
питание ардуины 5.00в , на стабе 3.30в , через 10 Ом на белых светодиодах (1+~5подсветки) 2.80в , на пинах Reset , RD 3.40в (вольтметр высокоточный) , оно и понятно , в микросхемах же ставят защитные диоды на вывода, к + и - питания. Лог.1 5.0в идет через 10ком , на защитном диоде осело 0.6в , ушло на питание. (при наргеве и морозе будут немного другое напряжение на "стабилитроне") .
Если бы не поставил параллельно питанию диспа , белые светодиоды ограничивающие напряжение как стабилитроны, то питание 3.3в взятое с ардуины , взлетело бы выше 4.5 и спалило бы дисп, из-за много лог.1 через 10ком , пересиливающие потребности контроллера диспа на старте , когда еще инит ему не скормлен и внутренние преобразователи не запущены.
В даташитах иногда пишут , что напряжения на входах не должно превышать напряжение питания на 0.6в , оно и понятно , иначе пересилится питание контроллера и он скончается.
slider, в крайнем скетче что ты скинул можно убрать двойные WR_Low; WR_Low; и оствить один и будет нормально работать.
Я поменял резисторы в преобразователе уровней. Поставил 680 и 1к и работает на ура.
Можно ли к скетчу как-нибудь прилепить шрифты из какой-нибудь библиотеки?
ну если 680 и 1к то хорошо тока хватит, а через 10к он слабый, даже если тыкнуться мультиметром или осциллографом после них ( WR, RS(CD) ) , уже дисп косячит , то другие цвета покажет , то типа битые пиксели. Вот и приходится ставить задержки.
Зачем лепить шрифты из либы? проще подменить в понравившейся либе, инит на свой , и номера регистров посредством которых идет рисование.
К примеру UTFT C:\Users\.....\Documents\Arduino\libraries\UTFT\tft_drivers\ili9325c
по аналогии с ILI9325 , названия регистров в setxy.h посмотреть с его даташита или в initlcd.h они расписаны. x1 x2 y1 y2 оставляем (либа заносит в них координаты, цвет, сдвигает для 8бит )
В initlcd.h забить данные со своего инита.
Ну а дальше как обычно.
Ну а дальше как обычно.
Да хрен там! Не получается у меня. Надо в других файлах что-то менять?
Может пины по другому подключать?
ну, млин...
оставить подключение такое же.
вот заготовил как получилось , : UTFT v2.82 MagnaChip D54E4PA7551 дисп от LG .rar
https://yadi.sk/d/BnFmbOp-Oaybzw
распаковать в Arduino\libraries . Пример запустить UTFT\examples\Arduino (AVR)\UTFT_Demo_400x240
даташиты UPD161710.pdf UPD161704A.pdf (он по красивше цветастей про регистры, стр122) на всяк случай закинул их в UTFT\tft_drivers\ili9325c
setxy.h составил методом тыка , что то наобум , надо сильно вдумываться и экспериментировать чтоб сделать поуму , иногда от очередности очень сильно зависит. От старшего байта по Y(X) м.б. избавиться , поэспериментировать закомментить , ибо 240 не больше 255 . (это в другой координате 400пикс больше 255 , и используется старший байт) , как получилось здесь избавиться
#comment-93736
Надо еще отзеркалить , для этого надо экспериментировать в initlcd.h , не все там регистры , смотреть даташиты , искать (scan , mirror ) хоть какие-то сходства в "родственниках" попавшегося контроллера. Увеличить частоту обновления экрана, еще бы.
!!! LCD_Write_COM_DATA(0x30,0x01); /* 0x81 Select the display-RAM data */ // 0x01 Зеркалит по горизонтали !!!
но буквы по прежнему наоборот , хотя уже на своих местах.
Есть подозрения , что это надо setxy.h правильно сделать. мож что croc19 подскажет. Как будто библиотека рисует букву наоборот.
и помнить , что в даташитах UPD... , регистры написали в десятичной системе , надо помнить переводить.
// на крайняк , попробуйте инит в старый Adafruit внедрить к похожему по рисованию ili9320 контроллеру. В споследних Adafruit , MCUfriend_kvb м.б. будет трудно разобраться.
croc19 как правильно рисовать ? и почему в ориг. либе рисуется через 1A 1B 1C
1
Рисование из либы SEGGER от EmWIN , под STM32:
2
static
void
_SetPhysRAMAddr(
int
x,
int
y) {
3
x -= _x0;
4
y -= _y0;
5
LCD_WRITE_A0(REG_RAM_ADDR_H); LCD_WRITE_A1(x);
// 0x1A,x - Horizontal RAM address
6
LCD_WRITE_A0(REG_RAM_ADDR_V_LB); LCD_WRITE_A1(y & 0xff);
// 0x1B,y&0xff - Vertical RAM address, low byte
7
LCD_WRITE_A0(REG_RAM_ADDR_V_HB); LCD_WRITE_A1(y >> 8);
// 0x1C,y>>8 - Vertical RAM address, high byte
8
LCD_WRITE_A0(REG_RAM_ACCESS);
, иль что я не усмотрел.
вот собрал как что у других контроллеров в setxy.h :
001
case
ILI9325C:
002
003
// названия регистров из найденного инита D54E4PA7551 названия регистров ILI9320
004
// предположительно:
005
// LCD_Write_COM_DATA(0x1A,x1); /* - Horizontal RAM address */ // 0x20,x1; GRAM horizontal Address
006
// LCD_Write_COM_DATA(0x1B,y1); /* - Vertical RAM address, low byte */ // 0x21,y1; GRAM Vertical Address
007
// LCD_Write_COM_DATA(0x1C,y2); /* - Vertical RAM address, high byte */
008
009
// как получилось:
010
LCD_Write_COM_DATA(0x13,x1);
/* - Horizontal start address */
// 0x50,x1 Horizontal GRAM Start Address
011
LCD_Write_COM_DATA(0x14,y1);
/* - Vertical start address, low byte */
// 0x52,y1 Vertical GRAM Start Address
012
013
LCD_Write_COM_DATA(0x16,x2);
/* - Horizontal end address */
// 0x51,x2 Horizontal GRAM End Address
014
LCD_Write_COM_DATA(0x17,y2);
/* - Vertical end address, low byte */
// 0x53,y2 Vertical GRAM Start Address
015
016
LCD_Write_COM_DATA(0x15,y1>>8);
/* - Vertical start address, high byte */
017
LCD_Write_COM_DATA(0x18,y2>>8);
/* - Vertical end address, high byte */
018
019
LCD_Write_COM(0x03);
020
021
break
;
022
023
/*
024
рисование ILI9320 у Adafruit:
025
writeRegister16(0x0050, x1); Set address window
026
writeRegister16(0x0051, x2); согласно даташиту ili9320 использование H(старшего) L(младшего) байтов:
027
writeRegister16(0x0052, y1); R50,R51-8бит R52,R53-16бит(9) (9бит - т.к. 320пикс , а это немного больше 255 8бит)
028
writeRegister16(0x0053, y2);
029
writeRegister16(0x0020, x ); Set address counter to top left
030
writeRegister16(0x0021, y ); R20-8бит используются R21-16бит(9) используются
031
032
033
рисование ILI9325C в UTFT:
034
LCD_Write_COM_DATA(0x20,x1); GRAM horizontal Address
035
LCD_Write_COM_DATA(0x21,y1); GRAM Vertical Address
036
LCD_Write_COM_DATA(0x50,x1); Horizontal GRAM Start Address
037
LCD_Write_COM_DATA(0x52,y1); Vertical GRAM Start Address
038
LCD_Write_COM_DATA(0x51,x2); Horizontal GRAM End Address
039
LCD_Write_COM_DATA(0x53,y2); Vertical GRAM Start Address
040
LCD_Write_COM(0x22);
041
042
043
Рисование из либы SEGGER от EmWIN , под STM32:
044
static void _SetPhysRAMAddr(int x, int y) {
045
x -= _x0;
046
y -= _y0;
047
LCD_WRITE_A0(REG_RAM_ADDR_H); LCD_WRITE_A1(x); // 0x1A,x - Horizontal RAM address
048
LCD_WRITE_A0(REG_RAM_ADDR_V_LB); LCD_WRITE_A1(y & 0xff); // 0x1B,y&0xff - Vertical RAM address, low byte
049
LCD_WRITE_A0(REG_RAM_ADDR_V_HB); LCD_WRITE_A1(y >> 8); // 0x1C,y>>8 - Vertical RAM address, high byte
050
LCD_WRITE_A0(REG_RAM_ACCESS); // 0x03 - RAM access mode
051
052
053
рисование ILI9327
054
LCD_Write_COM(0x2a);
055
LCD_Write_DATA(0x00,x1>>8);
056
LCD_Write_DATA(0x00,x1);
057
LCD_Write_DATA(0x00,x2>>8);
058
LCD_Write_DATA(0x00,x2);
059
LCD_Write_COM(0x2b);
060
LCD_Write_DATA(0x00,y1>>8);
061
LCD_Write_DATA(0x00,y1);
062
LCD_Write_DATA(0x00,y2>>8);
063
LCD_Write_DATA(0x00,y2);
064
LCD_Write_COM(0x2c);
065
066
067
рисование SPFD5420A при заброске 16бит для 16бит дисп.:
068
LCD_Write_COM16_DATA16(0x0200,x1); // GRAM Address Set (Horizontal Address) (R20h)
069
LCD_Write_COM16_DATA16(0x0201,y1); // GRAM Address Set (Vertical Address) (R21h)
070
LCD_Write_COM16_DATA16(0x0210,x1); // Window Horizontal RAM Address Start (R210h)
071
LCD_Write_COM16_DATA16(0x0212,y1); // Window Vertical RAM Address Start (R212h)
072
LCD_Write_COM16_DATA16(0x0211,x2); // Window Horziontal RAM Address End (R211h)
073
LCD_Write_COM16_DATA16(0x0213,y2); // Window Vertical RAM Address End (R213h)
074
LCD_Write_COM16(0x0202);
075
076
// функция для 16ти битнной адресации к регистрам + передача 16ти битных данных :
077
void UTFT::LCD_Write_COM16_DATA16(int com16,int dat16) // *********** добавил ************
078
{
079
cbi(P_RS, B_RS); // передаём команду в дисплей
080
LCD_Writ_Bus(com16>>8);
081
LCD_Writ_Bus(com16);
082
sbi(P_RS, B_RS); // предаём данные в дисплей
083
LCD_Writ_Bus(dat16>>8);
084
LCD_Writ_Bus(dat16);
085
}
086
087
void UTFT::LCD_Write_COM16(int com16) // *********** добавил ****************
088
{
089
cbi(P_RS, B_RS);
090
LCD_Writ_Bus(com16>>8);
091
LCD_Writ_Bus(com16);
092
}
093
094
095
рисование ili9326 8bit:
096
LCD_Write_COM16_DATA16(0x0200,x1); // GRAM Address Set (Horizontal Address) (R0200h)
097
LCD_Write_COM16_DATA16(0x0201,y1); // GRAM Address Set (Vertical Address) (R0201h)
098
LCD_Write_COM16_DATA16(0x0210,x1); // Window Horizontal RAM Address Start (R210h)
099
LCD_Write_COM16_DATA16(0x0212,y1); // Window Vertical RAM Address Start (R212h)
100
LCD_Write_COM16_DATA16(0x0211,x2); // Window Horziontal RAM Address End (R211h)
101
LCD_Write_COM16_DATA16(0x0213,y2); // Window Vertical RAM Address End (R213h)
102
LCD_Write_COM16(0x0202);
103
104
105
рисование HX8352A 8bit только такая последовательность:
106
// LCD_Write_COM_DATA(0x02,x1>>8);
107
LCD_Write_COM_DATA(0x03,x1);
108
// LCD_Write_COM_DATA(0x04,x2>>8);
109
LCD_Write_COM_DATA(0x05,x2);
110
LCD_Write_COM_DATA(0x06,y1>>8);
111
LCD_Write_COM_DATA(0x07,y1);
112
// LCD_Write_COM_DATA(0x08,y2>>8);
113
// LCD_Write_COM_DATA(0x09,y2);
114
LCD_Write_COM(0x22);
115
116
117
*/
черкнул скетч который рисует квадратики , используя рисование только через регистры 1A 1B 1C
001
#define LCD_RST 41//4
002
#define LCD_CS 40//A3
003
#define LCD_RS 38//A2
004
#define RS_High PORTD|=B10000000 // PD 7 D38
005
#define RS_Low PORTD&=B01111111 // PD 7 D38
006
#define LCD_WR 39//A1
007
#define WR_High PORTG|=B00000100 // PG 2 D39
008
#define WR_Low PORTG&=B11111011 // PG 2 D39
009
#define LCD_RD 42//45 A0
010
011
#define LCD_D0 22//8
012
#define LCD_D1 23//9
013
#define LCD_D2 24//2
014
#define LCD_D3 25//3
015
#define LCD_D4 26//4
016
#define LCD_D5 27//
017
#define LCD_D6 28//6
018
#define LCD_D7 29//7
019
020
#define BLACK 0x0000
021
#define BLUE 0x001F
022
#define RED 0xF800
023
#define GREEN 0x07E0
024
#define CYAN 0x07FF
025
#define MAGENTA 0xF81F
026
#define YELLOW 0xFFE0
027
#define WHITE 0xFFFF
028
029
uint16_t x,y,x0,y0, ii ;
030
uint16_t color0;
031
032
void
setup
() {
033
lcdInit();
// настройка пинов
034
delay(100);
035
lcdReset();
036
delay(500);
037
lcdRegisterOther();
// инит
038
}
039
040
// **************************************************************************************************
041
void
loop
() {
042
043
lcd_clr(BLACK);
// заливка всего экрана
044
delay(500);
045
046
for
(ii=0; ii<50; ii++)
// количество квадратов , а потом стереть
047
{
048
x0=random(349);
//349 с учетом длины квадрата 50 399макс
049
y0=random(189);
//189 с учетом длины квадрата 50 239макс
050
// x0=20; y0=10; // глянуть где начало координат , оно вверху слева
051
color0=random(65534);
052
053
for
(y=y0; y<y0+50; y++)
054
{
055
// зададим начальные координаты
056
//if (y>239) y=239;
057
//if (x>399) x=399;
058
lcdWriteRegister(0x1A,y);
/* - Horizontal RAM address */
059
lcdWriteRegister(0x1B,x);
/* - Vertical RAM address, low byte */
060
lcdWriteRegister(0x1C,x>>8 );
/* - Vertical RAM address, high byte */
061
lcdWriteCommand (0x03);
062
063
// нарисуем горизонтальную линию
064
for
(x=x0; x<x0+50; x++)
065
{
066
// if (x>399) break;
067
lcdWriteData (color0 >> 8);
068
lcdWriteData (color0);
069
}
070
}
071
delay(500);
072
}
073
074
}
075
076
077
void
lcdRegisterOther() {
078
lcdWriteRegister(0xC0, 0x00);
/* Internal EEPROM */
079
lcdWriteRegister(0xC0, 0x02);
/* Internal EEPROM */
080
delay(10);
081
lcdWriteRegister(0xC0,0x00);
/* Internal EEPROM */
082
lcdWriteRegister(0x68,0x41);
/* COM-pp */
083
lcdWriteRegister(0x69,0x7D);
/* COM-center */
084
lcdWriteRegister(0x01,0x02);
/* 8bit 8/8 transfer */
085
lcdWriteRegister(0x08,0x00);
/* Normally black */
086
lcdWriteRegister(0x10,0xF0);
/* Panel X-size=240 */
087
lcdWriteRegister(0x11,0x90);
/* Panel Y-size=400 */
088
lcdWriteRegister(0x12,0x01);
/* Panel Y-size=400 */
089
lcdWriteRegister(0x1E,0x50);
/* Number of vertical line=400 */
090
lcdWriteRegister(0x1D,0x07);
/* RAM write direction :landscape */
091
lcdWriteRegister(0x1A,0xEF);
/* RAM pointer X */
092
lcdWriteRegister(0x1B,0x8F);
/* RAM pointer Y */
093
lcdWriteRegister(0x1C,0x01);
/* RAM pointer Y */
094
lcdWriteRegister(0x30,0x81);
/* Select the display-RAM data */
095
096
// lcdWriteRegister(0x32,0x01); // R50=0x32 Scan - нифига не влияет
097
// lcdWriteRegister(0x01,0x01); // тож не зеркалит , надо для него как-то переключать регистовую память в Register MODE 3,4
098
// А вообще надо искать родной даташит , или подобный , или его соседний
099
100
lcdWriteRegister(0x33,0x02);
/* Non-display data color */
101
lcdWriteRegister(0x42,0x70);
/* Vertical front poach=112h */
102
lcdWriteRegister(0x43,0x01);
/* Vertical back poach=1h */
103
lcdWriteRegister(0x44,0x3F);
/* =3F H scan interval=96clock */
104
lcdWriteRegister(0x45,0x14);
/* GSP start position=10clock */
105
lcdWriteRegister(0x46,0x0F);
/* GCK start position=15clock */
106
lcdWriteRegister(0x48,0x03);
/* COM inversion position=3clock */
107
lcdWriteRegister(0x4A,0x01);
/* Signal setting */
108
lcdWriteRegister(0x4B,0xA8);
/* SSD setting */
109
lcdWriteRegister(0x4C,0x12);
/* ASW start position=18clock */
110
lcdWriteRegister(0x5A,0x00);
/* Battery pull-out detection off */
111
lcdWriteRegister(0x62,0x52);
/* ASW width10, interval2clock */
112
lcdWriteRegister(0x65,0x02);
/* AMP bias current setting */
113
lcdWriteRegister(0x66,0x06);
/* VGM5.2V */
114
lcdWriteRegister(0x6A,0x02);
/* VCOM output */
115
lcdWriteRegister(0x81,0x44);
/* VR,VS boost clock setting */
116
lcdWriteRegister(0x82,0x2D);
/* DCK,DCKB timing setting */
117
lcdWriteRegister(0x83,0x25);
/* DCDC Dual, AVR,5.2V,DCDC drivability=min */
118
lcdWriteRegister(0x84,0x17);
/* VR setting */
119
lcdWriteRegister(0x85,0x27);
/* DCDC Dual, AVS5.4V,DCDC drivability=min */
120
lcdWriteRegister(0x86,0x17);
/* VS setting */
121
lcdWriteRegister(0x90,0x25);
/* Auto ON timing setting */
122
lcdWriteRegister(0x91,0x05);
/* Auto ON/OFF setting(1V) */
123
lcdWriteRegister(0x92,0x15);
/* Auto OFF timing setting */
124
lcdWriteRegister(0x31,0x01);
/* VAL */
125
lcdWriteRegister(0x19,0x01);
/* Window access mode */
126
127
// зададим пределы Y
128
lcdWriteRegister(0x13, 0x00);
/* - Horizontal start address */
129
lcdWriteRegister(0x16, 0xEF);
/* - Horizontal end address F0 конец*/
130
// зададим пределы X
131
lcdWriteRegister(0x14, 0x00);
/* - Vertical start address, low byte */
132
lcdWriteRegister(0x15, 0x00);
/* - Vertical start address, high byte */
133
lcdWriteRegister(0x17, 0x8F);
/* - Vertical end address, low byte 018F конец*/
134
lcdWriteRegister(0x18, 0x01);
/* - Vertical end address, high byte 01 конец*/
135
// начальные координаты (необязательно)
136
lcdWriteRegister(0x1A,0x00);
/* - Horizontal RAM address */
137
lcdWriteRegister(0x1B,0x00);
/* - Vertical RAM address, low byte */
138
lcdWriteRegister(0x1C,0x00);
/* - Vertical RAM address, high byte */
139
140
lcdWriteRegister(0x3E, 0x01);
141
delay(120);
142
}
143
144
void
lcdInit() {
145
pinMode(LCD_CS, OUTPUT);
146
digitalWrite(LCD_CS, LOW);
147
pinMode(LCD_RS, OUTPUT);
148
digitalWrite(LCD_RS, HIGH);
149
pinMode(LCD_WR, OUTPUT);
150
digitalWrite(LCD_WR, HIGH);
151
pinMode(LCD_RD, OUTPUT);
152
digitalWrite(LCD_RD, HIGH);
153
pinMode(LCD_RST, OUTPUT);
154
digitalWrite(LCD_RST, HIGH);
155
lcdSetWriteDir();
156
}
157
158
void
lcdReset() {
159
digitalWrite(LCD_RST, LOW);
160
delay(50);
161
digitalWrite(LCD_RST, HIGH);
162
delay(50);
163
}
164
165
void
lcdWrite8(uint8_t data) {
// было uint16_t
166
PORTA=data;
167
}
168
169
void
lcdSetWriteDir() {
170
pinMode(LCD_D0, OUTPUT);
171
pinMode(LCD_D1, OUTPUT);
172
pinMode(LCD_D2, OUTPUT);
173
pinMode(LCD_D3, OUTPUT);
174
pinMode(LCD_D4, OUTPUT);
175
pinMode(LCD_D5, OUTPUT);
176
pinMode(LCD_D6, OUTPUT);
177
pinMode(LCD_D7, OUTPUT);
178
}
179
180
void
lcdWriteData(uint8_t data) {
181
RS_High;
182
WR_High;
183
lcdWrite8(data);
184
WR_Low; WR_Low;
185
WR_High;
186
}
187
188
void
lcdWriteCommand(uint8_t command) {
189
RS_Low;
190
WR_High;
191
lcdWrite8(command);
192
WR_Low; WR_Low;
193
WR_High;
194
RS_High;
195
}
196
197
void
lcdWriteRegister(uint8_t addr, uint8_t data){
198
lcdWriteCommand(addr);
199
lcdWriteData(data);
200
}
201
202
void
lcd_clr(uint16_t color) {
//заливка цветом весь экран
203
// lcdWriteRegister(0x13, 0x00); /* - Horizontal start address */
204
// lcdWriteRegister(0x16, 0xEF); /* - Horizontal end address F0 конец*/
205
// lcdWriteRegister(0x14, 0x00); /* - Vertical start address, low byte */
206
// lcdWriteRegister(0x15, 0x00); /* - Vertical start address, high byte */
207
// lcdWriteRegister(0x17, 0x8F); /* - Vertical end address, low byte 90 конец*/
208
// lcdWriteRegister(0x18, 0x01); /* - Vertical end address, high byte 01 конец*/
209
210
// зададим начальные координаты
211
lcdWriteRegister(0x1A,0x00);
212
lcdWriteRegister(0x1B,0x00);
213
lcdWriteRegister(0x1C,0x00);
214
lcdWriteCommand (0x03);
//принять координаты и быть готовым принимать данные о цвете,
215
// автоинкремент координат пикселя происходит сам собой (благодаря настройкам в ините)
216
217
uint32_t i = 400;
218
i *=240;
// = 96000
219
do
{
220
// color=random(65534);
221
lcdWriteData (color >> 8);
222
lcdWriteData (color);
223
}
while
( i-- );
224
225
}
Generik, не понятно не видать что у вас и как , попробуйте с аналогией с 1602 (там 8бит посылается как 2раза по 4бита)