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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Исходники » OLED 128x64 (UG-2864HSWEG01) на SSD1306


OLED 128x64 (UG-2864HSWEG01) на SSD1306

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

91

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

Артур, не поделитесь  как победили этот дисплей.

У меня несколько иной был, 128х64, а так без проблем :)
Библиотеки я пользовал следующие
i2c_twi.lbx
glcdSSD1306-I2C.lib
Шрифты в этом файлике Font6x8.font
Ну и о шрифтах не забываем их мы тоже должны подятнуть
Сначала надо определиться с его адресом
Далее задаем порты SDA SCL
Config Scl = Portc.5
Config Sda = Portc.4
Да а что собственно я... вот кусок кода

Код:
$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Scl = Portc.5
Config Sda = Portc.4
Config Twi = 400000
Config Adc = Single , Prescaler = Auto , Reference = Internal
...........
Wait 1
I2cinit
$lib "i2c_twi.lbx"  
$lib "glcdSSD1306-I2C.lib"   
Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"

Setfont Font6x8
Cls
Lcdat 1 , 1 , "Камрады, приветствую!"
Wait 1
Lcdat 2 , 2 , "http://habaroved.net"
Wait 1                             
Cls
Lcdat 4 , 1 , "      ХабароведЪ"
Waitms 500
...............

$include "Font6x8.font" 
...............

0

92

Alex_Kech
Вот немного есть по 128х32, работало.

0

93

Спасибо Макс. Вчера именно там и нашел, не успел отписаться. Всем большое спасибо! Вопрос снимается.

Отредактировано Alex_Kech (2017-11-16 04:54:20)

0

94

Для Sergik07
Попробовал материал который вы дали с библиотекой glcdSSD1306-I2C.lib. Все работает как и до этого, но идет мигание, в секунду раза 2-3 на взгляд. Или у меня библиотека скачалась с ошибкой или надо в ней менять настройки. А в асиме я совершенно не силен. Если у вас есть такая библиотека - сбросьте пож. Я пользуюсь переделанным примером с немецкого сайта , это немного не удобно, зато точно работает.
Самое интересное- в протеус работает!!!http://s7.uploads.ru/t/nKPh5.jpg

Отредактировано Alex_Kech (2017-11-17 11:24:41)

0

95

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

Или у меня библиотека скачалась с ошибкой

Однозначно нет.

0

96

Понимаю что нет. Впечатление такое, будто сразу прорисовывает, тут же стирает, опять рисует. Не знаю что это такое. Пример с кодом на баскоме работает абсолютно нормально !??

0

97

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

Если у вас есть такая библиотека - сбросьте пож.

https://yadi.sk/d/7elSOmEc3PocEK

0

98

Друзья, возникла непонятка с работой OLED дисплея вот такого:

https://a.radikal.ru/a43/1803/66/f746ba66681at.jpg

https://a.radikal.ru/a07/1803/f6/f4ddfb6a8c8dt.jpg

Вот код программы:

$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 100
$swstack = 100
$framesize = 100

Config Scl = Portc.5                                        ' used i2c pins
Config Sda = Portc.4
Config Twi = 400000                                         ' i2c speed
I2cinit : Waitms 5

$lib "i2c_twi.lbx"
$lib "glcdSSD1306-I2C.lib"                                  ' override the default lib with this special one

#if _build < 20784

Dim ___lcdrow As Byte , ___lcdcol As Byte                   ' dim these for older compiler versions
#endif

Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"

'-------------------------------- Program --------------------------------------
I2cstart
I2cwbyte &H78
I2cwbyte &H00
I2cwbyte &HDA                                               'Enable COM Left/Right remap
I2cwbyte &H22
I2cstop

Do
  Cls
   Setfont Font12x16
   Lcdat 1 , 30 , "Test"
   Setfont Font6x8
   Lcdat 3 , 34 , "Switch On!"
   Lcdat 4 , 45 , "Font 6x8"

   Wait 1

   Cls
   Lcdat 1 , 30 , "Stage 1"
   Wait 1
   Cls
   Lcdat 2 , 30 , "Stage 2"
   Wait 1
   Cls
   Lcdat 3 , 30 , "Stage 3"
   Wait 1
   Loop

End

'===============================================================================
$include "font12x16.font"
$include "font6x8.font"

Суть в том, что работает, но ужасно мельтешит как стробоскоп:

https://youtu.be/SWArLxUWm_A

В чем может быть проблема?

0

99

Так цикл же и задержка Wait 1 вот по этому и мельтишит наверное

0

100

Много Cls в основном цикле,а МК работает на 16 мгц,мне думается от того так и происходит.

0

101

Ну да, там cls и wait 1, уменьшите значение wait или наоборот увеличьте

0

102

Варьировал значения Wait и вовсе убирал CLS из цикла. Все уже перекрутил и пробовал на разных платах и контроллерах. Результат все тот же.
Пробовал просто вывести статичную надпись без использования цикла. Без изменений...

0

103

Вот этот кусок пробовал не включать в код?

Код:
I2cstart
I2cwbyte &H78
I2cwbyte &H00
I2cwbyte &HDA                                               'Enable COM Left/Right remap
I2cwbyte &H22
I2cstop

0

104

Если его исключить, то не запустится I2C, не активируются адреса дисплея и до дисплея не достучаться.

0

105

Avus
Enable COM Left/Right remap -это для узких ssd1306,тех что 128х32.Если не путаю,то этот кусок связан с прорисовкой чётных строк.

0

106

Avus
Вот код,который работает у меня:

Код:
'LCD SSD 1306

$regfile = "m8adef.dat"
$crystal = 7372800                                          '8000000
$hwstack = 86
$swstack = 86
$framesize = 110
$baud = 4800
'-----------------------------------------------------------------------------
Config Scl = Portc.5                              ' used i2c pins
Config Sda = Portc.4
Config Twi = 400000                               ' i2c speed
Wait 1
I2cinit
$lib "i2c_twi.lbx"                                ' we do not use software emulated I2C but the TWI
$lib "glcdSSD1306-I2C.lib"                        ' override the default lib with this special one
'#if _build < 20784
  ' Dim ___lcdrow As Byte , ___lcdcol As Byte      ' dim these for older compiler versions
'#endif

Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"

0

107

Никто не делает в нормальном виде сочетание много: Cls и Wait.
Изначально, чтобы не было такого мерцания, надо вначале выводить в буфер, а только потом итог на экран.
Т.к. вы юзаете стандартную либу, а это начальный уровень в бэйсике, то чтобы не мерцало, надо вместо "cls" использовать просто перетирание того места, куда собираетесь выводить новые значения, с учетом чистки старой информации.

+1

108

Доброго дня, уважаемые знатоки !

Тоже решил потестить олед. Приобрел 128х96, по IIS работают.
Непонятно поведение дисплеев: залил тестовую програмку, которая с библиотекой шла, и которую, как я понял, все шьют для проверки дисплея.

$regfile = "m8adef.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32

Config Portd.7 = Output
Lll Alias Portd.7

Config Scl = Portc.5                                        ' used i2c pins
Config Sda = Portc.4
Config Twi = 400000                                         ' i2c speed
I2cinit : Waitms 5

$lib "i2c_twi.lbx"
$lib "glcdSSD1306-I2C.lib"                                  ' override the default lib with this special one

#if _build < 20784
Dim ___lcdrow As Byte , ___lcdcol As Byte                   ' dim these for older compiler versions
#endif

Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"

'-------------------------------- Program --------------------------------------
I2cstart
I2cwbyte &H78
'i2cwbyte &H3C
I2cwbyte &H00
I2cwbyte &HDA                                               'Enable COM Left/Right remap
I2cwbyte &H22
I2cstop

Do
   Cls
   Setfont Font12x16
   Lcdat 1 , 30 , "SSD1306"

   Setfont Font6x8
   Lcdat 3 , 34 , "Text testing"
   Lcdat 4 , 45 , "Font 6x8"
   Wait 1

   Showpic 0 , 0 , Pic
   Wait 1

Set Lll
Waitms 50
Reset Lll

Loop

End

'===============================================================================
$include "font12x16.font"
$include "font6x8.font"
Pic:
$bgf "picture.bgf"

Дисплеи сразу заработали, показывают тестовую информацию. Но, как выяснилось - если потом отключить программатор и просто подать питание на МК с дисплеем - дисплей не работает.
Опытным путем (светодиод в цикл) было выяснено, что мк стартует и программа выполняется.
Если в баскомовской прошивалке (F4) просто проинить мк - дисплей оживает.
Оба дисплея ведут себя одинаково.
Пробовал вставлять задержки в программу - не помогает.

Подскажите, куда копать ?

Отредактировано Gordon_shumway (2018-05-23 07:30:56)

0

109

Gordon_shumway
У меня вот так работает устойчиво:

Код:
$regfile = "m8adef.dat"
$crystal = 8000000
$hwstack = 86
$swstack = 86
$framesize = 110
'-----------------------------------------------------------------------------
Config Scl = Portc.5
Config Sda = Portc.4
Config Twi = 400000
Wait 1
I2cinit
$lib "i2c_twi.lbx"
$lib "glcdSSD1306-I2C.lib"

Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"
'------------------------------------------------------------------------

Ещё сделана фьюзами макс.задержка старта самого мк
http://s4.uploads.ru/t/uL5QI.jpg
Да,иещё,когда игрался с этим дисплеем заметил,что от питания тоже много зависит.

Отредактировано Sergik07 (2018-05-23 08:51:16)

0

110

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

Gordon_shumway
У меня вот так работает устойчиво:

Ещё сделана фьюзами макс.задержка старта самого мк
Да,иещё,когда игрался с этим дисплеем заметил,что от питания тоже много зависит.


Спасибо, попробовал - к сожалению без результата. В фузах у меня уже стояла максимальная задержка, а остальное проверил.
С питанием - от программатора 3,3 вольта приходит, еще от лабораторника пробовал - не запускается дисплей.
Там на дисплее свой стабилизатор на 3,3 вольта стоит. Я его сдул, замкнул вход с выходом - все равно никак...
А после переинивания - стабильно запускается.
PS если мк ресетнуть на землю - тоже не помогает.

0

111

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

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

    У меня вот так работает устойчиво:

    Ещё сделана фьюзами макс.задержка старта самого мк
    Да,иещё,когда игрался с этим дисплеем заметил,что от питания тоже много зависит.

Спасибо, попробовал - к сожалению без результата. В фузах у меня уже стояла максимальная задержка, а остальное проверил.


Короче, разобрался. Сначала поставил wait 1 в самом начале программы перед конфигурированием IIS. Дисплей начал запускаться через раз.
Wait 2 - дисплей начал запускаться еще чаще, но не всегда. Очень похоже на проблему в ресете дисплея.

Решил разобраться с цепью Reset на плате дисплея. Там вывод Reset притянут к земле через керамику (не смог измерить), и к плюсу через диод (катодом к плюсу) и сопротивление 560 кОм параллельно диоду.
560 кОм - не слишком много ? Нагуглил схему включения этих дисплеев и подтвердил - ставят 4,7-10 кОм. Заменил - и без всяких дополнительных Wait дисплей стал отлично запускаться.
Если интересно - вечером могу выложить фотку моего дисплея с изменением.
Стабилизатор на 3,3 вольта впаял обратно.
Дисплей работает стабильно.

Отредактировано Gordon_shumway (2018-05-23 10:05:01)

0

112

Gordon_shumway
Очень полезная инфа,конечно выкладывай!

0

113

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

Gordon_shumway
Очень полезная инфа,конечно выкладывай!


https://d.radikal.ru/d20/1805/90/5358e1b1c58ft.jpg

Цепь Reset - D1, C8, R3.

Вверху - оригинальный дисплей, внизу - исправленный. R3 заменен на 10 кОм.
У меня были только 0805, поэтому пришлось колхозить боком.

Отредактировано Gordon_shumway (2018-05-23 10:54:56)

0

114

Китайские шулеры, лишь бы дырку забить похожим элементом. :)

0


Вы здесь » Программирование ATMEL в BASCOM. » Исходники » OLED 128x64 (UG-2864HSWEG01) на SSD1306