Arduino и дисплеи от сотиков мобильных телефонов

croc19
Offline
Зарегистрирован: 17.02.2017

код контроллера по даташиту должен лежать в 96 регистре и равен 1710.

хотя судя по по 10-12 регистрам у тебя читается разрешение экрана 240х400.

В общем геморно все это. Пробуй инициализацию от этого контроллера.

Либо пиши свой скетч для чтения регистров контроллера в 8 битном режиме.

 

Валерон
Offline
Зарегистрирован: 25.11.2018

croc19 пишет:

код контроллера по даташиту должен лежать в 96 регистре и равен 1710

Это я в курсе. Но он там не "лежит".

croc19 пишет:

хотя судя по по 10-12 регистрам у тебя читается разрешение экрана 240х400.

Про это тоже в курсе. Если не секрет как это вычисляется по коду в логе?

croc19 пишет:

В общем геморно все это. Пробуй инициализацию от этого контроллера.

Почему геморно? Инит пробывал - глухо. Читалка 5.2 зажигала экран белым цветом только.

croc19 пишет:

Либо пиши свой скетч для чтения регистров контроллера в 8 битном режиме.

Они уже написаны до этого. Если  точно знать какой контроллер стоит (могут быть разные варианты), многие вопросы отпали бы.

croc19
Offline
Зарегистрирован: 17.02.2017

0F = 240  0190 = 400 похоже на разрешение стекла.

slider
Offline
Зарегистрирован: 17.06.2014

тогда бы числа и по другой координате рядом встретилось
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
Offline
Зарегистрирован: 17.02.2017

По даташиту в 10 и 11 регистре лежат maxX и maxY. 

Думаю нужно поискать готовый инит от контроллера, а не самому по даташиту

писать.

croc19
Offline
Зарегистрирован: 17.02.2017

В MCUFRIEND_kbv есть UPD161704. Он правда 240х320. Но вдруг.

Валерон
Offline
Зарегистрирован: 25.11.2018

croc19 пишет:

В MCUFRIEND_kbv есть UPD161704. Он правда 240х320. Но вдруг.

Сегодня не могу уже посмотреть, только завтра вечером. Ткните мне в каком файле он в с писке, а то я с ардуино пока на ВЫ.

Валерон
Offline
Зарегистрирован: 25.11.2018

slider пишет:

что-то пока сомневаюсь что там UPD161710 , уж много чего не сходится.

Есть версия что там может стоять контроллер D54E4PA7551, но на него не могу найти даташит. Да и в читалках ничего похожего нет.

croc19
Offline
Зарегистрирован: 17.02.2017

скачал прошивку на телефон. UPD161710 там упоминается. А рядом Toshiba LS030B. Что это не нашел.

Возможно тоже контроллер дисплея.

slider
Offline
Зарегистрирован: 17.06.2014

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

в верхнем файле либы можно подсмотреть через какие регистры и как осуществляется рисование:
рисуется через регистры  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 */
14static 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

 

Валерон
Offline
Зарегистрирован: 25.11.2018

Slider, спасибо за предоставленную инфу, многое уже видел. Т.к. я не программист, только как говорится балуюсь (опыта еще мало) я не смог для себя там что-то найти полезного. Сейчас уже вижу что-то есть.

slider пишет:

Валерон , покажите фотку как вы подпаяли . У gm360i прямоугольный разъем с мелким шагом.

У меня дисп от GS-290, но тоже такая хрень. Разъем я отпаял с мамки сотика и делал переходную плату. На плату заодно поставил контроллер подсветки, LDO на 2.9В и всякую мелочь. Фотку показать сейчас не могу - на работе. Если очень интересно то скину после 19.30.

croc19
Offline
Зарегистрирован: 17.02.2017

LG gm360 i все тоже самое, что и на GS-290. D54 в прошивках не находится.

Начало прошивок один в один.

Похоже контроллер PD161710.  

alex_kotl
Offline
Зарегистрирован: 21.03.2018

Из форума на радиокоте: "...LS030B3UX05 с чипом uPD161710, название дисплея у меня на самой железной крышке, 3-й вывод соединен с землей...". На крышке дисплея надпись соответствует?

Валерон
Offline
Зарегистрирован: 25.11.2018

alex_kotl пишет:

 3-й вывод соединен с землей...

Так и есть. Надпись есть какая-то, сейчас не помню. Вечером посмотрю.

Валерон
Offline
Зарегистрирован: 25.11.2018

alex_kotl пишет:

Из форума на радиокоте: "...LS030B3UX05 с чипом uPD161710, название дисплея у меня на самой железной крышке, 3-й вывод соединен с землей...". На крышке дисплея надпись соответствует?

У меня на крышке надпись  033h026829aqh. Инет по этому номеру молчит.

alex_kotl
Offline
Зарегистрирован: 21.03.2018

Тогда строчкой выше из того-же форума: "...IM300IBN1A с чипом R61509, название дисплея на шлейфе под железной крышкой, 3-й вывод соединен с шиной питания..." Есть возможность заглянуть под крышку?

Валерон
Offline
Зарегистрирован: 25.11.2018

alex_kotl пишет:

Тогда строчкой выше из того-же форума: "...IM300IBN1A с чипом R61509, название дисплея на шлейфе под железной крышкой, 3-й вывод соединен с шиной питания..." Есть возможность заглянуть под крышку?

Я уже заглядывал под крышку. На шлейфе какой-то номер и интернет по нему тоже молчит. 3-вывод соединен с землей железно! Чип R61509 отпадает.

nik2507
Offline
Зарегистрирован: 14.09.2018

croc19 пишет:

Сравнивал выходы с даташитом ILI 9488. Все совпадает. Есть вывод на шлейф IM. но похоже он переключает с 24 бит на 18.

Соглано определению выводов на фото  выходы располагаются так:

1  
1  LED (K)
2  NC
3  NC
4  LED(A)
5  NC
6  черезь резистор R2 на GND (зачем это сделано не понятно)
7  TE
8  CS
9  DC
10 WR
11 RS
12  ?  (как пишет croc19 есть вывод IM может это он)
13 GND
14 D0
.  .
.  .
37 D23 
38 ?  (скорее всего питание)
39 ?  (скорее всего питание)
и если он подключается тока по 18 или 24 bit шине тогда подскажите к каким выводам ARDUINO Mega 
его подключать.
и если можно напишите код программы (скетча) посыла данных/комманд по 18 или 24 bit шине данных
Валерон
Offline
Зарегистрирован: 25.11.2018

croc19 пишет:

LG gm360 i все тоже самое, что и на GS-290. D54 в прошивках не находится.

Похоже контроллер PD161710.  

Контроллер оказался D54E4PA7551. Инит прошел тот, который дал Slider. Спасибо ему. На экране появился шум, а вот залить его каким-нибудь цветом у меня не получается.

croc19
Offline
Зарегистрирован: 17.02.2017

#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 */        

Валерон
Offline
Зарегистрирован: 25.11.2018

croc19 пишет:

#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, это я видел из предыдущего поста. Так как опыта в програмировании у меня мало, то пока не получается. Вроде алгоритм рисовании линии понимаю, но в какой регистр что запмсывать пока не въезжаю. Если не трудно подскажи.

croc19
Offline
Зарегистрирован: 17.02.2017

сначала закрасить прямоугольник.  

Попробуй так. Запиши последовательно в регистры

сом 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 точек.

 

 

 

 

Валерон
Offline
Зарегистрирован: 25.11.2018

croc19 спасибо, получилось.

Валерон
Offline
Зарегистрирован: 25.11.2018

Уважаемые, подскажите кто в курсе, почему при заливке диспа одним цветом появляются другие цвета? Заливаю красным, появляется синия полоса во весь экран. Может быть в одном месте, может быть в нескольких местах, может быть на половину экрана. С другими цветами также. только с черным нормально.

croc19
Offline
Зарегистрирован: 17.02.2017

Выложи программу и фото. 

ZEL
Offline
Зарегистрирован: 03.12.2018

Кто-нибудь работал с либой GLCD или имел дело с монохромными дисплеями на SED1520 ?

Отзовитесь пожалуйста .

 

Валерон
Offline
Зарегистрирован: 25.11.2018

croc19 пишет:

Выложи программу и фото. 

фотка при заливе красным цветом

alex_kotl
Offline
Зарегистрирован: 21.03.2018

ZEL, попробуй библиотеку u8g2

ZEL
Offline
Зарегистрирован: 03.12.2018

Неужели хоть кто - то отозвался!!! Спасибо попробую.. гдето вроде уже скачана ...

Полное описание проблеммы здесь:

http://arduino.ru/forum/apparatnye-voprosy/arduino-i-displei-ot-sotikov-mobilnykh-telefonov?page=41#comment-411100

croc19
Offline
Зарегистрирован: 17.02.2017

Валерон. 

Я не пишу для ардуины.  Поэтому почитай как пишутся скетчи. Там все доступно.

Теперь попробую описать примерный алгоритм. 

Сначала в SETUP обозначаешь, какие ноги как будут называться ( у тебя это в define) и в каком режиме будут работать --  pinMode(LCD_D0, OUTPUT);  В принципе все ноги на цифровой выход.

Далее инициализация дисплея. 

Дальше в LOOP .  Пишешь координаты прямоугольника в регистры. Если весь экран, то начало по Х=0, конец Х=239 ,

начало по Y=0, конец по Y=399. И команду 0х03 . Затем цикл на 240*400=96000 , внутри  которого пишешь

цвет ( это у тебя в программе есть ) .

Ну а дальше что душа пожелает.

Все подпрограммы с Read в урну, читать ничего не нужно. Контроллер ты знаешь.

croc19
Offline
Зарегистрирован: 17.02.2017

Да, на будущее. Экран может работать в разных режимах. Развертка может быть слева направо и наоборот,

снизу вверх и наоборот. По вертикали или по горизонтали. цвет может выводиться в RGB или в BGR.  Все это задается в 

регистрах определенными битами. 

В какой режим устанавливает дисплей эта инициализация неизвестно. Без даташита не подскажу.

 

Валерон
Offline
Зарегистрирован: 25.11.2018

croc19 я тоже не пишу для ардуино и не планирую. Програмированием занимаюсь от случая к случаю. В даный момент я просто хочу понять алгоритм програмирования диспов. Да и ардуино досталась на халяву, вот решил заюзать первый попавшийся дисп. Я в основном работаю с пиками. Ладно это все лирика.

Алгоритм понял, буду пробывать, спасибо.

Ксати функция чтения не мешает. Этот скетч рабочий вариант, правленный для моего диспа.

croc19
Offline
Зарегистрирован: 17.02.2017

Не мешает, это да. Но лишнее в программе не камильфо.

Можешь покопать библиотеку из которой инициализация. В ней может быть поворот экрана.

С выводом прямоугольников понятно. В них можно выводить и картинки.

А регистры 1А, 1В, 1С установка вывода в нужную стартовую точку.

Валерон
Offline
Зарегистрирован: 25.11.2018

croc19, разве у меня заливка не првильно релизована?

  lcdWriteRegister(0x13, 0x00); /* - Horizontal start address */   
  lcdWriteRegister(0x16, 0xEF); /* - Horizontal end   address F0 конец*/ 
  lcdWriteRegister(0x14, 0x00); /* - Vertical   start address, low  byte */
  lcdWriteRegister(0x15, 0x00); /* - Vertical   start address, high byte */
  lcdWriteRegister(0x17, 0x8F); /* - Vertical   end   address, low  byte 90 конец*/
  lcdWriteRegister(0x18, 0x01); /* - Vertical   end   address, high byte  01 конец*/   
 lcdWriteCommand (0x03);       /* - RAM access mode */
 
 
  uint32_t i = 400; 
  i *=240;// итого 96000
do   {
lcdWriteData (color >> 8);
//delayMicroseconds(10);
lcdWriteData (color);
//delayMicroseconds(10);
  }while( i-- );
 

 

Валерон
Offline
Зарегистрирован: 25.11.2018

croc19 пишет:

А регистры 1А, 1В, 1С установка вывода в нужную стартовую точку.

Мне кажется они устанавливают размер экрана.

croc19
Offline
Зарегистрирован: 17.02.2017

Все правильно. Делеи можешь убрать. Дисплей гораздо быстрее, чем ардуина.

Просто у тебя в программе большая мешанина. А я не спец в скетчах. Я напрямую с АВР дружу.

Валерон
Offline
Зарегистрирован: 25.11.2018

Блин, заливка правильная. Почему же полосы появляются другого цвета. Даже когда квадрат рисую на фоне, тоже полосы другого цвета в квадрате появляются.

croc19
Offline
Зарегистрирован: 17.02.2017

Лишнее убери и выложи прогу.

Валерон
Offline
Зарегистрирован: 25.11.2018

croc19 пишет:

Лишнее убери и выложи прогу.

 

slider
Offline
Зарегистрирован: 17.06.2014

Валерон пишет:

croc19 пишет:

Лишнее убери и выложи прогу.

...

 Без второго подопытного диспа, скетч кажется норм.
Собрал за ночь эксперимент на макетке , дисплей от 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) пока ниуда не подключал, не экспериментировал с битностью, работает и так . 

ваш скетч не требующий либ, немного ускоренный:

// да проскакивала синяя заливка, но это при попытках чрезмерно ускорить через заваливающие фронты 10ком резисторы. Возможно где то у вас не контакт в схеме или "залипуха" с припоя или флюса. М.б. из-за питания.  Дисп от LG 360i запитал от 3.3в через 33 0м резистор и белый светодиод + светодиоды подсветки, в итоге на питание диспа идет 2,7в .

//// надо бы закинуть этот инит в либу ( adafruit, utft , mcufrieng_kvb ), и регистры рисования подменить. Тогда и проще рисовать будет. B библиотеках заливка должна осуществляться еще быстрее, т.к. изпользуется автоинкримент средствами контроллера дисплея, при ненадобности заново вводить цвет и координаты последующегося пикселя в строке.

Валерон
Offline
Зарегистрирован: 25.11.2018

slider с твоим скетчем что-то у меня заливается только четверть экрана, хотя заливка написана на весь экран. Может где небольшой косячок есть, найти не могу.

У себя в скетче переделал:

void lcdWrite8(uint8_t data) {
  PORTA=data; 
}
и 
void lcd_clr(uint16_t color) { //заливка цветом
  lcdWriteRegister(0x13, 0x00); /* - Horizontal start address */   
  lcdWriteRegister(0x16, 0xEF); /* - Horizontal end   address F0 конец*/ 
  lcdWriteRegister(0x14, 0x00); /* - Vertical   start address, low  byte */
  lcdWriteRegister(0x15, 0x00); /* - Vertical   start address, high byte */
  lcdWriteRegister(0x17, 0x8F); /* - Vertical   end   address, low  byte 90 конец*/
  lcdWriteRegister(0x18, 0x01); /* - Vertical   end   address, high byte  01 конец*/   
 lcdWriteCommand (0x03);       /* - RAM access mode */
 
  lcdSetWriteDir(); 
  digitalWrite(LCD_CS, LOW);
  digitalWrite(LCD_RS, HIGH);
  digitalWrite(LCD_RD, HIGH);
  digitalWrite(LCD_WR, HIGH);
 
  uint32_t i = 400; //432
  i *=240;
  do   {
  lcdWrite8 (color >> 8);
  digitalWrite(LCD_WR, LOW); 
  digitalWrite(LCD_WR, HIGH); 
  lcdWrite8 (color);
  digitalWrite(LCD_WR, LOW); 
  digitalWrite(LCD_WR, HIGH);
  }while( i-- );
  digitalWrite(LCD_CS, HIGH);
  digitalWrite(LCD_RS, HIGH);
}

Экран стал заливаться за 3 сек. Но проблема с полосами осталась.

 

slider
Offline
Зарегистрирован: 17.06.2014

подправил на обратно 

233   uint32_t i = 400;

на вид около 0.5сек бешенная заливка !!! для arduino mega2560 , и это  еще на 8 бит , а  не 16.
потестируйте

RD 42 на свой 45вспомните поменять .

 
 
 
 

лог читалки тож по 00 регистру лежит id  0x0A0A

 

Валерон
Offline
Зарегистрирован: 25.11.2018

slider работает отлично. 

Сделаю другой преобразователь на шине управления, стоят резисторы 6,8к и 10к. Уж шибко фронты завалены. Может и проблема с заливкой цвета уйдет.

Валерон
Offline
Зарегистрирован: 25.11.2018

Что-то ID странный.

slider у тебя размах сигнала на пинах диспа какой?

Generik
Offline
Зарегистрирован: 11.12.2018

Народ помогите или наставьте на путь.

Д-цать постов назад запускали монохромный экран 640х240.

Есть аналог sharp lm089hb1t03, есть желание выводить на него показания с датчиков (ет если осилю управление им)

скетч от Слайдера для вывода 2-х строк выводится только на половину экрана

 

у меня 4-х битный экран, выходы управления подправил под мегу. немогу понять как заставить печатать во второй полвине экрана

шлейф:

lcd-adj # lcd +24v # ld3 # ld2 # ld1 # ld0 # lcd +24v # gnd # +5v # cp # lp # flm # nc # dsp-off

я правильно понимаю, шрифтов в нём нет всё придётся как в скетче побайтно рисовать?

 

Валерон
Offline
Зарегистрирован: 25.11.2018

slider,  в крайнем скетче что ты скинул можно убрать  двойные WR_Low; WR_Low; и оствить один и будет нормально работать.

Я поменял резисторы в преобразователе уровней. Поставил 680 и 1к и работает на ура.

Можно ли к скетчу как-нибудь прилепить шрифты из какой-нибудь библиотеки?

slider
Offline
Зарегистрирован: 17.06.2014

Валерон пишет:

Что-то ID странный.

slider у тебя размах сигнала на пинах диспа какой?

ID такой же как у вас 0A0A , в чем странность? 

вот лог с LCD_ID_Reader33.ino #comment-410547
 

Если предположить что не так с чтением , то надо подключать по 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 забить данные со своего инита.
  Ну а дальше как обычно.

 

Валерон
Offline
Зарегистрирован: 25.11.2018

slider пишет:

  Ну а дальше как обычно.

 

Да хрен там! Не получается у меня. Надо в других файлах что-то менять?

Может пины по другому подключать?

slider
Offline
Зарегистрирован: 17.06.2014

ну, млин...
оставить подключение такое же.
вот заготовил как получилось ,  : 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 м.б. будет трудно разобраться.

slider
Offline
Зарегистрирован: 17.06.2014

croc19  как правильно рисовать ? и почему в ориг. либе рисуется через  1A 1B 1C 
 

1Рисование из либы SEGGER от EmWIN  , под STM32:
2static void _SetPhysRAMAddr(int x, int y) {
3x -= _x0;
4y -= _y0;
5LCD_WRITE_A0(REG_RAM_ADDR_H);     LCD_WRITE_A1(x);         // 0x1A,x         - Horizontal RAM address 
6LCD_WRITE_A0(REG_RAM_ADDR_V_LB);  LCD_WRITE_A1(y & 0xff);  // 0x1B,y&0xff    - Vertical   RAM address, low  byte
7LCD_WRITE_A0(REG_RAM_ADDR_V_HB);  LCD_WRITE_A1(y >> 8);    // 0x1C,y>>8      - Vertical   RAM address, high byte
8LCD_WRITE_A0(REG_RAM_ACCESS);

, иль что я не усмотрел.
 

вот собрал как что у других контроллеров в setxy.h :

черкнул скетч который рисует квадратики , используя рисование только через регистры 1A 1B 1C

Generik, не понятно не видать что у вас и как , попробуйте с аналогией с 1602 (там  8бит посылается как 2раза по 4бита)