ohmjke 0 21 апреля, 2012 Опубликовано 21 апреля, 2012 · Жалоба Объясните мне, дураку, как правильно управлять дисплеем через этот интерфейс. Каких я только комбинаций сигналов RS/RD/WR не пробовал - нифига не получается. Может быть у кого-то есть пример кода на СИ? Все нормальное, что нахожу в инете, для 6800. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 3 21 апреля, 2012 Опубликовано 21 апреля, 2012 · Жалоба Ну если не пробовать, то ничего и не получится. Можно тольно ни пробовать. А так так все тривиально. RS - разряд адреса. Используются только два регистра. RD и WR - нулевым уровнем стробы чтения и записи, соответственно. Для записи устанавливаешь данные и RS, далее WR в 0, затем WR в 1, затем можно менять все остальное. Нужно обратить внимание на времена, в дисплеях обычно они очень длинные. Причем не только длительность WR и RD, а еще и расстояние между последовательными обращениями. что касается данных, какие передавать на дисплей - зависит от конкретного контроллера. Пока правильно не инициализируешь, показывать ничего не будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ohmjke 0 22 апреля, 2012 Опубликовано 22 апреля, 2012 · Жалоба Так, для начала хотелось бы точно определиться с назначением WR и RD. В даташите на мой дисплей написано так: WR - Read signal RD - Write signal Вы же пишите, что WR предназначен для записи. Конечно, этот вариант логичнее(WRite, ReaD), поэтому, предположительно в даташите ошибка. Я так понимаю, в нормальном состоянии на WR и RD должны быть логические единицы? Далее, в одной статье видел замечание для 6800 интерфейса - Для чтения данных строб нужно дернуть дважды, т.к. предварительно данные должны попасть в регистр-защелку. Нужно ли проделывать аналогичное для 8080? Вот такой код, к примеру, верный? #define SET_DATA (GPIOB->BSRR = GPIO_BSRR_BR5) #define SET_CODE (GPIOB->BSRR = GPIO_BSRR_BS5) #define SET_WR (GPIOD->BSRR = GPIO_BSRR_BS2) #define CLR_WR (GPIOD->BSRR = GPIO_BSRR_BR2) #define SET_RD (GPIOB->BSRR = GPIO_BSRR_BS7) #define CLR_RD (GPIOB->BSRR = GPIO_BSRR_BR7) #define SET_RESET (GPIOB->BSRR = GPIO_BSRR_BS8) #define CLR_RESET (GPIOB->BSRR = GPIO_BSRR_BR8) #define SET_CHIPEN (GPIOB->BSRR = GPIO_BSRR_BS6) #define CLR_CHIPEN (GPIOB->BSRR = GPIO_BSRR_BR6) extern void lcd_init (void) { ...................... CLR_CHIPEN; SET_WR; SET_RD; SET_RESET; delay (2); CLR_RESET; delay (2); }; extern void lcd_write_reg (uint8_t reg) { GPIOA->CRL &= ~GPIO_CRL_CNF0 & ~GPIO_CRL_CNF1 & ~GPIO_CRL_CNF2 & ~GPIO_CRL_CNF3 \ & ~GPIO_CRL_CNF4 & ~GPIO_CRL_CNF5 & ~GPIO_CRL_CNF6 & ~GPIO_CRL_CNF7 \ & ~GPIO_CRL_MODE0 & ~GPIO_CRL_MODE1 & ~GPIO_CRL_MODE2 & ~GPIO_CRL_MODE3 \ & ~GPIO_CRL_MODE4 & ~GPIO_CRL_MODE5 & ~GPIO_CRL_MODE6 & ~GPIO_CRL_MODE7; GPIOA->CRL |= GPIO_CRL_MODE0_0 | GPIO_CRL_MODE0_1 | GPIO_CRL_MODE1_0 | GPIO_CRL_MODE1_1 \ | GPIO_CRL_MODE2_0 | GPIO_CRL_MODE2_1 | GPIO_CRL_MODE3_0 | GPIO_CRL_MODE3_1 \ | GPIO_CRL_MODE4_0 | GPIO_CRL_MODE4_1 | GPIO_CRL_MODE5_0 | GPIO_CRL_MODE5_1 \ | GPIO_CRL_MODE6_0 | GPIO_CRL_MODE6_1 | GPIO_CRL_MODE7_0 | GPIO_CRL_MODE7_1; SET_CODE; GPIOA->ODR = reg; CLR_WR; delay (1); SET_WR; }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 3 22 апреля, 2012 Опубликовано 22 апреля, 2012 · Жалоба Да, обычно RD и WR в пассиве высоким уровнем. Про защелку - для каких-то дисплеев в некоторых случаях требовалось холостое чтение, но не всегда и не везде. Напишите, что у Вас за дисплей и с каким контроллером, проще жить будет. Про Вашу программу: ничего не понял про биты MODE и CNF. И Вы совсем забыли про RS. Это не Reset, а выбор команда/данные. Reset у некоторых дисплеев бывает, но это отдельный пин. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ohmjke 0 22 апреля, 2012 Опубликовано 22 апреля, 2012 · Жалоба Про защелку - для каких-то дисплеев в некоторых случаях требовалось холостое чтение, но не всегда и не везде. Напишите, что у Вас за дисплей и с каким контроллером, проще жить будет. Дисплей WG24064R, контроллер на нем RA8820. Я офигеваю, на сайте винстара даташит на этот дисплей состоит всего из двух страниц! http://www.winstar.com.tw/products_detail_...u&ProID=110 На контроллер нашел такие даташиты - Ra8802_8820_DS_v13_Eng.pdf и RA8820_AP_v11_Eng.pdf ничего не понял про биты MODE и CNF. Настраивается линия данных на выход. И Вы совсем забыли про RS. Это не Reset, а выбор команда/данные. Reset у некоторых дисплеев бывает, но это отдельный пин. Думаю, Вы просто неправильно поняли. Выбор команда/данные у меня осуществляется дефайнами: #define SET_DATA (GPIOB->BSRR = GPIO_BSRR_BR5) #define SET_CODE (GPIOB->BSRR = GPIO_BSRR_BS5) Reset тоже используется, но только один раз после старта МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 10 22 апреля, 2012 Опубликовано 22 апреля, 2012 · Жалоба Дисплей WG24064R, контроллер на нем RA8820. Я офигеваю, на сайте винстара даташит на этот дисплей состоит всего из двух страниц! http://www.winstar.com.tw/products_detail_...u&ProID=110 На контроллер нашел такие даташиты - Ra8802_8820_DS_v13_Eng.pdf и RA8820_AP_v11_Eng.pdf Это обычная практика изготовителей дисплеев: вместо описания интерфейса и команд - дают ссылку на даташит контроллера. Вот этот даташит вам и надо читать. B частности, в Ra8802_8820_DS_v13_Eng.pdf в разделе 4.1 все правильно написано про RD# и WR# Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 3 23 апреля, 2012 Опубликовано 23 апреля, 2012 · Жалоба Судя по бумаге, в этом контроллере есть особенность: в каждом цикле chip enable должен обязательно устанавливаться и сниматься. Это не написано открытым текстом, но, т.к. нет переключения 6800 - 8080, похоже, по-другому работать не будет. И не забудьте первой командой включить дисплей. При подаче питания он выключен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ohmjke 0 8 мая, 2012 Опубликовано 8 мая, 2012 (изменено) · Жалоба Судя по бумаге, в этом контроллере есть особенность: в каждом цикле chip enable должен обязательно устанавливаться и сниматься. Это не написано открытым текстом, но, т.к. нет переключения 6800 - 8080, похоже, по-другому работать не будет. И не забудьте первой командой включить дисплей. При подаче питания он выключен. Пробовал устанавливать/снимать chip enable, ничего не менялось. А вот переключение 8080/6800 есть - это резистор на плате, которые соединен с одним из пинов контроллера и либо землей, либо плюсом питания. Сначала я пытал дисплей в режиме 8080, перепробовал уйму различных вариантов - дисплей ни разу не показал признаков жизни. Потом перепаял этот резистор, т.е. переключился на интерфейс 6800. Пробовал даже пример кода из даташита на контроллер... Аналогичная картина - ноль реакции. Начинаю думать, что дисплей сдох. Например, от того, что я запитывал его от 5 вольт, хотя в даташите на сам дисплей вроде как написано, что VDD может варьироваться от 4,75 до 5,25 вольт. А вот в даташите на контроллер вычитал, что максимум - 4 вольта. Изменено 8 мая, 2012 пользователем ohmjke Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться