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   1 / 2
(#) roleez hozzászólása Dec 19, 2016 /
 
Sziasztok!
Van egy ESP8266-ra direktbe kötött SSD1306 IIC OLED kijelző. Arduino GUI-ban programozva.
(DHT22-vel készítettem hő és páratartalom kijelzőt)
A kijelző szépen működött napokon át, majd tegnap gondolt egyet - működés alatt -
nem jelezte ki minden második sort! (128x64-es kijelző) Találkoztatok ilyennel?
(Nem az Adafruit OLED library-t használom, hanem Daniel Eichhorn félét)
Default inicializálás.
Milyen infóra van még szükség?
Köszönöm,
Roland
(#) Istvanpisti válasza roleez hozzászólására (») Dec 19, 2016 /
 
Szia!
Fizikai sérülés nincs a kijelző üveglapján?
Én jártam úgy, hogy az egyik alsó sarka megrepedt - szemmel alig észrevehetően - és utána mutatott hasonló tüneteket. (Az egyik oldalon mennek a páros, a másikon a páratlan sorokat vezérlő felgőzölt vezetősávok)
A hozzászólás módosítva: Dec 19, 2016
(#) roleez válasza Istvanpisti hozzászólására (») Dec 19, 2016 /
 
Szia!
Nem látom...
Van olyasmi "teszt" jellegű dolog, ahol minden sort kijelzek? Valami OFFSET beállításon
gondolkodom. Ha itt se láthatóak a sorok, akkor hw error.

Köszi,
Roland
(#) Istvanpisti válasza roleez hozzászólására (») Dec 19, 2016 /
 
Szia!
Sajnos ebben nem tudok segíteni, én saját OLED vezérlőt írtam, Arduino-val nem barátkoztam eddig.
Egyébként a "nem jelezte ki minden második sort" pixelben kell érteni, vagy karaktereket tartalmazó sorokban? (1 karakter 8 pixel magas)
(#) roleez válasza Istvanpisti hozzászólására (») Dec 19, 2016 /
 
Pixelben kell érteni. Délután felteszek egy képet erről.
Próbáltam mindenféle iniciálizálást próbálni, de a hiányzó pixelsorok megvannak
(#) wbt válasza roleez hozzászólására (») Dec 19, 2016 /
 
Ha adsz neki inverz kijelzés parancsot, akkor is ugyan azok a sorok hiányoznak?
(#) don_peter válasza roleez hozzászólására (») Dec 19, 2016 /
 
Biztos van olyan kész rutin ami az egész képet 0xff-ekkel beszínezi.
Ha nincs, akkor csinálj egy képet, mármint át kell konvertálni "LCDAssistant" programmal a képet és a megfelelő rutinnal kiíratni.
(#) Medve válasza roleez hozzászólására (») Dec 19, 2016 /
 
Hali, szerintem is hardveres hiba lesz, próbáld megnyomkodni óvatosan.
(#) roleez válasza Medve hozzászólására (») Dec 19, 2016 /
 
Nyomkodtam, ütögettem finoman, semmi változás.
(#) Bakman válasza roleez hozzászólására (») Dec 19, 2016 /
 
Ha virtuálisan kiveszed az üres sorokat, akkor egy fél, de jó képet kapsz, vagy pedig fél, de összenyomott képet?

Magyarán a kijelzőn megjelenő pl. karakter dupla magas, vagy normál, de minden második sor hiányzik?
(#) roleez válasza Bakman hozzászólására (») Dec 20, 2016 /
 
Hát a képek alapján nagyon hardver hiba
Fél, összenyomott képet kapok, erről nincs fotó.
(#) Bakman válasza roleez hozzászólására (») Dec 20, 2016 /
 
Nem feltétlen HW hiba, persze ezt csak próbálgatással, vagy a program alapos áttanulmányozásával lehet eldönte.
(#) roleez válasza Bakman hozzászólására (») Dec 21, 2016 /
 
Ebben tudsz tippeket adni?
Azon lepődtem meg, hogy előtte napokig jól ment, majd egyik pillanatról a másikra ez lett.
Nagy naívan, ha valami sw okozhatta, egy reset (tápelvétel) megoldotta volna, de nem...
(#) roleez válasza roleez hozzászólására (») Dec 21, 2016 /
 
Azon gondolkodom, hogy lehet a pixel oszlopszám nem 128, hanem pl. 256? Azaz minden
második sor "el van tolva"?
Ám akkor eddig miért nem volt? Valami túlcsordult, valami beállítás? De újraindulásra miért
nem "lett jó", ha ez van?
(#) bujan hozzászólása Feb 9, 2018 /
 
Tisztelt fórumozók!
Én is vettem egy SSD1306 IIC OLED kijelzőt 128x64 felbontással. Amikor képet akartam feltenni, az alsó fele mindég lemeredt. Készítettem vonalakat tesztre és láss csodát. A függőleges felbontás csak 32 lett. Ez hogyan lehetséges? A kivitelezése megegyezik az eredetivel, tehát nem a 128x32 méret.
Esetleg valakinek ötlete? Előre is megköszönöm.
(#) wbt válasza bujan hozzászólására (») Feb 9, 2018 /
 
"lemeredt" az mit jelent? A konfigurációt lefuttatva másik kijelző jól működik?
Bocs még egy kérdés: a felső fele nem volt nagyon fényes?
A hozzászólás módosítva: Feb 9, 2018
(#) bujan válasza wbt hozzászólására (») Feb 11, 2018 /
 
Bocsi! Helyesen "lemaradt", mivel csak minden 2. sor működik. A neten utána néztem és ez egy valós probléma a "noname" kijelzőknél, amire van szoftveres megoldás, de nekem nem jöttek be. Sajnos másik kijelzőm nincs az ellenőrzéshez. Köszönöm, hogy egyáltalán reagáltál a kérdésemre, mivel ez a fórum már több mint egy éve nem volt aktív.
(#) Bakman válasza bujan hozzászólására (») Feb 11, 2018 /
 
Sokat nem foglalkoztam a kijelzővel, de a kulcsszó amit keresel, az az interlaced.
(#) wbt válasza Bakman hozzászólására (») Feb 11, 2018 /
 
Tud interlaced üzemmódot? (szerintem nem..vagy csak mindig átugrottam) Nekem eddig mind működött elsőre, jó lenne játszani egy ilyen "hibással". Ha majd meg tudod nézni az inic folyamatot, akkor kukkold már meg, hogy a 0xA8 és a 0xDA parancsra mi megy ki.
(#) Bakman válasza wbt hozzászólására (») Feb 11, 2018 /
 
Nincs már ilyen kijelzőm, az egereknek adtam házimozi gyanánt.

Már nagyon nem emlékszem, mi volt a megoldás de biztos, hogy ebben az irányban kellett elindulni.
(#) bujan válasza Bakman hozzászólására (») Feb 11, 2018 /
 
Igazad lett! Beírtam a Google-be "interlaced arduino" és már lett megoldás is egy, mellyel minden sor látható. Kitűnő a kijelző. Mellékelem is az ino-t. Csak egy baja van, elviszi az Uno dinamikus memóriája 80%-át. Ezt írja ki "Kevés elérhető memória, stabilitási probléma fordulhat elő." Biztos van más megoldás is.
#include <IIC_without_ACK.h>
#include "oledfont.c" //codetab
#define OLED_SDA A4
#define OLED_SCL A5
IIC_without_ACK lucky(OLED_SDA, OLED_SCL); //A4 -- sda, A5 -- scl
void setup() {
lucky.Initial();
delay(10);
}
void loop() {
lucky.Fill_Screen(0xff);
delay(2000);
lucky.Fill_Screen(0xf0);
delay(2000);
lucky.Fill_Screen(0x00);
lucky.Char_F6x8(0,0,"HelTec AutoMation");
lucky.Char_F6x8(0,2,"cn.heltec@gmail.com");
lucky.Char_F6x8(0,4,"Made in china");
delay(5000);
lucky.Fill_Screen(0x00);
lucky.Draw_BMP(0,0,128,8,BMP1);
delay(5000);
}
(#) sylvanus67 hozzászólása Feb 22, 2018 /
 
Sziasztok!

Vettem egy ilyen OLED kijelzőt: SSD1306 OLED I2C. Link

CO2-kijelzőt akarok építeni arduino Pro Micro-val. Ez alapján: link

Összeállítottam próbapadon, de nem világít az OLED, így nem tudom, hogy az OLED nem hibás-e?
Egyáltalán kell-e világítania, ha a Vin-en és GND-n megvan 4,8 V, vagy csak akkor ad életjelet, ha a Pro Microvezérli?

Nagyon kezdő vagyok a témában
(#) Bakman válasza sylvanus67 hozzászólására (») Feb 22, 2018 /
 
Bekapcsoláskor nem mutat semmit, kell neki a vezérlés, hogy melyik pixeleket kapcsolja be.
(#) bbb válasza sylvanus67 hozzászólására (») Feb 22, 2018 /
 
Csak azután indul be, ha már megtörtént az inicializálása. A PIC kezdőknek topikba feltettem tavaly valamikor azt a kódot, ami nekem működik pic18f25j50 mikrovezérlőn xc8 fordítóval. Ha arduinoval akarod meghajtani, akkor az adafruit lib-et nézd meg és egészítsd ki a VCC_PUMP bekapcsolása paranccsal (csak ezt hagyták ki belőle), utána be fog indulni.
(#) sylvanus67 válasza bbb hozzászólására (») Feb 23, 2018 /
 
Köszönöm a segítséget.


Most jobban megnézve a kapott Pro micro szerintem 3,3 V-os (J1 jumper nyitott), pedig 5 V-ost rendeltem.

Nem ez lehet a baj, hogy nem illeszkedik az OLED-del?
(#) bbb válasza sylvanus67 hozzászólására (») Feb 23, 2018 /
 
Én gombelemről (cr2032 - 3V) használom és működik. De már az előbb is leírtam, hogy a VCC_PUMP beindítása is kell (0x8D utasítás), különben nem fog menni. Szórakoztam én is vele eleget, mikor végre össze-vissza pontok megjelentek nagy volt a boldogság, addig is a Logic segített nézni az i2c kommunikációt, hogy mi megy ki ténylegesen a vonalon.

Az én inicializáló kódom így néz ki, rendben működik (pic18f25j50 mikrovezérlőn):
  1. void init() {
  2.     OpenI2C1(MASTER, 0);
  3.     // Init sequence
  4.     ssd1306_command(SSD1306_DISPLAYOFF); // 0xAE
  5.     ssd1306_command(SSD1306_SETDISPLAYCLOCKDIV); // 0xD5
  6.     ssd1306_command(0x80); // the suggested ratio 0x80
  7.     ssd1306_command(SSD1306_SETMULTIPLEX); // 0xA8
  8.     ssd1306_command(SSD1306_LCDHEIGHT_1);
  9.     ssd1306_command(SSD1306_SETDISPLAYOFFSET); // 0xD3
  10.     ssd1306_command(0x0); // no offset
  11.     ssd1306_command(SSD1306_SETSTARTLINE | 0x0); // line #0
  12.     ssd1306_command(SSD1306_CHARGEPUMP); // 0x8D
  13.     ssd1306_command(0x14);
  14.     ssd1306_command(SSD1306_MEMORYMODE); // 0x20
  15.     ssd1306_command(0x00); // 0x0 act like ks0108
  16.     ssd1306_command(SSD1306_SEGREMAP);
  17.     ssd1306_command(SSD1306_COMSCANDEC);
  18.     ssd1306_command(SSD1306_SETCOMPINS); // 0xDA
  19.     ssd1306_command(0x12);
  20.     ssd1306_command(SSD1306_SETCONTRAST); // 0x81
  21.     ssd1306_command(0xCF);
  22.     ssd1306_command(SSD1306_SETPRECHARGE); // 0xd9
  23.     ssd1306_command(0xF1);
  24.     ssd1306_command(SSD1306_SETVCOMDETECT); // 0xDB
  25.     ssd1306_command(0x40);
  26.     ssd1306_command(SSD1306_DISPLAYALLON_RESUME); // 0xA4
  27.     //ssd1306_command(SSD1306_DISPLAYALLON);
  28.     ssd1306_command(SSD1306_NORMALDISPLAY); // 0xA6
  29.     ssd1306_command(SSD1306_DEACTIVATE_SCROLL);
  30.     ssd1306_command(SSD1306_DISPLAYON); //--turn on oled panel
  31. };
A hozzászólás módosítva: Feb 23, 2018

IMAG0212.jpg
    
(#) sylvanus67 válasza bbb hozzászólására (») Feb 23, 2018 /
 
Idézet:
„VCC_PUMP beindítása is kell (0x8D utasítás)”


Ez már benne van az Adafruit1306-ban.cpp-ben és Adafruit1306-ban.h-ban is.
(#) bbb válasza sylvanus67 hozzászólására (») Feb 23, 2018 /
 
Amikor én néztem a githubon utoljára, akkor még nem volt. Ajánlom figyelmedbe, hogy az adatlapot el lehet érni a neten és elég értelmesen le van benne írva minden utasítás. A displayallon utasítás minden pixelt bekapcsol, nekem már azért van kikommentelve, mert már tudom, hogy működik a bekapcsolás, viszont tesztelésre jó volt.
De nem tudom te mit küldesz ki az i2c vonalain, egyáltalán az adatvonalak (SCL, SDA) fel vannak-e húzva egy-egy ellenálláson keresztül tápvonalra? Van véletlenül logikai analizátorod (fillérekért lehet kapni alin), amivel tudod nézni mi történik az adatvonalaidon? Az ilyen problémákon rengeteget tud ám segíteni, ha meg tudod nézni mi történik!
(#) sylvanus67 válasza bbb hozzászólására (») Feb 23, 2018 /
 
Kösz, hogy ennyit segítesz!


Közben olvasva a doksikat a neten találtam olyat, hogy az OLED-nek be kell állítani címet:

ez az eredeti:

display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x64)

átjavítottam, mert az én OLED-em hátoldalán ez van:

display.begin(SSD1306_SWITCHCAPVCC, 0x78); // initialize with the I2C addr 0x3C (for the 128x64)


de így sem ment.

Hogy kizárjam a Pro micro hibáját rátöltöttem egy led villogtatót, az tökéletesen működik (hál Isten).

Az adatvonalak fel vannak húzva a tápvonalra egy-egy 5,1k-os ellenállásokon át. (Az eredeti kapcsolás még egy 47n-os kondit is emleget, de azt még nem raktam be, remélem nem az a baj, valakinek anélkül is működött.



Merre tovább? displayall -t még megnézem.
A hozzászólás módosítva: Feb 23, 2018
(#) bbb válasza sylvanus67 hozzászólására (») Feb 23, 2018 /
 
Megint megkérdezem. Van logikai analizátorod, amivel a kommunikációt tudod figyelni? Ha nincs, akkor sincs veszve semmi, csak trükközni kell kicsit.
Lehet, hogy nem beszélget a két eszközöd a rossz címzés miatt. Én simán írnék egy annyi programot, ami megpróbál kommunikálni minden létező címen egymás után (egy ciklus), s ha valamelyiken van válasz, akkor ott megáll. Mindezt persze úgy, hogy közben soros portra írnám a címeket kb. így 0x3A - NACK, 0x3B - NACK, 0x3C - ACK, ezzel a módszerrel legalább a címét meg tudnád találni.

Egyébként az 5.1k kicsit sok is lehet, én 2k2-vel szoktam ezt megoldani. Próbáld meg lecserélni, előfordulhat, hogy emiatt nem megy a kommunikáció.

Ha pedig jobban megnézed a panelt, akkor láthatod rajta azt is, hogy melyik átkötést kellene máshova forrasztanod, hogy címet válts
Következő: »»   1 / 2
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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