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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Дисплеи и индикация » Помогите с дисплеем PG-5664ASGG.


Помогите с дисплеем PG-5664ASGG.

Сообщений 1 страница 8 из 8

1

Даташит
Достался прибор КРУ-мнемо. Исполнение мега328, данный дисплей. Схемно подключен 4-wire SPI.
Может кто занимался данным дисплеем?

0

2

4.1. Commands
Refer to the Technical Manual for the SSD1322

http://microsin.net/adminstuff/hardware … oller.html
https://docs.rs/ssd1322/0.2.2/ssd1322/c … index.html

Отредактировано Александр Д. (2022-05-26 09:24:50)

+1

3

не могу. во-первых, в стадии переезда, во-вторых, работа и  на чемодане в командировку.

0

4

Как бы разобрался. Остается роблема со шрифтами. В Font Editor нужно поворачивать против часовой стрелки. Макушками налево. Двухбайтовые еще, и половишки местами менять.
Нарисовал только цифровые. Может кто подскажет чего по шрифтам?

Код:
$regfile = "m328pdef.dat"
$crystal = 16000000
$baud = 19200
$hwstack = 160
$swstack = 160
$framesize = 60

'===============================================================================
Config Portb.0 = Output : Res Alias Portb.0
Config Portb.1 = Output : Cs Alias Portb.1
Config Portb.2 = Output : Dc Alias Portb.2
Config Portb.3 = Output : Ser_data Alias Portb.3
Config Portb.5 = Output : Ser_clk Alias Portb.5
'конфигурируем SPI в программном режиме. SCLK (pin 2) - PORTA.3; SDA (pin 3) - PORTA.4; Din не используется
'Config Spi = Soft , Dout = Portb.3 , Ss = None , Clock = Portb.5
'Spiinit
'===============================================================================

Dim Digit_str As String * 254
Dim T_str As String * 5
Dim T As Word
Dim W_str As String * 5
Dim W As Word

Dim Длина_колонки As Byte
Dim Продолжение As Bit
Dim X As Byte
'===============================================================================
Declare Sub Ssd1322reset
Declare Sub Ssd1322init
Declare Sub Ssd1322clear
Declare Sub Commandout(byval Значение As Byte)
Declare Sub Dataout(byval Значение As Byte)
Declare Sub Ssd1322bmpout
Declare Sub Ssd1322print(byval Data_строка As String)
Declare Sub Ssd1322position(byval 1322x As Byte , Byval 1322y As Byte)

'===============================================================================
Call Ssd1322reset
Call Ssd1322init
Call Ssd1322clear

'Config Timer1 = Timer , Prescale = 8
'On Timer1 Pulse

'Enable Interrupts                                           ' разрешаем все прерывания
'Enable Timer1
'Start Timer1
'************************************************************************************************************
Главный_цикл:

 Incr T
 T_str = Str(t) : T_str = Format(t_str , "00000")
 Decr W
 W_str = Str(w) : W_str = Format(w_str , "00000")

 Длина_колонки = 8
 Продолжение = 0
 Commandout &H75 : Dataout &H0 : Dataout &H07
 Digit_str = "0123456789 9876543210:0123456789"
 Call Ssd1322print(digit_str)

 Commandout &H75 : Dataout &H09 : Dataout &H10
 Digit_str = "                                "
 Call Ssd1322print(digit_str)

 Commandout &H75 : Dataout &H12 : Dataout &H19
 Digit_str = "0123456789:9876543210 0123456789"
 Call Ssd1322print(digit_str)

 Commandout &H75 : Dataout &H1B : Dataout &H22
 Digit_str = T_str + "  " + W_str + "       " + T_str + " " + W_str
 Call Ssd1322print(digit_str)

 Длина_колонки = 48

 Commandout &H75 : Dataout &H24 : Dataout &H3B
 Digit_str = "15:29:57"
 Call Ssd1322print(digit_str)

 Длина_колонки = 8
 Продолжение = 1
 Commandout &H75 : Dataout &H24 : Dataout &H2B
 Digit_str = "0123456789"
 Call Ssd1322print(digit_str)

 X = 58
 Commandout &H75 : Dataout &H2D : Dataout &H34
 Digit_str = "0123456789"
 Call Ssd1322print(digit_str)

 X = 58
 Commandout &H75 : Dataout &H36 : Dataout &H3D
 Digit_str = T_str + "  " + W_str
 Call Ssd1322print(digit_str)

   Waitms 10
Goto Главный_цикл
'******************************************************************************************
$include "Ssd1322end_v6.bas"
'**************************************Передаем данные**************************************
Код:
$nocompile
'===============================================================================

'===============================================================================
Sub Ssd1322reset
   Res = 0
   Wait 1
   Res = 1
End Sub
'-------------------------------------------------------------------------------------------------------------------------
Sub Ssd1322init

   Commandout &HFD                                          'Доступ к интерфейсу дисплея
   Dataout &H12

   Commandout &HAE                                          'Вкючает режим сна

   Commandout &HB3                                          'Задает частоту генератора
   Dataout &HD0

   Commandout &HCA                                          'Задает режим мультиплексирования от 16MUX до 128MUX
   Dataout &H3F

   Commandout &HA2                                          'Устанавливает вертикальную прокрутку COM в значение от 0 до 127. После сброса устанавливается значение 00h.
   Dataout &H00

   Commandout &HA1                                          'Устанавливает значение регистра начальной строки RAM дисплея в значение от 0 до 127. После сброса значение этого регистра равно 00h.
   Dataout &H00

   Commandout &HA0                                          'Set Re-map and Dual COM Line mode
   Dataout &H14
   Dataout &H11

   Commandout &H15                                          'Устанавливает адреса начального и конечного столбца.
   Dataout &H1C
   Dataout &H5B

   Commandout &H75                                          'Устанавливает адреса начальной и конечной строки.
   Dataout &H0
   Dataout &H3F

   Commandout &HB5                                          'Установить состояние портов ввода/вывода.
   Dataout &H00

   Commandout &HAB                                          'разрешить работу внутреннего регулятора для VDD
   Dataout &H01

   Commandout &HB4                                          'Display Enhancement A
   Dataout &HA0                                             '
   Dataout &H1F                                             'FD

   Commandout &HC1                                          'задает значение тока контрастности в диапазоне 0..255.
   Dataout &HDF

   Commandout &HC7                                          'Управляет уровнем тока для всех яркостей, так что задает общий уровень контрастности дисплея.
   Dataout &H0F

   'D3310commandout &HB9    'Сбрасывает таблицу градаций яркости в состояние по умолчанию (линейная таблица с нарастанием яркости от GS0 до GS1)

   Commandout &HB8
   Dataout &H00
   Dataout &H01
   Dataout &H03
   Dataout &H06
   Dataout &H0A
   Dataout &H10
   Dataout &H1A
   Dataout &H28
   Dataout &H37
   Dataout &H47
   Dataout &H58
   Dataout &H6A
   Dataout &H7F
   Dataout &H96
   Dataout &HB4

   commandout &H00

   Commandout &HB1                                          'задает период фазы 1 (длительность фазы сброса заряда) в диапазоне 5..31 тактов DCLK.
   Dataout &HE8

   Commandout &HD1                                          ' нормальное состояние (после сброса).
   Dataout &HA2
   Dataout &H20

   Commandout &HBB                                          ' Установить уровень напряжения предзаряда
   Dataout &H1F

   Commandout &HB6                                          ' устанавливает длительность второго периода предзаряда.
   Dataout &H08

   Commandout &HBE                                          'Установка уровня напряжения для не выбранного состояния COM
   Dataout &H07

   Commandout &HA9                                          'Отмена режима частичного отображения.

   Commandout &HA6                                          'Set Display Mode

   Commandout &HAF                                          'Выход из режима сна

End Sub
'-------------------------------------------------------------------------------------------------------------------------------------
Sub Ssd1322clear                                            'Обнуление дисплея

   Local Пиксель As Word                                    '

   Commandout &H5C                                          'Разрешение записи в память
   For Пиксель = 1 To 4096
   Dataout &H00
   Dataout &H00
   Next Пиксель
End Sub
'-------------------------------------------------------------------------------------------------------------------------------------
Sub Commandout(byval Значение As Byte)
   'Cs = 0                                                   '
   'Dc = 0                                                   '
   'Spiout D3310value , 1
  Ser_data = 0
  Ser_clk = 0
  Cs = 0
  Dc = 0                                                    'Режим ввода моманды
  Shiftout Ser_data , Ser_clk , Значение , 1
  Cs = 1                                                    '
End Sub
'--------------------------------------------------------------------------------------------------------------------------------------
Sub Dataout(byval Значение As Byte)
   'Cs = 0                                                   '
   'Dc = 1                                                   '
   'Spiout D3310value , 1
  Ser_data = 0
  Ser_clk = 0
  Cs = 0
  Dc = 1                                                    'Режим ввода данных
  Shiftout Ser_data , Ser_clk , Значение , 1
  Cs = 1                                                    '
End Sub
'----------------------------------------------------------------------------------------------------------------------------------------
Sub Ssd1322print(byval Data_строка As String * 30)

   Local Количество_символов As Byte                        'Holds the length of D3310string
   Local Символ As String * 1                               'Holds each consecutive character in turn during display output
   Local Выбор_символа As Byte                              'Loop variable for the string
   Local Колонка As Byte                                    'Loop variable for the columns
   Local Column As Byte                                     'Display column output
   Local Xend As Byte
   Local I As Byte
   Local H As Byte
   Local L As Byte
   Local Col As Byte

   Количество_символов = Len(data_строка)                   'Establish the number of characters

   For Выбор_символа = 1 To Количество_символов             'Loop through the string

      If Выбор_символа = 1 And Продолжение = 0 Then
          X = 28
        Else
          X = X + 2
      End If
          Xend = X + 1
     Commandout &H15 : Call Dataout(x) : Call Dataout(xend) : Commandout &H5C       '

    Символ = Mid(data_строка , Выбор_символа , 1)           'Get the current character

    If Длина_колонки = 8 Then
      Select Case Символ
         Case "0" : Restore Zero
         Case "1" : Restore One
         Case "2" : Restore Two
         Case "3" : Restore Three
         Case "4" : Restore Four
         Case "5" : Restore Five
         Case "6" : Restore Six
         Case "7" : Restore Seven
         Case "8" : Restore Eight
         Case "9" : Restore Nine
         Case " " : Restore Spacesign
         Case ":" : Restore Colon
      End Select
     End If

    If Длина_колонки = 48 Then
      Select Case Символ
         Case "0" : Restore Ноль
         Case "1" : Restore Один
         Case "2" : Restore Два
         Case "3" : Restore Три
         Case "4" : Restore Четыре
         Case "5" : Restore Пять
         Case "6" : Restore Шесть
         Case "7" : Restore Семь
         Case "8" : Restore Восемь
         Case "9" : Restore Девять
         Case " " : Restore Пробел
         Case ":" : Restore Двоеточие
      End Select
     End If


      For Колонка = 1 To Длина_колонки                      'Read and print each column
         Read Column

         H = Column.7 : If H = 1 Then H = &HF0 : If H = 0 Then H = &H00
         L = Column.6 : If L = 1 Then L = &H0F : If L = 0 Then L = &H00
         Col = H + L
         Call Dataout(col)
         H = Column.5 : If H = 1 Then H = &HF0 : If H = 0 Then H = &H00
         L = Column.4 : If L = 1 Then L = &H0F : If L = 0 Then L = &H00
         Col = H + L
         Call Dataout(col)
         H = Column.3 : If H = 1 Then H = &HF0 : If H = 0 Then H = &H00
         L = Column.2 : If L = 1 Then L = &H0F : If L = 0 Then L = &H00
         Col = H + L
         Call Dataout(col)
         H = Column.1 : If H = 1 Then H = &HF0 : If H = 0 Then H = &H00
         L = Column.0 : If L = 1 Then L = &H0F : If L = 0 Then L = &H00
         Col = H + L
         Call Dataout(col)

         If Колонка = 24 Then
            X = X + 2
            Xend = X + 1
            Commandout &H15 : Call Dataout(x) : Call Dataout(xend) : Commandout &H5C
         End If

      Next Колонка

   Next Выбор_символа

End Sub
'=================================================================================================
'Digits
Zero:
Data 60 , 102 , 102 , 102 , 102 , 102 , 60 , 0              ' 0
One:
Data 24 , 56 , 56 , 24 , 24 , 24 , 60 , 0                   ' 1
Two:
Data 60 , 102 , 6 , 12 , 16 , 102 , 126 , 0                 ' 2
Three:
Data 60 , 102 , 6 , 28 , 6 , 102 , 60 , 0                   ' 3
Four:
Data 14 , 22 , 38 , 102 , 126 , 6 , 6 , 0                   ' 4
Five:
Data 124 , 96 , 124 , 6 , 6 , 102 , 60 , 0                  ' 5
Six:
Data 60 , 96 , 124 , 102 , 102 , 102 , 60 , 0               ' 6
Seven:
Data 126 , 102 , 6 , 6 , 12 , 24 , 24 , 0                   ' 7
Eight:
Data 60 , 102 , 102 , 60 , 102 , 102 , 60 , 0               ' 8
Nine:
Data 60 , 102 , 102 , 102 , 62 , 6 , 60 , 0                 ' 9
'Special characters
Spacesign:
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Colon:
Data 0 , 24 , 24 , 0 , 24 , 24 , 0 , 0                      ' :
'=================================================================================================
Ноль:
Data 0 , 15 , 31 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 31 , 15 , 0       ' 0
Data 0 , 240 , 248 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 248 , 240 , 0
Один:
Data 0 , 7 , 15 , 31 , 31 , 27 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 31 , 31 , 0       ' 1
Data 0 , 192 , 192 , 192 , 192 , 192 , 192 , 192 , 192 , 192 , 192 , 192 , 192 , 192 , 192 , 192 , 192 , 192 , 192 , 192 , 192 , 248 , 248 , 0
Два:
Data 0 , 31 , 63 , 120 , 120 , 120 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 3 , 7 , 15 , 30 , 60 , 120 , 120 , 127 , 127 , 0       ' 2
Data 0 , 240 , 248 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 120 , 240 , 224 , 192 , 128 , 0 , 0 , 0 , 60 , 60 , 252 , 252 , 0
Три:
Data 0 , 31 , 63 , 120 , 120 , 120 , 0 , 0 , 0 , 0 , 0 , 15 , 15 , 0 , 0 , 0 , 0 , 0 , 120 , 120 , 120 , 63 , 31 , 0       ' 3
Data 0 , 240 , 248 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 56 , 240 , 240 , 56 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 248 , 240 , 0
Четыре:
Data 0 , 0 , 1 , 3 , 7 , 15 , 30 , 60 , 120 , 112 , 96 , 127 , 127 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0       ' 4
Data 0 , 120 , 248 , 248 , 248 , 248 , 120 , 120 , 120 , 120 , 120 , 120 , 252 , 252 , 120 , 120 , 120 , 120 , 120 , 120 , 120 , 120 , 120 , 0 , 0
Пять:
Data 0 , 127 , 127 , 120 , 120 , 120 , 120 , 120 , 120 , 127 , 127 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 120 , 120 , 120 , 63 , 31 , 0       ' 5
Data 0 , 252 , 252 , 0 , 0 , 0 , 0 , 0 , 0 , 240 , 248 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 248 , 240 , 0
Шесть:
Data 0 , 31 , 63 , 124 , 120 , 120 , 120 , 120 , 120 , 127 , 127 , 120 , 120 , 120 , 120 , 120 , 120 , 120 , 120 , 120 , 120 , 63 , 31 , 0       ' 6
Data 0 , 252 , 252 , 0 , 0 , 0 , 0 , 0 , 0 , 240 , 248 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 248 , 240 , 0
Семь:
Data 0 , 127 , 127 , 120 , 120 , 120 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 3 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 0       ' 7
Data 0 , 252 , 252 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 120 , 240 , 224 , 192 , 128 , 128 , 128 , 128 , 128 , 128 , 128 , 128 , 0
Восемь:
Data 0 , 31 , 63 , 120 , 120 , 120 , 120 , 120 , 120 , 120 , 56 , 31 , 31 , 56 , 120 , 120 , 120 , 120 , 120 , 120 , 120 , 63 , 31 , 0       ' 8
Data 0 , 240 , 248 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 56 , 240 , 240 , 56 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 248 , 240 , 0
Девять:
Data 0 , 31 , 63 , 120 , 120 , 120 , 120 , 120 , 120 , 120 , 120 , 120 , 120 , 63 , 31 , 0 , 0 , 0 , 0 , 0 , 0 , 127 , 127 , 0       ' 9
Data 0 , 240 , 248 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 60 , 252 , 252 , 60 , 60 , 60 , 60 , 60 , 124 , 248 , 240 , 0
Пробел:
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
Двоеточие:
Data 0 , 0 , 0 , 0 , 0 , 3 , 3 , 3 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 3 , 3 , 3 , 3 , 0 , 0 , 0 , 0 , 0       ' :
Data 0 , 0 , 0 , 0 , 0 , 192 , 192 , 192 , 192 , 0 , 0 , 0 , 0 , 0 , 0 , 192 , 192 , 192 , 192 , 0 , 0 , 0 , 0 , 0

https://upforme.ru/uploads/0000/25/b8/2019/t770877.jpg

Отредактировано rom-i (2022-06-09 16:42:50)

+1

5

ну круто же! ))
уважаю!

0

6

rom-i написал(а):

В Font Editor нужно поворачивать против часовой стрелки

а может команда есть на поворот?
обычто бывает
Rotate, Mirror и их комбинации

0

7

Александр Д.

а может команда есть на поворот?
обычто бывает
Rotate, Mirror и их комбинации

Очень много еще не допонимаю в программировании. Но в данном случае пробовал брать байты прямиком с файла Font, и использовать Lookup. Диспла заполняется почти две секунды. Как будто на печатной машинке печатаютя.
Ведь 8192 байта нужно время послать по SPI. Байт 2 пикселя. Поэтому остановился на готовой таблице, и брать данные с помощью Restore, и Read. Судя как изменяютс переменные цикл проходит 10-20мсек. Полное обновление всего дисплея.
По этому таблицу готовить нужно зарание, так проще МК.
Не разобрался еще с байтами инсталяции, что касается свечения самих светодиодов. Первые пиксели в столбике, одиночные, строчки в один пиксель светятся в два раза тусклее следующих. Именно в столбике.
На фотке невидно. Камера сглаживает все это.

Отредактировано rom-i (2022-06-10 18:44:44)

0

8

Всем доброго здоровья!!!
Продолжаю тему.
Как перемещать символ в текстовой строке?
Умею только переписывая стороку.
Перемещать на пиксель для меня сложно.
На символ. Просто примерный подход.

Отредактировано rom-i (2022-06-24 20:05:40)

0


Вы здесь » Программирование ATMEL в BASCOM. » Дисплеи и индикация » Помогите с дисплеем PG-5664ASGG.