Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



3.2" TFT LCD

Сообщений 91 страница 120 из 165

91

Согласно ранее выложенной Вами ссылки, по которой Вы приобретали LCD, у Вас контроллер SSD1298.

http://sf.uploads.ru/t/MnDFv.jpg

Напрашивается естественный вопрос, как у Вас работает инициализация от SSD1289?

Не определив точно, какой у Вас контроллер, будете гадать на кофейной гуще и пользоваться методом научного тыка!

Отредактировано sasha_1973 (2014-12-19 03:42:32)

0

92

А можно фото обратной стороны платы дисплея?

0

93

forter, конечно можно.

http://sf.uploads.ru/t/KHZO1.jpg http://sf.uploads.ru/t/lB6vq.jpg

sasha_1973 правильно заметил - как так может быть по ссылке TFT 3.2 и на 1298 драйвере. О чем тут говорить, когда сзади на плате написано 3.5 вместо 3.2, измерив линейкой имеем диагональ 8.9см. По приезду товара после прочтения надписи 3.5 вместо 3.2 появилось неоднозначное предчувствие
Отличия небольшие есть в схемах для синей платы и черной. Вначале я конечно же пробовал запустить этот TFT как 1298. У H.Kipnik с немецкого BAS форума есть вариант с выбором 1289/1298 под хm128a1. Но там вообще тишина - дисплей никак не реагировал. А вот с 1289 библиотекой начал что-то показывать.
Вечером попробую опцию Mrshilov

0

94

Pryanick!
А на плате Low Drop стабилизатор - то стоит, думаю, что он из 5 (!) вольт вырабатывает 3, 3 В. Ракурс фотографии такой, что не видно какой это стабилизатор.
Если я прав, то, подавая, 3,3 вольта на плату, после стабилизатора Вы получите, в любом случае, что - то в районе 2,8 вольт. Дело в том, что контроллер дисплея кроме обработки сигналов интерфейса еще много чем занимается, в том числе, и выработкой внутренних (для TFT - матрицы) напряжений, которые могут быть больше 10 вольт. Подав на контроллер 2, 8 вольта, нельзя рассчитывать, что charge pump преобразователь выдаст требуемое напряжение. По этой причине артефакты в виде полос вполне возможны. Проверьте все - таки. Кстати, около стабилизатора должны быть контактные площадки, замкнув которые, можно подавать, действительно, 3, 3 в на плату дисплея.

0

95

forter, я подаю 3.3v от почти такого же - LM1117-3.3v.
На этих фото все точно видно.
Перемычка-таки замкнута. Под нагрузкой на выводах как меги так и TFT 3.28v
http://sf.uploads.ru/t/SZId7.jpg http://sf.uploads.ru/t/ksirW.jpg

0

96

В таком случае - вопросов нет.

0

97

Mrshilov, с предложенными исправлениями результат хуже - вертикальных полос еще больше. Предыдущий вариант инициализации лучше.

0

98

LowESR кондер не помог.
http://sf.uploads.ru/t/bauVj.jpg

0

99

А вариант хреновой прикатки к стеклу ?

0

100

Если перестать гадать на кофейной гуще, посмотреть доки на SSD1289 и SSD1298, то можно заметить
разницу в инициализации.
SSD1289:

Код:
	LCD_Write_COM_DATA(0x00,0x0001);
	LCD_Write_COM_DATA(0x03,0xA8A4);
	LCD_Write_COM_DATA(0x0C,0x0000);
	LCD_Write_COM_DATA(0x0D,0x080C);
	LCD_Write_COM_DATA(0x0E,0x2B00);
	LCD_Write_COM_DATA(0x1E,0x00B7);
	LCD_Write_COM_DATA(0x01,0x2B3F);
	LCD_Write_COM_DATA(0x02,0x0600);
	LCD_Write_COM_DATA(0x10,0x0000);
	LCD_Write_COM_DATA(0x11,0x6070);
	LCD_Write_COM_DATA(0x05,0x0000);
	LCD_Write_COM_DATA(0x06,0x0000);
	LCD_Write_COM_DATA(0x16,0xEF1C);
	LCD_Write_COM_DATA(0x17,0x0003);
	LCD_Write_COM_DATA(0x07,0x0233);
	LCD_Write_COM_DATA(0x0B,0x0000);
	LCD_Write_COM_DATA(0x0F,0x0000);
	LCD_Write_COM_DATA(0x41,0x0000);
	LCD_Write_COM_DATA(0x42,0x0000);
	LCD_Write_COM_DATA(0x48,0x0000);
	LCD_Write_COM_DATA(0x49,0x013F);
	LCD_Write_COM_DATA(0x4A,0x0000);
	LCD_Write_COM_DATA(0x4B,0x0000);
	LCD_Write_COM_DATA(0x44,0xEF00);
	LCD_Write_COM_DATA(0x45,0x0000);
	LCD_Write_COM_DATA(0x46,0x013F);
	LCD_Write_COM_DATA(0x30,0x0707);
	LCD_Write_COM_DATA(0x31,0x0204);
	LCD_Write_COM_DATA(0x32,0x0204);
	LCD_Write_COM_DATA(0x33,0x0502);
	LCD_Write_COM_DATA(0x34,0x0507);
	LCD_Write_COM_DATA(0x35,0x0204);
	LCD_Write_COM_DATA(0x36,0x0204);
	LCD_Write_COM_DATA(0x37,0x0502);
	LCD_Write_COM_DATA(0x3A,0x0302);
	LCD_Write_COM_DATA(0x3B,0x0302);
	LCD_Write_COM_DATA(0x23,0x0000);
	LCD_Write_COM_DATA(0x24,0x0000);
	LCD_Write_COM_DATA(0x25,0x8000);
	LCD_Write_COM_DATA(0x4f,0x0000);
	LCD_Write_COM_DATA(0x4e,0x0000);
	LCD_Write_COM(0x22);

SSD1298 > http://easyelectronics.ru/rabota-s-graf … d1298.html

0

101

Вот с такой инициалзацией все артефакты пропали. Отображается все гууд.

init

'-------------------------------------------------------------------------------
' Init display
'-------------------------------------------------------------------------------
Sub Display_init
Res_disp = 0 : Waitms 5 : Res_disp = 1                      'Hardware Reset

'begin TOTAL INIT-----------
Ssd1289_write_reg &H00 , &H0001
Ssd1289_write_reg &H03 , &HA8A4
Ssd1289_write_reg &H0C , &H0000
Ssd1289_write_reg &H0D , &H080C
Ssd1289_write_reg &H0E , &H2B00
Ssd1289_write_reg &H1E , &H00B7
Ssd1289_write_reg &H01 , &H2B3F
Ssd1289_write_reg &H02 , &H0600
Ssd1289_write_reg &H10 , &H0000
Ssd1289_write_reg &H11 , &H6070
Ssd1289_write_reg &H05 , &H0000
Ssd1289_write_reg &H06 , &H0000
Ssd1289_write_reg &H16 , &HEF1C
Ssd1289_write_reg &H17 , &H0003
Ssd1289_write_reg &H07 , &H0233
Ssd1289_write_reg &H0B , &H0000
Ssd1289_write_reg &H0F , &H0000
Ssd1289_write_reg &H41 , &H0000
Ssd1289_write_reg &H42 , &H0000
Ssd1289_write_reg &H48 , &H0000
Ssd1289_write_reg &H49 , &H013F
Ssd1289_write_reg &H4A , &H0000
Ssd1289_write_reg &H4B , &H0000
Ssd1289_write_reg &H44 , &HEF00
Ssd1289_write_reg &H45 , &H0000
Ssd1289_write_reg &H46 , &H013F
Ssd1289_write_reg &H30 , &H0707
Ssd1289_write_reg &H31 , &H0204
Ssd1289_write_reg &H32 , &H0204
Ssd1289_write_reg &H33 , &H0502
Ssd1289_write_reg &H34 , &H0507
Ssd1289_write_reg &H35 , &H0204
Ssd1289_write_reg &H36 , &H0204
Ssd1289_write_reg &H37 , &H0502
Ssd1289_write_reg &H3A , &H0302
Ssd1289_write_reg &H3B , &H0302
Ssd1289_write_reg &H23 , &H0000
Ssd1289_write_reg &H24 , &H0000
Ssd1289_write_reg &H25 , &H8000
Ssd1289_write_reg &H4F , &H0000
Ssd1289_write_reg &H4E , &H0000
Ssd1289_write_reg &H22 , &H0000
'end TOTAL INIT-----------

#if Portrait = 0
   Ssd1289_write_reg 1 , &H393F                             'Not Rotated
   Ssd1289_write_reg 17 , &H6F70                            'Entry Mode
#else
   Ssd1289_write_reg 1 , &H793F                             'Rotated
   Ssd1289_write_reg 17 , &H6F78                            'Entry Mode
#endif
Ssd1289_write_reg 2 , &H0600                                'EOR=1 for noflicker
Ssd1289_write_reg 16 , &H0000                               'Sleep Out
Ssd1289_write_reg 7 , &H0233                                'Display Control
End Sub

0

102

Добрый день.
Спрошу про тачскрин.
Микросхема применяется такая XPT2046.
Применяю библиотеку Touch.inc by Mrshilov
Использую такой код.

Touch

'*******************************************************************************
'
'                            SSD1289 LCD Test
'
'                            resolution 240x320
'
'*******************************************************************************
$regfile "xm256a3def.dat"
$crystal = 32000000
$hwstack = 300
$swstack = 300
$framesize = 300
$lib "xmega.lib"
$external _xmegafix_clear
$external _xmegafix_rol_r1014
Config Osc = Enabled , 32mhzosc = Enabled
Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1

'--------------------------- Pin Configuration ---------------------------------
Config Portb = Output : Data_disp_low Alias Portb           'DB0 - DB7
Config Portc = Output : Data_disp_high Alias Portc          'DB8 - DB15
Rs_disp Alias Porta.7 : Config Rs_disp = Output             'Command/Data pin
Wr_disp Alias Porta.6 : Config Wr_disp = Output             'Write pin
Rd_disp Alias Porta.3 : Config Rd_disp = Output : Rd_disp = 1       'Read pin
Res_disp Alias Porta.5 : Config Res_disp = Output : Res_disp = 1       'Reset pin
Cs_disp Alias Porta.4 : Config Cs_disp = Output : Cs_disp = 0       'Chip Select
'-------------------------------- Library --------------------------------------

Clk_touch Alias Portd.4 : Config Clk_touch = Output         'XPT2046 Clock Pin
Cs_touch Alias Portd.3 : Config Cs_touch = Output           'XPT2046 CS Pin
Dout_touch Alias Portd.1 : Config Dout_touch = Output       'XPT2046 Din Pin
Din_touch Alias Pind.2 : Config Din_touch = Input           'XPT2046 Dout Pin
Cs_touch = 1

Const Portrait = 0                                          '0=Landscape, 1=Portrait
Config Submode = New : $include "SSD1289 16bit library.inc" 'Include library
Config Portd.0 = Input : Portd.0 = 1                        'Set PIND.0 as Input

Config Priority = Static , Vector = Application , Lo = Enabled       ', Med = Enabled , Hi = Enabled

On Portd_int0 Port_d_int0__isr
Enable Portd_int0 , Lo                                      'Enable this Interrupt as Lo Level Interrupt
Enable Interrupts

Portd_int0mask = &B0000_0001                                'include PIN0 in INT0 Mask
'Portd_pin0ctrl = &B00_000_001                               ' Pullup
Dim Pind_0_int_flag As Bit

Dim Touchx As Word , Touchy As Word
Dim X_dout As Byte : X_dout = 208                           '208
Dim Y_dout As Byte : Y_dout = 144                           '144
$include "Touch.inc"

'-------------------------------------------------------------------------------

Dim Text As String * 8

          Display_init                                      ' Initialize Display
   Do
     Lcd_clear White
Restore Font12x16
  If Pind_0_int_flag = 1 Then
  'Disable Interrupts
   Touchx = 0
   Touchy = 0

   Read_touch

     Text = "X " + Str(touchx)
   Lcd_text Text , 0 , 0 , Black , White
   Text = "Y " + Str(touchy)
   Lcd_text Text , 0 , 20 , Black , White
   Lcd_fill_circle Touchx , Touchy , 5 , Black

           Waitms 300
      Pind_0_int_flag = 0
      'Enable Interrupts
      End If

Loop

End

Port_d_int0__isr:
    Pind_0_int_flag = 1
   Return

  $include "Font12x16.font"

Касаюсь рандомно всей площади тачскрина - но всегда отображаются одни и те же координаты касания х 239, y 0, и точка изображается в соответствии с этими координатами.
Может кто подскажет чего?

0

103

Средне-арифметическое усреднение по 256 выборкам измерений тачскрина

Инициализация тачскрина

Config Pine.4 = Input : Porte.4 = 0
  Config Int4 = Change       ' Rising (нарастание); Falling (спад); Change (любое изменение); Low Level (всё время, пока низкий уровень)
  On Int4 Обработка_прерывания_touch_asm Nosave

  Din_touch Alias Pine.5 : Config Din_touch = Input       ' XPT2046 Dout Pin
  Cs_touch Alias Porte.3 : Config Cs_touch = Output : Cs_touch = 1       ' XPT2046 CS Pin
  Clk_touch Alias Porth.3 : Config Clk_touch = Output       ' XPT2046 Clock Pin
  Dout_touch Alias Portg.5 : Config Dout_touch = Output       ' XPT2046 Din Pin

  Dim X_dout As Byte : X_dout = &HD0       ' dec = 208; hex = &HD0; bin = &B_1101_0000
  Dim Y_dout As Byte : Y_dout = &H90       ' dec = 144; hex = &H90; bin = &B_1001_0000

  Dim Флаг_прерывание_touch As Byte

  Dim Touchx As Word
  Dim Touchy As Word

  Dim X_touch_temp As Word
  Dim Y_touch_temp As Word

  Dim X_выборка_данных_touch As Dword
  Dim Y_выборка_данных_touch As Dword

  Dim X_touch_str As String * 10
  Dim Y_touch_str As String * 10


  Enable Int4       ' Прерывание от тачскрина на базе XPT2046

  Gosub Чтение_тачскрина       'Обработка_прерывания_тачскрина
  Флаг_прерывание_touch = 1

Работа с тачскрином

'===============================================================================
  Обработка_прерывания_touch_asm:
'-------------------------------------------------------------------------------
    !push R16
    !ldi R16 , 1
    !sts {Флаг_прерывание_touch} , R16
    !pop R16
    !reti
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Чтение_тачскрина:
'-------------------------------------------------------------------------------

    !ldi R16 , 0
    !sts {Touchx} , R16
    !sts {Touchx + 1} , R16
    !sts {Touchy} , R16
    !sts {Touchy + 1} , R16
    !sts {X_выборка_данных_touch} , R16
    !sts {X_выборка_данных_touch + 1} , R16
    !sts {X_выборка_данных_touch + 2} , R16
    !sts {X_выборка_данных_touch + 3} , R16
    !sts {Y_выборка_данных_touch} , R16
    !sts {Y_выборка_данных_touch + 1} , R16
    !sts {Y_выборка_данных_touch + 2} , R16
    !sts {Y_выборка_данных_touch + 3} , R16

    For Цикл_byte = 0 To 255
        Cs_touch = 0
        Clk_touch = 0
        Shiftout Dout_touch , Clk_touch , X_dout , 1 , 8 , 1       ' Запрос координаты по оси X
        Shiftin Din_touch , Clk_touch , Touchx , 1 , 12 , 1       ' Координата по оси X
        Shiftout Dout_touch , Clk_touch , Y_dout , 1 , 8 , 1       ' Запрос координаты по оси Y
        Shiftin Din_touch , Clk_touch , Touchy , 1 , 12 , 1       ' Координата по оси Y
        Cs_touch = 1
        X_выборка_данных_touch = X_выборка_данных_touch + Touchx       ' Накапливаем выборку из 256 значений по оси X
        Y_выборка_данных_touch = Y_выборка_данных_touch + Touchy       ' Накапливаем выборку из 256 значений по оси Y
    Next Цикл_byte       ' For Цикл_byte = 0 To 255

    Shift X_выборка_данных_touch , Right , 8       ' Узнаём средне-арифметическое, путём деления на 256
    Shift Y_выборка_данных_touch , Right , 8       ' Узнаём средне-арифметическое, путём деления на 256

    If Touchy > 2700 Then
        Touchy = Touchy - 2700
      Else
        Touchy = 0
    End If

    Touchy = Touchy / 85

    If Touchy > 320 Then
        Touchy = 320
    End If

    Touchy = 320 - Touchy

    If Touchx > 2700 Then
        Touchx = Touchx - 2700
      Else
        Touchx = 0
    End If

    Touchx = Touchx / 114

    If Touchx > 240 Then
        Touchx = 240
    End If

    Флаг_прерывание_touch = 0
'-------------------------------------------------------------------------------
  Return
'===============================================================================

в теле программы

If Флаг_прерывание_touch = 1 Then
        Gosub Чтение_тачскрина

        X_touch_str = Str(touchx)
        X_touch_str = Format(x_touch_str , "  0")
        Y_touch_str = Str(touchy)
        Y_touch_str = Format(y_touch_str , "  0")

        Буфер_lcd_ssd1289_str = X_touch_str + "   "
        Loadwordadr Font_12x16 : Macros_сохраняем_адрес_шрифта
        Print_text_ssd1289 Буфер_lcd_ssd1289_str , 135 , 190 , 0 , Красный , Песочный

        Буфер_lcd_ssd1289_str = Y_touch_str + "   "
        Print_text_ssd1289 Буфер_lcd_ssd1289_str , 135 , 230 , 0 , Синий , Песочный

    End If       ' If Флаг_прерывание_touch = 1 Then

Работа вполне удовлетворительна, практически, как с калибровкой по 5 точкам

0

104

Mrshilov, touchx,y по нулям. Точку рисует в левом верхнем углу экрана в альбомном расположении экрана при контактах слева.

0

105

Проверил соединения хрт2046 с МК - все правильно. Прозвонил тестером чтобы убедиться. Как еще можно проверить работоспособность тача или в совокупности тач+ХРТ2046?
С Новым годом!

0

106

Mrshilov написал(а):

Попробуйте такой вариант: http://rusfolder.com/41980155

спасибо, помогло. но со временем заметил интересный косячок: отрисовывается на дисплее несколько надписей, одни - один раз и больше не изменяются, цвета Lightray. несколько - белого цвета, несколько надписей цветов Lightgreen, Lightsteelblue. время от времени надписи цветов Lightgray, Lightgreen и Lighsteelblue то-ли темнеют и съезжают на пиксел в лево, то ли что-то похожее, не успеваю разглядеть, за тем - моментально возвращаются, без их перерисовки. дисплей исправен, на других библиотеках, да и на этой с белым и чёрным цветом - всё в порядке... подскажите пожалуйста выход? или подобрать цвета с которыми такого не происходит, да не морочить вам голову?..

З.Ы. вопрос по SSD1289, библиотека второй версии, исправленная.

Отредактировано phantom36 (2015-01-04 03:43:09)

0

107

Здравствуйте! Вопрос Mrshilov. Собрал http://bascom.at.ua/publ/biblioteka_bas … 1-1-0-112. Контроллер xmega256a3, SPI-ROM не подключал (закомментировал) . При попытке отобразить bin файл только чёрные прямоугольники. Подскажите пожалуйста в чем дело?

0

108

Превосходно, заработало! Спасибо большое Mrshilov!

0

109

Обновите ссылку- по ней ничего нет

Отредактировано Skull (2015-02-05 13:01:11)

0

110

Да,точно, простите- не досмотрел

0

111

Mrshilov

Здравствуйте. А можно ли в вашу замечательную SSD1289 16bit library.inc интегрировать Lcd_draw_bmp от Mr.Hkipnik, чтобы можно было работать с файлами на SD-карте?

0

112

Djavdet

Читайте mail.

+1

113

Mrshilov
Спасибо большое.

0

114

Mrshilov
А какой программой Вы конвертируете bmp файл в файл bgc? Стандартная программа в Bascom вроде как должна это делать, но у меня не хочет.

0

115

Понятно, такая же ерунда. И ещё вопрос: собираюсь повторить конструкцию с LCD на контроллере SSD1289 и SD картой. Bascom компилирует, а протеус куски с выводом картинок с карты игнорирует.

Код:
Call Lcd_clear(black)

     Call Lcd_draw_bmp( "007.bmp" , 0 , 0)
     Wait 2
     Call Lcd_clear(red)
     Call Lcd_draw_bmp( "047.bmp" , 0 , 0)
     Wait 2
     Call Lcd_draw_bmp( "033.bmp" , 0 , 0)
     Wait 2
     Call Lcd_clear(red)
     Call Lcd_draw_bmp( "033k.bmp" , 20 , 20)
     Wait 2

А как в "жизни"- работает?

Отредактировано marss70 (2015-07-11 23:40:04)

0

116

Mrshilov написал(а):

Интегрировал.

Скачать.

Поясните, пожалуйста. В посте 127 приводится пример работы с картой и внешней памятью. Но не понятно, программа обращается к bmp файлам,

Код:
 Lcd_draw_bmp "2.bmp" , 60 , 34
     Wait 1
     Lcd_draw_bmp "3.bmp" , 0 , 0
     Wait 1
     Lcd_draw_bmp "4.bmp" , 0 , 0
..................................
     Wait 1

что подразумевает наличие в памяти SD карты картинок в bmp формате. А в приложенном файле в папке "SD Card" лежит файл "SD-card-landscape.mmc". Этот файл как-то формируется из bmp файлов? Поясните, пожалуйста.

Отредактировано marss70 (2015-07-12 00:25:39)

0

117

Спасибо, разобрался!

0

118

По поводу дисплея - а не проще реализовать работу дисплея на АRM а передавать на него с AVR по I2C? Там ног точно хватит - ещё и останется. Я сам программирую мало и слабо, но в целом в теме. Тут http://forum.easyelectronics.ru/viewtop … amp;t=8753 первый обзор в рунете, который мне попадался на компилятор с бейсика на ARM. Понятно, что микробейсик многим не по нраву - но в принципе нужно просто написать драйвер на дисплей, и потом уже общаться с ним по одной ноге с рабочего avr под проекты, который уже можно на bascom спокойно пилить до самого победного.

0

119

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

0

120

Короче просто с драйвером нужен дисплей, чтобы его можно было нормально использовать. В принципе если взять все наработки и написать драйвер даже на бейсике для авр - просто дополнительная микросхема уйдет. Я если честно не понимаю всю эту экономию - плюс 2-3 контроллера на проект увеличат стоимость железа на 500 рублей, но никто не считает насколько это увеличит качество готового продукта.

0