Дисплей OLED LCD Display I2C 0.96 128X64

Forvad
Offline
Зарегистрирован: 09.02.2016

так любой пример показывает .. труп?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А чё, красиво!

Точки шевелятся или статичны?

Forvad
Offline
Зарегистрирован: 09.02.2016

на дефолтовом примере: c:\Program Files (x86)\Arduino\libraries\Adafruit_SSD1306\examples\ssd1306_128x64_i2c\ssd1306_128x64_i2c.ino

несколько штук снизу шевилились и раз даже весь экран ровным засветился ... ща сколько разных примеров не перебираю - всё одна картинка .. статична. Меняется ли "картинка" после перезапуска чт- то не пойму .. помоему одинаковая

BRUTUS
Offline
Зарегистрирован: 13.05.2016

...дата и клок точно не перепутаны? Знаю банально и тупое, но спрошу, чтобы откинуть)
Аппаратное i2c в атмегах - data в А4, clock в А5

Logik
Offline
Зарегистрирован: 05.08.2014

BRUTUS пишет:

...дата и клок точно не перепутаны? Знаю банально и тупое, но спрошу, чтобы откинуть)
Аппаратное i2c в атмегах - data в А4, clock в А5

Нипахоже ниразу. Тогда бы адресовать экран не выходило бы и никогда не менялось бы.   

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

А он точно I2C? Чёт не похоже, ног слишком много, похоже что на SPI залочен, там чёт выпаивать надо, ищите, у меня был нормальный с 4 ногами, он точно на IIC лотится, или адрес по IIC определился?

BRUTUS
Offline
Зарегистрирован: 13.05.2016

кстати да, автор, дай пожалуйста фото ног читабельное, потом пойдёт конкретика

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016
А этот пример попробуйте

// OLED_I2C_Graph_Demo
// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
// web: http://www.RinkyDinkElectronics.com/
//
// A quick demo of how to use my OLED_I2C library.
//
// To use the hardware I2C (TWI) interface of the Arduino you must connect
// the pins as follows:
//
// Arduino Uno/2009:
// ----------------------
// Display:  SDA pin   -> Arduino Analog 4 or the dedicated SDA pin
//           SCL pin   -> Arduino Analog 5 or the dedicated SCL pin
//
// Arduino Leonardo:
// ----------------------
// Display:  SDA pin   -> Arduino Digital 2 or the dedicated SDA pin
//           SCL pin   -> Arduino Digital 3 or the dedicated SCL pin
//
// Arduino Mega:
// ----------------------
// Display:  SDA pin   -> Arduino Digital 20 (SDA) or the dedicated SDA pin
//           SCL pin   -> Arduino Digital 21 (SCL) or the dedicated SCL pin
//
// Arduino Due:
// ----------------------
// Display:  SDA pin   -> Arduino Digital 20 (SDA) or the dedicated SDA1 (Digital 70) pin
//           SCL pin   -> Arduino Digital 21 (SCL) or the dedicated SCL1 (Digital 71) pin
//
// The internal pull-up resistors will be activated when using the 
// hardware I2C interfaces.
//
// You can connect the OLED display to any available pin but if you use 
// any other than what is described above the library will fall back to
// a software-based, TWI-like protocol which will require exclusive access 
// to the pins used, and you will also have to use appropriate, external
// pull-up resistors on the data and clock signals.
//

#include <OLED_I2C.h>

OLED  myOLED(SDA, SCL, 8);

extern uint8_t SmallFont[];
extern uint8_t logo[];
extern uint8_t The_End[];
extern uint8_t pacman1[];
extern uint8_t pacman2[];
extern uint8_t pacman3[];
extern uint8_t pill[];

float y;
uint8_t* bm;
int pacy;

void setup()
{
  myOLED.begin();
  myOLED.setFont(SmallFont);
  randomSeed(analogRead(7));
}

void loop()
{
  myOLED.clrScr();
  myOLED.drawBitmap(0, 16, logo, 128, 36);
  myOLED.update();

  delay(3000);
  
  myOLED.clrScr();
  myOLED.print("OLED_I2C", CENTER, 0);
  myOLED.print("DEMO", CENTER, 28);
  myOLED.drawRect(50, 26, 78, 36);
  for (int i=0; i<6; i++)
  {
    myOLED.drawLine(79, 26+(i*2), 105-(i*3), 26+(i*2));
    myOLED.drawLine(22+(i*3), 36-(i*2), 50, 36-(i*2));
  }
  myOLED.print("(C)2015 by", CENTER, 48);
  myOLED.print("Henning Karlsen", CENTER, 56);
  myOLED.update();

  delay(5000);
  
  myOLED.clrScr();
  for (int i=0; i<64; i+=2)
  {
    myOLED.drawLine(0, i, 127, 63-i);
    myOLED.update();
  }
  for (int i=127; i>=0; i-=2)
  {
    myOLED.drawLine(i, 0, 127-i, 63);
    myOLED.update();
  }

  delay(2000);
  
  myOLED.clrScr();
  myOLED.drawRect(0, 0, 127, 63);
  for (int i=0; i<64; i+=4)
  {
    myOLED.drawLine(0, i, i*2, 63);
    myOLED.update();
  }
  for (int i=0; i<64; i+=4)
  {
    myOLED.drawLine(127, 63-i, 127-(i*2), 0);
    myOLED.update();
  }

  delay(2000);
  
  myOLED.clrScr();
  for (int i=0; i<10; i++)
  {
    myOLED.drawRoundRect(i*3, i*3, 127-(i*3), 63-(i*3));
    myOLED.update();
  }

  delay(2000);
  
  myOLED.clrScr();
  for (int i=0; i<25; i++)
  {
    myOLED.drawCircle(64, 32, i*3);
    myOLED.update();
  }

  delay(2000);
  
  myOLED.clrScr();
  myOLED.drawRect(0, 0, 127, 63);
  myOLED.drawLine(0, 31, 127, 31);
  myOLED.drawLine(63, 0, 63, 63);
  for (int c=0; c<4; c++)
  {
    for (int i=0; i<128; i++)
    {
      y=i*0.04974188368183839294232518690191;
      myOLED.invPixel(i, (sin(y)*28)+31);
      myOLED.update();
      delay(10);
    }
  }

  delay(2000);

  for (int pc=0; pc<3; pc++)
  {
    pacy=random(0, 44);
  
    for (int i=-20; i<132; i++)
    {
      myOLED.clrScr();
      for (int p=6; p>((i+20)/20); p--)
        myOLED.drawBitmap(p*20-8, pacy+7, pill, 5, 5);
      switch(((i+20)/3) % 4)
      {
        case 0: bm=pacman1;
                break;
        case 1: bm=pacman2;
                break;
        case 2: bm=pacman3;
                break;
        case 3: bm=pacman2;
                break;
      }
      myOLED.drawBitmap(i, pacy, bm, 20, 20);
      myOLED.update();
      delay(10);
    }
  }

  for (int i=0; i<41; i++)
  {
    myOLED.clrScr();
    myOLED.drawBitmap(22, i-24, The_End, 84, 24);
    myOLED.update();
    delay(50);
  }
  myOLED.print("Runtime (ms):", CENTER, 48);
  myOLED.printNumI(millis(), CENTER, 56);
  myOLED.update();
  for (int i=0; i<5; i++)
  {
    myOLED.invert(true);
    delay(1000);
    myOLED.invert(false);
    delay(1000);
  }
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Попробуйте код и библиотеку, что выше, 100% рабочая

konog
Offline
Зарегистрирован: 17.12.2015

На картинке oled SPI, а в скетче SDA

Logik
Offline
Зарегистрирован: 05.08.2014

konog пишет:

На картинке oled SPI, а в скетче SDA

Внатуре ))). Ну то мелочи ;) Питани правильно подано, и даже не 220. )))))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ТС, не расстраивайтесь. Вспомните первый закон Скотта:

«Неважно, что что-то идёт неправильно. Возможно, это хорошо выглядит…».

BRUTUS
Offline
Зарегистрирован: 13.05.2016

Не будем дожидаться товарища топикстартера, по интерфейсу его дивайс такой:

То есть  SPI, не знаю где товарищ его достал но штука редкая и желанная (кадров на 120 в секунду способна при оптимизации)
И подключать понятно используя соотв. библиотеки

Первый попавшийся гайд по SPI OLED

P.S. "OLED LCD". Дичайший лингвистический штамп родом из китайских онлайн торговых площадок, взаимоисключающие параграфы. Это как "двухтактный электроскутер"

Logik
Offline
Зарегистрирован: 05.08.2014

BRUTUS пишет:

То есть  SPI, не знаю где товарищ его достал но штука редкая и желанная (кадров на 120 в секунду способна при оптимизации)

Нахрена ж их аж 120. И от того что в него загрузить картинку 120 раз его кадровая развертка не ускорится до 120Гц. Так что 3Д с активными очками тоже не получится ;)

Ценность девайса в другом, в отличии от i2c собрата, из этого можна вычитывать изображение. Что обеспечивает возможность без шума и пыли прорисовывать отдельновзятый пиксель.

На али их валом, но пошти в 2 раза дороже i2c-шных.

BRUTUS
Offline
Зарегистрирован: 13.05.2016

Logik пишет:
из этого можна вычитывать изображение. Что обеспечивает возможность без шума и пыли прорисовывать отдельновзятый пиксель.

...в этом и красота, часики и графики всяческие топят сотни кадров в секунду, в зависимости от обьёма перерисовки

Logik
Offline
Зарегистрирован: 05.08.2014

Непонял с чего Вы это решили и какой в этом смысл? Глаз не успеет увидеть, экран не успеет отрисовать. Часики перерисовывать 2 раза в сек. чтоб мигало в секундном ритме, графики всякий просто удобней строить если можно выводить точку поверх вычитаного с экрана(но в общем то и без этого можна).  

Forvad
Offline
Зарегистрирован: 09.02.2016

Да, экранчик такой как на фото  BRUTUS

 ... не знаю нужны ли мне эти 120fps? возможно конечно я поторопился но что есть - то есть :) на счёт редкости не знаю, он был взят по описанию как  I2C , а оказался вот такой .. а т.к знаток я ещё тот :) а ютуб наполнен подключениеми именно I2C экранов .. то руководствуясь этими табличками перепаял перемычки и подключил. Было 4SPI

адрес 0x3C .. поймал сканером. И вот в результате имеем звёздное небо .. :) возможно это и красиво :) но хотлось бы более приземленной картинки :)

BRUTUS
Offline
Зарегистрирован: 13.05.2016

Ну так теперь есть кино?

P.S. СПС за табличку по интерфейсам, возможно переделаю свой на spi

P.P.S. Скорость имеет значение в анимации, топорная прокрутка и переходы не особо эстетичное дело

Forvad
Offline
Зарегистрирован: 09.02.2016

ua6em пишет:

Попробуйте код и библиотеку, что выше, 100% рабочая

:( попробовал

C:\Windows\Temp\ccZ1PUBx.ltrans0.ltrans.o: In function `main':
ccZ1PUBx.ltrans0.o:(.text.startup+0x256): undefined reference to `logo'
ccZ1PUBx.ltrans0.o:(.text.startup+0x258): undefined reference to `logo'
ccZ1PUBx.ltrans0.o:(.text.startup+0x746): undefined reference to `pacman2'
ccZ1PUBx.ltrans0.o:(.text.startup+0x74a): undefined reference to `pacman2'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7b2): undefined reference to `pill'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7b4): undefined reference to `pill'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7ee): undefined reference to `pacman1'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7f0): undefined reference to `pacman1'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7fc): undefined reference to `pacman3'
ccZ1PUBx.ltrans0.o:(.text.startup+0x7fe): undefined reference to `pacman3'
ccZ1PUBx.ltrans0.o:(.text.startup+0x868): undefined reference to `The_End'
ccZ1PUBx.ltrans0.o:(.text.startup+0x86a): undefined reference to `The_End'
collect2.exe: error: ld returned 1 exit status
exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.

Forvad
Offline
Зарегистрирован: 09.02.2016

если ткнуть "-" в RST -  экран гаснет и больше не загорается. но если после этого нажать ресет .. то изображение появляется но его с каждым новым кадром кособенит. когда может ровно стартануть, а когда сразу криво начинается. т.е. цифры по экрану гуляют сами по себе в скетче просто прибавляется цифра. Если ресетить просто так - звездное небо не пропадает

Forvad
Offline
Зарегистрирован: 09.02.2016

пришел чисто I2C экранчик .. он работает как надо ... а этот видимо надо пробовать возвращать на 4spi ... может хоть там заработает

BRUTUS
Offline
Зарегистрирован: 13.05.2016

....и что характерно айтуси дешевле и проще в работе)

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

BRUTUS пишет:

....и что характерно айтуси дешевле и проще в работе)

и медленнее чем SPI...

Forvad
Offline
Зарегистрирован: 09.02.2016

да что ж это за напасть! :( ... черт же дёрнул меня снова обновится. Ну как же ж ... новая версия  :)

изображение опять "перекосило" ... хотя до обновления на этой же НАНе точно было нормально., т.к я новый экран проверял как раз эти скетчем. Подумал вначале, что с самим экраном что-то - ан нет, в УНО оказался залит этот же скетч - он кажет номально.

Подскажите, что произошло и можно ли это както исправить

 

 

 

Logik
Offline
Зарегистрирован: 05.08.2014

Что обновляли то на новую версию?

ПС. Вобще по грамотному обновлятся не потому что выщла новая версия а потому что затребовался функционал отсутствующий в старой. Такое простое правило спасает от весёлых приключений.

Forvad
Offline
Зарегистрирован: 09.02.2016

Logik пишет:

Что обновляли то на новую версию?

arduino-1.6.8-windows.exe на arduino-1.8.0-windows.exe

Forvad
Offline
Зарегистрирован: 09.02.2016

а ларчик просто открывался :)) 

в файле ...\libraries\Adafruit_SSD1306\Adafruit_SSD1306.h надо было раскомментировать свой экранчик .. по умолчанию стоял 128_32

#define SSD1306_128_64
// #define SSD1306_128_32
// #define SSD1306_96_16