Fórum témák

» Több friss téma
Fórum » SSD1306 OLED I2C
 
Témaindító: roleez, idő: Dec 19, 2016
Lapozás: OK   2 / 2
(#) sylvanus67 válasza bbb hozzászólására (») Feb 26, 2018 /
 
Nincs logikai analizátorom, de muszáj lesz beszereznem.

Ez az OLED hátoldala:



Én simán írnék egy annyi programot



Sajnos ennyire nem értek a dologhoz, de majd a neten utána nézek.



OFF
Még egy dolog:

Az mért van, hogy az Arduino példatárban lévő blink program "HIGH"-ra kikapcsol, "LOW"-ra bekapcsol. Erről van szó:

void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}


Mit bénáztam el?


ON

oled.jpg
    
(#) bbb válasza sylvanus67 hozzászólására (») Feb 26, 2018 /
 
I2C szkenner. Ezt próbáld ki! Ha jól dugtad össze a kijelzőt az arduinoval, akkor valamelyik címen meg fog szólalni.
(#) sylvanus67 válasza bbb hozzászólására (») Feb 27, 2018 /
 
Összedugtam és a 0x3C címet találta meg. Ez elvileg passzol a hátoldalán lévő 0x78 címmel.

Kezdők kérdése: akkor melyiket is kell beállítani a programban? (szerintem a 0x3C-t)

Beállítottam, a pullup ellenállásokat kicseréltem 2k-oskra, semmi eredmény
(#) bbb válasza sylvanus67 hozzászólására (») Feb 27, 2018 /
 
Szerintem nézd át a fejléc fájlt, mert ott volt még kis kavarás, hogy mit kell beállítgatni (talán egy sort kikommentelni egy másikról kivenni a kommentet), de én a libet csak alapul vettem, mert más platformra írtam át, így ebben többet nem nagyon fogok tudni segíteni.
(#) sylvanus67 válasza bbb hozzászólására (») Márc 19, 2018 /
 
Hibás volt az előző OLED, azért szívtam vele.

Hozattam újat, mindenféle pull-up ellenállás és egyéb nyalánkság nélkül működik.

Köszönöm a segítséget.
(#) moltam hozzászólása Márc 12, 2022 /
 
Helo.
Mennyire hajlamosak ezek a modulok a pixelhibára? Mehet maximum kontraszton vagy inkább maradjon a gyári 0x7F érték?
(#) wbt válasza moltam hozzászólására (») Márc 13, 2022 / 1
 
Inkább beégésre hajlamosak. Én úgy szoktam, ha nem nyúlnak hozzá, csökkentem a fényerőt, ha állandó kijelzés kell, akkor 5-10-percenként inverzbe kapcsolom. Ha már döglik, dögöljön kb. egyformán De azért elég jól bírják.
(#) nemgyuri válasza wbt hozzászólására (») Dec 3, 2023 /
 
(Ez nem válasz, hanem új kérdés, mert csak így tudtam mellékletet beszúrni!)
Vettem 2db 2,3"-os I2C-s OLED kijelzőt 128x64-es típus. [GME12864-81]
Most egy arduino nano-val hajtom.
Netről letöltött programokkal teszteltem, de nem működik jól! A következő szerinti beállításban majdnem jó. Az első karakter fele hiányzik, a sor végén viszont egy függőleges vonal látható. (alap.jpg)
  1. #include <Wire.h> //This is for i2C
  2. #include <SSD1306Ascii.h> //i2C OLED
  3. #include <SSD1306AsciiWire.h> //i2C OLED
  4. //#define XPOS 0
  5. //#define YPOS 0
  6. #define I2C_ADDRESS 0x3C
  7. #define RST_PIN -1
  8. SSD1306AsciiWire oled;
  9. float OLEDTimer = 0; //Timer for the display refresh interval

A következő beállításban a képernyő fölső részén csak egy csíkban jelenik meg valamilyen tartalom.
Azért tettem be erről több képet mert a csíkban rohangál valami tartalom... (csik1-3.jpg)
  1. #include <SPI.h>
  2. #include <Wire.h>
  3. #include <Adafruit_GFX.h>
  4. #include <Adafruit_SSD1306.h>
  5.  
  6. #define SCREEN_WIDTH 128 // OLED display width, in pixels
  7. #define SCREEN_HEIGHT 64 // OLED display height, in pixels
  8.  
  9. // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
  10. // The pins for I2C are defined by the Wire-library.
  11. // On an arduino UNO:       A4(SDA), A5(SCL)
  12. // On an arduino MEGA 2560: 20(SDA), 21(SCL)
  13. // On an arduino LEONARDO:   2(SDA),  3(SCL), ...
  14. #define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
  15. #define SCREEN_ADDRESS 0x3D ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
  16. Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

Ezen annyit kellett változtatnom, hogy a "#define SCREEN_ADDRESS 0x3D" sorba 0x3D helyett 0x3C-nek kell lennie - csak így megy. I2C szkenner progival is ellenőriztem.
(Arra gondoltam, hogy a "SSD1306AsciiWire.h"-ban kellene változtatnom valamit, de MIT??)
(#) nemgyuri válasza nemgyuri hozzászólására (») Dec 3, 2023 /
 
Mindkét kijelző ugyanúgy működik, tehát nem hibás példány. (esetleg széria hiba? - HESTORE-ban vettem.)
(#) bbb válasza nemgyuri hozzászólására (») Dec 3, 2023 /
 
Ez a teljes kódod, amivel megszólítod a kijelzőt? Csak mert ha nem követed a bekapcsolási rutint, akkor akármi is mehet rá...

Nézd meg a korábbi hozzászólásom, ahol ott van a teljes szekvencia, ami után a 128*64-es kijelző jól működik (az ne zavarjon, hogy pic-re írtam, a kiküldendő utasítások ugyan azok).
(#) nemgyuri válasza bbb hozzászólására (») Dec 3, 2023 /
 
Természetesen ez csak a kijelző inicializálása volt. Megpróbáltam néhány "SSD1306...h"-val is, és teljesen más volt az OLED képe, ezért memória címzési problémára gyanakodok.
Megkeresem azt a PIC-es "szekvenciádat".
(#) bbb válasza nemgyuri hozzászólására (») Dec 3, 2023 /
 
Bővebben: Link

A pic kezdőknek topikban pedig itt a komplett projektem, ami jól ír ki a kijelzőre: Bővebben: Link
A hozzászólás módosítva: Dec 3, 2023
(#) nemgyuri válasza bbb hozzászólására (») Dec 3, 2023 /
 
Köszönöm, az elsőt könnyen megtaláltam.
(#) nemgyuri válasza nemgyuri hozzászólására (») Dec 4, 2023 /
 
Ez lett a megoldás: (hátha valakinek segít!)
SSD1306init.h -ban:
  1. /** Initialization commands for a 128x64 SSD1306 oled display. */
  2. static const uint8_t MEM_TYPE Adafruit128x64init[] = {
  3.     // Init sequence for Adafruit 128x64 OLED module
  4.     SSD1306_DISPLAYOFF,
  5.     SSD1306_SETDISPLAYCLOCKDIV, 0x80,  // the suggested ratio 0x80
  6.     SSD1306_SETMULTIPLEX, 0x3F,        // ratio 64
  7.     SSD1306_SETDISPLAYOFFSET, 0x0,     // no offset
  8.     SSD1306_SETSTARTLINE,              // line #0
  9.     SSD1306_CHARGEPUMP, 0x14,          // internal vcc
  10.     SSD1306_MEMORYMODE, 0x02,          // page mode
  11.    //SSD1306_MEMORYMODE, 0x0,          // page mode <- nem látszik különbség
  12.     SSD1306_SEGREMAP | 0x1,            // column 127 mapped to SEG0
  13.     SSD1306_COMSCANDEC,                // column scan direction reversed
  14.     SSD1306_SETCOMPINS, 0x12,          // alt COM pins, disable remap
  15.     SSD1306_SETCONTRAST, 0x7F,         // contrast level 127
  16.     SSD1306_SETPRECHARGE, 0xF1,        // pre-charge period (1, 15)
  17.     SSD1306_SETVCOMDETECT, 0x40,       // vcomh regulator level
  18.     SSD1306_DISPLAYALLON_RESUME,
  19.     SSD1306_NORMALDISPLAY,
  20.     SSD1306_DISPLAYON
  21. };
  22. /** Initialize a 128x64 oled display. */
  23. static const DevType MEM_TYPE Adafruit128x64 = {
  24.   Adafruit128x64init,
  25.   sizeof(Adafruit128x64init),
  26.   130,  //128  - eredeti, de akkor a sorok végén függ. csík van!
  27.   64,
  28.   0
  29. };

Annyi szépséghibája még van, hogy így kell a sor elejére írni:
  1. oled.setCursor(2, 0); //(x [pixels], y[lines]) -eredeti:0,0
  2.   oled.print("Target");
A hozzászólás módosítva: Dec 4, 2023
Következő: »»   2 / 2
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem