Feather OLED problems with different MCUs
Moderators: adafruit_support_bill, adafruit
Please be positive and constructive with your questions and comments.
- vadim_fuchs
- Posts: 4
- Joined: Mon Jun 27, 2016 1:41 am
Feather OLED problems with different MCUs
Greetings,
I am running into some problems using the feather OLED.
When I use it with a feather M0 mcu board, upon powering up it displays junk ("snow") which disappears after I hit the reset button, after which everything functions normally.
When I use it with a Teensy 3.2 MCU, I cannot get past the "snow". I have a feeling that a display has to be reset in some fashion, given that the user guid refers to it as a regular i2c OLED in a feather formfactor, however the same manual says it is only controlled by two pins without any reference to the reset.
Any advice would be greatly appreciated.
I am running into some problems using the feather OLED.
When I use it with a feather M0 mcu board, upon powering up it displays junk ("snow") which disappears after I hit the reset button, after which everything functions normally.
When I use it with a Teensy 3.2 MCU, I cannot get past the "snow". I have a feeling that a display has to be reset in some fashion, given that the user guid refers to it as a regular i2c OLED in a feather formfactor, however the same manual says it is only controlled by two pins without any reference to the reset.
Any advice would be greatly appreciated.
- adafruit_support_mike
- Posts: 68234
- Joined: Thu Feb 11, 2010 2:51 pm
Re: Feather OLED problems with different MCUs
That's a known-but-rare issue with the OLEDs. Sometimes the power-up sequence doesn't complete properly, and you get snow until you do a reset. Our hardware team has been looking into ways to prevent that, and we'll respin the board once we have a good solution.
In the meantime, connect the OLED's reset pin to the microcontroller's and it should behave after a reset.
In the meantime, connect the OLED's reset pin to the microcontroller's and it should behave after a reset.
- vadim_fuchs
- Posts: 4
- Joined: Mon Jun 27, 2016 1:41 am
Re: Feather OLED problems with different MCUs
Ok, which pin would it be on a teensy 3.1/3.2?
- adafruit_support_mike
- Posts: 68234
- Joined: Thu Feb 11, 2010 2:51 pm
Re: Feather OLED problems with different MCUs
It's the pad labeled 'RST' on the back of the board. It isn't broken out to the edge.
- qwertyphile
- Posts: 7
- Joined: Mon Jan 25, 2016 5:38 pm
Re: Feather OLED problems with different MCUs
The non-wing version of the OLED breakout has the reset signal broken out and the Adafruit SSD1306 library uses an Arduino GPIO to toggle this pin automatically when the OLED display object is instantiated.
The Feather Wing version of this OLED breakout does NOT have this same connection of reset to a GPIO so is not reset automatically by the SSD1306 driver so must be done manually by the user.
This was unacceptable for my applications so I reworked the Feather Wings by soldering a wire from the reset of the OLED (OLED side of the diode leg) to a GPIO pin (#12) and pointed the SSD1306 driver to that pin and booting from initial power up is now reliable.
Code: Select all
#define OLED_RESET 12
Adafruit_SSD1306 display(OLED_RESET);
I recommend to the Adafruit Engineers to immediately update the documentation in the learning center so more people don't waste a bunch of time getting frustrated... Then spin these boards ASAP please.
Cheers
- adafruit_support_mike
- Posts: 68234
- Joined: Thu Feb 11, 2010 2:51 pm
Re: Feather OLED problems with different MCUs
That board is up for a redesign, but the focus is on getting rid of the OLED's boot problems entirely.
- michaelmeissner
- Posts: 1897
- Joined: Wed Aug 29, 2012 12:40 am
Re: Feather OLED problems with different MCUs
I just wired up my Teensy 3.2, Feather adapter, and Prop shield, and I decided to try the OLED display. I also see snow quite a lot. One of the things I've tried that seems to work is to slow down the Teensy to 48Mhz, reduce code space and then it seemed to work fine. I could then bring the speed back to the normal 96 Mhz (overclock, optimize for speed), and it would work.
I initially thought it might be the Teensy was just starting too fast, so I modified the initial code to sleep for at least 3 seconds at the beginning and to add serial USB tracing, but that didn't help.
I'm wondering if it would work better with the Teensy LC, since that should run the same speed as the Feather M0.
I initially thought it might be the Teensy was just starting too fast, so I modified the initial code to sleep for at least 3 seconds at the beginning and to add serial USB tracing, but that didn't help.
I'm wondering if it would work better with the Teensy LC, since that should run the same speed as the Feather M0.
- qwertyphile
- Posts: 7
- Joined: Mon Jan 25, 2016 5:38 pm
Re: Feather OLED problems with different MCUs
Also note that I've been running my OLED displays (and seeing frequent 'snow') on the 32u4 3.3V variant of the Feather which is only clocked at 8MHz so I suspect that MCU clock speed isn't a significant factor in this bug. I also had tried a startup delay without success.
If you look in the SSD1306 datasheet it provides the ideal startup and shutdown sequence. It's complicated enough that I'm not sure how Adafruit will achieve this without adding a MCU on the OLED board in the next spin... which is expensive and probably why they didn't do it in the first place.
Adding GPIO control of the SSD1306 reset has been good enough and works 100% so far for me.
On that note: I recommend using Silego chips instead of MCUs to solve problems like this because they're simple and low cost. They're also quite good at handling the logistics of pre-programming the devices and delivering good lead times... unlike many other suppliers.
I'm not at all affiliated with them, they just do a great job.
Cheers
If you look in the SSD1306 datasheet it provides the ideal startup and shutdown sequence. It's complicated enough that I'm not sure how Adafruit will achieve this without adding a MCU on the OLED board in the next spin... which is expensive and probably why they didn't do it in the first place.
Adding GPIO control of the SSD1306 reset has been good enough and works 100% so far for me.
On that note: I recommend using Silego chips instead of MCUs to solve problems like this because they're simple and low cost. They're also quite good at handling the logistics of pre-programming the devices and delivering good lead times... unlike many other suppliers.
I'm not at all affiliated with them, they just do a great job.
Cheers
- michaelmeissner
- Posts: 1897
- Joined: Wed Aug 29, 2012 12:40 am
Re: Feather OLED problems with different MCUs
Yeah, further testing shows the OLED is often borked, no matter what I speed I program the Teensy 3.2 at. If I hit the reset button, it will start up fine, but for the Teensy, I have to have the Teensy connected via USB and be running the Teensy loader (and have the last program being compiled be the program I want to run, and it has to have the microprocessor type be the 3.2).
This is simply unusable. I bought the OLED display so that I could have a simple display when I'm running the Teensy battery powered away from the computer, running neopixels and/or sound.
Adafruit, is the OLED redesign imminent?
If not, can somebody give me simple directions how to add a wire to do the reset sequence?
This is simply unusable. I bought the OLED display so that I could have a simple display when I'm running the Teensy battery powered away from the computer, running neopixels and/or sound.
Adafruit, is the OLED redesign imminent?
If not, can somebody give me simple directions how to add a wire to do the reset sequence?
- qwertyphile
- Posts: 7
- Joined: Mon Jan 25, 2016 5:38 pm
Re: Feather OLED problems with different MCUs
My post about 4 above was my attempt at simply explaining how to rework the boards... The photo I attached is the key to explaining it. Do you have any specific questions I can help with?
1. Just solder one wire from a pin of a diode (reference the photo for which pin of the diode) to an available Arduino pin (which I chose to be 12).
2. Then define "OLED_RESET" in the example code as your chosen pin and your done!
Cheers
1. Just solder one wire from a pin of a diode (reference the photo for which pin of the diode) to an available Arduino pin (which I chose to be 12).
2. Then define "OLED_RESET" in the example code as your chosen pin and your done!
Cheers
- michaelmeissner
- Posts: 1897
- Joined: Wed Aug 29, 2012 12:40 am
Re: Feather OLED problems with different MCUs
I realized what the solution is after I posted the question and I was driving into work after I re-read your post. I had originally assumed you were soldering a wire to the actual chip. Instead you are wiring to the reset pin that is brought out to the feather, which is much simpler.
Note, for the Teensy, an additional step will be done, and that is not connect the reset pin on the OLED board to the reset/program pin on the feather adapter. So that if the reset action is done by the code, it doesn't wind up resetting the Teensy. In my case, I will need to clip the reset/program pin that I've already soldered on the board, and provide an alternative method of doing the program button.
On the Teensy 3.2, the program button is connected to the reset line of the feathers, and when you push it, the board goes into program mode. As I said, that is problematical when I'm running the Teensy on batteries away from the programming computer. There is a reset action on the Teensy, but it is a pad you have to solder a wire to underneath the Teensy, and so it isn't as convenient.
Note, for the Teensy, an additional step will be done, and that is not connect the reset pin on the OLED board to the reset/program pin on the feather adapter. So that if the reset action is done by the code, it doesn't wind up resetting the Teensy. In my case, I will need to clip the reset/program pin that I've already soldered on the board, and provide an alternative method of doing the program button.
On the Teensy 3.2, the program button is connected to the reset line of the feathers, and when you push it, the board goes into program mode. As I said, that is problematical when I'm running the Teensy on batteries away from the programming computer. There is a reset action on the Teensy, but it is a pad you have to solder a wire to underneath the Teensy, and so it isn't as convenient.
- neandergeek
- Posts: 12
- Joined: Wed Feb 06, 2013 1:37 pm
Re: Feather OLED problems with different MCUs
Is the Feather OLED Wing known to work with the Feather Huzzah? I am running the tester example sketch from the Adafruit_FeatherOLED library and have nothing on the display not even the snow mentioned in the prior posts. The leds flash when I press the A and C buttons so something is running on the Feather Huzzah (I had previously successfully run the CharlieWing test sketch on this Feather.
- neandergeek
- Posts: 12
- Joined: Wed Feb 06, 2013 1:37 pm
Re: Feather OLED problems with different MCUs
Update, my FeatherWing OLED display seems to work fine when I connect the SDA, SCL, 3.3V, and Gnd to an Adalogger 32U4. Is there some different I2C library needed for the Huzzah? I seem to recall Lady Ada saying it does I2C by bit banging.
- adafruit_support_mike
- Posts: 68234
- Joined: Thu Feb 11, 2010 2:51 pm
Re: Feather OLED problems with different MCUs
I'm pretty sure the bit-banging is handled by the ESP8266 version of the Wire library.
- hiduino
- Posts: 862
- Joined: Sat Sep 01, 2012 7:05 pm
Re: Feather OLED problems with different MCUs
I noticed that the Feather OLED board has a 10uF cap (according to the schematics) on VDD and VBAT, vs. a 1uF on the 128x32 OLED Breakout board. I am assuming this is a decoupling capacitor. The 10uF seems a bit large and could this be delaying the rise time when powering up and causing the "snow" issue?adafruit_support_mike wrote:That board is up for a redesign, but the focus is on getting rid of the OLED's boot problems entirely.
I have 8 of these wings and they all have the same "snow" issue when powering up.
Please be positive and constructive with your questions and comments.