OLED display WEH001602ABPP5N00000 s kontrolérom WS0010
Moderátori: mirosne, Moderátori
- burizon
- Pokročilý člen
- Príspevky: 571
- Dátum registrácie: 07 Nov 2007, 00:00
- Bydlisko: Vranov nad Topľou
OLED display WEH001602ABPP5N00000 s kontrolérom WS0010
Ahojte,
kúpil som na otestovanie tento display WEH001602ABPP5N00000 s kontrolérom WS0010 (podobný HD44780). Inicializoval som ho na 4bit mód podľa DS. Pracoval, ale vždy sa tam objavil "nejaký šum" alebo ako to nazvať, proste vždy najprv "vybehnú" nejaké znaky,často sa zasekne a až po resete (aj viacnásobnom) robí to čo od neho chcem. Na ruských fórach súdruhovia doporučovali po zapnutí 500mS na "zorientovanie" sa displaya, potom 5x poslať 0x00 s preložením 100uS a pokračovať inicializáciou podľa DS. No v mojom prípade to nemalo žiadny vplyv na jeho "neserióznu" robotu. Aké máte skúsenosti s týmto displayom?
! Upravený názov témy pre lepšie vyhľadávanie.Snažte sa písať do názvu témy typ zariadenia.upravil: 15.10.2014 mirosne !
kúpil som na otestovanie tento display WEH001602ABPP5N00000 s kontrolérom WS0010 (podobný HD44780). Inicializoval som ho na 4bit mód podľa DS. Pracoval, ale vždy sa tam objavil "nejaký šum" alebo ako to nazvať, proste vždy najprv "vybehnú" nejaké znaky,často sa zasekne a až po resete (aj viacnásobnom) robí to čo od neho chcem. Na ruských fórach súdruhovia doporučovali po zapnutí 500mS na "zorientovanie" sa displaya, potom 5x poslať 0x00 s preložením 100uS a pokračovať inicializáciou podľa DS. No v mojom prípade to nemalo žiadny vplyv na jeho "neserióznu" robotu. Aké máte skúsenosti s týmto displayom?
! Upravený názov témy pre lepšie vyhľadávanie.Snažte sa písať do názvu témy typ zariadenia.upravil: 15.10.2014 mirosne !
- Prílohy
-
- Doc1.doc
- (56.5 KiB) 38 stiahnutí
0
Naposledy upravil/-a burizon v 15 Okt 2014, 12:55, upravené celkom 1 krát.
Re: OLED display
mam 8x2 s tym istym radicom a chova sa to presne ako pises, vratane ruskych doporuceni.
Zvazujem prepnutie na SPI a usetrim este par portov.
Inak skusal som na arduino kniznicu od adafruit a to bezi, ked som si postup prepisal do CodeVision, tak zasa nic.
Zvazujem prepnutie na SPI a usetrim este par portov.
Inak skusal som na arduino kniznicu od adafruit a to bezi, ked som si postup prepisal do CodeVision, tak zasa nic.
0
- kubo150
- Ultimate člen
- Príspevky: 3253
- Dátum registrácie: 20 Júl 2007, 00:00
- Bydlisko: Pri Bytči
- Vek: 32
- Kontaktovať používateľa:
Re: OLED display
Používaš Write komunikáciu alebo R/W komunikáciu? tzn čítaš ready príznak alebo ho SW emuluješ? Čo som pozeral knižnice na nete a zvyky, tak častejšie je používať len W komunikáciu(R/W pin natvrdo k zemi) a ready príznak displeja emulovať softvérovími pauzami, ale pre tento radič môžu byť časy iné. Neviem ako tvoja knižnica rieši pauzu, ak je to pomocou cyklenia asm nop, skúsil by som pokusne znížiť frekvenciu MCU aby sa predlžili čakacie časy, a ak ti komunikácia bude chodiť správne, znamená to, že na displej málo čakáš.
0
Som ten ktorý to vykoná.
Moje slovo:
Neverím na náhody,
Náhoda je len jedným, alebo skupinou ľudí nepochopená realita
Moje slovo:
Neverím na náhody,
Náhoda je len jedným, alebo skupinou ľudí nepochopená realita
Re: OLED display
Casy som skusal az 5 ms medzi instrukciami, tym to nie je. Ten radic ma bug na 4 bitovej komunikacii.
Nieco bolo preberane v
http://svetelektro.com/modules.php?name ... 55#p552955
Idealne 8 bit, ktory je kompatibilny alebo spi ako som pisal vyssie. Ten vyuziva vlastne 8 bit komunikaciu, ktora chodi korektne.
Nieco bolo preberane v
http://svetelektro.com/modules.php?name ... 55#p552955
Idealne 8 bit, ktory je kompatibilny alebo spi ako som pisal vyssie. Ten vyuziva vlastne 8 bit komunikaciu, ktora chodi korektne.
0
- burizon
- Pokročilý člen
- Príspevky: 571
- Dátum registrácie: 07 Nov 2007, 00:00
- Bydlisko: Vranov nad Topľou
Re: OLED display
Miro: asi na SPI to môže šlapať ok, na jednom nemeckom fore bol príklad aj s kódom, ale nepátral som ďalej.
Kubo: nečítam busy príznak, R/W je na "zemi" a robím iba pauzy. Hej môže to tak byť, že časy oproti HD44780 môžu byť iné, aj som to tuším menil, ale ešte som nemal čas si k tomu poriadne sadnúť. Chcem vyskúšať aj busy príznak neskôr.
-- Spojený príspevok 15 Okt 2014, 14:16 --
Zdes tovarišč píše, že je potrebné čítať busy príznak.
Как и обещал выкладываю простой пример.
Ранее писал о нестабильности работы, оказалось что при чтении регистра статуса в 4-ех битном режиме работы необходимо обязательно его полностью, я читал только старшие 4 бита для проверки флага занятости (бит 7).
Описание индикатора брал тут, исполнение отличается от моего, но логика работы аналогична.
Так как питание индикатора 5 вольт проверял его работу с платой STM8S-Discovery на основе шаблона описанного ранее.
Подключение линий ввода-вывода:
#define OLED_2X16_E E, 7, HIGH, OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ
#define OLED_2X16_RW E, 3, HIGH, OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ
#define OLED_2X16_RS D, 0, HIGH, OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ
#define OLED_2X16_DB7 B, 7, HIGH, OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ
#define OLED_2X16_DB6 B, 5, HIGH, OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ
#define OLED_2X16_DB5 B, 3, HIGH, OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ
#define OLED_2X16_DB4 B, 1, HIGH, OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ
#define OLED_2X16_DB7_IN B, 7, HIGH, INPUT_FLOATING_WITHOUT_ITERRUPT
#define OLED_2X16_DB6_IN B, 5, HIGH, INPUT_FLOATING_WITHOUT_ITERRUPT
#define OLED_2X16_DB5_IN B, 3, HIGH, INPUT_FLOATING_WITHOUT_ITERRUPT
#define OLED_2X16_DB4_IN B, 1, HIGH, INPUT_FLOATING_WITHOUT_ITERRUPT
Инициализируем, устанавливаем курсор (можно было и не делать этого) и отображаем символ А.
int main(void)
{
oled_2x16_init();
oled_2x16_set_cursor_position(0, 0);
oled_2x16_print_symbol('A');
while(1)
{
}
return 0;
}
Копи-паст кода:
/*
* File: oled_2x16.c
* Date: 28.08.2011
* Denis Zheleznjakov @ ZiBlog.ru
*/
#include "main.h"
//------------------------------------------------------------------------------
static void write_4bit(uint8_t data)
{
PIN_OFF(OLED_2X16_DB7);
PIN_OFF(OLED_2X16_DB6);
PIN_OFF(OLED_2X16_DB5);
PIN_OFF(OLED_2X16_DB4);
PIN_ON(OLED_2X16_E);
if (data & 0x80)
PIN_ON(OLED_2X16_DB7);
if (data & 0x40)
PIN_ON(OLED_2X16_DB6);
if (data & 0x20)
PIN_ON(OLED_2X16_DB5);
if (data & 0x10)
PIN_ON(OLED_2X16_DB4);
PIN_OFF(OLED_2X16_E);
}
//------------------------------------------------------------------------------
static uint8_t read_4bit(void)
{
uint8_t result = 0;
PIN_ON(OLED_2X16_E);
if(PIN_SIGNAL(OLED_2X16_DB7_IN))
result = 0x80;
if(PIN_SIGNAL(OLED_2X16_DB6_IN))
result |= 0x40;
if(PIN_SIGNAL(OLED_2X16_DB5_IN))
result |= 0x20;
if(PIN_SIGNAL(OLED_2X16_DB4_IN))
result |= 0x10;
PIN_OFF(OLED_2X16_E);
return result;
}
//-----------------------------------------------------------------------------
static void wait_ready(void)
{
PIN_OFF(OLED_2X16_RS);
PIN_CONFIGURATION(OLED_2X16_DB7_IN);
PIN_CONFIGURATION(OLED_2X16_DB6_IN);
PIN_CONFIGURATION(OLED_2X16_DB5_IN);
PIN_CONFIGURATION(OLED_2X16_DB4_IN);
PIN_ON(OLED_2X16_RW);
while((read_4bit() & 0x80) != 0x00)
{
read_4bit();
}
read_4bit();
PIN_OFF(OLED_2X16_RW);
PIN_CONFIGURATION(OLED_2X16_DB7);
PIN_CONFIGURATION(OLED_2X16_DB6);
PIN_CONFIGURATION(OLED_2X16_DB5);
PIN_CONFIGURATION(OLED_2X16_DB4);
}
//------------------------------------------------------------------------------
static void write_instruction(uint8_t instruction)
{
PIN_OFF(OLED_2X16_RS);
write_4bit(instruction);
write_4bit((uint8_t) (instruction << 4));
}
//------------------------------------------------------------------------------
static void write_data(uint8_t data)
{
PIN_ON(OLED_2X16_RS);
write_4bit(data);
write_4bit((uint8_t) (data << 4));
}
//-----------------------------------------------------------------------------
void oled_2x16_set_cursor_position(uint8_t row, uint8_t colum)
{
write_instruction((uint8_t) (0x80 | (row > 0 ? 0x40 : 0) | colum));
}
//-----------------------------------------------------------------------------
void oled_2x16_print_symbol(uint8_t symbol)
{
write_data(symbol);
}
//-----------------------------------------------------------------------------
void oled_2x16_print_string(uint8_t * string)
{
while (*string != 0x00)
{
write_data(*string++);
}
}
//------------------------------------------------------------------------------
void oled_2x16_init(void)
{
PIN_CONFIGURATION(OLED_2X16_E);
PIN_CONFIGURATION(OLED_2X16_RW);
PIN_CONFIGURATION(OLED_2X16_RS);
PIN_OFF(OLED_2X16_E);
PIN_OFF(OLED_2X16_RW);
PIN_OFF(OLED_2X16_RS);
PIN_CONFIGURATION(OLED_2X16_DB7);
PIN_CONFIGURATION(OLED_2X16_DB6);
PIN_CONFIGURATION(OLED_2X16_DB5);
PIN_CONFIGURATION(OLED_2X16_DB4);
write_4bit(0x20);
write_4bit(0x20);
write_4bit(0xA0);
wait_ready();
write_4bit(0x00);
write_4bit(0xC0);
wait_ready();
write_4bit(0x00);
write_4bit(0x10);
wait_ready();
write_4bit(0x00);
write_4bit(0x60);
wait_ready();
Kubo: nečítam busy príznak, R/W je na "zemi" a robím iba pauzy. Hej môže to tak byť, že časy oproti HD44780 môžu byť iné, aj som to tuším menil, ale ešte som nemal čas si k tomu poriadne sadnúť. Chcem vyskúšať aj busy príznak neskôr.
-- Spojený príspevok 15 Okt 2014, 14:16 --
Zdes tovarišč píše, že je potrebné čítať busy príznak.
Как и обещал выкладываю простой пример.
Ранее писал о нестабильности работы, оказалось что при чтении регистра статуса в 4-ех битном режиме работы необходимо обязательно его полностью, я читал только старшие 4 бита для проверки флага занятости (бит 7).
Описание индикатора брал тут, исполнение отличается от моего, но логика работы аналогична.
Так как питание индикатора 5 вольт проверял его работу с платой STM8S-Discovery на основе шаблона описанного ранее.
Подключение линий ввода-вывода:
#define OLED_2X16_E E, 7, HIGH, OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ
#define OLED_2X16_RW E, 3, HIGH, OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ
#define OLED_2X16_RS D, 0, HIGH, OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ
#define OLED_2X16_DB7 B, 7, HIGH, OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ
#define OLED_2X16_DB6 B, 5, HIGH, OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ
#define OLED_2X16_DB5 B, 3, HIGH, OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ
#define OLED_2X16_DB4 B, 1, HIGH, OUTPUT_PUSH_PULL_SPEED_LIMIT_10MHZ
#define OLED_2X16_DB7_IN B, 7, HIGH, INPUT_FLOATING_WITHOUT_ITERRUPT
#define OLED_2X16_DB6_IN B, 5, HIGH, INPUT_FLOATING_WITHOUT_ITERRUPT
#define OLED_2X16_DB5_IN B, 3, HIGH, INPUT_FLOATING_WITHOUT_ITERRUPT
#define OLED_2X16_DB4_IN B, 1, HIGH, INPUT_FLOATING_WITHOUT_ITERRUPT
Инициализируем, устанавливаем курсор (можно было и не делать этого) и отображаем символ А.
int main(void)
{
oled_2x16_init();
oled_2x16_set_cursor_position(0, 0);
oled_2x16_print_symbol('A');
while(1)
{
}
return 0;
}
Копи-паст кода:
/*
* File: oled_2x16.c
* Date: 28.08.2011
* Denis Zheleznjakov @ ZiBlog.ru
*/
#include "main.h"
//------------------------------------------------------------------------------
static void write_4bit(uint8_t data)
{
PIN_OFF(OLED_2X16_DB7);
PIN_OFF(OLED_2X16_DB6);
PIN_OFF(OLED_2X16_DB5);
PIN_OFF(OLED_2X16_DB4);
PIN_ON(OLED_2X16_E);
if (data & 0x80)
PIN_ON(OLED_2X16_DB7);
if (data & 0x40)
PIN_ON(OLED_2X16_DB6);
if (data & 0x20)
PIN_ON(OLED_2X16_DB5);
if (data & 0x10)
PIN_ON(OLED_2X16_DB4);
PIN_OFF(OLED_2X16_E);
}
//------------------------------------------------------------------------------
static uint8_t read_4bit(void)
{
uint8_t result = 0;
PIN_ON(OLED_2X16_E);
if(PIN_SIGNAL(OLED_2X16_DB7_IN))
result = 0x80;
if(PIN_SIGNAL(OLED_2X16_DB6_IN))
result |= 0x40;
if(PIN_SIGNAL(OLED_2X16_DB5_IN))
result |= 0x20;
if(PIN_SIGNAL(OLED_2X16_DB4_IN))
result |= 0x10;
PIN_OFF(OLED_2X16_E);
return result;
}
//-----------------------------------------------------------------------------
static void wait_ready(void)
{
PIN_OFF(OLED_2X16_RS);
PIN_CONFIGURATION(OLED_2X16_DB7_IN);
PIN_CONFIGURATION(OLED_2X16_DB6_IN);
PIN_CONFIGURATION(OLED_2X16_DB5_IN);
PIN_CONFIGURATION(OLED_2X16_DB4_IN);
PIN_ON(OLED_2X16_RW);
while((read_4bit() & 0x80) != 0x00)
{
read_4bit();
}
read_4bit();
PIN_OFF(OLED_2X16_RW);
PIN_CONFIGURATION(OLED_2X16_DB7);
PIN_CONFIGURATION(OLED_2X16_DB6);
PIN_CONFIGURATION(OLED_2X16_DB5);
PIN_CONFIGURATION(OLED_2X16_DB4);
}
//------------------------------------------------------------------------------
static void write_instruction(uint8_t instruction)
{
PIN_OFF(OLED_2X16_RS);
write_4bit(instruction);
write_4bit((uint8_t) (instruction << 4));
}
//------------------------------------------------------------------------------
static void write_data(uint8_t data)
{
PIN_ON(OLED_2X16_RS);
write_4bit(data);
write_4bit((uint8_t) (data << 4));
}
//-----------------------------------------------------------------------------
void oled_2x16_set_cursor_position(uint8_t row, uint8_t colum)
{
write_instruction((uint8_t) (0x80 | (row > 0 ? 0x40 : 0) | colum));
}
//-----------------------------------------------------------------------------
void oled_2x16_print_symbol(uint8_t symbol)
{
write_data(symbol);
}
//-----------------------------------------------------------------------------
void oled_2x16_print_string(uint8_t * string)
{
while (*string != 0x00)
{
write_data(*string++);
}
}
//------------------------------------------------------------------------------
void oled_2x16_init(void)
{
PIN_CONFIGURATION(OLED_2X16_E);
PIN_CONFIGURATION(OLED_2X16_RW);
PIN_CONFIGURATION(OLED_2X16_RS);
PIN_OFF(OLED_2X16_E);
PIN_OFF(OLED_2X16_RW);
PIN_OFF(OLED_2X16_RS);
PIN_CONFIGURATION(OLED_2X16_DB7);
PIN_CONFIGURATION(OLED_2X16_DB6);
PIN_CONFIGURATION(OLED_2X16_DB5);
PIN_CONFIGURATION(OLED_2X16_DB4);
write_4bit(0x20);
write_4bit(0x20);
write_4bit(0xA0);
wait_ready();
write_4bit(0x00);
write_4bit(0xC0);
wait_ready();
write_4bit(0x00);
write_4bit(0x10);
wait_ready();
write_4bit(0x00);
write_4bit(0x60);
wait_ready();
0
- burizon
- Pokročilý člen
- Príspevky: 571
- Dátum registrácie: 07 Nov 2007, 00:00
- Bydlisko: Vranov nad Topľou
Re: OLED display WEH001602ABPP5N00000 s kontrolérom WS0010
S uvedenou inicializáciou to ako-tak šlape. Po zapnuti napájania to nabehne a funguje, beda, ak sa resetuje mikrokontrolér, zblbne to. Ale po prerušení a zapnutí napájania to funguje.
// 4-Bit initialization sequence from Technobly
write4bits(0x03); // Put back into 8-bit mode
delayMicroseconds(5000);
write4bits(0x02); // Put into 4-bit mode
delayMicroseconds(5000);
write4bits(0x02);
delayMicroseconds(5000);
command(0x08); // Turn Off
delayMicroseconds(5000);
command(0x01); // Clear Display
delayMicroseconds(5000);
command(0x06); // Set Entry Mode
delayMicroseconds(5000);
command(0x02); // Home Cursor
delayMicroseconds(5000);
command(0x0C); // Turn On - enable cursor & blink
delayMicroseconds(5000);
// 4-Bit initialization sequence from Technobly
write4bits(0x03); // Put back into 8-bit mode
delayMicroseconds(5000);
write4bits(0x02); // Put into 4-bit mode
delayMicroseconds(5000);
write4bits(0x02);
delayMicroseconds(5000);
command(0x08); // Turn Off
delayMicroseconds(5000);
command(0x01); // Clear Display
delayMicroseconds(5000);
command(0x06); // Set Entry Mode
delayMicroseconds(5000);
command(0x02); // Home Cursor
delayMicroseconds(5000);
command(0x0C); // Turn On - enable cursor & blink
delayMicroseconds(5000);
0
- jenda23
- Ultimate člen
- Príspevky: 5779
- Dátum registrácie: 27 Jún 2008, 00:00
- Bydlisko: Česká Třebová
- Vek: 33
- Kontaktovať používateľa:
Re: OLED display WEH001602ABPP5N00000 s kontrolérom WS0010
To je u těchto řadičů normální, v podstatě nikomu se tento problém nepodařilo vyřešit. Takže to řeším tak že napájení LCD ovládám jedním portem na MCU a PNP trandem. Po zapnutí MCU display vypnu provedu inicilizaci MCU pak LCD zapnu a provedu jeho inicilizaci aj e to OK.
Jinak na to fungujou i knihovny pro klasickej HD řadič...
Jinak na to fungujou i knihovny pro klasickej HD řadič...
0
Lokomotiva je jako žena.Je jich stovky typů a každej z nich je jinej,každá z nich je svým způsobem krásná.Když jí chceš aspoň trochu poznat jsou to stovky hodin času.Nejde s ní být aniž bys jí bezmezně miloval,je nemožný jí znát do poslední skulinky
-
- Stály člen
- Príspevky: 480
- Dátum registrácie: 20 Apr 2011, 00:00
- Bydlisko: Lazne Kynzvart / CZ
Re: OLED display WEH001602ABPP5N00000 s kontrolérom WS0010
a skousel nekdo na vsechny komunikacni vstupy lcd dat pulldown/up ?
kdyz ten lcd funguje bez problemu a po resetu mcu to blbne tam mu asi zrejme vadi mit nejaky ty piny v lufte (ty radice muzou mit citlivejsi vstupy)..
kdyz ten lcd funguje bez problemu a po resetu mcu to blbne tam mu asi zrejme vadi mit nejaky ty piny v lufte (ty radice muzou mit citlivejsi vstupy)..
0
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 8 Odpovedí
- 2293 Zobrazení
-
Posledný príspevok od používateľa joliekeva