Показаны сообщения с ярлыком Winstar. Показать все сообщения
Показаны сообщения с ярлыком Winstar. Показать все сообщения

среда, 18 января 2017 г.

Добил инициализацию OLED Winstar

Наткнулся в одной из версий даташитов к OLED Winstar на дополнения, заботливо вынесенные аж на последнюю страницу даташита. Внес нужные изменения в свою библиотеку ULCD и OLED WEH001602ALPP5N наконец-то заработал без глюков инициализации.

Notes
Repeated procedures for an 4-bit bus interface
Noise causing transfer mismatch between the four upper and lower bits can be corrected by a reset triggered by consecutively writing a “0000” instruction five times. The next transfer starts from the lower four bits and then first instruction “Function set” can be executed normally.
Please insert the synchronization function in the head of procedures. The repeated procedures are show as follows :


среда, 9 декабря 2015 г.

Winstar OLED 1602 на WS0010 (WEH001602ALPP5N00001)

Нашел кое что полезное по глючным OLED от Winstar.

Фактически, используется несколько иная процедура загрузки пользовательских символов, вместо используемой генератором символов mikroPascal. Вариант совместим и с обычными LCD тоже:
ScaleChar_00: array[0..7] of byte = (0,1,1,21,0,0,0,0);
// Char 0x00 (64)
for i := 0 to 7 do
begin
   Lcd_Cmd(64+i);
   Lcd_Chr_CP(ScaleChar_00[i]);
end;
mikroPascal предлагает другой вариант, не работающий с этими OLED:
Lcd_Cmd(64); for i := 0 to 7 do Lcd_Chr_CP(ScaleChar_00[i]);
Из библиотеки LCD с такими OLED полностью совместима только функция LCD_Chr. Функция LCD_Init работает только в момент включения устройства, при обычном сбросе не работает. Функция LCD_Out выводит строку с обратным отсчетом знакомест, т.е. вместо вывода, например, в позиции строки 10, 11, 12, будет вывод в позиции 10, 9, 8. Есть проблема и с функцией Lcd_Init – она нормально отрабатывает только при холодном рестарте. Т.е. при включении из выключенного состояния. При теплом рестарте такой OLED-дисплей инициализируется с ошибками (на экране появляется мешанина из произвольных символов). Выходов тут ровно два (как в одном старом анекдоте):
  1. Написать свою LCD-библиотеку;
  2. Установить ключ по питанию OLED-дисплея и принудительно отключать дисплей на секунду-две перед + давать задержку после включения перед вызовом функции LCD_Init. 
Кому как проще, да.

Кстати, весьма положительное качество библиотеки LCD в mikroPascal – это возможность практически произвольного назначения выводов контроллера, к которым будет подключаться дисплей. Пока что аналогичного решения я не видел ни в одной другой библиотеке – везде выполняется привязка к одному порту (поскольку так – проще всего).

Библиотека для работы с такими индикаторами.