olikraus / u8g2

U8glib library for monochrome displays, version 2
Other
4.93k stars 1.03k forks source link

Support for GP1294ai Display #2213

Open StephiB opened 1 year ago

StephiB commented 1 year ago

Is it possible to add the GP1294AI VFD. I've tried to do it by myself but for some reason I can't get it to work. Datasheet: https://drive.google.com/file/d/1AG-xEty9XNawlXCaBtnWZ6uW1tDV3I1M/view?usp=drivesdk

Thanks in advance

olikraus commented 1 year ago

Can you do a test with the other GP12xx constructors? https://github.com/olikraus/u8g2/wiki/u8g2setupcpp#gp1287ai-256x50

What will you see? Which constructor works best? Could you sent an image?

StephiB commented 1 year ago

No function at all, the initial setting of the Gp1247/87 seems to be totally different. Gp1247ai : https://drive.google.com/file/d/1AvN5UNpLIzMM8QzgwikIQiSCDImiOtRc/view?usp=drivesdk Gp1287bi: https://drive.google.com/file/d/1AvAbVk_QmEUBSvrYXAyUfUIyaGBQaEKs/view?usp=drivesdk Gp1294ai: https://drive.google.com/file/d/1AG-xEty9XNawlXCaBtnWZ6uW1tDV3I1M/view?usp=drivesdk

olikraus commented 1 year ago

The main problem is: I am not the author of the GP12x7 displays... let's see...

olikraus commented 1 year ago

I had a deeper look into the specification, but to me it looks like that the documentation is kind of incomplete, for example the description for the 0xe0 cmd seems to be missing. Second problem is, that I am not able to read far east languages.

Maybe @izilzty can give better comments here...

izilzty commented 1 year ago

Hi olikraus, it looks like GP1294 doesn't use 0x0e cmd. I think only needs to modify the init_seq and display_info of GP1287 to make it compatible with GP1294. I'll try to add support for GP1294, if I have time this week.

The datasheet uploaded by @StephiB is not from Futaba, it should be made by someone else, because the display is a custom model, so there is no public datasheet, but the commands in it can still be referred to.

olikraus commented 1 year ago

I'll try to add support for GP1294, if I have time this week.

Thanks, if you could do the init sequence suggestion, then I can do the remaining code changes.

izilzty commented 1 year ago

Fortunately, there are few differences between GP1294 and GP1287, I have finished modifying the code and simply tested it on Arduino & STM32, everything looks fine. I'll open a pull request later.

IMG_0967

The init sequence of GP1294 is basically the same as that of GP1287, except for the commands 0xA0 (Dimming level Setting), 0x55 (Memory Map Clear) and 0xF0 (Display Data Write).

medtech1 commented 1 year ago

I can't express how much I'd love the GP1294 to be added to the list of supported displays. I have two of them that sellers sent me in error, that I can't get anything to work with.

The project I am trying is a VFD clock that works with the GP1287... but it does not work with the GP1294 (using the ESP code plus the u8g2 libraries and selecting a GP1287, I get nothing on the display at all.. So I'm really glad to see this brought up.

medtech1 commented 1 year ago

btw, if it helps.. I found some documentation on the GP1294AI and had it translated using google (and copied the html to my own site):

https://redhat.systems/GP1294AI%20256x48%20VFD%20Display%20Module%20%28UNL-200AP-C%29%20-%20Jiali%20Chuang%20EDA%20Open%20Source%20Hardware%20Platform.htm

Also, I noted there is some physical differences between the GP1287 and 1294... I noticed an added switching diode (A7W) on the 1294 just below R11 and to the left of the four capacitors.

izilzty commented 1 year ago

Hi medtech1, This is an Arduino library I created while testing the PR#2222, which includes support for the GP1294AI. u8g2_arduino_2.35.2.zip You need to remove the current U8g2 library and install this zip library. But it should be noted that it is unofficial, when the official version supports GP1294AI, you can delete this library and reinstall the official version.

GP1294AI supports these constructors:

U8G2_GP1294AI_256X48_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/10, /* dc=*/U8X8_PIN_NONE, /* reset=*/8);
U8G2_GP1294AI_256X48_2_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/10, /* dc=*/U8X8_PIN_NONE, /* reset=*/8);
U8G2_GP1294AI_256X48_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/10, /* dc=*/U8X8_PIN_NONE, /* reset=*/8);

U8G2_GP1294AI_256X48_1_2ND_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/10, /* dc=*/U8X8_PIN_NONE, /* reset=*/8);
U8G2_GP1294AI_256X48_2_2ND_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/10, /* dc=*/U8X8_PIN_NONE, /* reset=*/8);
U8G2_GP1294AI_256X48_F_2ND_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/10, /* dc=*/U8X8_PIN_NONE, /* reset=*/8);

U8G2_GP1294AI_256X48_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/13, /* data=*/11, /* cs=*/10, /* dc=*/U8X8_PIN_NONE, /* reset=*/8);
U8G2_GP1294AI_256X48_2_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/13, /* data=*/11, /* cs=*/10, /* dc=*/U8X8_PIN_NONE, /* reset=*/8);
U8G2_GP1294AI_256X48_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/13, /* data=*/11, /* cs=*/10, /* dc=*/U8X8_PIN_NONE, /* reset=*/8);

U8X8_GP1294AI_256X48_4W_HW_SPI u8x8(/* cs=*/10, /* dc=*/U8X8_PIN_NONE, /* reset=*/8);
U8X8_GP1294AI_256X48_2ND_4W_HW_SPI u8x8(/* cs=*/10, /* dc=*/U8X8_PIN_NONE, /* reset=*/8);
U8X8_GP1294AI_256X48_4W_SW_SPI u8x8(/* clock=*/13, /* data=*/11, /* cs=*/10, /* dc=*/U8X8_PIN_NONE, /* reset=*/8);
medtech1 commented 1 year ago

Hi.. thank you!

In the code I was using this line for the GP1287

U8X8_GP1287AI_256X50_4W_SW_SPI u8x8(/ clock=/ 0, / data=/ 2, / cs=/ 14, / dc=/ 4, / reset=/16);

I think this is the equiv for the GP1294: U8X8_GP1294AI_256X48_4W_SW_SPI u8x8(/ clock=/13, / data=/11, / cs=/10, / dc=/U8X8_PIN_NONE, / reset=/8);

I have to read the docs to see if the change in numbers is GPIO pin?

Thanks Michelle

On Tue, Jul 11, 2023, at 6:42 PM, izilzty wrote:

Hi medtech1, This is an Arduino library I created while testing the PR#2222 https://github.com/olikraus/u8g2/pull/2222, which includes support for the GP1294AI. u8g2_arduino_2.35.2.zip https://github.com/olikraus/u8g2/files/12022405/u8g2_arduino_2.35.2.zip You need to remove the current U8g2 library and install this zip library. But it should be noted that it is unofficial, when the official version supports GP1294AI, you can delete this library and reinstall the official version.

GP1294AI supports these constructors:

`U8G2_GP1294AI_256X48_1_4W_HW_SPI u8g2(U8G2_R0, / cs=/10, / dc=/U8X8_PIN_NONE, / reset=/8); U8G2_GP1294AI_256X48_2_4W_HW_SPI u8g2(U8G2_R0, / cs=/10, / dc=/U8X8_PIN_NONE, / reset=/8); U8G2_GP1294AI_256X48_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/10, / dc=/U8X8_PIN_NONE, / reset=/8);

U8G2_GP1294AI_256X48_1_2ND_4W_HW_SPI u8g2(U8G2_R0, / cs=/10, / dc=/U8X8_PIN_NONE, / reset=/8); U8G2_GP1294AI_256X48_2_2ND_4W_HW_SPI u8g2(U8G2_R0, / cs=/10, / dc=/U8X8_PIN_NONE, / reset=/8); U8G2_GP1294AI_256X48_F_2ND_4W_HW_SPI u8g2(U8G2_R0, / cs=/10, / dc=/U8X8_PIN_NONE, / reset=/8);

U8G2_GP1294AI_256X48_1_4W_SW_SPI u8g2(U8G2_R0, / clock=/13, / data=/11, / cs=/10, / dc=/U8X8_PIN_NONE, / reset=/8); U8G2_GP1294AI_256X48_2_4W_SW_SPI u8g2(U8G2_R0, / clock=/13, / data=/11, / cs=/10, / dc=/U8X8_PIN_NONE, / reset=/8); U8G2_GP1294AI_256X48_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/13, / data=/11, / cs=/10, / dc=/U8X8_PIN_NONE, / reset=/8);

U8X8_GP1294AI_256X48_4W_HW_SPI u8x8(/ cs=/10, / dc=/U8X8_PIN_NONE, / reset=/8); U8X8_GP1294AI_256X48_2ND_4W_HW_SPI u8x8(/ cs=/10, / dc=/U8X8_PIN_NONE, / reset=/8); U8X8_GP1294AI_256X48_4W_SW_SPI u8x8(/ clock=/13, / data=/11, / cs=/10, / dc=/U8X8_PIN_NONE, / reset=/8); `

— Reply to this email directly, view it on GitHub https://github.com/olikraus/u8g2/issues/2213#issuecomment-1631687348, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADTWN2U2ID4SPJIWVFJSANDXPXXHVANCNFSM6AAAAAAZ2TTKJU. You are receiving this because you commented.Message ID: @.***>

izilzty commented 1 year ago

Just like other constructor, you only need to change the pin number to the actual use. For example, you can use:

U8X8_GP1294AI_256X48_4W_SW_SPI u8x8(/* clock=*/ 0, /* data=*/ 2, /* cs=*/ 14, /* dc=*/ U8X8_PIN_NONE, /* reset=*/16);

GP1287, GP1247 and GP1294 did not use dc pin, using U8X8_PIN_NONE instead of pin number.

medtech1 commented 1 year ago

Hey you rock.. it worked.

Thank you!!

On Tue, Jul 11, 2023, at 8:08 PM, izilzty wrote:

Just like other constructor, you only need to change the pin number to the actual use. For example, you can use:

U8X8_GP1294AI_256X48_4W_SW_SPI u8x8(/* clock=*/ 0, /* data=*/ 2, /* cs=*/ 14, /* dc=*/ U8X8_PIN_NONE, /* reset=*/16); GP1287, GP1247 and GP1294 did not use dc pin, using U8X8_PIN_NONE instead of pin number.

— Reply to this email directly, view it on GitHub https://github.com/olikraus/u8g2/issues/2213#issuecomment-1631742339, or unsubscribe https://github.com/notifications/unsubscribe-auth/ADTWN2WWBEYJVQ2YHJ2UXW3XPYBJ3ANCNFSM6AAAAAAZ2TTKJU. You are receiving this because you commented.Message ID: @.***>

medtech1 commented 1 year ago

Hey izilzty How can I get your email address?

izilzty commented 1 year ago

I don't know how to find the email address on github. Anyway, my email address is izilzty@outlook.com

olikraus commented 1 year ago

I am impressed... looks like all is solved.... wow... and there is also a PR. Impressive.

medtech1 commented 1 year ago

Yes, and thank you all.

olikraus commented 1 year ago

Thanks again for the PR. Excellent work :-) I have created beta release 2.35.3

You can download the latest U8g2 beta release from here: https://github.com/olikraus/U8g2_Arduino/archive/master.zip Arduino IDE:

  1. Remove the existing U8g2_Arduino library (https://stackoverflow.com/questions/16752806/how-do-i-remove-a-library-from-the-arduino-environment)
  2. Install the U8g2_Arduino Zip file via Arduino IDE, add zip library menu (https://www.arduino.cc/en/Guide/Libraries).

PlatformIO: platformio.ini (https://docs.platformio.org/en/latest/projectconf/section_env_library.html#lib-deps) should include

lib_deps =
  u8g2=https://github.com/olikraus/U8g2_Arduino/archive/master.zip
4b616c69 commented 1 year ago

I'm currently having issues with this too and honestly I do not know how to fix this. I'm following this guide here: https://www.instructables.com/Simple-ESP8266-NTP-Clock-on-VFD-Display-VFD256x50-/ The VFD doesn't even power on. Is the pinout for GP1294AI much different than the GP1287? And yes I am using the new library you provided.

medtech1 commented 1 year ago

The pin-out on the NTP clock you are working with (per the URL you provided) is the same for both the GP1287 or GP1294:

Conn Pin Color Destination(ESP) CN7 1 Orange 3v3 (3.3v) CN7 2 Green D3 CN7 3 Yellow D5 CN7 4 Violet D4 CN7 5 Grey D0

CN6 1 Black GND CN6 2 White VIN (5v)

You just need to use:

For the GP1287AI use:

U8X8_GP1287AI_256X50_4W_SW_SPI u8x8(/* clock=*/ 0, /* data=*/ 2, /* cs=*/ 14, /* dc=*/ 4, /* reset=*/16);

For the GP1294AI use:

U8X8_GP1294AI_256X48_4W_SW_SPI u8x8(/* clock=*/ 0, /* data=*/ 2, /* cs=*/ 14, /* dc=*/ U8X8_PIN_NONE, /* reset=*/16);

Also, once you program the ESP8266, pull out the USB cable from it and use just the 5v DC (min 1 amp) barrel connector (center positive) to provide power to the VFD. You do not need to feed the ESP with power as shown in the url you provided. The VFD will provide power to the ESP8266 through the jumper wires.

Like this:

http://redhat.systems/vfd/vfd-wiring.png

btw, if the libraries aren't configured correctly it won't power on either. For instance, trying the GP1287AI library/constructs with the GP1294AI will just result in a non-responsive VFD.. it won't light up or anything. My GP1294AI worked right off using the construct above after removing the old library (that did not have GP1294 support) and installing the new one (with GP1294 support).

ccoenen commented 10 months ago

I did not see a pin mapping anywhere and duckduckgo brought me here, so I'm just mentioning it for future search engine enthusiasts:

Pins from the top to the bottom taken from this datasheet:

CN7 1: FILMENT_EN (Filament enable, active HIGH)
CN7 2: SPI CLOCK
CN7 3: SPI Chip Select (active LOW / CSN)
CN7 4: SPI DATA (COPI, LSB First)
CN7 5: RESET (active LOW)
CN7 6: Ground

CN6 1: Ground
CN6 2: 5V output
CN6 3: AINL (audio in left channel)
CN6 4: AINR (audio in right channel)
CN6 5: LII_SW (Light sensor, GL5506 Pull down)
CN6 6: Ground
ccoenen commented 10 months ago

RESET (grey in the instructable) was tied to D0, which did not work for me. I tied it to 3V3 (or probably any "HIGH" level) and it worked beautifully. Basically, all you need to connect is

Additionally, to have the VFD supply your microcontroller, you can use CN6 pin 2 (5V output).

olikraus commented 10 months ago

SPI Chip Select

The chip select usually will put the SPI communication state machine into a defined state. So yes, usually it is required.

Thanks for the updates and notes :-)

duckduckgo brought me here

So, I hope you solved your problems with the help of u8g2

ccoenen commented 9 months ago

For now, I'm just playing around with an interesting display. But without u8g2, this would have been much more work. So: Thanks, everyone! :-)

Niphoria commented 9 months ago

Im also having issues getting this to run on the Pico W and at this point im kinda frustrated and im not sure if its a faulty module or me messing up constantly - anyway i hope someone can help me here and point out where i messed up

This is how i have wired the module up:

VFD PICO Pin 1 Pin 20 (3.3V High) Pin 2 Pin 4 (SCK) Pin 3 Pin 2 (CSn) Pin 4 Pin 5 (TX) Pin 5 Pin 20 (3.3V High) Pin 6 Pin 38 (GND)

And this is the code im using:


#include <sstream>
#include <stdio.h>

//#include "hardware/dma.h"
//#include "hardware/i2c.h"
#include "hardware/spi.h"
//#include "pico/multicore.h"
#include "pico/stdlib.h"
#include "pico/time.h"
#include "pico/util/queue.h"

#include "pico/cyw43_arch.h"

#include <u8g2.h>
//#include "Libraries/u8g2functions.h"

u8g2_t u8g2;
int displayWidth = 256;
int displayHeight = 48;

// ADD THE INIT DISPLAY 
#define PIN_RST 15

#define SPI_PORT spi0
#define PIN_MISO 1
#define PIN_CS 2
#define PIN_SCK 4
#define PIN_MOSI 5
#define SPI_SPEED 4000 * 1000

// Not needed i guess
#define PIN_DC 20

uint8_t u8x8_byte_pico_hw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) {
  uint8_t *data;
  switch (msg) {
  case U8X8_MSG_BYTE_SEND:
    data = (uint8_t *)arg_ptr;
    spi_write_blocking(SPI_PORT, data, arg_int);
    break;
  case U8X8_MSG_BYTE_INIT:
    u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level);
    break;
  case U8X8_MSG_BYTE_SET_DC:
    u8x8_gpio_SetDC(u8x8, arg_int);
    break;
  case U8X8_MSG_BYTE_START_TRANSFER:
    u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level);
    u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO,u8x8->display_info->post_chip_enable_wait_ns, NULL);
    break;
  case U8X8_MSG_BYTE_END_TRANSFER:
    u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO,
                            u8x8->display_info->pre_chip_disable_wait_ns, NULL);
    u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level);
    break;
  default:
    return 0;
  }
  return 1;
}

uint8_t u8x8_gpio_and_delay_pico(u8x8_t *u8x8, uint8_t msg,uint8_t arg_int, void *arg_ptr) {
  switch (msg) {
  case U8X8_MSG_GPIO_AND_DELAY_INIT: 
    spi_init(SPI_PORT, SPI_SPEED);
    gpio_set_function(PIN_CS, GPIO_FUNC_SIO);
    gpio_set_function(PIN_SCK, GPIO_FUNC_SPI);
    gpio_set_function(PIN_MOSI, GPIO_FUNC_SPI);
    gpio_init(PIN_RST);
    gpio_init(PIN_DC);
    gpio_init(PIN_CS);
    gpio_set_dir(PIN_RST, GPIO_OUT);
    gpio_set_dir(PIN_DC, GPIO_OUT);
    gpio_set_dir(PIN_CS, GPIO_OUT);
    gpio_put(PIN_RST, 1);
    gpio_put(PIN_CS, 1);
    gpio_put(PIN_DC, 0);
    break;                  
  case U8X8_MSG_DELAY_NANO: // delay arg_int * 1 nano second
    sleep_us(arg_int); // 1000 times slower, though generally fine in practice given rp2040 has no `sleep_ns()`
    break;
  case U8X8_MSG_DELAY_100NANO: // delay arg_int * 100 nano seconds
    sleep_us(arg_int);
    break;
  case U8X8_MSG_DELAY_10MICRO: // delay arg_int * 10 micro seconds
    sleep_us(arg_int * 10);
    break;
  case U8X8_MSG_DELAY_MILLI: // delay arg_int * 1 milli second
    sleep_ms(arg_int);
    break;
  case U8X8_MSG_GPIO_CS: // CS (chip select) pin: Output level in arg_int
    gpio_put(PIN_CS, arg_int);
    break;
  case U8X8_MSG_GPIO_DC: // DC (data/cmd, A0, register select) pin: Output level
    gpio_put(PIN_DC, arg_int);
    break;
  case U8X8_MSG_GPIO_RESET: // Reset pin: Output level in arg_int
    gpio_put(PIN_RST, arg_int);  // printf("U8X8_MSG_GPIO_RESET %d\n", arg_int);
    break;
  default:
    u8x8_SetGPIOResult(u8x8, 1); // default return value
    break;
  }
  return 1;
}

void draw_display() {
    char hey[12] = "Hello world";
    u8g2_ClearBuffer(&u8g2);
        u8g2_ClearDisplay(&u8g2);
    u8g2_SetDrawColor(&u8g2, 1);
        u8g2_SetFont(&u8g2, u8g2_font_t0_11_te);
        u8g2_DrawStr(&u8g2, 10, 10, hey);
        u8g2_UpdateDisplay(&u8g2);
}

void display_sequence(){
  u8g2_Setup_gp1294ai_256x48_f(&u8g2, U8G2_R0, u8x8_byte_pico_hw_spi, u8x8_gpio_and_delay_pico);
  u8g2_InitDisplay(&u8g2); // send init sequence to the display, display is in sleep mode after this,
  u8g2_SetPowerSave(&u8g2, 0); 
  draw_display();
}

int main()
{
    stdio_init_all;
    sleep_ms(1000);

    // Need to initialize the WIFI Module for the LED to work
    if (cyw43_arch_init() != 0)
    {
        printf("WIFI Module Failed!");
    }

    //multicore_launch_core1(display_core);

    while(true)
    {
        //display_sequence();
        printf("MEOW\n");
        sleep_ms(1000);
        cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, true);
        sleep_ms(1000);
        cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, false);
    }
};
izilzty commented 9 months ago

Hi Niphoria, I have no experience with Pico, but I think it might be necessary to set the polarity and phase of the SPI. You can try adding the following code after spi_init(SPI_PORT, SPI_SPEED);

spi_set_format(SPI_PORT, 8, SPI_CPOL_1, SPI_CPHA_1, SPI_MSB_FIRST); //SPI Mode 3

And check the VFD FILMENT_EN and RESET pins, they seem to be connected to the DC pins, which is incorrect. You need to make sure FILMENT_EN is high and connect RESET to the PIN_RST pin of Pico that you defined.

If FILMENT_EN is low, the filament will be turned off and nothing will be displayed on the screen. This is usually used to save power. If RESET is low, the screen enters reset state

Niphoria commented 9 months ago

Hi izilzty, I applied your changes but sadly there is no sign of life on the VFD - is there any way i can test if the VFD module is even alive ? I have a power supply that can go up to 19V so i could apply it to the VFD display directly but i dont know if that would even be enough.

here are my code changes


#include <sstream>
#include <stdio.h>

//#include "hardware/dma.h"
//#include "hardware/i2c.h"
#include "hardware/spi.h"
//#include "pico/multicore.h"
#include "pico/stdlib.h"
#include "pico/time.h"
#include "pico/util/queue.h"

#include "pico/cyw43_arch.h"

#include <u8g2.h>
//#include "Libraries/u8g2functions.h"

u8g2_t u8g2;
int displayWidth = 256;
int displayHeight = 48;

// ADD THE INIT DISPLAY 
#define PIN_RST 22

#define SPI_PORT spi0
#define PIN_MISO 1
#define PIN_CS 2
#define PIN_SCK 4
#define PIN_MOSI 5
#define SPI_SPEED 4000 * 1000

// Not needed i guess
#define PIN_DC 20

//////////////////////////////////
// filament
#define FILAMENT 9
//////////////////////////////////

uint8_t u8x8_byte_pico_hw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) {
  uint8_t *data;
  switch (msg) {
  case U8X8_MSG_BYTE_SEND:
    data = (uint8_t *)arg_ptr;
    spi_write_blocking(SPI_PORT, data, arg_int);
    break;
  case U8X8_MSG_BYTE_INIT:
    u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level);
    break;
  case U8X8_MSG_BYTE_SET_DC:
    u8x8_gpio_SetDC(u8x8, arg_int);
    break;
  case U8X8_MSG_BYTE_START_TRANSFER:
    u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level);
    u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO,u8x8->display_info->post_chip_enable_wait_ns, NULL);
    break;
  case U8X8_MSG_BYTE_END_TRANSFER:
    u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO,
                            u8x8->display_info->pre_chip_disable_wait_ns, NULL);
    u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level);
    break;
  default:
    return 0;
  }
  return 1;
}

uint8_t u8x8_gpio_and_delay_pico(u8x8_t *u8x8, uint8_t msg,uint8_t arg_int, void *arg_ptr) {
  switch (msg) {
  case U8X8_MSG_GPIO_AND_DELAY_INIT: 
    spi_init(SPI_PORT, SPI_SPEED);
    //////////////////////////////////
    spi_set_format(SPI_PORT, 8, SPI_CPOL_1, SPI_CPHA_1, SPI_MSB_FIRST); //SPI Mode 3
    //////////////////////////////////
    gpio_set_function(PIN_CS, GPIO_FUNC_SIO);
    gpio_set_function(PIN_SCK, GPIO_FUNC_SPI);
    gpio_set_function(PIN_MOSI, GPIO_FUNC_SPI);
    gpio_init(PIN_RST);
    gpio_init(PIN_DC);
    gpio_init(PIN_CS);
    gpio_set_dir(PIN_RST, GPIO_OUT);
    gpio_set_dir(PIN_DC, GPIO_OUT);
    gpio_set_dir(PIN_CS, GPIO_OUT);
    gpio_put(PIN_RST, 1);
    gpio_put(PIN_CS, 1);
    gpio_put(PIN_DC, 0);
    break;                  
  case U8X8_MSG_DELAY_NANO: // delay arg_int * 1 nano second
    sleep_us(arg_int); // 1000 times slower, though generally fine in practice given rp2040 has no `sleep_ns()`
    break;
  case U8X8_MSG_DELAY_100NANO: // delay arg_int * 100 nano seconds
    sleep_us(arg_int);
    break;
  case U8X8_MSG_DELAY_10MICRO: // delay arg_int * 10 micro seconds
    sleep_us(arg_int * 10);
    break;
  case U8X8_MSG_DELAY_MILLI: // delay arg_int * 1 milli second
    sleep_ms(arg_int);
    break;
  case U8X8_MSG_GPIO_CS: // CS (chip select) pin: Output level in arg_int
    gpio_put(PIN_CS, arg_int);
    break;
  case U8X8_MSG_GPIO_DC: // DC (data/cmd, A0, register select) pin: Output level
    gpio_put(PIN_DC, arg_int);
    break;
  case U8X8_MSG_GPIO_RESET: // Reset pin: Output level in arg_int
    gpio_put(PIN_RST, arg_int);  // printf("U8X8_MSG_GPIO_RESET %d\n", arg_int);
    break;
  default:
    u8x8_SetGPIOResult(u8x8, 1); // default return value
    break;
  }
  return 1;
}

void draw_display() {
    char hey[12] = "Hello world";
    u8g2_ClearBuffer(&u8g2);
        u8g2_ClearDisplay(&u8g2);
    u8g2_SetDrawColor(&u8g2, 1);
        u8g2_SetFont(&u8g2, u8g2_font_t0_11_te);
        u8g2_DrawStr(&u8g2, 10, 10, hey);
        u8g2_UpdateDisplay(&u8g2);
}

void display_sequence(){
  u8g2_Setup_gp1294ai_256x48_f(&u8g2, U8G2_R0, u8x8_byte_pico_hw_spi, u8x8_gpio_and_delay_pico);
  u8g2_InitDisplay(&u8g2); // send init sequence to the display, display is in sleep mode after this,
  u8g2_SetPowerSave(&u8g2, 0); 
  draw_display();
}

int main()
{
    stdio_init_all;
    sleep_ms(1000);

    // Need to initialize the WIFI Module for the LED to work
    if (cyw43_arch_init() != 0)
    {
        printf("WIFI Module Failed!");
    }

    //multicore_launch_core1(display_core);

    //////////////////////////////////
    gpio_init(FILAMENT);
    gpio_set_dir(FILAMENT, GPIO_OUT);
    gpio_put(FILAMENT, 1);
    //////////////////////////////////
    display_sequence();

    while(true)
    {

        printf("MEOW\n");
        sleep_ms(1000);
        cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, true);
        sleep_ms(1000);
        cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, false);
    }
};
izilzty commented 9 months ago

After the program runs, if the filament in the display is dark red, it means that the power supply and FILMENT_EN pin are correct, and you may need to check the SPI wiring and program.

If you are not sure the display is alive, you can try running the example program using a 3.3V Arduino board, the example program on the Arduino board should be correct and you can concentrate on troubleshooting hardware issues.

power-dodge commented 9 months ago

Helo,

I'm trying in vain to get this display to work with an ESP32 board. Use Arduino IDE to create programs. I think I'm connecting it incorrectly. I have the following board:

https://mischianti.org/2021/02/17/doit-esp32-dev-kit-v1-high-resolution-pinout-and-specs/

I haven't even managed to create a character yet. U8G2 is master installed

izilzty commented 9 months ago

Hi, I have this ESP32 board too, maybe you should check the wiring again or try this example:

Wiring:

ESP32 VFD Board
32 FILMENT_EN
18 CLOCK
25 CHIPSELECT
23 DATA
33 RESET
GND GND

Please connect the power supply of the VFD module and ESP32 by yourself, because our boards may be different.

Code:

/*

  U8g2Logo.ino

  Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)

  Copyright (c) 2016, olikraus@gmail.com
  All rights reserved.

  Redistribution and use in source and binary forms, with or without modification, 
  are permitted provided that the following conditions are met:

  * Redistributions of source code must retain the above copyright notice, this list 
    of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright notice, this 
    list of conditions and the following disclaimer in the documentation and/or other 
    materials provided with the distribution.

  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  

*/

#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif

/*
  U8g2lib Example Overview:
    Frame Buffer Examples: clearBuffer/sendBuffer. Fast, but may not work with all Arduino boards because of RAM consumption
    Page Buffer Examples: firstPage/nextPage. Less RAM usage, should work with all Arduino boards.
    U8x8 Text Only Example: No RAM usage, direct communication with display controller. No graphics, 8x8 Text only.

  This is a frame buffer example.    
*/

// Please UNCOMMENT one of the contructor lines below
// U8g2 Contructor List (Frame Buffer)
// The complete list is available here: https://github.com/olikraus/u8g2/wiki/u8g2setupcpp
// Please update the pin numbers according to your setup. Use U8X8_PIN_NONE if the reset pin is not connected

// U8G2_GP1294AI_256X48_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/25, /* dc=*/U8X8_PIN_NONE, /* reset=*/33);
U8G2_GP1294AI_256X48_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/18, /* data=*/23, /* cs=*/25, /* dc=*/U8X8_PIN_NONE, /* reset=*/33);

// End of constructor list

//#define MINI_LOGO

void setup(void) {
  u8g2.begin();

  pinMode(32, OUTPUT);
  digitalWrite(32, HIGH); // Filament Enable
  // digitalWrite(32, LOW); // Filament Disable

  pinMode(2, OUTPUT);
  digitalWrite(2, HIGH); // Turn on LED on board
}

void drawLogo(void)
{
    u8g2.setFontMode(1);    // Transparent
#ifdef MINI_LOGO

    u8g2.setFontDirection(0);
    u8g2.setFont(u8g2_font_inb16_mf);
    u8g2.drawStr(0, 22, "U");

    u8g2.setFontDirection(1);
    u8g2.setFont(u8g2_font_inb19_mn);
    u8g2.drawStr(14,8,"8");

    u8g2.setFontDirection(0);
    u8g2.setFont(u8g2_font_inb16_mf);
    u8g2.drawStr(36,22,"g");
    u8g2.drawStr(48,22,"\xb2");

    u8g2.drawHLine(2, 25, 34);
    u8g2.drawHLine(3, 26, 34);
    u8g2.drawVLine(32, 22, 12);
    u8g2.drawVLine(33, 23, 12);
#else

    u8g2.setFontDirection(0);
    u8g2.setFont(u8g2_font_inb24_mf);
    u8g2.drawStr(0, 30, "U");

    u8g2.setFontDirection(1);
    u8g2.setFont(u8g2_font_inb30_mn);
    u8g2.drawStr(21,8,"8");

    u8g2.setFontDirection(0);
    u8g2.setFont(u8g2_font_inb24_mf);
    u8g2.drawStr(51,30,"g");
    u8g2.drawStr(67,30,"\xb2");

    u8g2.drawHLine(2, 35, 47);
    u8g2.drawHLine(3, 36, 47);
    u8g2.drawVLine(45, 32, 12);
    u8g2.drawVLine(46, 33, 12);

#endif
}

void drawURL(void)
{
#ifndef MINI_LOGO
  u8g2.setFont(u8g2_font_4x6_tr);
  if ( u8g2.getDisplayHeight() < 59 )
  {
    u8g2.drawStr(89,20,"github.com");
    u8g2.drawStr(73,29,"/olikraus/u8g2");
  }
  else
  {
    u8g2.drawStr(1,54,"github.com/olikraus/u8g2");
  }
#endif
}

void loop(void) {
  u8g2.clearBuffer();
  drawLogo();
  drawURL();
  u8g2.sendBuffer();
  digitalWrite(2, !digitalRead(2));
  delay(1000);
}

After download and reset the ESP32, the VFD should show the U8g2 logo and the LED on the ESP32 board will flash.

power-dodge commented 9 months ago

Hello,

Thank you very much for the code and the pin assignment. It looks like I had a broken ESP32 and also a few others that no longer work. The built-in LED function is worth its weight in gold. Thank you for the help.

What I wanted to ask was, have you ever played around with the brightness? Do you maybe know if it's full brightness in your code?

izilzty commented 9 months ago

The brightness in the code is the default value, which is not very bright, but enough for you to see what is on the screen. You can use u8g2.setContrast(); to adjust the brightness you want.

power-dodge commented 9 months ago

Many thanks for the answer.

But can you explain why your code works but the examples from the Arduino IDE don't? I also added your line, but unfortunately to no avail:

U8G2_GP1294AI_256X48_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/18, /* data=*/23, /* cs=*/25, /* dc=*/U8X8_PIN_NONE, /* reset=*/33);

`#include

include

ifdef U8X8_HAVE_HW_SPI

include

endif

ifdef U8X8_HAVE_HW_I2C

include

endif

U8G2_GP1294AI_256X48_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/18, / data=/23, / cs=/25, / dc=/U8X8_PIN_NONE, / reset=/33);

// End of constructor list

define INFO_SCREEN_DELAY 3000

/ Linear Congruential Generator (LCG) z = (az + c) % m;
m = 256 (8 Bit)

for period: a-1: dividable by 2 a-1: multiple of 4 c: not dividable by 2

c = 17 a-1 = 64 --> a = 65 / uint8_t z = 127; // start value uint32_t lcg_rnd(void) { z = (uint8_t)((uint16_t)65(uint16_t)z + (uint16_t)17); return (uint32_t)z; }

void setup(void) { u8g2.begin(); }

void draw(int is_blank) { int i, j; int n; char s[4];

for( j = 0; j < 20; j++ ) { // random number n = lcg_rnd();

// random string
for( i = 0; i < 3; i++ )
{
  s[i] = lcg_rnd()>>3;
  if ( s[i] < 16 )
s[i] += 'a';
  else
s[i] += 'A';
}
s[3] = '\0';

// print number
u8g2.setCursor(0,15);
u8g2.print("Number: ");
if ( is_blank )
  u8g2.print("       ");
u8g2.setCursor(70,15);
u8g2.print(n);

// print string
u8g2.setCursor(0,30);
u8g2.print("Text: ");
u8g2.setCursor(70,30);
u8g2.print(s);
if ( is_blank )
  u8g2.print("        ");

// make the result visible
u8g2.sendBuffer();

// delay, so that the user can see the result
delay(200);

} }

void draw_m1_t() { u8g2.clearBuffer();

u8g2.setFontMode(1); u8g2.setFont(u8g2_font_cu12_tr);

u8g2.setCursor(0,15); u8g2.print(F("setFontMode(1);")); u8g2.setCursor(0,30); u8g2.print(F("setFont(..._tr);")); u8g2.setCursor(0, 55); u8g2.print(F("Very Bad"));

u8g2.sendBuffer(); delay(INFO_SCREEN_DELAY);

u8g2.setFontMode(1);
u8g2.setFont(u8g2_font_cu12_tr);
u8g2.clearBuffer(); // clear the internal memory once draw(0); }

void draw_m0_t() { u8g2.clearBuffer();

u8g2.setFontMode(1); u8g2.setFont(u8g2_font_cu12_tr);

u8g2.setCursor(0,15); u8g2.print(F("setFontMode(0);")); u8g2.setCursor(0,30); u8g2.print(F("setFont(.._tr);")); u8g2.setCursor(0, 55); u8g2.print(F("Wrong"));

u8g2.sendBuffer(); delay(INFO_SCREEN_DELAY);

u8g2.setFontMode(0); u8g2.setFont(u8g2_font_cu12_tr);
u8g2.clearBuffer(); // clear the internal memory once draw(0); }

void draw_m1_h() { u8g2.clearBuffer();

u8g2.setFontMode(1); u8g2.setFont(u8g2_font_cu12_tr);

u8g2.setCursor(0,15); u8g2.print(F("setFontMode(0);")); u8g2.setCursor(0,30); u8g2.print(F("setFont(.._hr);"));
u8g2.setCursor(0, 55); u8g2.print(F("Still bad"));

u8g2.sendBuffer(); delay(INFO_SCREEN_DELAY);

u8g2.setFontMode(1); u8g2.setFont(u8g2_font_cu12_hr);
u8g2.clearBuffer(); // clear the internal memory once draw(0); }

void draw_m0_h() { u8g2.clearBuffer();

u8g2.setFontMode(1); u8g2.setFont(u8g2_font_cu12_tr);

u8g2.setCursor(0,15); u8g2.print(F("setFontMode(0);")); u8g2.setCursor(0,30); u8g2.print(F("setFont(.._hr);"));
u8g2.setCursor(0, 55); u8g2.print(F("Almost ok"));

u8g2.sendBuffer(); delay(INFO_SCREEN_DELAY);

u8g2.setFontMode(0); u8g2.setFont(u8g2_font_cu12_hr);
u8g2.clearBuffer(); // clear the internal memory once draw(0); }

void draw_m0_h_with_extra_blank() { u8g2.clearBuffer();

u8g2.setFontMode(1); u8g2.setFont(u8g2_font_cu12_tr);

u8g2.setCursor(0,15); u8g2.print(F("setFontMode(0);")); u8g2.setCursor(0,30); u8g2.print(F("setFont(.._hr);"));
u8g2.setCursor(0, 55); u8g2.print(F("Extra blank --> Ok"));

u8g2.sendBuffer(); delay(INFO_SCREEN_DELAY);

u8g2.setFontMode(0); u8g2.setFont(u8g2_font_cu12_hr);
u8g2.clearBuffer(); // clear the internal memory once draw(1); }

void loop(void) {

// This problem applies only to full buffer mode u8g2.clearBuffer();
u8g2.setFontMode(1); u8g2.setFont(u8g2_font_cu12_tr);
u8g2.setCursor(0,15); u8g2.print(F("Problems with")); u8g2.setCursor(0,30); u8g2.print(F("full buffer mode")); u8g2.setCursor(0,45); u8g2.print(F("and skipped clear.")); u8g2.sendBuffer(); delay(INFO_SCREEN_DELAY);

draw_m1_t(); // fontmode 1, t font --> wrong draw_m1_h(); // fontmode 1, h font --> wrong draw_m0_t(); // fontmode 0, t font --> wrong draw_m0_h(); // fontmode 1, h font --> ok draw_m0_h_with_extra_blank(); // fontmode 1, h font with extra blank --> correct delay(1000);
} `

Thanks

izilzty commented 9 months ago

Line 17 has an incomplete block comment. You probably commented out all the code behind it.

power-dodge commented 9 months ago

Yes, I only removed the commented one. Here is a small example from the Aurduino IDE, Helo World. Unfortunately, Helo World doesn't appear on the display, but your example works great. I'm not much of a code expert, so I don't really see what's going on...

`/*

HelloWorld.ino

Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)

Copyright (c) 2016, olikraus@gmail.com All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

*/

include

include

ifdef U8X8_HAVE_HW_SPI

include

endif

ifdef U8X8_HAVE_HW_I2C

include

endif

/* U8g2lib Example Overview: Frame Buffer Examples: clearBuffer/sendBuffer. Fast, but may not work with all Arduino boards because of RAM consumption Page Buffer Examples: firstPage/nextPage. Less RAM usage, should work with all Arduino boards. U8x8 Text Only Example: No RAM usage, direct communication with display controller. No graphics, 8x8 Text only.

*/

// Please UNCOMMENT one of the contructor lines below // U8g2 Contructor List (Frame Buffer) // The complete list is available here: https://github.com/olikraus/u8g2/wiki/u8g2setupcpp // Please update the pin numbers according to your setup. Use U8X8_PIN_NONE if the reset pin is not connected //U8G2_NULL u8g2(U8G2_R0); // null device, a 8x8 pixel display which does nothing //U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1306_128X64_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 12, / dc=/ 4, / reset=/ 6); // Arduboy (Production, Kickstarter Edition) //U8G2_SSD1306_128X64_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1306_128X64_NONAME_F_3W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / reset=/ 8); //U8G2_SSD1306_128X64_NONAME_F_3W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / reset=/ 8); //U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); //U8G2_SSD1306_128X64_ALT0_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); // same as the NONAME variant, but may solve the "every 2nd line skipped" problem //U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / reset=/ 8); //U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, / clock=/ SCL, / data=/ SDA, / reset=/ U8X8_PIN_NONE); // All Boards without Reset of the Display //U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, / clock=/ 16, / data=/ 17, / reset=/ U8X8_PIN_NONE); // ESP32 Thing, pure SW emulated I2C //U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE, / clock=/ 16, / data=/ 17); // ESP32 Thing, HW I2C with pin remapping //U8G2_SSD1306_128X64_NONAME_F_6800 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /enable=/ 7, /cs=/ 10, /dc=/ 9, /reset=/ 8); //U8G2_SSD1306_128X64_NONAME_F_8080 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /enable=/ 7, /cs=/ 10, /dc=/ 9, /reset=/ 8); //U8G2_SSD1306_128X64_VCOMH0_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // same as the NONAME variant, but maximizes setContrast() range //U8G2_SSD1306_128X64_ALT0_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // same as the NONAME variant, but may solve the "every 2nd line skipped" problem //U8G2_SSD1306_102X64_EA_OLEDS102_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // same as the NONAME variant, but may solve the "every 2nd line skipped" problem //U8G2_SSD1312_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1312_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, / clock=/ SCL, / data=/ SDA, / reset=/ 8); //U8G2_SSD1312_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, / reset=/ 8); //U8G2_SH1106_128X64_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); //U8G2_SH1106_128X64_VCOMH0_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // same as the NONAME variant, but maximizes setContrast() range //U8G2_SH1106_128X64_WINSTAR_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // same as the NONAME variant, but uses updated SH1106 init sequence //U8G2_SH1106_128X32_VISIONOX_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); //U8G2_SH1106_128X32_VISIONOX_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SH1106_72X40_WISE_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SH1107_64X128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SH1107_128X128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SH1107_128X128_F_HW_I2C u8g2(U8G2_R0, / reset=/ 8); //U8G2_SH1107_128X80_F_HW_I2C u8g2(U8G2_R0, / reset=/ 8); //U8G2_SH1107_PIMORONI_128X128_F_HW_I2C u8g2(U8G2_R0, / reset=/ 8); //U8G2_SH1107_SEEED_128X128_F_SW_I2C u8g2(U8G2_R0, / clock=/ SCL, / data=/ SDA, / reset=/ U8X8_PIN_NONE); //U8G2_SH1107_SEEED_128X128_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); //U8G2_SH1107_SEEED_96X96_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8);# //U8G2_SH1107_HJR_OEL1M0201_96X96_F_SW_I2C u8g2(U8G2_R0, / clock=/ 2, / data=/ 0, / reset=/ U8X8_PIN_NONE); //U8G2_SH1107_TK078F288_80X128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 15, / dc=/ 0, / reset=/ U8X8_PIN_NONE); //U8G2_SH1108_128X160_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SH1108_160X160_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SH1122_256X64_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8G2_16BIT in u8g2.h //U8G2_SH1122_256X64_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8G2_16BIT in u8g2.h //U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, / clock=/ 21, / data=/ 20, / reset=/ U8X8_PIN_NONE); // Adafruit Feather M0 Basic Proto + FeatherWing OLED //U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, / clock=/ SCL, / data=/ SDA, / reset=/ U8X8_PIN_NONE); // Adafruit Feather ESP8266/32u4 Boards + FeatherWing OLED //U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); // Adafruit ESP8266/32u4/ARM Boards + FeatherWing OLED //U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE, / clock=/ SCL, / data=/ SDA); // pin remapping with ESP8266 HW I2C //U8G2_SSD1306_128X32_WINSTAR_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE, / clock=/ SCL, / data=/ SDA); // pin remapping with ESP8266 HW I2C //U8G2_SSD1306_64X48_ER_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); // EastRising 0.66" OLED breakout board, Uno: A4=SDA, A5=SCL, 5V powered //U8G2_SSD1306_48X64_WINSTAR_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE);
//U8G2_SSD1306_64X32_NONAME_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); //U8G2_SSD1306_64X32_1F_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); //U8G2_SSD1306_96X16_ER_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); // EastRising 0.69" OLED //U8G2_SSD1306_72X40_ER_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); // EastRising 0.42" OLED //U8G2_SSD1306_96X40_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); //U8G2_SSD1306_96X39_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); //U8G2_SSD1320_160X132_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_SSD1320_160X132_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_SSD1320_160X80_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_SSD1320_160X80_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_SSD1322_240x128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8G2_16BIT in u8g2.h //U8G2_SSD1322_NHD_256X64_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8G2_16BIT in u8g2.h //U8G2_SSD1322_NHD_256X64_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8G2_16BIT in u8g2.h //U8G2_SSD1362_256X64_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8G2_16BIT in u8g2.h //U8G2_SSD1362_256X64_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8G2_16BIT in u8g2.h //U8G2_SSD1362_206X36_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1362_206X36_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1322_NHD_128X64_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1322_NHD_128X64_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1325_NHD_128X64_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1325_NHD_128X64_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_SSD0323_OS128064_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD0323_OS128064_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_SSD1326_ER_256X32_1_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // experimental driver for ER-OLED018-1 //U8G2_SSD1327_SEEED_96X96_F_SW_I2C u8g2(U8G2_R0, / clock=/ SCL, / data=/ SDA, / reset=/ U8X8_PIN_NONE); // Seeedstudio Grove OLED 96x96 //U8G2_SSD1327_SEEED_96X96_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); // Seeedstudio Grove OLED 96x96 //U8G2_SSD1327_EA_W128128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1327_EA_W128128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1327_EA_W128128_F_SW_I2C u8g2(U8G2_R0, / clock=/ 5, / data=/ 4, / reset=/ U8X8_PIN_NONE); //U8G2_SSD1327_EA_W128128_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); / Uno: A4=SDA, A5=SCL, add "u8g2.setBusClock(400000);" into setup() for speedup if possible / //U8G2_SSD1327_MIDAS_128X128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1327_MIDAS_128X128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1327_MIDAS_128X128_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); / Uno: A4=SDA, A5=SCL, add "u8g2.setBusClock(400000);" into setup() for speedup if possible / //U8G2_SSD1327_ZJY_128X128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1327_ZJY_128X128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1327_ZJY_128X128_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); / Uno: A4=SDA, A5=SCL, add "u8g2.setBusClock(400000);" into setup() for speedup if possible / //U8G2_SSD1327_WS_128X128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1327_WS_128X128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1327_VISIONOX_128X96_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1327_VISIONOX_128X96_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1329_128X96_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1329_128X96_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1329_96X96_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1329_96X96_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1329_96X96_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ A4, / dc=/ A2, / reset=/ U8X8_PIN_NONE); // Adafruit Feather 32u4 Basic Proto //U8G2_SSD1305_128X32_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1305_128X32_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1305_128X32_ADAFRUIT_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1305_128X32_ADAFRUIT_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1305_128X64_ADAFRUIT_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1305_128X64_ADAFRUIT_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1305_128X64_RAYSTAR_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1305_128X64_RAYSTAR_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_SSD1309_128X64_NONAME0_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_SSD1309_128X64_NONAME0_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_SSD1309_128X64_NONAME2_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_SSD1309_128X64_NONAME2_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_SSD1316_128X32_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_SSD1316_128X32_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_SSD1316_96X32_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_SSD1316_96X32_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_SSD1317_96X96_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // not tested, not confirmed //U8G2_SSD1317_96X96_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // not tested, not confirmed //U8G2_SSD1318_128X96_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_SSD1318_128X96_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_LD7032_60X32_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 11, / data=/ 12, / cs=/ 9, / dc=/ 10, / reset=/ 8); // SW SPI Nano Board //U8G2_LD7032_60X32_F_SW_I2C u8g2(U8G2_R0, / clock=/ 11, / data=/ 12, / reset=/ U8X8_PIN_NONE); // NOT TESTED! //U8G2_LD7032_60X32_ALT_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 11, / data=/ 12, / cs=/ 9, / dc=/ 10, / reset=/ 8); // SW SPI Nano Board //U8G2_LD7032_60X32_ALT_F_SW_I2C u8g2(U8G2_R0, / clock=/ 11, / data=/ 12, / reset=/ U8X8_PIN_NONE); // NOT TESTED! //U8G2_LD7032_128X36_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 11, / data=/ 12, / cs=/ 9, / dc=/ 10, / reset=/ 8); // SW SPI Nano Board //U8G2_LD7032_128X36_F_SW_I2C u8g2(U8G2_R0, / clock=/ 11, / data=/ 12, / reset=/ U8X8_PIN_NONE); // NOT TESTED! //U8G2_UC1701_EA_DOGS102_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_UC1701_EA_DOGS102_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_PCD8544_84X48_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Nokia 5110 Display //U8G2_PCD8544_84X48_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Nokia 5110 Display //U8G2_PCF8812_96X65_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Could be also PCF8814 //U8G2_PCF8812_96X65_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Could be also PCF8814 //U8G2_HX1230_96X68_F_3W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / reset=/ 8); //U8G2_HX1230_96X68_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_KS0108_128X64_F u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 18, /dc=/ 17, /cs0=/ 14, /cs1=/ 15, /cs2=/ U8X8_PIN_NONE, / reset=/ U8X8_PIN_NONE); // Set R/W to low! //U8G2_KS0108_ERM19264_F u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 18, /dc=/ 17, /cs0=/ 14, /cs1=/ 15, /cs2=/ 16, / reset=/ U8X8_PIN_NONE); // Set R/W to low! //U8G2_HD44102_100X64_F u8g2(U8G2_R0, 4, 5, 6, 7, 8, 9, 10, 11, /enable=/ 2, /dc=/ 3, /cs0=/ A0, /cs1=/ A1, /cs2=/ A2, / reset=/ U8X8_PIN_NONE); // Set R/W to low! //U8G2_T7932_150X32_F u8g2(U8G2_R0, 4, 5, 6, 7, 8, 9, 10, 11, /enable=/ 2, /dc=/ 3, /cs0=/ A0, /cs1=/ A1, /cs2=/ A2, / reset=/ U8X8_PIN_NONE); // Set R/W to low! //U8G2_ST7920_256X32_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 18, /cs=/ U8X8_PIN_NONE, /dc=/ 17, /reset=/ U8X8_PIN_NONE); //U8G2_ST7920_256X32_F_SW_SPI u8g2(U8G2_R0, / clock=/ 18 / A4 / , / data=/ 16 / A2 /, / CS=/ 17 / A3 /, / reset=/ U8X8_PIN_NONE); //U8G2_ST7920_192X32_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 18, /cs=/ U8X8_PIN_NONE, /dc=/ 17, /reset=/ U8X8_PIN_NONE); //U8G2_ST7920_192X32_F_SW_SPI u8g2(U8G2_R0, / clock=/ 18 / A4 / , / data=/ 16 / A2 /, / CS=/ 17 / A3 /, / reset=/ U8X8_PIN_NONE); //U8G2_ST7920_144X32_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 18, /cs=/ U8X8_PIN_NONE, /dc=/ 17, /reset=/ U8X8_PIN_NONE); //U8G2_ST7920_144X32_F_SW_SPI u8g2(U8G2_R0, / clock=/ 18 / A4 / , / data=/ 16 / A2 /, / CS=/ 17 / A3 /, / reset=/ U8X8_PIN_NONE); //U8G2_ST7920_160X32_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 18, /cs=/ U8X8_PIN_NONE, /dc=/ 17, /reset=/ U8X8_PIN_NONE); //U8G2_ST7920_160X32_F_SW_SPI u8g2(U8G2_R0, / clock=/ 18 / A4 / , / data=/ 16 / A2 /, / CS=/ 17 / A3 /, / reset=/ U8X8_PIN_NONE); //U8G2_ST7920_128X64_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 18 / A4 /, /cs=/ U8X8_PIN_NONE, /dc/rs=/ 17 / A3 /, /reset=/ 15 / A1 /); // Remember to set R/W to 0 //U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, / clock=/ 18 / A4 / , / data=/ 16 / A2 /, / CS=/ 17 / A3 /, / reset=/ U8X8_PIN_NONE); //U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / CS=/ 10, / reset=/ 8); //U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, / clock=/ 14, / data=/ 13, / CS=/ 15, / reset=/ 16); // Feather HUZZAH ESP8266, E=clock=14, RW=data=13, RS=CS //U8G2_ST7920_128X64_F_HW_SPI u8g2(U8G2_R0, / CS=/ 10, / reset=/ 8); //U8G2_ST7920_128X64_F_HW_SPI u8g2(U8G2_R0, / CS=/ 15, / reset=/ 16); // Feather HUZZAH ESP8266, E=clock=14, RW=data=13, RS=CS //U8G2_ST7528_ERC16064_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7528_ERC16064_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7539_192X64_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7539_192X64_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7565_EA_DOGM128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7565_EA_DOGM128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7565_64128N_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7565_64128N_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7565_EA_DOGM132_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ U8X8_PIN_NONE); // DOGM132 Shield //U8G2_ST7565_EA_DOGM132_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ U8X8_PIN_NONE); // DOGM132 Shield //U8G2_ST7565_ZOLEN_128X64_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7565_ZOLEN_128X64_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7565_LM6059_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Adafruit ST7565 GLCD //U8G2_ST7565_LM6059_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Adafruit ST7565 GLCD //U8G2_ST7565_KS0713_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // KS0713 controller //U8G2_ST7565_KS0713_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // KS0713 controller //U8G2_ST7565_LX12864_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7565_LX12864_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7565_ERC12864_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7565_ERC12864_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7565_ERC12864_ALT_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // contrast improved version for ERC12864 //U8G2_ST7565_ERC12864_ALT_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // contrast improved version for ERC12864 //U8G2_ST7565_NHD_C12832_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7565_NHD_C12832_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7565_NHD_C12864_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7565_NHD_C12864_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7565_JLX12864_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7565_JLX12864_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7567_PI_132X64_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 7, / dc=/ 9, / reset=/ 8); // Pax Instruments Shield, LCD_BL=6 //U8G2_ST7567_PI_132X64_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 7, / dc=/ 9, / reset=/ 8); // Pax Instruments Shield, LCD_BL=6 //U8G2_ST7567_JLX12864_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 7, / dc=/ 9, / reset=/ 8);
//U8G2_ST7567_JLX12864_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 7, / dc=/ 9, / reset=/ 8);
//U8G2_ST7567_122X32_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 7, / dc=/ 9, / reset=/ 8);
//U8G2_ST7567_122X32_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 7, / dc=/ 9, / reset=/ 8);
//U8G2_ST7567_OS12864_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 7, / dc=/ 9, / reset=/ 8);
//U8G2_ST7567_OS12864_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 7, / dc=/ 9, / reset=/ 8);
//U8G2_ST7567_ENH_DG128064_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7567_ENH_DG128064_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7567_ENH_DG128064I_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7567_ENH_DG128064I_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7567_64X32_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); //U8G2_ST7567_HEM6432_F_HW_I2C u8g2(U8G2_R0, / reset=/ U8X8_PIN_NONE); //U8G2_ST7567_ERC13232_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7567_ERC13232_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7571_128X128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7571_128X128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7571_128X96_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7571_128X96_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7586S_JLX384160_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7586S_ERC240160_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7586S_YMC240160_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST7586S_JLX320160_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Uno: Enable U8g2 16 bit mode for this display //U8G2_ST75160_JM16096_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST75160_JM16096_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST75256_JLX172104_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST75256_JLX172104_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST75256_JLX19296_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST75256_JLX19296_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST75256_JLX16080_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST75256_JLX16080_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST75256_JLX256128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8g2 16 bit mode for this display //U8G2_ST75256_JLX256128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8g2 16 bit mode for this display //U8G2_ST75256_WO256X128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8g2 16 bit mode for this display //U8G2_ST75256_WO256X128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8g2 16 bit mode for this display //U8G2_ST75256_JLX256128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 9, / data=/ 8, / cs=/ 7, / dc=/ 6, / reset=/ 5); // MKR Zero, Enable U8g2 16 bit mode for this display //U8G2_ST75256_JLX256128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 7, / dc=/ 6, / reset=/ 5); // MKR Zero, Enable U8g2 16 bit mode for this display //U8G2_ST75256_JLX256160_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8g2 16 bit mode for this display //U8G2_ST75256_JLX256160_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8g2 16 bit mode for this display //U8G2_ST75256_JLX256160M_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8g2 16 bit mode for this display //U8G2_ST75256_JLX256160M_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8g2 16 bit mode for this display //U8G2_ST75256_JLX256160_ALT_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8g2 16 bit mode for this display //U8G2_ST75256_JLX256160_ALT_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8g2 16 bit mode for this display //U8G2_ST75256_JLX240160_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST75256_JLX240160_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_ST75256_JLX25664_F_2ND_HW_I2C u8g2(U8G2_R0, / reset=/ 8); // Due, 2nd I2C, enable U8g2 16 bit mode for this display //U8G2_ST75320_JLX320240_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8g2 16 bit mode for this display //U8G2_ST75320_JLX320240_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8g2 16 bit mode for this display //U8G2_NT7534_TG12864R_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_NT7534_TG12864R_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_ST7588_JLX12864_F_SW_I2C u8g2(U8G2_R0, / clock=/ SCL, / data=/ SDA, / reset=/ 5);
//U8G2_ST7588_JLX12864_F_HW_I2C u8g2(U8G2_R0, / reset=/ 5); //U8G2_IST3020_ERC19264_F_6800 u8g2(U8G2_R0, 44, 43, 42, 41, 40, 39, 38, 37, /enable=/ 28, /cs=/ 32, /dc=/ 30, /reset=/ 31); // Connect WR pin with GND //U8G2_IST3020_ERC19264_F_8080 u8g2(U8G2_R0, 44, 43, 42, 41, 40, 39, 38, 37, /enable=/ 29, /cs=/ 32, /dc=/ 30, /reset=/ 31); // Connect RD pin with 3.3V //U8G2_IST3020_ERC19264_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_IST3088_320X240_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_IST3088_320X240_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_IST7920_128X128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Round display //U8G2_IST7920_128X128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Round display //U8G2_LC7981_160X80_F_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 18, /cs=/ 14, /dc=/ 15, /reset=/ 16); // Connect RW with GND //U8G2_LC7981_160X160_F_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 18, /cs=/ 14, /dc=/ 15, /reset=/ 16); // Connect RW with GND //U8G2_LC7981_240X128_F_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 18, /cs=/ 14, /dc=/ 15, /reset=/ 16); // Connect RW with GND //U8G2_LC7981_240X64_F_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 18, /cs=/ 14, /dc=/ 15, /reset=/ 16); // Connect RW with GND //U8G2_LC7981_128X128_F_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 18, /cs=/ 14, /dc=/ 15, /reset=/ 16); // Connect RW with GND //U8G2_SED1520_122X32_F u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /dc=/ A0, /e1=/ A3, /e2=/ A2, / reset=/ A4); // Set R/W to low! //U8G2_T6963_240X128_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable/wr=/ 17, /cs/ce=/ 14, /dc=/ 15, /reset=/ 16); // Connect RD with +5V, FS0 and FS1 with GND //U8G2_T6963_256X64_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable/wr=/ 17, /cs/ce=/ 14, /dc=/ 15, /reset=/ 16); // Connect RD with +5V, FS0 and FS1 with GND //U8G2_T6963_160X80_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable/wr=/ 17, /cs/ce=/ 14, /dc=/ 15, /reset=/ 16); // Connect RD with +5V, FS0 and FS1 with GND //U8G2_T6963_128X64_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable/wr=/ 17, /cs/ce=/ 14, /dc=/ 15, /reset=/ 16); // Connect RD with +5V, FS0 and FS1 with GND //U8G2_T6963_128X64_ALT_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable/wr=/ 17, /cs/ce=/ 14, /dc=/ 15, /reset=/ 16); // Connect RD with +5V, FS0 and FS1 with GND //U8G2_SED1330_240X128_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 17, /cs=/ 14, /dc=/ 15, /reset=/ 16); // Connect RD with +5V, FG with GND //U8G2_SED1330_240X128_F_6800 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /enable=/ 7, /cs=/ 10, /dc=/ 9, /reset=/ 8); // A0 is dc pin! //U8G2_SED1330_256X128_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 17, /cs=/ 14, /dc=/ 15, /reset=/ 16); // Connect /RD = E with +5V, enable is /WR = RW, FG with GND, 14=Uno Pin A0, enable U8g2 16Bit Mode //U8G2_SED1330_256X128_F_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 17, /cs=/ 14, /dc=/ 15, /reset=/ 16); // A0 is dc pin, /WR = RW = GND, enable is /RD = E, enable U8g2 16Bit Mode //U8G2_SED1330_320X200_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 17, /cs=/ 14, /dc=/ 15, /reset=/ 16); // Connect /RD = E with +5V, enable is /WR = RW, FG with GND, 14=Uno Pin A0, enable U8g2 16Bit Mode //U8G2_SED1330_320X200_F_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 17, /cs=/ 14, /dc=/ 15, /reset=/ 16); // A0 is dc pin, /WR = RW = GND, enable is /RD = E, enable U8g2 16Bit Mode //U8G2_RA8835_NHD_240X128_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 17, /cs=/ 14, /dc=/ 15, /reset=/ 16); // Connect /RD = E with +5V, enable is /WR = RW, FG with GND, 14=Uno Pin A0 //U8G2_RA8835_NHD_240X128_F_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 17, /cs=/ 14, /dc=/ 15, /reset=/ 16); // A0 is dc pin, /WR = RW = GND, enable is /RD = E //U8G2_UC1601_128X32_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_UC1601_128X64_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_UC1604_JLX19264_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_UC1604_JLX19264_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_UC1609_SLG19264_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_UC1609_SLG19264_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8);
//U8G2_UC1608_ERC24064_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // SW SPI, Due ERC24064-1 Test Setup //U8G2_UC1608_DEM240064_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // SW SPI, Due ERC24064-1 Test Setup //U8G2_UC1608_ERC240120_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_UC1608_240X128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // SW SPI, Due ERC24064-1 Test Setup //U8G2_UC1610_EA_DOGXL160_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ U8X8_PIN_NONE); //U8G2_UC1610_EA_DOGXL160_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ U8X8_PIN_NONE); //U8G2_UC1611_EA_DOGM240_F_2ND_HW_I2C u8g2(U8G2_R0, / reset=/ 8); // Due, 2nd I2C, DOGM240 Test Board //U8G2_UC1611_EA_DOGM240_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Due, SW SPI, DOGXL240 Test Board //U8G2_UC1611_EA_DOGXL240_F_2ND_HW_I2C u8g2(U8G2_R0, / reset=/ 8); // Due, 2nd I2C, DOGXL240 Test Board //U8G2_UC1611_EA_DOGXL240_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Due, SW SPI, DOGXL240 Test Board //U8G2_UC1611_EW50850_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 18, /cs=/ 3, /dc=/ 16, /reset=/ 17); // 240x160, Connect RD/WR1 pin with 3.3V, CS is aktive high //U8G2_UC1611_CG160160_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 18, /cs=/ 3, /dc=/ 16, /reset=/ 17); // Connect WR1 and CD1 pin with 3.3V, connect CS0 with cs, WR0 with enable, CD with dc //U8G2_UC1611_IDS4073_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8g2 16Bit Mode //U8G2_UC1611_IDS4073_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Enable U8g2 16Bit Mode //U8G2_UC1617_JLX128128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_UC1617_JLX128128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_UC1628_128X64_F_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /enable=/ 18, /cs=/ 3, /dc=/ 16, /reset=/ 17); // UC1628 pin names: enable: /WR, dc: CD //U8G2_UC1628_128X64_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_UC1628_128X64_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_UC1628_256X128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_UC1628_256X128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_UC1638_192X96_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_UC1638_192X96_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_UC1638_192X96_F_SW_I2C u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / reset=/ 8); // u8g2 test board: I2C clock/data is same as SPI, , I2C default address is 0x78 //U8G2_UC1638_240X128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_UC1638_240X128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_UC1638_240X128_F_SW_I2C u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / reset=/ 8); // u8g2 test board: I2C clock/data is same as SPI, , I2C default address is 0x78 //U8G2_SSD1606_172X72_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // eInk/ePaper Display //U8G2_SSD1607_200X200_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // eInk/ePaper Display, original LUT from embedded artists //U8G2_SSD1607_GD_200X200_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Good Display //U8G2_SSD1607_WS_200X200_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // Waveshare //U8G2_IL3820_296X128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display! //U8G2_IL3820_V2_296X128_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display! //U8G2_MAX7219_64X8_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 11, / data=/ 12, / cs=/ 10, / dc=/ U8X8_PIN_NONE, / reset=/ U8X8_PIN_NONE); //U8G2_MAX7219_32X8_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 11, / data=/ 12, / cs=/ 10, / dc=/ U8X8_PIN_NONE, / reset=/ U8X8_PIN_NONE); //U8G2_MAX7219_8X8_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 11, / data=/ 12, / cs=/ 10, / dc=/ U8X8_PIN_NONE, / reset=/ U8X8_PIN_NONE); //U8G2_LS013B7DH03_128X128_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ U8X8_PIN_NONE, / reset=/ 8); // there is no DC line for this display //U8G2_LS027B7DH01_400X240_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ U8X8_PIN_NONE, / reset=/ 8); // there is no DC line for this display, SPI Mode 2 //U8G2_LS027B7DH01_M0_400X240_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ U8X8_PIN_NONE, / reset=/ 8); // there is no DC line for this display, SPI Mode 0 //U8G2_LS013B7DH05_144X168_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ U8X8_PIN_NONE, / reset=/ 8); // there is no DC line for this display //U8G2_ST7511_AVD_320X240_F_8080 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /enable/WR=/ 7, /cs=/ 10, /dc=/ 9, /reset=/ 8); // Enable U8g2 16Bit Mode and connect RD pin with 3.3V/5V //U8G2_S1D15300_LM6023_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_S1D15300_LM6023_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_S1D15721_240X64_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_S1D15721_240X64_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_GU800_128X64_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_GU800_128X64_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_GU800_160X16_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/ 13, / data=/ 11, / cs=/ 10, / dc=/ 9, / reset=/ 8); //U8G2_GU800_160X16_F_4W_HW_SPI u8g2(U8G2_R0, / cs=/ 10, / dc=/ 9, / reset=/ 8); U8G2_GP1294AI_256X48_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/18, / data=/23, / cs=/25, / dc=/U8X8_PIN_NONE, / reset=/33);

// End of constructor list

void setup(void) { u8g2.begin(); }

void loop(void) { u8g2.clearBuffer(); // clear the internal memory u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font u8g2.drawStr(0,10,"Hello World!"); // write something to the internal memory u8g2.sendBuffer(); // transfer internal memory to the display delay(1000);
} `

Thank you for Help

izilzty commented 9 months ago

Maybe you can attach the .ino file directly, it looks like there are a lot of "*" symbols missing in the code.

Ignore this problem, the step to turn on the filament is missing in the code.

pinMode(32, OUTPUT);
digitalWrite(32, HIGH); // Filament Enable

If you don't want to control the filament, you can directly connect FILMENT_EN to 3.3V, but I still recommend using IO to control it to ensure that the high voltage and filament are started only after the code is running.

power-dodge commented 9 months ago

Yes its works with Pin FILMENT_EN to 3.3. Im testing and learn about the display.

Thank you for you Help, you are the best man. Thank You

power-dodge commented 9 months ago

Hello,

this is a ContrastTest (Filment on 3.3V)

include

include

ifdef U8X8_HAVE_HW_SPI

include

endif

ifdef U8X8_HAVE_HW_I2C

include

endif

U8G2_GP1294AI_256X48_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/18, / data=/23, / cs=/25, / dc=/U8X8_PIN_NONE, / reset=/33);

// End of constructor list

void testContrast(uint8_t contrast) { static char cstr[6]; static char vstr[4]; u8g2.setContrast(contrast); strcpy( cstr, u8x8_u8toa(contrast, 3)); u8g2.firstPage(); do { //u8g2.setFont(u8g2_font_ncenB14_tr); u8g2.setFont(u8g2_font_courB24_tn); u8g2.drawStr(0,28, cstr); u8g2.drawBox(64, 0, 10, 64); u8g2.drawBox(76, 0, 2, 64); u8g2.drawBox(80, 0, 1, 64); u8g2.drawBox(82, 0, 1, 64);

u8g2.drawBox(0, 32, 128, 10);
u8g2.drawBox(0, 44, 128, 2);
u8g2.drawBox(0, 48, 128, 1);
u8g2.drawBox(0, 50, 128, 1);

} while ( u8g2.nextPage() ); }

void setup(void) {

/ U8g2 Project: SSD1306 Test Board / //pinMode(10, OUTPUT); //pinMode(9, OUTPUT); //digitalWrite(10, 0); //digitalWrite(9, 0);

/ U8g2 Project: T6963 Test Board / //pinMode(18, OUTPUT); //digitalWrite(18, 1);

u8g2.begin();
}

void loop(void) { uint8_t i; i = 255; do { testContrast(255-i); delay(15); i-=5; } while( i != 0 ); i = 255; delay(100); do { testContrast(i); delay(15); i-=5; } while( i != 0 ); delay(100); }

medtech1 commented 9 months ago

I'm curious about increasing the brightness of the VFD, and it would affect the life of the VFD itself. I noticed in my tests that the GP1287BI runs much warmer than a GP1294AI (which the heat isn't very noticeable at all). Also, how much would the power consumption increase.

The VFDs are very nice displays (and they work really well for me), but not sure if they would work very well in areas where there is bright sunlight.

izilzty commented 9 months ago

Sunlight may accelerate phosphorus failure, but this takes a long time, which may not be as fast as the pixel burn-in speed.

slabua commented 9 months ago

One of the purposes of the VFDs is that to be used in bright sunlight where other technologies fail to deliver.

slabua commented 9 months ago

@power-dodge I think this display has 1024 levels of brightness. Whether that has been mapped to 0-255 in the library I have not verified it yet.

izilzty commented 9 months ago

The brightness input value is multiplied by 4 for remapping.

https://github.com/olikraus/u8g2/blob/711b50444071df6cec18a91cc6d947bd02928dee/csrc/u8x8_d_gp1294ai.c#L129-L130

power-dodge commented 8 months ago

Hello, how can you operate multiple displays with one ESP32. I also connected the CS to other pins and when I control them, everything works fine. Arduino IDE won't let me create multiple displays in the constructor.

U8G2_GP1294AI_256X48_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/18, /* data=*/23, /* cs=*/26, /* dc=*/U8X8_PIN_NONE, /* reset=*/33);

u8g2_1 u8g21

Dont work, i wil use 4 displays

Thank you very much

olikraus commented 8 months ago

There should be an example in the u8g2 FAQ.

power-dodge commented 8 months ago

Thanks, its works with _2, but its dont red more.

I have 2 Displays istal, the Display nr. 2 its only works. I think the problem is on void setup:

U8G2_GP1294AI_256X48_F_4W_SW_SPI u8g2_1(U8G2_R0, /* clock=*/18, /* data=*/23, /* cs=*/25, /* dc=*/U8X8_PIN_NONE, /* reset=*/33); //Screen 1
U8G2_GP1294AI_256X48_F_4W_SW_SPI u8g2_2(U8G2_R0, /* clock=*/18, /* data=*/23, /* cs=*/26, /* dc=*/U8X8_PIN_NONE, /* reset=*/33); //Screen 2`

void setup() {
 Wire.begin();
 u8g2_1.begin();
 u8g2_2.begin();

}

void loop() {
  u8g2_1.firstPage();
  do{
    u8g2_1.drawXBM(0,0,Honda_width,Honda_height,Honda_bits);
  }while(u8g2_1.nextPage());
  delay(1000);
  u8g2_2.firstPage();
  do{
    u8g2_2.drawXBM(0,0,Honda_width,Honda_height,Honda_bits);
  }while(u8g2_2.nextPage());
  delay(1000);
olikraus commented 8 months ago

See the FAQ:

https://github.com/olikraus/u8g2/blob/2fca97d2cc7377a7a71fd404d17826af81147143/doc/faq.txt#L293-L300

The reset line of the second object must be set to U8X8_PIN_NONE.

power-dodge commented 8 months ago

Hello,

thank you very much for the answer. I tried something around and until then it didn't work. The buffer thing will definitely be very problematic with 4 displays and only one ESP 32. I then decided to use a separate ESP32 for each display, which gives more flexibility etc. Today I tried to connect them with i2c, which wasn't that great either .
I decided on CAN, I only managed to get the CAN up and running today, one sends three others see the packets, but it's really soooo fast over CAN. My plan is that different mods on other displays are switched via CAN, I could have solved it using Pinout High, but who knows what ideas you will come up with... Unfortunately the driver occupies TX and RX, there still needs to be a clock module and on it and the decoder for K-Line, OBD1... As you can see, all of this would probably be a bit much for an ESP32. In any case, thank you for the help.

polyfrog99 commented 8 months ago

Hello,

I'm getting this error when verifying/compiling code but I'm not sure why:

Compilation error: 'U8G2_GP1294AI_256X48_F_4W_SW_SPI' does not name a type; did you mean 'U8G2_GP1287AI_256X50_F_4W_SW_SPI'?

I've got u8g2 version 2.34.22 installed in arduino ide. Not sure why it recognises the GP1287AI constructor but not the GP1294AI ? Has anyone seen this before or knows what's going wrong?

I'm just using some simple test code:

`/*

HelloWorld.ino

Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)

Copyright (c) 2016, olikraus@gmail.com All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

include

include

ifdef U8X8_HAVE_HW_SPI

include

endif

ifdef U8X8_HAVE_HW_I2C

include

endif

/* U8g2lib Example Overview: Frame Buffer Examples: clearBuffer/sendBuffer. Fast, but may not work with all Arduino boards because of RAM consumption Page Buffer Examples: firstPage/nextPage. Less RAM usage, should work with all Arduino boards. U8x8 Text Only Example: No RAM usage, direct communication with display controller. No graphics, 8x8 Text only.

*/

// Please UNCOMMENT one of the contructor lines below // U8g2 Contructor List (Frame Buffer) // The complete list is available here: https://github.com/olikraus/u8g2/wiki/u8g2setupcpp // Please update the pin numbers according to your setup. Use U8X8_PIN_NONE if the reset pin is not connected

U8G2_GP1294AI_256X48_F_4W_SW_SPI u8g2(U8G2_R0, / clock=/18, / data=/23, / cs=/25, / dc=/U8X8_PIN_NONE, / reset=*/33);

// End of constructor list

void setup(void) { u8g2.begin(); }

void loop(void) { u8g2.clearBuffer(); // clear the internal memory u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font u8g2.drawStr(0,10,"Hello World!"); // write something to the internal memory u8g2.sendBuffer(); // transfer internal memory to the display delay(1000); } `

power-dodge commented 8 months ago

Helo, Check the connection to display. Have you 3.3v from display fialamemt to yours Chip? GND to?