Форум РадиоКот https://radiokot.ru/forum/ |
|
Смещение по X на OLED SSD1306 баг? https://radiokot.ru/forum/viewtopic.php?f=61&t=193735 |
Страница 1 из 1 |
Автор: | zombie47 [ Вс июн 09, 2024 03:39:55 ] |
Заголовок сообщения: | Смещение по X на OLED SSD1306 баг? |
Заказываю эти дисплейчики (1.3" OLED Module 1.3 inch Display Module White/Blue 128X64SPI/IIC I2C ) уже давно. Так же давно заметил толи баг, толи не правильно инициализирую. Причем я использовал разные библиотеки, и все время этот баг. Код: status += ssd1306_WriteCommand(hi2c, 0xAE); // Display off status += ssd1306_WriteCommand(hi2c, 0x20); // Set Memory Addressing Mode status += ssd1306_WriteCommand(hi2c, 0x10); // 00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid status += ssd1306_WriteCommand(hi2c, 0xB0); // Set Page Start Address for Page Addressing Mode,0-7 status += ssd1306_WriteCommand(hi2c, 0xC0); //Set COM Output Scan Direction //C0 or C8 mirror vertical status += ssd1306_WriteCommand(hi2c, 0x00); // Set low column address status += ssd1306_WriteCommand(hi2c, 0x10); // Set high column address status += ssd1306_WriteCommand(hi2c, 0x40); // Set start line address status += ssd1306_WriteCommand(hi2c, 0x81); // set contrast control register status += ssd1306_WriteCommand(hi2c, 0xFF); status += ssd1306_WriteCommand(hi2c, 0xA0); //--set segment re-map 0 to 127 // A1 or A0 mirror horizontal status += ssd1306_WriteCommand(hi2c, 0xA6); // Set normal display status += ssd1306_WriteCommand(hi2c, 0xA8); // Set multiplex ratio(1 to 64) status += ssd1306_WriteCommand(hi2c, SSD1306_HEIGHT - 1); //0x3F status += ssd1306_WriteCommand(hi2c, 0xA4); // 0xa4,Output follows RAM content;0xa5,Output ignores RAM content status += ssd1306_WriteCommand(hi2c, 0xD3); // Set display offset status += ssd1306_WriteCommand(hi2c, 0x00); // No offset status += ssd1306_WriteCommand(hi2c, 0xD5); // Set display clock divide ratio/oscillator frequency status += ssd1306_WriteCommand(hi2c, 0xF0); // Set divide ratio status += ssd1306_WriteCommand(hi2c, 0xD9); // Set pre-charge period status += ssd1306_WriteCommand(hi2c, 0x22); status += ssd1306_WriteCommand(hi2c, 0xDA); // Set com pins hardware configuration status += ssd1306_WriteCommand(hi2c, SSD1306_COM_LR_REMAP << 5 | SSD1306_COM_ALTERNATIVE_PIN_CONFIG << 4 | 0x02); status += ssd1306_WriteCommand(hi2c, 0xDB); // Set vcomh status += ssd1306_WriteCommand(hi2c, 0x20); // 0x20,0.77xVcc status += ssd1306_WriteCommand(hi2c, 0x8D); // Set DC-DC enable status += ssd1306_WriteCommand(hi2c, 0x14); // status += ssd1306_WriteCommand(hi2c, 0xAF); // Turn on SSD1306 panel Например вот инициализация. В таком случае есть смещение на 2 пикселя по горизонтали влево. То-есть по Х первые два ряда пикселей как бы за экраном. Но зато справа по X два ряда дополнительных пикселей, но они мусорные, в них нельзя рисовать. Мне приходится изголятся, пишу в настройках хеадера что у меня ширина дисплея 130 пикселей. и рисую квадрат например вот так: Draw_Rectangle(2, 0, 129, 63, NOFILL, White, SQUARE); ну то-есть рисую по Х с 2 до 129 , а не с 0 по 127 как хотелось бы правильно. Ну и текст соответственно тоже приходится размещать с учетом этого смещения. Что за смещение? Кто сталкивался? В чем может быть косяк? Вложение: Вложение:
|
Автор: | Mursik [ Вс июн 09, 2024 07:54:38 ] |
Заголовок сообщения: | Re: Смещение по X на OLED SSD1306 баг? |
А может там камень SH1106? |
Автор: | uldemir [ Вс июн 09, 2024 07:58:53 ] |
Заголовок сообщения: | Re: Смещение по X на OLED SSD1306 баг? |
Лень вникать, но вы уверены, что дисплей на SSD1306. Очень много в продаже именно 1.3" дисплеев на SH1106 а у них разводка сделана так, что первые 2 пикселя (и 2 последних, хотя это не имеет значения) не подключены. Поэтому самый левый пиксель имеет адрес не 0, а 2. гуглите такой запрос: difference between ssd1306 and sh1106 |
Автор: | roman.com [ Вс июн 09, 2024 09:06:48 ] |
Заголовок сообщения: | Re: Смещение по X на OLED SSD1306 баг? |
Кто сталкивался? Я сталкивался )) https://www.radiokot.ru/forum/viewtopic ... 8&t=190542 Вложение: Вложение: да, действительно... первые два пикселя почему то не работают... когда пишу приходится смещать курсов на два пикселя... Код: /////////////////////////////////////////////// курсор: // 128x64 = 1024 байт: цифра 5 + пробел 1 = 6 байт. 128/6=21 цифры/строка +2. void kursor(char Page) //Set Page Address { PORTB.5=0; // D/C. 0 – Function, 1 – data. OLED 128x64 SPDR=0b10110000|Page; while(!(SPSR & (1<<7))); // Y - адрес 1011xxxx SPDR=0b00010000; while(!(SPSR & (1<<7))); // X - адрес 0001xxxx Hig SPDR=0b00000010; while(!(SPSR & (1<<7))); // X - адрес 0000xxxx Low (Начальное 2). // SH1106 //SPDR=0b00000000; while(!(SPSR & (1<<7))); // X - адрес 0000xxxx Low (Начальное 0).// HDG12864F-1 PORTB.5=1; // D/C. 0 – Function, 1 – data. OLED 128x64 } причём это только у контроллера SH1106 а контроллер HDG12864F-1 работает нормально, без смещения... ![]() библиотеки я никакие не использую... я всё сам пишу)) Код: /////////////////////////////////////////////////////////// Режим OLED 128x64 -SH1106: PORTB.7=0; // SS OLED 128x64 PORTB.5=0; // D/C. 0 – Function, 1 – data. OLED 128x64 SPDR=0xA8; while(!(SPSR & (1<<7))); // сколько строк будет использовано. SPDR=0x3F; while(!(SPSR & (1<<7))); // (128x64) 64 - строки. SPDR=0x81; while(!(SPSR & (1<<7))); // контрастность. SPDR=kontr; while(!(SPSR & (1<<7)));// контрастность 0...255. -начальное 250. SPDR=0xA1; while(!(SPSR & (1<<7))); // развёртка слева направо (>>). /////////////////////////////////////////////////////////////////////////////// SPDR=0xC8; while(!(SPSR & (1<<7))); // развертка сверху вниз. // SH1106 //SPDR=0xC0; while(!(SPSR & (1<<7)));// развертка снизу вверх. // HDG12864F-1 /////////////////////////////////////////////////////////////////////////////// SPDR=0xDA; while(!(SPSR & (1<<7))); // развертка. SPDR=0x12; while(!(SPSR & (1<<7))); // прогрессивная. SPDR=0xD3; while(!(SPSR & (1<<7))); // смещение. SPDR=0x00; while(!(SPSR & (1<<7))); // смещение 0. SPDR=0x40; while(!(SPSR & (1<<7))); // 01xx xxxx - начальное строка 0. SPDR=0xAF; while(!(SPSR & (1<<7))); // Display 0xAF - ON. //SPDR=0xAE; while(!(SPSR & (1<<7))); // Display 0xAE - OFF. PORTB.5=1; // D/C. 0 – Function, 1 – data. OLED 128x64 PORTB.7=1; // SS OLED 128x64 а я думал это только у меня фигня такая)) оказывается нет... В чем может быть косяк? Заводской брак)) Китайцы... ![]() |
Автор: | zombie47 [ Вс июн 09, 2024 14:03:27 ] |
Заголовок сообщения: | Re: Смещение по X на OLED SSD1306 баг? |
Цитата: Лень вникать, но вы уверены, что дисплей на SSD1306. Очень много в продаже именно 1.3" дисплеев на SH1106 а у них разводка сделана так, что первые 2 пикселя (и 2 последних, хотя это не имеет значения) не подключены. Поэтому самый левый пиксель имеет адрес не 0, а 2. Ну конечно не уверен))) Как тут можно быть уверенным. В принципе ответ понятен. Либо SH1106 либо брак. Цитата: а я думал это только у меня фигня такая)) оказывается нет... просто все как и я ленились об этом написать спросить ) думая что только у них такая фигня. |
Автор: | veso74 [ Вс июн 09, 2024 14:35:45 ] |
Заголовок сообщения: | Re: Смещение по X на OLED SSD1306 баг? |
Из англоязычных ресурсов, через переводчик: - SSD1306 имеет расширенный набор команд по сравнению с SH1106 - SH1106 поддерживает только режим адресации страниц - В SSD1306 добавлены специальные режимы горизонтальной и вертикальной адресации - SSD1306 также поддерживает автоматическую прокрутку/scrolling Если код/библиотека использует режим адресации страниц, то будет работать с любым из контроллеров (с разницей в длине строки - 128 против 132). Если код/библиотека использует режим горизонтальной или вертикальной адресации, он будет работать только на SSD1306 Отрегулируйте длину строки и используйте дисплей. Правда, есть трудность с многосерийное производство (нужен тест на каждом вложенном дисплее). |
Автор: | roman.com [ Вс июн 09, 2024 16:21:11 ] |
Заголовок сообщения: | Re: Смещение по X на OLED SSD1306 баг? |
нет трудностей с многосерийный производством... мы добавили в меню "выбор экрана"... с сохранением в EEPROM... и трудности у нас пропали)) ![]() |
Автор: | zombie47 [ Чт июн 20, 2024 23:30:47 ] |
Заголовок сообщения: | Re: Смещение по X на OLED SSD1306 баг? |
Цитата: Что за смещение? Кто сталкивался? В чем может быть косяк? Отвечая самому себе, дополняя: сейчас еще позаморачивался с этим дисплеем. Оказывается там 127 пикселей в ширину, а не 128 ) Причем там через китайский микроскоп видна маркировка у одного светодиода 125, и далее еще два светодиода. Итого 127. Ну и вручную посчитал внимательно. 127 их. Твердо и четко! Ну там когда фонариком светишь, граница светодиодов светится и видно где они заканчиваются. |
Автор: | Муркиз [ Пт июн 21, 2024 08:32:56 ] |
Заголовок сообщения: | Re: Смещение по X на OLED SSD1306 баг? |
![]() ЗЫ. - Мы создали компьютер, чтобы экономить время ! - Нет, вы создали компьютер, чтобы убивать время ! |
Автор: | Martian [ Пт июн 21, 2024 09:05:45 ] |
Заголовок сообщения: | Re: Смещение по X на OLED SSD1306 баг? |
мда.... надо в каждой строке посчитать. Внимательно. |
Автор: | roman.com [ Пт июн 21, 2024 11:31:31 ] |
Заголовок сообщения: | Re: Смещение по X на OLED SSD1306 баг? |
Оказывается там 127 пикселей в ширину, а не 128... через китайский микроскоп видна маркировка... не слушай этих старпёров)) они вечно всем недовольны... ты всё делаешь правильно. зато теперь мы знаем, что оказывается китайцы просто забыли добавить светодиодов... ![]() |
Автор: | zombie47 [ Пт июн 21, 2024 14:04:26 ] |
Заголовок сообщения: | Re: Смещение по X на OLED SSD1306 баг? |
Так я сам старпёр ))) Блин казалось тут есть тэги для оффтоп сообщений. Но чет не вижу. |
Автор: | zombie47 [ Чт июн 27, 2024 02:40:53 ] |
Заголовок сообщения: | Re: Смещение по X на OLED SSD1306 баг? |
Цитата: Что за смещение? Кто сталкивался? В чем может быть косяк? Отвечая самому себе, дополняя: сейчас еще позаморачивался с этим дисплеем. Оказывается там 127 пикселей в ширину, а не 128 ) Причем там через китайский микроскоп видна маркировка у одного светодиода 125, и далее еще два светодиода. Итого 127. Ну и вручную посчитал внимательно. 127 их. Твердо и четко! Ну там когда фонариком светишь, граница светодиодов светится и видно где они заканчиваются. Что-то я ложанул. Перекомпилировал и тд и тп, пересчитал 128 пикселей) |
Автор: | Martian [ Чт июн 27, 2024 02:44:10 ] |
Заголовок сообщения: | Re: Смещение по X на OLED SSD1306 баг? |
Повезло, что не 4К ![]() |
Автор: | Муркиз [ Чт июн 27, 2024 07:39:50 ] |
Заголовок сообщения: | Re: Смещение по X на OLED SSD1306 баг? |
Ну и убил время... |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |