Неравномерность свечения фона OLED 1306.
- Войдите на сайт для отправки комментариев
Втр, 18/08/2015 - 13:38
Заливаем фон, выводим на него большое и черное. Видим за ним заметно более яркую (обведено синим) область. Ей границы ( обведены красным) особо четко выделяются. Че за на..? У всех так? Я такого дерьма с времен ЧБ телевизоров не видел. Там это шлейфом называлось.

Наклонные полосы - издержки фото, в реале их нет.
шлейф какой длины?
Гдето сантиметров 7. Интересно, наблюдается ли подобное у других.
Я бы в первую очередь встал на Vcc осциллографом, и посмотрел пульсации..
Я бы в первую очередь встал на Vcc осциллографом, и посмотрел пульсации..
Я бы тоже. Да нету осцилографа. Но вобще им не откуда особо взятся. Питание с USB, плата нано, кроме OLED ничего нет. OLED жрет мало. К той же плате подключаю TFT 2,4 дюйма и все нормально.Немного смущает отсутст электролита на плате OLED. Но с его то потреблением..
Думаю тут надо определится одно из двух:
1. Бракованый немножко - на электролите сэкономили или ещё что.
2. Все такие, и режим такой ему противопоказан.
Logik, ежели нет осцилла, то запитаться от эталонного БП. Сколько там, 5 вольт? С наны кстати идёт примерно 4,6 при питании от USB, может не хватать.
Автор, дайте код, вечером попробую проверить...
Я бы в первую очередь встал на Vcc осциллографом, и посмотрел пульсации..
А я бы в первую очередь встал на Vcc конденсатором 2200-3300 , и посмотрел пульсации..
Код для поигратся.
#define SDA_PORT PORTC #define SDA_RPORT PINC #define SDA_DDR DDRC #define SDA_PIN 4 #define SCL_PORT PORTC #define SCL_DDR DDRC #define SCL_PIN 5 #define SET_HIGHT(port,pin) bitSet(port,pin); #define SET_LOW(port,pin) bitClear(port,pin); #define SDA_HIGHT SET_HIGHT(SDA_PORT, SDA_PIN);asm volatile ("nop"); #define SDA_LOW SET_LOW(SDA_PORT, SDA_PIN) #define SCL_HIGHT SET_HIGHT(SCL_PORT, SCL_PIN) #define SCL_LOW SET_LOW(SCL_PORT, SCL_PIN) #define SDA_OUT bitSet(SDA_DDR, SDA_PIN); #define SDA_IN bitClear(SDA_DDR,SDA_PIN); #define SSD1306_ADDR 0x3C #define LEFT 0 #define RIGHT 9999 #define CENTER 9998 #define SSD1306_COMMAND 0x00 #define SSD1306_DATA 0xC0 #define SSD1306_DATA_CONTINUE 0x40 // SSD1306 Commandset // ------------------ // Fundamental Commands #define SSD1306_SET_CONTRAST_CONTROL 0x81 #define SSD1306_DISPLAY_ALL_ON_RESUME 0xA4 #define SSD1306_DISPLAY_ALL_ON 0xA5 #define SSD1306_NORMAL_DISPLAY 0xA6 #define SSD1306_INVERT_DISPLAY 0xA7 #define SSD1306_DISPLAY_OFF 0xAE #define SSD1306_DISPLAY_ON 0xAF #define SSD1306_NOP 0xE3 // Scrolling Commands #define SSD1306_HORIZONTAL_SCROLL_RIGHT 0x26 #define SSD1306_HORIZONTAL_SCROLL_LEFT 0x27 #define SSD1306_HORIZONTAL_SCROLL_VERTICAL_AND_RIGHT 0x29 #define SSD1306_HORIZONTAL_SCROLL_VERTICAL_AND_LEFT 0x2A #define SSD1306_DEACTIVATE_SCROLL 0x2E #define SSD1306_ACTIVATE_SCROLL 0x2F #define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3 // Addressing Setting Commands #define SSD1306_SET_LOWER_COLUMN 0x00 #define SSD1306_SET_HIGHER_COLUMN 0x10 #define SSD1306_MEMORY_ADDR_MODE 0x20 #define SSD1306_SET_COLUMN_ADDR 0x21 #define SSD1306_SET_PAGE_ADDR 0x22 // Hardware Configuration Commands #define SSD1306_SET_START_LINE 0x40 #define SSD1306_SET_SEGMENT_REMAP 0xA0 #define SSD1306_SET_MULTIPLEX_RATIO 0xA8 #define SSD1306_COM_SCAN_DIR_INC 0xC0 #define SSD1306_COM_SCAN_DIR_DEC 0xC8 #define SSD1306_SET_DISPLAY_OFFSET 0xD3 #define SSD1306_SET_COM_PINS 0xDA #define SSD1306_CHARGE_PUMP 0x8D // Timing & Driving Scheme Setting Commands #define SSD1306_SET_DISPLAY_CLOCK_DIV_RATIO 0xD5 #define SSD1306_SET_PRECHARGE_PERIOD 0xD9 #define SSD1306_SET_VCOM_DESELECT 0xDB uint8_t Top; uint8_t Left; uint8_t Pages; uint8_t Width; uint8_t* Canva; void sendTWIcommand(byte value) { sendTWIcommandCnt(value); sendStop(); } void sendTWIcommandCnt(byte value) { sendStart(SSD1306_ADDR<<1); waitForAck(); writeByte(SSD1306_COMMAND); waitForAck(); writeByte(value); waitForAck(); } void shiftOut(byte v) { for (byte i=8;i;i--) { if (v & 0x80) { SDA_HIGHT;} else SDA_LOW; SCL_HIGHT; v <<=1; SCL_LOW; } } void writeByte(uint8_t value) { SDA_OUT; shiftOut(value); } void sendStart(byte addr) { SDA_OUT; SDA_HIGHT; SCL_HIGHT; SDA_LOW; SCL_LOW; shiftOut(addr); } void sendStop() { SDA_OUT; SDA_LOW; SCL_HIGHT; SDA_HIGHT; SDA_IN; } void sendNack() { SDA_OUT; SCL_LOW; SDA_HIGHT; SCL_HIGHT; SCL_LOW; SDA_IN; } void sendAck() { SDA_OUT; SCL_LOW; SDA_LOW; SCL_HIGHT; SCL_LOW; SDA_IN; } void waitForAck() { SDA_IN; SCL_HIGHT; loop_until_bit_is_clear(SDA_RPORT, SDA_PIN); SCL_LOW; } void begin() { bitSet(SCL_DDR, SCL_PIN); sendTWIcommand(SSD1306_DISPLAY_OFF); sendTWIcommand(SSD1306_SET_DISPLAY_CLOCK_DIV_RATIO); sendTWIcommand(0x80); sendTWIcommand(SSD1306_SET_MULTIPLEX_RATIO); sendTWIcommand(0x3F); sendTWIcommand(SSD1306_SET_DISPLAY_OFFSET); sendTWIcommand(0x0); sendTWIcommand(SSD1306_SET_START_LINE | 0x0); sendTWIcommand(SSD1306_CHARGE_PUMP); sendTWIcommand(0x14); sendTWIcommand(SSD1306_MEMORY_ADDR_MODE); sendTWIcommand(0x00); sendTWIcommand(SSD1306_SET_SEGMENT_REMAP | 0x1); sendTWIcommand(SSD1306_COM_SCAN_DIR_DEC); sendTWIcommand(SSD1306_SET_COM_PINS); sendTWIcommand(0x12); sendTWIcommand(SSD1306_SET_CONTRAST_CONTROL); sendTWIcommand(0xCF); sendTWIcommand(SSD1306_SET_PRECHARGE_PERIOD); sendTWIcommand(0xF1); sendTWIcommand(SSD1306_SET_VCOM_DESELECT); sendTWIcommand(0x40); sendTWIcommand(SSD1306_DISPLAY_ALL_ON_RESUME); sendTWIcommand(SSD1306_NORMAL_DISPLAY); sendTWIcommand(SSD1306_DISPLAY_ON); } void InitFrame(uint8_t bLeft, uint8_t bPageTop, uint8_t bWidth, uint8_t bPages, uint8_t* buf) { Canva = buf; Width = bWidth; Top = bPageTop; Left = bLeft; Pages = bPages; } byte G(uint16_t a) { if ((a<128) ||(a>128*5) || (a&0x7f)>100) return 0xff; return 0; } void setup() { begin(); InitFrame(0, 0, 128, 7, (byte*)&G); updateCallBack(); } void updateCallBack(void) { if(!Canva) return; sendTWIcommand(SSD1306_SET_COLUMN_ADDR); sendTWIcommand(Left); sendTWIcommand(Left+Width-1); sendTWIcommand(SSD1306_SET_PAGE_ADDR); sendTWIcommand(Top); sendTWIcommand(Top+Pages-1); sendStart(SSD1306_ADDR<<1); waitForAck(); writeByte(SSD1306_DATA_CONTINUE); waitForAck(); for (int b=0; b<Width*Pages; b++) // Send data { writeByte(((byte (*)(uint16_t))Canva)(b)); waitForAck(); } sendStop(); } void loop() { }У меня тоже что-то такое наблюдается. Это, видимо конструктивная особенность. Когда жирная черная горизонтальная полоса, сбоку от нее светится ярче. Пишите белым по черному, и ни чего не будет.
У меня в тестовом скетче черным по белому жирно написано "The end!", так это смотрится на светлом экране как-будто эта надпись на светлой вдоль экрана полосе.
Это, видимо конструктивная особенность.
Похоже на то. Может ещё кто подтвердит?
Это, видимо конструктивная особенность.
Похоже на то. Может ещё кто подтвердит?
я думаю, что это конструктивная особенность, обусловленная хреновым качесвом дисплея - не факт, что из партии брака сей дисплей или по пути производитель-потребитель придавили ега чуть.
Да, похоже что это конструктивная особенность. Попробовал на своем двухцветном дисплее. Дисплей по умолчанию по spi, поэтому на коленке сваял свой пример. Видны полосы у основания единиц. На фото видно хуже.
Так в том и основной вопрос - тока мой полубрак или все такие. Но похоже что все. В мануале шото пишут про управляемый источник тока для всего ряда пикселей. Величина тока задается командой контрастности. Но этот ток выдается на весь ряд, и если стробы отключают часть пикселей, то ток похоже делится между остальными. Вот они и ярче.
Если хотите, попробую еще на десятке таких же дисплеев :) Хотя они все с одной партии....
Со временем статистика наберется и по разным партиям. Ещё не один на эти грабли прыгнет. А пока я буду исходить из того, что светлый фон не для этих экранов.
Со временем статистика наберется и по разным партиям. Ещё не один на эти грабли прыгнет. А пока я буду исходить из того, что светлый фон не для этих экранов.
Да чего там...Хороший экранчик. На белым по черному все ОК. Всего 2 проводочка не считая питания, малое энергопотребление, работоспособность без переделки на 3.3 и 5 вольт, отличный угол обзора, приятное четкое изображение.
Отличный экранчик!
Согласен. Симпатичный. И достаточно шустрый. Я сча на нем осцилограф сварганил. Просто надо помнить что светлый фон не для этих экранов.