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

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

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

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


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


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

Сообщений 31 страница 60 из 97

31

Ну по краткости вопроса (нет норм.технического описания проделанной работы), вариантов может быть масса: начиная от кода (корявого или инициализации), до отличного адреса страниц контроллера (тоже инициализация).
Вообще на форуме (если воспользоваться поиском) уже не раз поднималась тема, где подробно всё объяснялось...

0

32

Код брал с вашего форума,вот-

Код:
$regfile = "m328pdef.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 10
$framesize = 40
Config Scl = Portc.5
Config Sda = Portc.4
Config Twi = 400000
I2cinit

Dim Resetflag As Bit

Declare Sub Rstoled
Declare Sub Oled(byval Text As String * 16 , Byval Col As Integer , Byval Page As Integer)
Declere sub Init

Call Init
Do

If Resetflag < 1 Then
Call Rstoled
Resetflag = 1
Call Oled( "Текст      " , 0 , 1)

End If


Loop

Sub Init
Const Oled_address = &H78
   Const Oled_data_mode = &H40
   Const Oled_command_mode = &H80

   I2cstart
   I2cwbyte Oled_address 
   I2cwbyte Oled_command_mode 
   I2cwbyte &HAE                                        '10101110    Display off

   I2cwbyte &B00000000                                  'Set lower column start address for page addressing mode at 0

   I2cwbyte &B00010000                                  'Set higher column start address for page addressing mode at 0   *

   'Set Memory Addressing Mode
   '00b, Horizontal Addressing Mode
   '01b, Vertical Addressing Mode +++
   '10b, Page Addressing Mode (RESET)
   '11b, Invalid
   I2cwbyte &H20 
   I2cwbyte &B00000000 

   I2cwbyte &H21                                        'Set start and end colomn
   I2cwbyte &B00000000                                  'Column start address, range
   I2cwbyte &B01111111                                  'Column end address, range

   I2cwbyte &H22                                        'Set Start and end page
   I2cwbyte &B00000000                                  'Page start Address, range
   I2cwbyte &B00000111                                  'Page end Address, range

   I2cwbyte &HB0                                        'Set page start address

   I2cwbyte &H40                                        '01000000    Set display start line at 0

   I2cwbyte &H81                                        '10000001    Set contrast
   I2cwbyte &HFF                                        '01111111    7F                                       anders

   I2cwbyte &HA0                                        'Column address is mapped to SEG0 (reset)                                *

   '???
   I2cwbyte &HA8                                        'Set multiplex ratio                                             *
   I2cwbyte &B00111111                                  'at 0F = 15                                                      *

   I2cwbyte &HD3                                        'Set Display Offset
   I2cwbyte &H00                                        'at 00 = 0

   I2cwbyte &HD5                                        'Set display clock divide ratio/oscillator frequency
   I2cwbyte &B10000000                                  'at 80 = 128                                                     anders

   I2cwbyte &HD9                                        'set precharge period
   I2cwbyte &H22                                        'at F1 = 241 (22)

   I2cwbyte &HDA                                        'Set COM pins hardware configuration                             *
   I2cwbyte &H02                                        'at 02 = 2                                                       *

   'I2cwbyte &HDB                                           'Set Vcomm deselect level at 0.77 x Vcc
   'I2cwbyte &H20                                           'at 20 = 32

   I2cwbyte &HC0                                        'Set COM output scan direction in normal C0/C8 - переворот экрана на 180 градусов

   I2cwbyte &HA4                                        'Display follows the RAM content (A4 - follows/ignores - A5)

   I2cwbyte &HA6                                        'Normal display, A6/A7 = inversed

   I2cwbyte &H8D                                        'ChargePump Setting                                              * moet
   I2cwbyte &H14                                        'Enable Charge Pump
   I2cwbyte &HAF                                        '10101111    Display on in normal mode                           * moet
   I2cstop
end sub

Sub Oled(byval Text As String * 16 , Byval Col As Integer , Byval Page As Integer)
Dim Buchstabe As String * 1

Dim Q As Integer
Dim H As Integer
Dim Temp As Integer
Dim Senden As Byte
Col = Col + 16
Page = Page + 175
I2cstart
I2cwbyte &H78
I2cwbyte &H80
I2cwbyte Page 'Bestimmung Page (Y)
I2cstop

I2cstart
I2cwbyte &H78
I2cwbyte &H80
I2cwbyte &H00
I2cstop

I2cstart
I2cwbyte &H78
I2cwbyte &H80
I2cwbyte Col 'Bestimmung Page (Y)
I2cstop


I2cstart
I2cwbyte &H78
I2cwbyte &H80
I2cstop

I2cstart
I2cwbyte &H78
I2cwbyte &H40
'Umwandlung von Buchstaben zu Asciiwert zu Clumndata der Datenbank
For Q = 1 To 16
Temp = 0
Buchstabe = Mid(text , Q , 1)
Temp = Asc(buchstabe)
Temp = Temp - 32
Temp = Temp * 8
For H = 1 To 8
Senden = Lookup(temp , Asciitab)
I2cwbyte Senden
Incr Temp
Next H
Next Q
I2cstop

End Sub


Sub Rstoled 'OLED RESET, Aufwecken, alles loeschen
Dim I As Byte
Dim J As Integer
Dim Page As Byte
Page = 176
I2cstart
I2cwbyte &H78
I2cwbyte &H80
I2cwbyte &HAF 'DISPLAY aufwecken sleep= &HAE
I2cstop

I2cstart
I2cwbyte &H78
I2cwbyte &H80
I2cwbyte &H81 'DISPLAY aufwecken sleep= &HAE
I2cstop

I2cstart
I2cwbyte &H78
I2cwbyte &H80
I2cwbyte &HFF 'Kontrast
I2cstop

I2cstart
I2cwbyte &H78
I2cwbyte &H80
I2cwbyte &H20 'Adressmapping
I2cstop

I2cstart
I2cwbyte &H78
I2cwbyte &H80
I2cwbyte &H00 'Adressmapping Horizontal
I2cstop

I2cstart
I2cwbyte &H78
I2cwbyte &H40 'Datenempfang
For J = 0 To 1023
I2cwbyte &H00 'sende "leere Column"
Next J
I2cstop
End Sub


Asciitab:
Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0,
Data 0 , 0 , 6 , 95 , 6 , 0 , 0 , 0,
Data 0 , 7 , 3 , 0 , 7 , 3 , 0 , 0,
Data 0 , 36 , 126 , 36 , 126 , 36 , 0 , 0,
Data 0 , 36 , 43 , 106 , 18 , 0 , 0 , 0,
Data 0 , 99 , 19 , 8 , 100 , 99 , 0 , 0,
Data 0 , 54 , 73 , 86 , 32 , 80 , 0 , 0,
Data 0 , 0 , 7 , 3 , 0 , 0 , 0 , 0,
Data 0 , 0 , 62 , 65 , 0 , 0 , 0 , 0,
Data 0 , 0 , 65 , 62 , 0 , 0 , 0 , 0,
Data 0 , 8 , 62 , 28 , 62 , 8 , 0 , 0,
Data 0 , 8 , 8 , 62 , 8 , 8 , 0 , 0,
Data 0 , 0 , 224, 96 , 0 , 0 , 0 , 0,
Data 0 , 8 , 8 , 8 , 8 , 8 , 0 , 0,
Data 0 , 0 , 96 , 96 , 0 , 0 , 0 , 0,
Data 0 , 32 , 16 , 8 , 4 , 2 , 0 , 0,
Data 0 , 62 , 81 , 73 , 69 , 62 , 0 , 0,
Data 0 , 0 , 66 , 127 , 64 , 0 , 0 , 0,
Data 0 , 98 , 81 , 73 , 73 , 70 , 0 , 0,
Data 0 , 34 , 73 , 73 , 73 , 54 , 0 , 0,
Data 0 , 24 , 20 , 18 , 127 , 16 , 0 , 0,
Data 0 , 47 , 73 , 73 , 73 , 49 , 0 , 0,
Data 0 , 60 , 74 , 73 , 73 , 48 , 0 , 0,
Data 0 , 1 , 113 , 9 , 5 , 3 , 0 , 0,
Data 0 , 54 , 73 , 73 , 73 , 54 , 0 , 0,
Data 0 , 6 , 73 , 73 , 41 , 30 , 0 , 0,
Data 0 , 0 , 108 , 108 , 0 , 0 , 0 , 0,
Data 0 , 0 , 236 , 108 , 0 , 0 , 0 , 0,
Data 0 , 8 , 20 , 4 , 65 , 0 , 0 , 0,
Data 0 , 36 , 36 , 36 , 36 , 36 , 0 , 0,
Data 0 , 0 , 65 , 34 , 20 , 8 , 0 , 0,
Data 0 , 2 , 1 , 89 , 9 , 6 , 0 , 0,
Data 0 , 62 , 65 , 93 , 85 , 30 , 0 , 0,
Data 0 , 126 , 17 , 17 , 17 , 126 , 0 , 0,
Data 0 , 127 , 73 , 73 , 73 , 54 , 0 , 0,
Data 0 , 62 , 65 , 65 , 65 , 34 , 0 , 0,
Data 0 , 127 , 65 , 65 , 65 , 62 , 0 , 0,
Data 0 , 127 , 73 , 73 , 73 , 65 , 0 , 0,
Data 0 , 127 , 9 , 9 , 9 , 1 , 0 , 0,
Data 0 , 62 , 65 , 73 , 73 , 122 , 0 , 0,
Data 0 , 127 , 8 , 8 , 8 , 127 , 0 , 0,
Data 0 , 0 , 65 , 127 , 65 , 0 , 0 , 0,
Data 0 , 48 , 64 , 64 , 64 , 63 , 0 , 0,
Data 0 , 127 , 8 , 20 , 34 , 65 , 0 , 0,
Data 0 , 127 , 64 , 64 , 64 , 64 , 0 , 0,
Data 0 , 127 , 2 , 4 , 2 , 127 , 0 , 0,
Data 0 , 127 , 2 , 4 , 8 , 127 , 0 , 0,
Data 0 , 62 , 65 , 65 , 65 , 62 , 0 , 0,
Data 0 , 127 , 9 , 9 , 9 , 6 , 0 , 0,
Data 0 , 62 , 65 , 81 , 33 , 94 , 0 , 0,
Data 0 , 127 , 9 , 9 , 25 , 102 , 0 , 0,
Data 0 , 38 , 73 , 73 , 73 , 50 , 0 , 0,
Data 0 , 1 , 1 , 127 , 1 , 1 , 0 , 0,
Data 0 , 63 , 64 , 64 , 64 , 63 , 0 , 0,
Data 0 , 31 , 32 , 64 , 32 , 31 , 0 , 0,
Data 0 , 63 , 64 , 60 , 64 , 63 , 0 , 0,
Data 0 , 99 , 20 , 8 , 20 , 99 , 0 , 0,
Data 0 , 7 , 8 , 112 , 8 , 7 , 0 , 0,
Data 0 , 113 , 73 , 69 , 67 , 0 , 0 , 0,
Data 0 , 0 , 127 , 65 , 65 , 0 , 0 , 0,
Data 0 , 2 , 4 , 8 , 16 , 32 , 0 , 0,
Data 0 , 0 , 65 , 65 , 127 , 0 , 0 , 0,
Data 0 , 4 , 2 , 1 , 2 , 4 , 0 , 0,
Data 128 , 128 , 128 , 128 , 128 , 128 , 128 , 128,
Data 0 , 0 , 3 , 7 , 0 , 0 , 0 , 0,
Data 0 , 32 , 84 , 84 , 84 , 120 , 0 , 0,
Data 0 , 127 , 68 , 68 , 68 , 56 , 0 , 0,
Data 0 , 56 , 68 , 68 , 68 , 40 , 0 , 0,
Data 0 , 56 , 68 , 68 , 68 , 127 , 0 , 0,
Data 0 , 56 , 84 , 84 , 84 , 8 , 0 , 0,
Data 0 , 8 , 126 , 9 , 9 , 0 , 0 , 0,
Data 0 , 24 , 164 , 164 , 164 , 124 , 0 , 0,
Data 0 , 127 , 4 , 4 , 120 , 0 , 0 , 0,
Data 0 , 0 , 0 , 125 , 64 , 0 , 0 , 0,
Data 0 , 64 , 128 , 132 , 125 , 0 , 0 , 0,
Data 0 , 127 , 16 , 40 , 68 , 0 , 0 , 0,
Data 0 , 0 , 0 , 127 , 64 , 0 , 0 , 0,
Data 0 , 124 , 4 , 24 , 4 , 120 , 0 , 0,
Data 0 , 124 , 4 , 4 , 120 , 0 , 0 , 0,
Data 0 , 56 , 68 , 68 , 68 , 56 , 0 , 0,
Data 0 , 252 , 68 , 68 , 68 , 56 , 0 , 0,
Data 0 , 56 , 68 , 68 , 68 , 252 , 0 , 0,
Data 0 , 68 , 120 , 68 , 4 , 8 , 0 , 0,
Data 0 , 8 , 84 , 84 , 84 , 32 , 0 , 0,
Data 0 , 4 , 62 , 68 , 36 , 0 , 0 , 0,
Data 0 , 60 , 64 , 32 , 124 , 0 , 0 , 0,
Data 0 , 28 , 32 , 64 , 32 , 28 , 0 , 0,
Data 0 , 60 , 96 , 48 , 96 , 60 , 0 , 0,
Data 0 , 108 , 16 , 16 , 108 , 0 , 0 , 0,
Data 0 , 156 , 160 , 96 , 60 , 0 , 0 , 0,
Data 0 , 100 , 84 , 84 , 76 , 0 , 0 , 0,
Data 0 , 8 , 62 , 65 , 65 , 0 , 0 , 0,
Data 0 , 0 , 0 , 119 , 0 , 0 , 0 , 0,
Data 0 , 0 , 65 , 65 , 62 , 8 , 0 , 0,
Data 0 , 2 , 1 , 2 , 1 , 0 , 0 , 0,
Data 0 , 60 , 38 , 35 , 38 , 60 , 0 , 0,

0

33

Возможно проблема в таблице символов, не уверен, что там есть русский язык.

0

34

"Текст" я написал для примера!Пишу я на инглише.
Прилагаю фото этих кракозябр(извиняюсь за качество фото)http://sh.uploads.ru/t/emUrO.jpg

Отредактировано shim (2015-06-08 12:55:51)

0

35

Что никто не поможет???можно выкидывать эту безделушку????

0

36

Попробуйте залить эту прошивку: http://rdvv.ru/upload/Test.zip
О результате отпишите.

0

37

А порты вывода там Pc4, Pc5???

0

38

https://yadi.sk/i/PfMAHHVehMCGu
вот что получилось!!!

0

39

Skull, а вот как можно запихать кучу определений из програмки от немцев в отдельную библиотеку?
Проще спросить, как создать отдельную библиотеку?

0

40

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

https://yadi.sk/i/PfMAHHVehMCGu
вот что получилось!!!

значит: экран рабочий и подключение правильное (проблема в чужом коде, разбирайтесь (в алгоритме работы экрана или пробуйте "glcdSSD1306-I2C.lib", которую посоветовал Mrshilov)

0

41

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

А чем штатная библиотека glcdSSD1306-I2C.lib не устраивает?

А где взять такую библиотеку?Перекопал у себя всё,но такой библиотеки не нашел.

0

42

Mrshilov
Огромное спасибо,всё отлично работает!

0

43

Mrshilov
Спасибо большое
только не нашел есть ли команды для рисования в данной библиотеке?

Отредактировано kkozyrev (2015-06-30 23:49:19)

0

44

Mrshilov, спасибо!
У меня atmega328. В вашем примере естественно, исправил на неё. Компиляция с ошибками:
На Setfont Font8x8tt ругается "Invalid data type [[0011] 0[__FONTTABLE]]"
На Config Graphlcd = Custom...  ругается "Unknown CONFIG parameter [CUSTOM]"

Вместо текста выводит кашку, но картинка в порядке.
При этом, бинарник из архива (для m88pdef), залитый в m328 работает полностью, с текстом.

Таким образом, не компилирует ни для m88, ни для m328.
2075

Отредактировано SIvan (2015-07-01 00:06:21)

0

45

Кстати, дисплей у меня 7-пиновый. 2 режима: SPI и I2C. Перевел его в I2C. И судя по описанию продавца, дисплей цветной.

0

46

я думаю он не цветной, а двухцветный как и у меня (верхняя строка с пикселями другого цвета)

0

47

Не устаем благодарить :)

Как я понял, ограничение в 400КГц на I2C тут является свойством библиотеки?
И двухцветность эта библиотека тоже не поддерживает?

Да, и после изменения Config Graphlcd, скорость вывода значительно упала.

Отредактировано SIvan (2015-07-02 00:47:07)

0

48

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

Как я понял, ограничение в 400КГц на I2C тут является свойством библиотеки?

Если это так, то любую библиотеку можно поправить ручками. Впрочем, руками не пробовали конфигурировать скорость шины (Config Twi....)?

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

И двухцветность эта библиотека тоже не поддерживает?

С чего вы взяли, что у вас экран двухцветный на SSD1306? Не одного не видел, обычно окрашивают только часть экрана, а продавцы частенько впаривают то, что было.

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

Да, и после изменения Config Graphlcd, скорость вывода значительно упала.

Как определили? Это конечно может быть особенностью алгоритма...но слабо верится.

0

49

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

Впрочем, руками не пробовали конфигурировать скорость шины (Config Twi....)?

Пробовал. Bascom ругается на другие, кратные 100000, значения.

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

С чего вы взяли, что у вас экран двухцветный на SSD1306?

Значит, обманули с фото изделия.

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

Как определили?

Визуально заметно, что картинка стала "прогружаться" медленнее.

0

50

да, это обычный, монохромный дисплей
верхняя полоса/сегмент просто с другим цветом (вот у меня подобный экран)
I2C всегда идет кратным частотам, шаг обычно по 100к (100, 200, 400, 800...у меня рекорд был 1200к на xmega)

0

51

а кто то использовал функцию скроллинга, а то что то не получается как не крути.
http://s7.uploads.ru/t/EL58f.png

в библиотеке на arduino сделано так :

Код:
#define SSD1306_ACTIVATE_SCROLL 0x2F
#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26

.......

void Adafruit_SSD1306::ssd1306_command(uint8_t c) {
    uint8_t control = 0x00;   // Co = 0, D/C = 0
    Wire.beginTransmission(_i2caddr);
    Wire.write(control);
    Wire.write(c);
    Wire.endTransmission();
  }

.......

void Adafruit_SSD1306::startscrollright(uint8_t start, uint8_t stop){
  ssd1306_command(SSD1306_RIGHT_HORIZONTAL_SCROLL);
  ssd1306_command(0X00);
  ssd1306_command(start);
  ssd1306_command(0X00);
  ssd1306_command(stop);
  ssd1306_command(0X00);
  ssd1306_command(0XFF);
  ssd1306_command(SSD1306_ACTIVATE_SCROLL);
}

но у меня что то не работает:

Код:
I2cstart
I2cwbyte &H78
I2cwbyte &H00
I2cwbyte &H26
I2cstop

I2cstart
I2cwbyte &H78
I2cwbyte &H00
I2cwbyte &H00              'dummy byte
I2cstop

I2cstart
I2cwbyte &H78
I2cwbyte &H00
I2cwbyte &H00              'start page
I2cstop

I2cstart
I2cwbyte &H78
I2cwbyte &H00
I2cwbyte &H00             'interval
I2cstop

I2cstart                          
I2cwbyte &H78
I2cwbyte &H00
I2cwbyte &H07               'end page
I2cstop

I2cstart
I2cwbyte &H78
I2cwbyte &H00
I2cwbyte &H00              'dummy byte
I2cstop

I2cstart
I2cwbyte &H78
I2cwbyte &H00
I2cwbyte &HFF              'dummy byte
I2cstop

I2cstart
I2cwbyte &H78
I2cwbyte &H00
I2cwbyte &H2F              'activate scroll
I2cstop

Хотя с инверсией, питанием и контрастом проблем нет.
Жалко что ардуинки нет так би посмотрел анализатором что там не так.

0

52

Пробовал один раз - работала, но эта штука SSD1306 как бы регламентирует стандарт, а наши китайские друзья ухитряются из 3 типов экранов всё реализовать по своему (адресация, организация алгоритма использования памяти, общим функционалом).
В общем, если нужен встроенный эффект (который кстати может вовсе отсутствовать) и не хочется с нуля свои эффекты делать, то придется подбирать значения настроек (под это дело написать программу и смотреть, на каком этапе/комбинации оно работает).

0

53

Подскажите как перевернуть экран на 180 градусов со стандартной библиотекой?

Насколько правильно сделал:

; slave address, CO|DC|ctrl, data
;CO-continuation bit, if 0 next data will be normal data
;ctrl-if 0, data is a command, if 1 data is normal data stored in GDRAM
_lcd_init_data:
.db &H78, &HAE                         ; DISPLAYOFF
.db &HD5, &H80                         ; SETDISPLAYCLOCKDIV , ratio 0x80
.db &H00, &H3F                         ; SETMULTIPLEX , 1f 128x32
.db &HD3, &H00                         ; SETDISPLAYOFFSET , 00
.db &H40, &H8D                         ; SETSTARTLINE , CHARGEPUMP
.db &H14, &H20                         ; vccstate 14 , MEMORYMODE
.DB &H00, &HA0                         ; A0 upside down SEGREMAP             
.db &HC0, &HDA                         ; COMSCANDEC , SETCOMPINS
.db &H12, &H81                         ; 02 128x32  12 , SETCONTRAST
.db &HFF, &HD9                         ; constrast value 255, SETPRECHARGE,
.db &HF1, &HD8                         ; vccstate  f1 ,  SETVCOMDETECT
.db &H40, &HA4                         ;  &H40 , DISPLAYALLON_RESUME
.db &HA6, &HAF                         ; NORMALDISPLAY

Отредактировано Menen (2016-11-03 16:50:06)

0

54

Попробуйте здесь:

Код:
.DB &H00, &HA0                         ; A0 upside down SEGREMAP             
.db &HC0, &HDA                         ; COMSCANDEC , SETCOMPINS

изменить &HA0 на &HA1 и &HC0 на &HC8

0

55

Всем доброго времени суток!
Решил и я поиграться с OLED дисплеем 128х64 (должен быть двух цветным, желтый синий).
Собственно дисплей приехал, но у него несколько отличаются пины, их 4
1 - GND
2 - VDD
3 - SCK (не SCL как в приведенных примерах)
4 - SDA

На плате дисплея имеется вот такая надпись GM009605

Подключаю данный дисплей к atmega32 тактируемой от внешнего кварца на 16мГц. Запитанно все 5в.
Пробовал подключать так

Config Scl = Portc.0
Config Sda = Portc.1

результат 0, на дисплеи тишина

Потом смотрю что на дисплее пин 3 обозван как SCK, а не SCL - ради эксперимента попробовал так

Config Sck = Portb.7
Config Sda = Portc.1

естественно не компилируется, ругается "Unknown CONFIG parameter [SCK]"
Вернул все назад к
Config Scl = Portc.0
Config Sda = Portc.1

Весь код:

Код:
$regfile = "m32def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 40
$framesize = 40
$lib "i2c_twi.lbx"
Config Scl = Portc.0
Config Sda = Portc.1
Config Twi = 40000

Const Oled_address = &HA2
Const Write_cmd = &H01
Const Oled_reset = &H03
Const Oled_8x16str = &H10

Const Disp_area = &H11
Const Fill_area = &H12
Const Set_scrohor = &H13
Const Set_scrover = &H14
Const Set_scroverhor = &H15

Const Scroll_up = &H01
Const Scroll_down = &H00
Const Scroll_right = &H26
Const Scroll_left = &H27
Const Scroll_vr = &H29
Const Scroll_vl = &H2A
Const Scrollstop = &H2E

Dim A As Byte
Dim B As Byte
Dim C As String * 1

Declare Sub Resetdisplay
Declare Sub Deactivatescroll
Declare Sub Display8x16str(byval Page As Byte , Byval Column As Byte , Byval Char As String * 16)
Declare Sub Scrollingvertical(byval Rowsfixed As Byte , Byval Rowsscroll As Byte , Byval Scrollstep As Byte , Byval Stepdelay As Byte)
Declare Sub Scrollinghorizontal(byval Lr As Byte , Byval Spage As Byte , Byval Epage As Byte , Byval Frames As Byte)
Declare Sub Fillarea(byval Spage As Byte , Byval Epage As Byte , Byval Scolumn As Byte , Byval Ecolumn As Byte , Byval Filldata As Byte)

I2cinit
' Main

Do
   Call Resetdisplay
   Waitms 100
   Call Display8x16str(0 , 0 , "Hello World")
   Call Display8x16str(2 , 0 , "Hello OLED")
   Call Display8x16str(4 , 0 , "0123456789ABCDF")
   Call Display8x16str(6 , 0 , "Bascom AVR")
   Wait 2
   Call Scrollingvertical(0 , 32 , 1 , 250)
   Wait 2
   Call Scrollinghorizontal(&H27 , 4 , 5 , &H07)            ' To left
   Wait 3
   Call Deactivatescroll
   Call Scrollinghorizontal(&H26 , 4 , 5 , &H07)            ' To right
   Wait 3
   Call Deactivatescroll
   Call Fillarea(0 , 7 , 32 , 64 , 3)
   Wait 3
Loop
Sub Fillarea(byval Spage As Byte , Byval Epage As Byte , Byval Scolumn As Byte , Byval Ecolumn As Byte , Byval Filldata As Byte)
   I2cstart
   I2cwbyte Oled_address
   I2cwbyte Fill_area
   I2cwbyte Spage
   I2cwbyte Epage
   I2cwbyte Scolumn
   I2cwbyte Ecolumn
   I2cwbyte Filldata
   I2cstop
End Sub
Sub Deactivatescroll
   I2cstart
   I2cwbyte Oled_address
   I2cwbyte Write_cmd
   I2cwbyte Scrollstop
   I2cstop
End Sub
Sub Scrollinghorizontal(byval Lr As Byte , Byval Spage As Byte , Byval Epage As Byte , Byval Frames As Byte)
   I2cstart
   I2cwbyte Oled_address
   I2cwbyte Set_scrohor
   I2cwbyte Lr
   I2cwbyte Spage
   I2cwbyte Epage
   I2cwbyte Frames
   I2cstop
End Sub
Sub Scrollingvertical(byval Rowsfixed As Byte , Byval Rowsscroll As Byte , Byval Scrollstep As Byte , Byval Stepdelay As Byte)
   I2cstart
   I2cwbyte Oled_address
   I2cwbyte Set_scrover
   I2cwbyte Scroll_up
   I2cwbyte Rowsfixed
   I2cwbyte Rowsscroll
   I2cwbyte Scrollstep
   I2cwbyte Stepdelay
   I2cstop
End Sub
Sub Display8x16str(byval Page As Byte , Byval Column As Byte , Byval Char As String * 16)
   I2cstart
   I2cwbyte Oled_address
   I2cwbyte Oled_8x16str
   I2cwbyte Page
   I2cwbyte Column
   For A = 1 To 16
      C = Mid(char , A , 1)
      B = Asc(c)
      I2cwbyte B
   Next
   I2cstop
End Sub
Sub Resetdisplay
   I2cstart
   I2cwbyte Oled_address
   I2cwbyte Oled_reset
   I2cstop
End Sub

Прошу собственно помощи, как бы заставить его заработать?
Заранее всем благодарен

Отредактировано artur (2016-11-11 10:05:51)

0

56

artur
Я бы попробовал вместо "ручного" управления использовать готовую библиотеку для работы с этим дисплеем.
Настройки выглядят примерно так:

Код:
Config Scl = Portc.3                                        ' used i2c pins
Config Sda = Portc.2
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

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

Дальше устанавливаем фонт и выводим на экран:

Код:
Setfont Font6x8                                  ' select font
Do
    Lcdat 1 , 1, " Test "
Loop
End
'--------------------------------------------------------------------------------------------------

$include "font6x8.font"                                               ' this is a true type font with variable spacing

Да,питание хорошо бы 3.3в и scl и sda подтянуть к питанию через резисторы.
Библиотека должна быть в паках с либами в Bascom,фонт в папке с кодом. Если правильно вспомнил,должно работать.

Отредактировано Sergik07 (2016-11-11 11:11:07)

+1

57

Sergik07, спасибо!
Sergik07, а где взять font?
font - нашел, недостающую библиотеку выкачал, библиотека в либах, фонт в папке с исходником
Пробую

Отредактировано artur (2016-11-11 11:14:39)

0

58

artur
Вот библиотека и фонт. Ссылка

0

59

Sergik07, спасибо спасибо

0

60

Вот такой код получился

Код:
$regfile = "m32def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 40
$framesize = 40
Config Scl = Portc.0
Config Sda = Portc.1
Config Twi = 400000

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

Setfont Font6x8                                             ' select font
Do
    Lcdat 1 , 1 , " Test "
Loop
End
'--------------------------------------------------------------------------------------------------

$include "Font6x8.font"

Не компилируется, сипятся ошибки

http://savepic.ru/12144189.jpg

0


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