Приветствую всех заглянувших!!! У меня в конструкции дисплей на контроллере ks0066. Дисплей работает хорошо, всё что надо выводит, только вот одна беда, после заливки кода (PICKIT 3) - то е после любого резета , начинает казать кашу, понятно, что из за повторной инициализации. Можно ли его как то програмно сбросить? В даташите вроде нет команд сброса, или я что то неправильно понял... Или кроме как запускать питание через ключ от контроллера больше решений нет???
Здравствуйте! Работал с несколькими типами дисплеев, но такой проблемы не припомню. Проблема точно после любого сброса, или только при подключенном программаторе? Может у Вас используются выводы ICSP для управления дисплеем? Не должны во время повторной инициализации писаться данные в графическую память, т.к. вывод RS находится в другом логическом состоянии. И что бы форумчане активнее отвечали, приведите схему и программу. Может кто-то увидит проблему в них.
Дисплей подключен на D4, D5, D6, D7, RS, E... R/W лежит на земле . В том то и дело, что инициализация начинается при уже горячем(то е данные на него постоянно приходили) контроллере дисплея. Такая штука при любом сбросе. Схемы нет, даже не рисовал. Контроллер Pic18f252. Это цифровая шкала и S- метр. На выводах , подключённых к дисплею ничего больше не висит. .
Единственное что заметил, это маленькая задержка после команды очистки. у Вас 2 мкс, а согласно даташиту - 1,53 мс. Также рекомендую для записи данных использовать регистр LATx, т.к. при использовании PORTx возможны ошибки при частых переключениях.
В многообразии литиевых батареек и аккумуляторов нет какого-то универсального или идеального варианта. Выбирая тот или иной вариант для питания устройства, разработчику приходится оперировать множеством параметров, используя наиболее оптимальное их сочетание для каждого приложения. Разберем параметры для различных приложений.
Вот почитав даташит, я вообще не понял, зачем нужен этот регистр-LATx.... Pic - только из за асинхронного таймера. Ошибок нет, всё работает как и задумывалось , свободной памяти 4/5. Проблема в том , что не до конца разобрался с дисплеем. Есть ли способы сбросить контроллер дисплея по команде контроллера устройства. И правда очень маленькая задержка))))) сейчас подредактирую) Спасибо вам за подсказку)
Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. EVE является поставщиком аккумуляторных элементов круглого формата для электрических моделей автомобилей.
Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного.
А вот и нет! Вы можете при определенных условиях получить:
Код:
PORTB = 0000 0100!
Все из-за алгоритма установки битов: Чтение->модификация->запись. Причем, для установки одного бита читается весь порт. В данном примере, при установке бита PORTB, 2: 1) Происходит чтение порта, и в случае если на ножке большая емкостная нагрузка, то единичка в PORTB, 1 не успевает установиться, и результатом чтения будет 0. 2) После происходит модификация - прочитанное значение 0000 0000 превращается в 0000 0100. 3) последний этап - Запись: PORTB = 0000 0100.
Как-то так. При записи в регистр LATx данной проблемы нет, т.к. на этапе чтения данные берутся из самой защелки LATx, не зависящей от переходных процессов в схеме.
С AVRами не работал. Но PICах - да, для записи лучше использовать LATx. А из PORTx читать данные. Например, ожидать внешние прерывания. Хотя сам иногда забываю и использую только PORTx. Работало. А вот когда появляются глюки - то начинаю танцевать с бубном и первым делом исправляю всё на LATx. Помогало.
Со способами переинициализации работающего дисплея вы не сталкивались?
Увы, нет. Пробежался по даташиту и не нашел ничего на эту тему. В моих дисплеях были выводы /RST. А последний дисплей на контроллере ILI9341 имеет еще и команду программного сброса.
Ну и х.с . прилеплю ключь на питание дисплея. Хотя наверное это в трансивере не важно. Просто не особо приятно знать такую особенность. Эта штука для себя , делаю трансивер , на 1.8 , 3.5 , 7.2 MHz
пару лет назад делал приборчик с таким дисплейчиком и STM контроллером. Подключение дисплея шлейфом - иногда на него ловило наводки от коммутаций из соседних приборов, и память портилась. Помню сделал софтварную переинициализацию по сочетанию кнопок - увидел что заглючило, прожал и дисплей переписало. Так что проблема явно не в HD44780. По коду не скажу - PIC не мое. По Атмелам у меня был залет на XMega - надо было пин устанавливать. Я как обычно - маску на порт. Только на порту висели еще пины CS АЦПшек по SPI, которые в высоком приоритете по прерыванию переключались. Ну и значит подходит к участку где надо пин переключить, берет оно значение порта, готовится маску накладывать, тут прилетает прерывание, переключает себе пин CS, програма возвращается из прерывания и накладывает маску из "до прерывания". И пошла коллизия на SPI, АЦП повис, аларма. Повезло что в XMega есть специальные регистры отдельно установки и отдельно сброса ножек. Переделал и проблема ушла.
Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Сб май 07, 2022 10:12:11
Нашел транзистор. Понюхал.
Зарегистрирован: Сб янв 20, 2007 20:44:33 Сообщений: 163 Откуда: Из закаулков вашей души
Рейтинг сообщения:0
Здраствуйте. Возникла тут необходимость работы с дисплеем, что бы он не сильно тормозил основную программу. Как то мне попадалась статья где работа с дисплеем производилась через прерывание таймера, что бы не задерживать основной цикл. Но найти ее так и не смог. Изобретать велосипед не охота. Кто нибудь подскажите сылку, кусок кода или мысль как это лучьше реализовать.
Микроконтроллер какой? СТМки, у которых есть FMSC могут управлять выводами автоматически. А вообще, там не шибко то много отбирается времени, только пара команд требует значительной (около 1,5 мс) задержки на выполнение. В остальном, 40-45 мкс на команду, около 1,5 мс на весь дисплей 1602, насколько помню по памяти. Впрочем, если хотите через прерывание таймера, то подавайте одну команду ровно в прерывании таймера. Таймер настройте на 0,5-1 мс. 20-30 мс на обновление всего дисплея будет норм.
Demon, для большинства приложений зачем нужно периодически обновлять дисплей (1602)? Он запоминает последнюю введенную информацию. Напр. введите новые данные на новом событии с флаг.
Последний раз редактировалось veso74 Сб май 07, 2022 12:21:06, всего редактировалось 1 раз.
Под словом "обновлять дисплей" я имел ввиду вывод новой информации, полностью заменяющей предыдущую. Не периодически, а по необходимости. Хотя, помню, лет 8 назад была в инете популярная в то время фишка - заставить STM автоматически работать с дисплеем в режиме непрерывного обновления, используя комбинацию таймера и DMA. Были ярые приверженцы этого способа, очень восхваляли его. И я тоже попробовал несколько раз. Но потом не стал - оно того просто не стоит.
я использую библиотеку, которая работает по ожиданию готовности контроллера ЖКИ, т.е. считывает его регистр статуса и анализирует бит занятости. т.е. как бы делает кучу "лишних" обращений... и при этом в плане быстродействия вообще никогда проблем не испытывал. более того, я настаиваю на том, что работа с этим дисплеем "в фоне", т.е. по прерываниям, не только не даст положительного эффекта, но и ничего, кроме гемора, не даст вообще. я считаю этот подход неприемлемым.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Да, можно читать флаг занятости BSY. Но у дисплея только две команды исполняются долго - очистка дисплея и перевод курсора в начало дисплея. Остальные команды - не более 50 мкс. А вот если микроконтроллер работает быстро, 25 и выше мегагерц, то лучше отсылать по прерываниям таймера через 0,2-0,5 мс, меньше простоя будет. В принципе, даже при 8 МГц будет положительным моментом отправлять по прерываниям таймера через 0,5 мс. У этого дисплея только инициализация, особенно в 4-битном режиме, выбивается из общего ритма и вечно была камнем преткновения.
Ну, микросекунду по сто или по триста, но на 1602 при 32 символах набегает около 1,5 мс на обмен с дисплеем. На медленном микроконтроллере это не так заметно, а вот если МК лабает на 72 МГц, то 1,5 мс как-то кажутся чрезмерными. 40 мкс и 14 нс - уж больно разнящиеся цифры. Хотя, кому как, кто как хочет, так и дрочет. И именно потому появляются Delayms(500)... в прерываниях... как в недавней теме про опрос кнопок.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения