first commit

This commit is contained in:
valeh
2020-12-22 14:30:09 +02:00
commit 26b0ba5954
1832 changed files with 17777948 additions and 0 deletions

View File

@@ -0,0 +1,128 @@
Command comparison between ST7565, NT7534, IST3020, SPLC502, SSD1815, UC1701 and ST7567 display controller
Note: For multi-byte sequences, only the first byte is considered.
use monospaced font for this txt file
ST7565 ST7565 NT7534 UC1701 ST7567 IST3020 SPLC502 SSD1815 UC1601s ST7567
1.0a/2002 1.7c/2009 0.6/2007 1.2a/2016
0x000 00000000 Lo Col Lo Col Lo Col Lo Col Lo Col Lo Col Lo Col Lo Col Lo Col Lo Col
...
0x00f 00001111 Lo Col Lo Col Lo Col Lo Col Lo Col Lo Col Lo Col Lo Col Lo Col Lo Col
0x010 00010000 Hi Col Hi Col Hi Col Hi Col Hi Col Hi Col Hi Col Hi Col Hi Col Hi Col
...
0x01f 00011111 Hi Col Hi Col Hi Col Hi Col Hi Col Hi Col Hi Col Hi Col Hi Col Hi Col
0x020 00100000 Res Ratio Res Ratio Res Ratio Res Ratio Res Ratio Res Ratio Res Ratio Res Ratio - Reg Ratio
...
0x023 00100011 Res Ratio Res Ratio Res Ratio Res Ratio Res Ratio Res Ratio Res Ratio Res Ratio - Reg Ratio
0x024 00100100 Res Ratio Res Ratio Res Ratio Res Ratio Res Ratio Res Ratio Res Ratio Res Ratio Temp Ctl Reg Ratio
...
0x027 00100111 Res Ratio Res Ratio Res Ratio Res Ratio Res Ratio Res Ratio Res Ratio Res Ratio Temp Ctl Reg Ratio
0x028 00101000 Pwr Ctrl Pwr Ctrl Pwr Ctrl Pwr Ctrl Pwr Ctrl Pwr Ctrl Pwr Ctrl Pwr Ctrl Pwr Ctrl Pwr Ctrl
...
0x02f 00101111 Pwr Ctrl Pwr Ctrl Pwr Ctrl Pwr Ctrl Pwr Ctrl Pwr Ctrl Pwr Ctrl Pwr Ctrl Pwr Ctrl Pwr Ctrl
0x030 00110000 - - PM Duty - - Rev. Line - - Adv Prg Ctl -
0x030 00110001 - - PM Duty - - Rev. Line - - Adv Prg Ctl -
0x030 00110010 - - PM Duty - - Rev. Line - - - -
... - - ... - - - -
0x037 00110111 - - PM Duty - - Rev. Line - - - -
0x038 00111000 - - PM Bias - - Rev. Line - - - -
... - - ... - - - -
0x03f 00111111 - - PM Bias - - Rev. Line - - - -
0x040 01000000 Start Line Start Line Start Line Scroll Line? Start Line DDRAM Line Start Line Start Line Scroll Line Start Line
...
0x07f 01111111 Start Line Start Line Start Line Scroll Line? Start Line DDRAM Line Start Line Start Line Scroll Line Start Line
0x080 10000000 - - - - - - - - - -
0x081 10000001 Contrast Contrast Contrast Contrast Contrast Contrast Contrast Contrast Contrast Contrast
0x082 10000010 - - Part. Mode - - - - - -
0x083 10000011 - - Part. Mode - - - - - -
0x084 10000100 - - Stop NL Inv - - - - - Partial Ctl Stop NL Inv
0x085 10000101 - - Start NL Inv - - - - - Partial Ctl Start NL Inv
0x086 10000110 - - - - - - - - Partial Ctl
0x087 10000111 - - - - - - - - Partial Ctl
0x088 10001000 - - - - - - - - Adr Ctl
...
0x08f 10001111 - - - - - - - - Adr Ctl
0x090 10010000 - - - - - - - -
0x091 10010001 - - - - - Offset Mode - -
0x092 10010010 - - - - - Offset Mode - -
0x093 10010011 - - - - - Offset Mode - -
...
0x09f 10011111 - - - - - - -
0x0a0 10100000 Seg Normal Seg Normal Seg Normal Seg Normal Seg Normal Seg Normal Seg Normal Seg Normal Frame Rate Seg Normal
0x0a1 10100001 Seg Reverse Seg Reverse Seg Reverse Seg Reverse Seg Reverse Seg Reverse Seg Reverse Seg Reverse Frame Rate Seg Reverse
0x0a2 10100010 1/9 bias 1/9 bias 1/9 bias 1/9 bias 1/9 bias Bias Bias 1/9 bias - 1/9 bias
0x0a3 10100011 1/7 bias 1/7 bias 1/7 bias 1/7 bias 1/7 bias Bias Bias 1/7 bias - 1/7 bias
0x0a4 10100100 Normal Op Normal Op Normal Op Normal Op Normal Op Normal Op Normal Op Normal Op Normal Op Normal Op
0x0a5 10100101 All pt on All pt on All pt on All pt on All pt on All pt on All pt on All pt on All pt on All pt on
0x0a6 10100110 Normal Op Normal Op Normal Op Normal Op Normal Op Normal Op Normal Op Normal Op Normal Op Normal Op
0x0a7 10100111 Inverse Inverse Inverse Inverse Inverse Inverse Inverse Inverse Inverse Inverse
0x0a8 10101000 - - - - Stand-By - - - -
0x0a9 10101001 - - - - Sleep - - - -
0x0aa 10101010 - - - - - - - - - -
0x0ab 10101011 - - - - - - - - - -
0x0ac 10101100 Indic. On Sleep On Indic. On Indic. On Indic. On Indic. On Indic. On - -
0x0ad 10101101 Indic. Off Sleep Off Indic. Off Indic. Off Indic. Off Indic. Off Indic. Off - -
0x0ae 10101110 Disp Off Disp Off Disp Off Disp Off Disp Off Disp Off Disp Off Disp Off Disp Off Disp Off
0x0af 10101111 Disp On Disp On Disp On Disp On Disp On Disp On Disp On Disp On Disp On Disp On
0x0b0 10110000 Page Adr Page Adr Page Adr Page Adr Page Adr Page Adr Page Adr Page Adr Page Adr Page Adr
...
0x0b7 10111111 Page Adr Page Adr Page Adr Page Adr Page Adr Page Adr Page Adr Page Adr Page Adr Page Adr
0x0c0 11000xxx Com Normal Com Normal Com Normal Com Normal Com Normal Com Normal Com Normal Com Normal LCD Map Com Normal
...
0x0c7 11000xxx Com Normal Com Normal Com Normal Com Normal Com Normal Com Normal Com Normal Com Normal LCD Map Com Normal
0x0c8 11001xxx Com Reverse Com Reverse Com Reverse Com Reverse Com Reverse Com Reverse Com Reverse Com Reverse - Com Reverse
...
0x0cf 11001xxx Com Reverse Com Reverse Com Reverse Com Reverse Com Reverse Com Reverse Com Reverse Com Reverse - Com Reverse
0x0d0 11010000 - - - - - - - - - -
0x0d1 11010001 - - - - - - - - - -
0x0d2 11010010 - - - - - - Drv Mode - - -
0x0d3 11010011 - - PM Line - - - - - - -
0x0d4 11010100 - - - - - - Test Mode - - -
0x0d5 11010101 - - - - - - Page Blink - - -
...
0x0df 11011111 - - - - - - - - - -
0x0e0 11100000 Start R-M-W Start R-M-W Start R-M-W Start R-M-W Start R-M-W Start R-M-W Start R-M-W Start R-M-W - Start R-M-W
0x0e1 11100001 - - - - - Reset Pwr Save - - - -
0x0e2 11100010 Reset Reset Reset Reset Reset Reset Reset Reset Reset Reset
0x0e3 11100011 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP
0x0e4 11100100 - - OSC Freq - - Rev Line Reset OSC Freq - - -
0x0e5 11100101 - - OSC Freq - - - OSC Freq - - -
0x0e6 11100110 - - DC/DC Freq - - - - - - -
0x0e7 11100111 - - - - - - - - - -
0x0e8 11101000 - - - - - - - - Bias Ratio -
...
0x0ed 11101101 - - - - - - - - Bias Ratio -
0x0ee 11101110 Stop R-M-W Stop R-M-W Stop R-M-W Stop R-M-W Stop R-M-W Stop R-M-W Stop R-M-W Bias Ratio Stop R-M-W
0x0ef 11101111 - - - - - - - - Bias Ratio -
0x0f0 11110000 Test Mode Test Mode Test Mode - - Test Mode Test Mode Test Mode - -
0x0f1 11110001 Test Mode Test Mode Test Mode - - Test Mode Test Mode Test Mode Com End -
0x0f2 11110010 Test Mode Test Mode Test Mode - - Test Mode Test Mode Test Mode Partial Start -
0x0f3 11110011 Test Mode Test Mode Test Mode - - Test Mode Test Mode Test Mode Partial End -
0x0f4 11110100 Test Mode Test Mode Test Mode - - Test Mode Test Mode Test Mode - -
0x0f5 11110101 Test Mode Test Mode Test Mode - - Test Mode Test Mode Test Mode - -
0x0f6 11110110 Test Mode Test Mode Test Mode - - Test Mode Test Mode Test Mode - -
0x0f7 11110111 Test Mode Test Mode Test Mode - - Test Mode Test Mode Test Mode - -
0x0f8 11111000 Test Mode Boost Level Test Mode - Boost Level Test Mode Test Mode Test Mode - Boost Level
0x0f9 11111001 Test Mode Test Mode Test Mode - - Test Mode Test Mode Test Mode - -
0x0fa 11111010 Test Mode Test Mode Test Mode Adv Ctrl0 - Test Mode Test Mode Test Mode - -
0x0fb 11111011 Test Mode Test Mode Test Mode Adv Ctrl1 - Test Mode Test Mode Test Mode - -
0x0fc 11111100 Test Mode Test Mode Test Mode Test Mode - Test Mode Test Mode Test Mode - -
0x0fd 11111101 Test Mode Test Mode Test Mode Test Mode - Test Mode Test Mode Test Mode - -
0x0fe 11111110 Test Mode Test Mode Test Mode Test Mode Test Mode Test Mode Test Mode Test Mode - Enter Ext.
0x0ff 11111111 Test Mode Test Mode Test Mode Test Mode Test Mode Test Mode Test Mode Test Mode - Leave Ext.
Conclusion (only from Datasheet documentation perspective)
* Command set of the ST7565 is fully included in NT7534 and UC1701
* Compared to ST7565, the UC1701 has an extra temperature control and
wrap around option (both in Adv Ctrl0)
* Compared to ST7565, the NT7534 has a partion mode (PM) option and
allows setting of several frequencies.
* Compared to ST7565, the ST7567 has an option to set the booster level
* Compared to ST7565, the SPLC502 has a drive power and page blinking options
* ST7565 2009: Version 1.7c (2009, http://www.newhavendisplay.com/app_notes/ST7565R.pdf)
includes the boost level/ratio command for the ST7565 and the indicator cmd is replaced by the sleep cmd

View File

@@ -0,0 +1,18 @@
3=3 wire SPI
4=4 wire SPI
2=I2C
6=6800 8 bit parallel
8=8080 8 bit parallel
s=Arduino Standard Software Communication
pinMode and digitalWrite are used for communication
o=Arduino Optimized Software Communication
uC Specific low level functions for digital write and read
h=Hardware Communication with Standard Libs
TWI and SPI library
H=uC specific hardware communication
SSD1306 128x64
Arduino with ATMega328 (e.g. Uno) s2s3s4s6s8 h2h4
Arduino with AT91SAM3X8E (Due) s2s3s4s6s8 h2h4

View File

@@ -0,0 +1,288 @@
Sections
- Wiring... Interconnect, pin/label names
- Displays... Display support, display problems
- U8g2... Setup, compilation, usage, fonts
Wiring
Q: Why does my xxx_SW_I2C() device not work with my other I2C devices?
A: SW_I2C emulates I2C with digitalWrite(), which will have a conflict with other
I2C devices at the same pins. There are two options: (A) use xxx_HW_I2C() or
(B) use different pins with xxx_SW_I2C()
Q: My display has a pin labled as "A0" (or "RS"). How to connect this pin?
A: There are different names for the "data/command" pin. In U8g2 only the name
"dc" is used. On the display side it might be also called "A0", "RS", "CD".
See also the next question.
Q: My display has pins labled as "D0" and "D1". What is the interface and how
to connect these pins?
A: This is probably a SSD1306 OLED. The meaning of the D0 and D1 pin depends
on the configuration of the SSD1306. D0 is the clock line and D1 is the data line.
Q: For HW SPI no pin numbers are required in the constructor. But which are
the pin numbers for wiring?
A: This depends on your board. For some official boards, this is listed here:
https://www.arduino.cc/en/Reference/SPI
You need to connect MOSI (data) and SCK (clock) pins of your board with the
corresponding pins with your display.
All U8g2 software emulated SPI constructors look like this:
U8G2_..._4W_SW_SPI u8g2(U8G2_R0, clock, data, cs, dc, reset);
All U8g2 hardware SPI constructors look like this:
U8G2_..._4W_SW_SPI u8g2(U8G2_R0, cs, dc, reset);
Q: For HW I2C no pin numbers are required in the constructor. But which are
the pin numbers for wiring?
A: See same question for SPI. For some boards, the pins are listed here:
https://www.arduino.cc/en/Reference/Wire
All U8g2 software emulated I2C constructors look like this:
U8G2_..._SW_I2C u8g2(U8G2_R0, clock, data, reset);
All U8g2 hardware I2C constructors look like this:
U8G2_..._HW_I2C u8g2(U8G2_R0, reset);
Note: The HW_I2C allows to more arguments for hardware pin number remapping.
However, this is only supported on the ESP8266.
Q: The pin names on my display do not fit to the pin names of U8g2.
A: Yes, each datasheet/product/controller has different names. There
is a mapping table on the wiki for this:
https://github.com/olikraus/u8g2/wiki/u8g2setupcpp#wiring
Q: What is wrong with connecting Reset (RES) of my display with the Reset of my
Arduino Board?
A:
- Both are inputs. It does not make sense to connect two inputs
- Both pins have completly different functions: The reset of your board will reset
the Arduino board, the reset of the display will reset the display.
Please connect the reset input of the display with a normal GPIO pin of your board.
Q: Shell I connect CS (chip select) with the SS output of the Arduino board?
A: In general this is required neither for hardware or software SPI.
Q: My board has a MOSI and a SCK output. Do i need to connect this to the
clock and data pins of my display?
A: "Yes" if you want to use hardware SPI (u8g2 constructors ending in _HW_SPI).
You can use any pins with the software emulated SPI of u8g2 (constructors ending
in _SW_SPI). Howver in general it is better to use hardware SPI to get a better
performance of your display.
Q: How to wire ST7920 display in 8080 mode?
A:
- See also https://github.com/olikraus/u8g2/wiki/gallery#26-nov-2016-st7920-128x64-lcd-in-8080-parallel-mode
- Connect the RW (SID) input of your ST7920 display to ground.
- In the u8g2 constructor, use U8X8_PIN_NONE for "cs" signal
- The "dc" pin is called "RS" in the ST7920 documentation.
- See also issue #90: https://github.com/olikraus/u8g2/issues/90
Displays
Q: There is an x-offset on my SSD1306 128x64 OLED.
A: This is not a SSD1306 OLED, instead use the SH1106 constructor.
Q: A T6963 misses columns on the display/has garbled output.
A: Ensure that the T6963 operates in 8x8 mode:
If the display module has two font select (FSx) pins, connect both to GND
If the display module has one font select (FS) pin, connect it to GND
Q: My T6963 has a RD input. How shell this be connected?
A: The RD input for any 8080 interface has to be connected to power supply (5V or 3.3V,
depending on the display)
Q: My T6963 was working with u8glib, but it does not work with U8g2
A: The sequence of argument has changed from cs, a0, wr to wr, cs, a0:
U8GLIB_T6963_240X128 u8g(d0, d1, d2, d3, d4, d5, d6, d7, cs, dc, wr, rd, reset);
U8G2_T6963_240X128_1_8080 u8g2(U8G2_R0, d0, d1, d2, d3, d4, d5, d6, d7, wr, cs, dc, reset);
Q: My controller/interface combination is not listed in the examples.
A: Yes, the complete list is here:
https://github.com/olikraus/u8g2/wiki/u8g2setupcpp
Q: My display controller is listed, but the display dimension is not supported.
A: Raise an issue in the u8g2 tracker "https://github.com/olikraus/u8g2/issues"
Q: My controller is not listed, What can I do?
A: First check whether this controller is compatible to one of the supported
controller:
Supported: ST7565, Compatible: NT7534, UC1701, SED1565, S1D15605, S6B0723, SPLC502
Supported: SED1330, Compatible: SED1335, RA8835, S1D3305
Supported: LC7981, Compatible: NT7086, (maybe also: HD61830)
This table just reflects my current knowledge. It is not tested and may not be true at all.
Raise an issue in the u8g2 issue tracker, If your controller for a monochrome display is not listed.
A more detailed discussion of some controllers is listed in "controller_cmds.txt"
U8g2
Q: How to install u8g2 for Arduino?
A: The latest stable version of U8g2 is available as Arduino Library in the
"Manage Libraries..." browser. See also here: https://github.com/olikraus/u8g2/wiki/u8g2install
The latest development version is available for download here:
https://github.com/olikraus/U8g2_Arduino/archive/master.zip
In the Arduino IDE use the Sketch>Include Library>Add .ZIP Library... menu to
import the u8g2 zip library.
Q: There is a compilation error with I2C/SPI library used by U8g2.
A: U8g2 expects standard Arduino Wire and SPI libraries. However some
none-Arduino Boards did not implement the full set of library functions.
Examples are the missing setClock() or missing beginTransaction() functions.
This is an issue with your board support library and not an issue of U8g2.
Workaround:
1. Disable (comment) U8X8_HAVE_HW_SPI and/or U8X8_HAVE_HW_I2C in u8x8.h
2. Use SW SPI/SW I2C U8g2 constructors
Q: What is the meaning of the F/1/2 in the U8g2 constructor name?
A: "F" means full buffer mode. The entire display is rendered in RAM. Use
"sendBuffer" to transfer this RAM buffer to the display. "1" and "2" constructors
will store one or two pages of the display in RAM only.
Use the firstPage/nextPage loop to create the image for the display.
There are also two different sets of examples for both modes.
Conclusion:
"F" mode: Faster, but requires more RAM
"1"/"2" modes: User lesser RAM, but slower draw speed.
Q: What is the meaning of "SW"/"HW" in the U8g2 constructor name?
A: "SW" means, that the protocol is emulated by software. For example
the SW_I2C will not use the I2C subsystem of your board. The "HW" constructor
will use the hardware subsystem on your uC. For an Arduino board, HW_I2C will
call the Wire library for hardware accelerated I2C communication. "HW"
constructors are much faster, but maybe debugging and setup is more
easier with a "SW" constructor.
Q: Why does the hardware I2C accept clock and data pins?
The hardware I2C constructor looks like this:
U8G2_<display>_HW_I2C(rotation, [reset [, clock, data]])
This means there are three options to use this constructor:
1. U8G2_<display>_HW_I2C(rotation)
2. U8G2_<display>_HW_I2C(rotation, reset)
3. U8G2_<display>_HW_I2C(rotation, reset, clock, data)
Hardware I2C usually is possible only with fixed pins. This means, the first or
second form of the constructor must be used. As of today only the ESP8266
support pin remapping. In such a case, also the third form can be used.
Q: How to activate 16 Bit mode?
A: Search for the line
//#define U8G2_16BIT
in "u8g2.h". Uncomment this line:
#define U8G2_16BIT
The file "u8g2.h" is located in "/libraries/U8g2_Arduino/src/clib" inside your default
sketch folder.
Q: U8g2 requires a lot of memory. How to reduce this?
- Visit https://github.com/olikraus/u8g2/wiki/u8g2optimization
- Disable U8g2 features if possible (see u8g2.h)
- Limit the font size. If possible avoid "f" fonts, instead use "r" or "n" fonts
- If the I2C interface is not required, then uncomment #define U8X8_HAVE_HW_I2C in U8x8lib.h
(Background: Due to a problem in Wire.h, the I2C Arduino lib is always included)
Q: There is no visible output output. What is can be done?
- Check the wiring, see first part of this FAQ.
- Check the constructor. Does it fit to your display?
- Do not output a text at (0,0): The reference point for text is lower left, so
u8g2_DrawStr(&u8g2, 0, 0, “Hello world!”); will not display anything. Instead use
u8g2_DrawStr(&u8g2, 0, 20, “Hello world!”);
Q: Only a small fraction of the display is visible. Why?
A: With a "_1_" constructor, ensure to use the firstPage/nextPage loop.
Q: U8g2 output is corrupted. What are possible causes?
- Do not change the output inside the firstPage/nextPage loop:
Do *not* call digitalRead/analogRead inside the firstPage/nextPage loop.
Read any sensor values into a variable *before* firstPage() and use the
variable value inside the loop.
If the output includes unicode chars, use the UTF8 procedures.
Q: U8g2 is slow. How to improve speed?
A1: If there is sufficient RAM, use the F variant of the constructor (see the question
on F/1/2 above).
A2: Use hardware SPI or I2C communication. Software emulated SPI or I2C is much
slower (see the question on SW and HW SPI/I2C above)
A3: "firstPage/nextPage loop": Remove as much of code out of this loop. Try to
precalculate as much of possible before the loop is entered.
A4: "firstPage/nextPage loop": If the loop is still too slow, try to unroll the loop.
See the StateBufferLoop example:
https://github.com/olikraus/u8g2/blob/master/sys/arduino/u8g2_page_buffer/StateBufferLoop/StateBufferLoop.ino
A5: For SW I2C and AVR architectures: Uncomment
#define U8X8_USE_ARDUINO_AVR_SW_I2C_OPTIMIZATION
in U8x8lib.h. This will increase speed a lot for I2C on all AVR uC. However the I2C
bus is always driven by this implementation. Other I2C devices will not work on
the same pins.
A6: For HW I2C the default speed for some controllers is set 100KHz. However these
controller often work with higher speed (200KHz or 400KHz). Suggestion is
to test whether "u8g2.setBusClock(400000);" still works.
Q: Umlaut chars or other chars with a unicode value greater than 127 do not
appear on the displays. What is wrong?
A; Check the following:
Did you use drawUTF8() instead of drawStr()?
Did you enable UTF8 when using print() with enableUTF8Print()?
Does the font include the expected char? Fonts with a 'n' (numbers),
'u' (uppercase) or 'r' (restricted) at the end of the fontname do only
include glyphs with unicode lower than 128.
Q: How can I read a bitmap from SD card?
A: There is an example, which includes a function "drawFile" which reads a bitmap
from SD Card and writes the same to a u8g2 display:
Example:
https://github.com/olikraus/u8g2/blob/master/sys/arduino/u8g2_page_buffer/LoadFromSD/LoadFromSD.ino
The example also includes a function which writes to the SD card, but there is also
a commandline tool which converts PNG to the format which is accepted by "drawFile":
https://github.com/olikraus/u8g2/tree/master/tools/png2bin
Q: How can I generate my own font?
A: The font must be available in bdf file format. Then use bdfconv to generate
the font data. The font data can be pasted into an existing file of your project.
There is also a nice Windows Bitmap Font Editor "Fony" (http://hukka.ncn.fi/?fony)
which can export .bdf files. A copy of Fony 1.4.7 is available here:
https://github.com/olikraus/u8g2/tree/master/tools/font/fony
Q: Which commandline options are required for bdfconv?
A: "bdfconv -f 1 -m '32-255' -n fontname -o myfont.c myfont.bdf"
"-f 1" generates a u8g2 font.
"-m '32-255'" selects unicode 32 to 255. On Windows, please use double quotes: -m "32-255"
"-n fontname": This is the name of the font in C/C++/Ino files.
"-o myfont.c": The font array will be stored in this file.
"myfont.bdf": The input file with the font data (bdf format).
Q: Where do I find bdfconv?
A: A Windows executable is available here:
https://github.com/olikraus/u8g2/tree/master/tools/font/bdfconv
Use the Makefile in this directory to create a Linux binary.
Q: How can I use multiple SPI Displays?
A: For each additional display, separate CS (Chip select) is required.
There are two options for the RST (Reset) line:
Also use separate lines or use the same GPIO pin.
// Setup display1 and display2, both reset lines are connected to 4, execute display1.begin() first.
U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI display1(U8G2_R0, /*CLK*/ 18, /*MOSI*/ 23, /*CS*/ 16,/*DC*/ 17, /*RST*/ 4);
U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI display2(U8G2_R0, /*CLK*/ 18, /*MOSI*/ 23, /*CS*/ 15,/*DC*/ 17, /*RST*/ U8X8_PIN_NONE);
// Setup display1 and display2, separate reset lines
U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI display1(U8G2_R0, /*CLK*/ 18, /*MOSI*/ 23, /*CS*/ 16,/*DC*/ 17, /*RST*/ 4);
U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI display2(U8G2_R0, /*CLK*/ 18, /*MOSI*/ 23, /*CS*/ 15,/*DC*/ 17, /*RST*/ 5);
Ensure that the buffer is sent after printing with each display as follows.
display1.begin();
display2.begin();
...
display1.setCursor(64, 32);
display1.print("DISPLAY 1");
display1.sendBuffer();
display2.setCursor(64, 32);
display2.print("DISPLAY 2");
display2.sendBuffer();
Q: How can I send individual/special commands to my display.
A: The sequence is: Start transfer, send data and args, close transfer. Note that
this is not portable, because these commands are specific to the display controller.
The following C++/Arduino code will send one command with one argument to the
display:
u8x8_cad_StartTransfer(u8g2.getU8x8());
u8x8_cad_SendCmd( u8g2.getU8x8(), <display command>);
u8x8_cad_SendArg( u8g2.getU8x8(), <display-command-arg>);
u8x8_cad_EndTransfer(u8g2.getU8x8());

View File

@@ -0,0 +1,57 @@
Ideas for a grayscale library
Controller:
SSD132x 4 Bit, 16 Level
SSD1327 4 Bit, 16 Level Variant B/16H
SSD1327 4 Bit, 16 Level Variant B/16H
SSD1329 4 Bit, 16 Level Variant B/16H
UC1610 2 Bit, 4 Level Variant 4V
UC1611 4 Bit, 16 Level Variant A/16V
UC1617 2 Bit, 4 Level Variant 4H???
UC1638 2 Bit, 4 Level Variant 4V
ST75256 2 Bit, 4 Level Variant 4V
======================
Variant A:
Memory:
aaaabbbb
ccccdddd
aaaa: 0,0
bbbb: 0,1
cccc: 1, 0
dddd: 1,1
======================
Variant B:
Memory:
aaaabbbb
ccccdddd
aaaa: 0,0
bbbb: 1,0
cccc: 0, 1
dddd: 1,1
======================
Variant 4V:
Memory:
aabbccdd
eeffgghh
aa: 0,0
bb: 0,1
cc: 0,2
dd: 0,3
ee: 1,0
ff: 1,1
gg: 1,2
hh: 1,3

Binary file not shown.

View File

@@ -0,0 +1,58 @@
SSD1325 SSD1326 SSD1327 SSD1329
128 x 80 x 4 256 x 32 x 4 128 x 128 x 4 128 x 128 x 4
0x15 set col set col set col set col
0x23 gr acc - - -
0x24 draw rect - - -
0x25 copy - - -
0x26 scroll scroll scroll -
0x27 - - scroll -
0x2e end move end move end move -
0x2f start move start move start move -
0x75 set row set row set row set row
0x81 contrast contrast contrast contrast
0x82 - - - 2nd charge
0x84 current current nop -
0x85 current current nop -
0x86 current current nop -
0x87 current current -
0x90 - - - Icon ctl
0x91 - - - Icon current
0x92 - - - Icon current
0x93 - - - Icon on/off
0x94 - - - Icon all
0x95 - - - Icon blink
0x96 - - - Icon duty
0xa0 remap remap remap remap
0xa1 start line start line start line start line
0xa2 offset offset offset offset
0xa4 mode mode mode mode
..
0xa7 mode mode mode mode
0xa8 multiplex ratio multiplex ratio multiplex ratio multiplex ratio
0xab - - regulator -
0xad master config - - -
0xae disp. on disp. on disp. on disp. on
0xaf disp. off disp. off disp. on disp. on
0xb0 comp enable - - -
0xb1 phase len phase len phase len phase len
0xb2 row period frame freq nop frame freq
0xb3 div ratio [3] clock div [2] clock div clock div [2]
0xb4 comp level - - -
0xb5 - - GPIO -
0xb6 - - 2nd phase -
0xb7 - default gray - default gray
0xb8 gray level gray level gray level gray level
0xb9 - - linear LUT -
0xbb - 2nd charge nop 2nd charge
0xbc precharge precharge precharge precharge
0xbe comh volt comh volt comh volt comh volt
0xbf VSL - - -
0xd5 - - fn select B -
0xe3 nop - - nop
0xfd - cmd lock cmd lock cmd lock

View File

@@ -0,0 +1,110 @@
U8glib V2: Name and project goals
https://github.com/olikraus/u8g2
U8g2 = Universal 8bit Graphics
[U]niversal: Support for many displays ans development platforms
[8]bit: Initial focus had been 8 bit microcontroller systems
[g]raphics": U8g2 is a graphics library with focus on monochrome graphics displays
[2]: Second generation and successor of u8glib
U8glib V2 Goals
- Support for monochrome LCDs and OLEDs
- Focus on "monochrome"
- Low memory footprint
U8glib V2: Features and Limitations
- Full Memory Buffer
- 3-wire-SPI
- Support for Arduino Libraries SPI and TWI
- Unicode Support
Unicode plane 0 (Basic Multilingual Plane, BMP, glyphs with 0x0000-0xffff)
is fully supported.
Limitation: Unicode planes > 0 are not supported
- UTF-8 Support
2 and 3 byte sequences are detected and handled.
Limitation:
Behavior for sequences with more than 3 bytes is unknown.
- Large number of fonts
- Compilation speed improved (font data)
- "Text only" sub library: U8x8
- Hardware supported display flip
- Better hardware support: Tested with avr, esp8266 and sam architectures.
u8g vs. u8g2
Major Changes (Code rework required)
- The name of the include file has changed: Use
#include "U8g2lib.h"
- The native type for pixel coordinates has changed to u8g2_uint_t
Use the following line to redefine this at the beginning of your code
typedef u8g2_uint_t u8g_uint_t;
- Old Arduino IDE 00xx (before 1.00) is not supported any more.
ARDUINO macro must be >= 100
- begin() must be called (this was optional in U8glib)
- constructor contains name of communicaton interface and
also contains the display orientation as first argument
- u8g2.drawStr90 does not exist any more, use
void u8g2_SetFontDirection(u8g2_t *u8g2, uint8_t dir);
- "P" versions of the string functions are not yet implemented.
This includes drawStrP(), getStrWidthP(), etc
Use the print function with the F() macro instead.
- In U8glib font transparency was defined in the .begin() statement. This is now
handled by setFontMode().
- Screen rotation is handled by the constructor in u8g2
The functions undoRotation, setRot90, setRot180 and setRot270 are
replaced by the first argument of the constructor
- Screen scaling is not there in u8g2
It is completly removed, there are no corresponding function in u8g2
for undoScale() and setScale2x2().
- setColorEntry(), setHiColor(), setHiColorByRGB(), setRGB: Not supported any more
(u8g2 focus are monochrome displays, use Ucglib instead)
- getMode(): Is not available any more because there is only one monochrome mode.
- setDefaultForegroundColor(), setDefaultBackgroundColor() and
setDefaultMidColor() are not required any more. These functions do not
exist in U8g2. Use setDrawColor() instead.
- getFontLineSpacing() and setFontLineSpacingFactor() are not supported any more.
- getStrPixelWidth() is replaced by getStrWidth()
- setHardwareBackup() not supported any more. Might be implemented later
- Cursor functions are not available. This includes:
setCursorFont(), setCursorStyle(), setCursorPos(), setCursorColor(),
enableCursor(), disableCursor(), drawCursor()
- Virtual screen handling is not supported:
setVirtualScreenDimension(), addToVirtualScreen()
Minor Changes (Code update might be required)
- U8g2 drawTriangle() expects signed arguments (u8glib expects unsigned arguments)
- U8g2 has different font names. Some of the old font names are known to u8g2 and are
mapped automatically. If the font name is unknown, please choose a different font from the font list.
Change Notes (No code change required)
- sleepOn(), sleepOff(): supported, but better user setPowerSave()
- setColorIndex() and getColorIndex() are renamed to setDrawColor() and
getDrawColor(). The old names are still supported.
- getFontAscent() and getFontDescent() are renamed to getAscent() and getDescent()
The old names are still supported.
- Signal names are renamed in the constructor calls:
U8glib sck == U8g2 clock
U8glib mosi == U8g2 data
U8glib a0 == U8g2 dc
- getHeight() renamed to getDisplayHeight(), old name still exists
- getWidth() renamed to getDisplayWidth(), old name still exists

Binary file not shown.

View File

@@ -0,0 +1,89 @@
#define u8g2_logo_128x64_width 128
#define u8g2_logo_128x64_height 64
static unsigned char u8g2_logo_128x64_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3c, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3c, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x80, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3c, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcf, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3c, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x83, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x80, 0x07, 0xf8,
0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3c, 0x80, 0x07, 0xfc, 0x03, 0x1c, 0x00, 0x3e, 0x1c, 0xc0, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3c, 0x80, 0x07, 0xff, 0x07, 0x7f, 0x80, 0xff,
0x3f, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x80, 0x07, 0xff,
0x8f, 0xff, 0xc1, 0xff, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3c, 0x80, 0x87, 0xff, 0xdf, 0xff, 0xc1, 0xc3, 0x07, 0x7c, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3c, 0x80, 0x87, 0x0f, 0xfe, 0xff, 0xe3, 0x81,
0x03, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x80, 0xc7, 0x07,
0xfc, 0xe3, 0xe3, 0x81, 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3c, 0x80, 0xc7, 0x07, 0xf8, 0xc1, 0xe7, 0x81, 0x87, 0xff, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3c, 0x80, 0xc7, 0x03, 0xf0, 0x80, 0xe7, 0xc3,
0x87, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x80, 0xc7, 0x03,
0x70, 0x80, 0xc7, 0xe7, 0x83, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3c, 0x80, 0xc7, 0x03, 0x78, 0x80, 0xc7, 0xff, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3c, 0x80, 0xc7, 0x03, 0xf8, 0xc0, 0x87, 0xff,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x80, 0xc7, 0x07,
0xfc, 0xc1, 0xc7, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3c, 0xc0, 0x87, 0x0f, 0xfe, 0xff, 0xe3, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x78, 0xc0, 0x83, 0xff, 0xdf, 0xff, 0xe3, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf1, 0x03, 0xff,
0x8f, 0xff, 0xe1, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xf0, 0xff, 0x01, 0xfe, 0x0f, 0xff, 0xc0, 0xff, 0x0f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xe0, 0xff, 0x00, 0xfc, 0x03, 0x7c, 0xc0, 0xff,
0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0xf8,
0x01, 0x00, 0xe0, 0x01, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x1e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00,
0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x20, 0xf0, 0xc7, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xe0, 0xff, 0x0f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc0, 0xff,
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff,
0xff, 0xff, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0x24, 0x20, 0x00, 0x00, 0x08, 0x46, 0x02,
0x00, 0x80, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x6e, 0x6a, 0xc0,
0xa4, 0x48, 0x04, 0xaa, 0xac, 0x8c, 0xaa, 0xac, 0x00, 0x00, 0x00, 0x00,
0x6a, 0xa4, 0xaa, 0x20, 0xea, 0xa4, 0x64, 0x66, 0xaa, 0x46, 0x4a, 0x8a,
0x00, 0x00, 0x00, 0x00, 0x4c, 0xa4, 0xaa, 0x20, 0xaa, 0xa2, 0x44, 0x2a,
0xaa, 0x28, 0xaa, 0x4c, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xa8, 0x6c, 0xc4,
0xa4, 0x42, 0xee, 0x2a, 0xcc, 0x26, 0x6c, 0xe8, 0x00, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00 };

View File

@@ -0,0 +1,59 @@
#define u8g2_logo_97x51_width 97
#define u8g2_logo_97x51_height 51
static unsigned char u8g2_logo_97x51_bits[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3c, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00,
0x00, 0x00, 0x3c, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
0x03, 0x00, 0x00, 0x3c, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0x03, 0x00, 0x00, 0x3c, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0xcf, 0x07, 0x00, 0x00, 0x3c, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x83, 0x07, 0x00, 0x00, 0x3c, 0x80, 0x07, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0x81, 0x07, 0x00, 0x00, 0x3c, 0x80, 0x07, 0xfc, 0x03,
0x1c, 0x00, 0x3e, 0x1c, 0xc0, 0x03, 0x00, 0x00, 0x3c, 0x80, 0x07, 0xff,
0x07, 0x7f, 0x80, 0xff, 0x3f, 0xe0, 0x01, 0x00, 0x00, 0x3c, 0x80, 0x07,
0xff, 0x8f, 0xff, 0xc1, 0xff, 0x3f, 0xf0, 0x00, 0x00, 0x00, 0x3c, 0x80,
0x87, 0xff, 0xdf, 0xff, 0xc1, 0xc3, 0x07, 0x7c, 0x00, 0x00, 0x00, 0x3c,
0x80, 0x87, 0x0f, 0xfe, 0xff, 0xe3, 0x81, 0x03, 0x1e, 0x00, 0x00, 0x00,
0x3c, 0x80, 0xc7, 0x07, 0xfc, 0xe3, 0xe3, 0x81, 0x07, 0x0f, 0x00, 0x00,
0x00, 0x3c, 0x80, 0xc7, 0x07, 0xf8, 0xc1, 0xe7, 0x81, 0x87, 0xff, 0x07,
0x00, 0x00, 0x3c, 0x80, 0xc7, 0x03, 0xf0, 0x80, 0xe7, 0xc3, 0x87, 0xff,
0x07, 0x00, 0x00, 0x3c, 0x80, 0xc7, 0x03, 0x70, 0x80, 0xc7, 0xe7, 0x83,
0xff, 0x07, 0x00, 0x00, 0x3c, 0x80, 0xc7, 0x03, 0x78, 0x80, 0xc7, 0xff,
0x03, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x80, 0xc7, 0x03, 0xf8, 0xc0, 0x87,
0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x80, 0xc7, 0x07, 0xfc, 0xc1,
0xc7, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xc0, 0x87, 0x0f, 0xfe,
0xff, 0xe3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xc0, 0x83, 0xff,
0xdf, 0xff, 0xe3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf1, 0x03,
0xff, 0x8f, 0xff, 0xe1, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff,
0x01, 0xfe, 0x0f, 0xff, 0xc0, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xe0,
0xff, 0x00, 0xfc, 0x03, 0x7c, 0xc0, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x80, 0x3f, 0x00, 0xf8, 0x01, 0x00, 0xe0, 0x01, 0x1e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x1e, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x1e, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xf0, 0xc7, 0x0f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xe0, 0xff,
0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc0,
0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff,
0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff,
0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x24, 0x20, 0x00,
0x00, 0x08, 0x46, 0x02, 0x00, 0x80, 0xc0, 0x40, 0x00, 0x0c, 0x6e, 0x6a,
0xc0, 0xa4, 0x48, 0x04, 0xaa, 0xac, 0x8c, 0xaa, 0xac, 0x00, 0x6a, 0xa4,
0xaa, 0x20, 0xea, 0xa4, 0x64, 0x66, 0xaa, 0x46, 0x4a, 0x8a, 0x00, 0x4c,
0xa4, 0xaa, 0x20, 0xaa, 0xa2, 0x44, 0x2a, 0xaa, 0x28, 0xaa, 0x4c, 0x00,
0xe8, 0xa8, 0x6c, 0xc4, 0xa4, 0x42, 0xee, 0x2a, 0xcc, 0x26, 0x6c, 0xe8,
0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00 };

Binary file not shown.

After

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 KiB