Git Product home page Git Product logo

Comments (4)

greiman avatar greiman commented on June 8, 2024

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.

treyus30 avatar treyus30 commented on June 8, 2024

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.

treyus30 avatar treyus30 commented on June 8, 2024

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:
image

image

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.

treyus30 avatar treyus30 commented on June 8, 2024

Closing because this seems to be a physical issue. Thanks for the help!

from ssd1306ascii.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.