Comments (4)
I think you need an instance for each display.
There is a bit of state in the instance and each instance thinks it controls CS and DC.
Edit: You probably need a separate pin for reset on each display. I think one DC pin might work.
You could connect all displays to a reset line and pull it low for 10 ms before calling
begin(&Adafruit128x64, OLED_CS[n], DC_PIN)
for each instance.
from ssd1306ascii.
I think you need an instance for each display.
There is a bit of state in the instance and each instance thinks it controls CS and DC.
Edit: You probably need a separate pin for reset on each display. I think one DC pin might work.
You could connect all displays to a reset line and pull it low for 10 ms before calling
begin(&Adafruit128x64, OLED_CS[n], DC_PIN)
for each instance.
Thanks, I'll try that. :)
Multiple instances is out of the question due to memory restrictions of the overall program. I'm barely running with the one.
from ssd1306ascii.
So ultimately the suggestions didn't work, and I found that since I was using begin() with the reset pin defined, it was already delaying 10ms (x2). However, they gave me the motivation to start strategically experimenting with placing delays and focusing on the RESET function itself.
The initialization seems to be a lot more stable now, and fails maybe 1 in 10 times instead of 8 in 10. I think the remaining issues could be stemming from the high impedance of my breadboard and/or less than ideal power supply rail.
Additional perspective came from the SSD1306 datasheet:
More stable code:
//SETUP
void setup() {
pinMode(RST_PIN, OUTPUT); //attempt to stabilize the reset pin immediately
digitalWrite(RST_PIN, HIGH);
delay(500); //give time to stabilize initial voltages
///bunch of unrelated stuff...
//SPI display
//digitalWrite(RST_PIN, LOW); //added these two at the recommendation of the library creator, but they didn't seem to do anything. Using the reset pin in the declaration below does this anyway..
delay(10);
oled.begin(&Adafruit128x64, OLED_CS_0, DC_PIN, RST_PIN); //start primary instance
oled.setFont(Adafruit5x7);
//setup all possible Chip Selects
for (int n=0; n < maxDisplays; n++){
pinMode(OLED_CS[n], OUTPUT);
digitalWrite(OLED_CS[n], HIGH);
delay(1); //seemed to stabilize display startup
}
for (int n=0; n < maxDisplays-1; n++){
digitalWrite(OLED_CS[n], LOW);
delay(5); //seemed to stabilize display startup @ >=1ms
oled.clear();
oled.setContrast(64); //64 = 25uA, 160 = 69uA, 255 = 100uA
oled.setCursor(0,0);
oled.set1X();
oled.print(F("Screen ")); oled.print(n+1); oled.print(F(" (A")); oled.print(n); oled.println(F(")"));
oled.println(F("Initializing..."));
oled.setCursor(29,3);
oled.set2X();
oled.print(F("Please"));
oled.setCursor(40,5);
oled.print(F("Wait"));
digitalWrite(OLED_CS[n], HIGH);
delay(5);
}
delay(250); //brief pause after startups
Notably, there is a approximately 0.1V drop on the RES pin (2) referenced to VCC from having 4 displays. Not sure if that is an additional problem, or telling of the real problem, but the drop goes up with more displays.
from ssd1306ascii.
Closing because this seems to be a physical issue. Thanks for the help!
from ssd1306ascii.
Related Issues (20)
- When using a display with more than 64 pixels in the Y direction, the lcdHeight parameter is ignored. HOT 6
- Changing I2C pins HOT 1
- Arduino Pro Micro 32U4 and oled.clear(); HOT 1
- Some functions seem to need pixels as a parameter and not row/column character numbers? HOT 3
- Is there any function that returns data from the display? (to verify the display is somewhat functional in init) HOT 2
- 1.3" SSH1106 Compatibility HOT 1
- How to make 3 lines of text as large as possible HOT 2
- Trying to Determine Biggest Text for 128 x 32 HOT 1
- oled.println(); not going in new line on display HOT 3
- Is there a way to programmatically determine what Font is current? HOT 5
- Ticker Text demo question / maybe issue HOT 5
- How to use u8g2_font_unifont_t_chinese Chinese character library HOT 2
- degrees celsius symbol HOT 3
- Software i2c HOT 4
- 70x42 OLED ? HOT 8
- Begin() return error if OLED not connected/found. HOT 2
- Text height HOT 2
- Two oled 128x32 sharing the same address 0x3C connected to ESP32
- Compiling error with Arduino nano every (ATMega4809) HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ssd1306ascii.