Hello,
(Intro) I am a mechanical engineer with an automotive background and I'm comfortable working with basic AC or DC circuits and some programming, but I'm a newbie when it comes to circuit design and microcontrollers, and I would like to grow my knowledge in this area for some projects I've been thinking about. A couple months ago I purchased an Arduino UNO R3 with the Seeeduino sensor kit, so I could start playing around with various components I'm interested in. I was able to go through all the tutorials and eventually wrote my own sketch to display temperature and humidity from the DHT11 on the included OLED, and also made a bar graph type display of the output from the included potentiometer, using U8X8 from the U8g2 library.
Once I was comfortable with that I decided to take the next step so I searched for some OLEDs and ended up buying 2x of these SSD1309-driven 128x64 monochrome displays: 128x64 White Graphic OLED from Crystalfontz
I chose these displays for their size and brightness, and because they were offered with a breakout board: SSD1309 OLED Breakout Board from Crystalfontz
Upon arrival I realized that I had overlooked that the displays required a logic voltage of 3.3V so I ordered a bidirectional level shifter from Adafruit so it would play nice with the 5V logic from the UNO R3: 8-channel Bi-directional Logic Level Converter [TXB0108] : ID 395 : $7.95 : Adafruit Industries, Unique & fun DIY electronics and kits
I originally tried using the 4-wire SPI wiring scheme and sample code offered by the screen vendor (https://www.crystalfontz.com/products/document/4270/CFA10105GettingStarted.pdf), powering the "A" side of the level shifter from the Arduino 3.3V output, and the "B" side from the 5V output, all referenced to the Arduino GND pin. I ran the CS, D/C, RST, SCK, and MOSI through the level shifter. This resulted in a blank screen, so I verified my connections and tried swapping to the second screen and breakout board and had the same result.
After that I dug into the code to try and understand if there was a pin-assignment discrepancy between my Uno R3 and the Seeeduino clone they were using in the example. I decided to step back and make it as simple as possible by using the hardwire SPI pins and the HelloWorld demo sketch that's included with the u8g2 library. Now I have the following connections (image of breadboard setup attached):
Pin Name - Arduino Pin - Level Shifter Pin - OLED Pin - Wire Color
SCK - 13 - B1/A1 - D0 - Green
MOSI - 11 - B2/A2 - D1 - Blue
CS - 10 - B3/A3 - CS - Purple
D/C - 9 - B4/A4 - D/C - Brown
RST - 8 - B5/A5 - RST - Grey
I still have the 3.3V and 5V feeds from the Arduino to the level shifter VCCA and VCCB respectively, and I'm also powering the OLED controller from the 3.3V feed. The ground is still shared by all three devices. I've used my meter to verify voltages at the feeds and I checked the logic high voltage on the CS pin at the breakout board and it was >2.4V.
I've tried using the constructors for both hardware and software SPI, for both the U8g2 and U8X8 "HelloWorld" demo sketches. I've tried each constructor starting with "SSD1309_128X64_NONAME" - all compile and upload fine but result in a blank OLED screen, and I've tried it on both units that I purchased to minimize the chance of a bad display. I'm hitting a character limit when I try to include the code so I will add that on the next post.
I feel like I must be missing something very basic and would very much appreciate any help. Thanks!

