Попробовать бы увеличить задержки при работе с дисплеем. Маловероятно, но возможно, параметры дисплея "уплыли" и стали впритык к тому, что в коде. Как вариант, если нет доступа к коду или лень ковырять его - через FUSE-биты замедлить МК в целом и посмотреть на результат.
Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Ср июн 14, 2017 12:20:26
Сверлит текстолит когтями
Карма: 15
Рейтинг сообщений: 210
Зарегистрирован: Вт мар 31, 2015 22:56:07 Сообщений: 1272 Откуда: Мы люди простые, живем в лесу, на пенек молимся
Рейтинг сообщения:0
Сначала надо цепи питания конденсаторами обвязать. А уже потом начинать о таймингах волноваться. У меня стандартные тайминги нормально работают даже с китайскими 1602 по 80 рублей.
так и с ЖКИ. есть метод, который с любым дисплеем, в любых услвиях, гарантированно дает положительный результат - это работа с контролем занятости контроллера ЖКИ. т.е. разработав соответствующую "библиотеку" можно вообще не беспокоиться о том, какой дисплей какие задержки обеспечивает, достаточно удостовериться, что он придерживается принятого протокола обмена. и абсолютно не стоит переживать, 40 мкС у него цикл или 43 или 37 или 98 вдруг. понимаете? раз - и навсегда.
если у вас в программе задержки (независимо от способа их формирования - циклы, таймеры или еще что), то при любых отступлениях от типа ЖКИ, для которого код проверен, вы обязаны удостовериться, что ваши задержки гарантированно более предельных для конкретного типа, без этого вы не можете быть уверены, что код сработает. и даже если вы закладываете 1 мс паузу там, где по даташиту ожидается 40 мкс, это ни от чего вас не спасает - все равно надо проверять даташит, иначе вы не разработчик, а шаляй-валяйщик.
и кому оно надо - лишние телодвижения? ради чего? ради утешения "я крут, потому что делаю не так, как проще"? можно делать по разному, но, имхо, лучше делать именно так, как я описал. не потому, что я описал, а потому что так правда лучше.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Ср июн 14, 2017 14:06:39
Сверлит текстолит когтями
Карма: 15
Рейтинг сообщений: 210
Зарегистрирован: Вт мар 31, 2015 22:56:07 Сообщений: 1272 Откуда: Мы люди простые, живем в лесу, на пенек молимся
Рейтинг сообщения:0
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Ср июн 14, 2017 15:44:47
Сверлит текстолит когтями
Карма: 15
Рейтинг сообщений: 210
Зарегистрирован: Вт мар 31, 2015 22:56:07 Сообщений: 1272 Откуда: Мы люди простые, живем в лесу, на пенек молимся
Рейтинг сообщения:0
Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Чт июл 06, 2017 10:12:38
Открыл глаза
Зарегистрирован: Ср май 30, 2012 09:24:06 Сообщений: 71
Рейтинг сообщения:0
Всем доброго времени суток! Товарищи программисты, помогите пожалуйста. Суть проблемы такова. МК Atmega16A, индикатор 16х2 (HD44780) подключенный по 4-х битному интерфейсу. В программе пока ничего особенного. Пока просто организовано меню. Движение по меню кнопками +/-. В самом начале описана глобальная переменная menu, которая меняется в зависимости от нажатий кнопок. А в основном цикле в зависимости от содержимого этой переменной с помощью switch(menu) case: на дисплей выводятся нужные пункты меню. В программе сначала вызывается функция инициализации дисплея, затем вывод на него приветственного сообщения и задержка в 3 секунды. Затем очищаю дисплей послав ему код 0х01 и выжидаю 2 мс для выполнения команды(по даташиту надо 1640 мкс). Все, дисплей очищается и начинается основной цикл программы. Здесь стоит switch (menu) { case 10: ...............; break; case 20: ...............; break; case 30: ...............; break; } так же здесь находится функция опроса кнопок, но это не важно. проблема не в этом. С помощью таймера, каждые 100мс я устанавливаю флажок в некой переменной. Как только этот флажок устанавливается, программа заходит в вышеописанный switch, для того чтобы обновить текст на дисплее и сбрасываю этот флаг. Таким образом обновление дисплея происходит каждые 100мс. И самое важное. Перед каждым обновлением дисплея, я его очищаю командой 0х01 и ставлю задержку в 2мс для выполнения команды. Но при этом наблюдается мерцание дисплея. Движение по меню работает, все нормально, а дисплей мерцает. Собственно вопрос: кто как и в какой момент времени очищает дисплей? Что я делаю не так? Может подскажете... МК работает на частоте 4МГц. Пишу на Си в Atmel Studio 7.0
не надо очищать дисплей. строки меню надо либо выводить с очисткой "справа", либо сделать все по 16 символов, дополнив справа пробелами. обновлять экран надо только в том случае, если состояние меню изменилось, т.е. было нажатие на кнопки. если состояние не менялось, обновлять не надо. т.е. обновление по таймеру не нужно.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Чт июл 06, 2017 11:26:06
Открыл глаза
Зарегистрирован: Ср май 30, 2012 09:24:06 Сообщений: 71
Рейтинг сообщения:0
Цитата:
обновлять экран надо только в том случае, если состояние меню изменилось, т.е. было нажатие на кнопки. если состояние не менялось, обновлять не надо. т.е. обновление по таймеру не нужно
Спасибо, буду пробовать так.
Цитата:
строки меню надо либо выводить с очисткой "справа"
Это как?
Цитата:
а сразу вывожу образ экрана
То есть это то что имел ввиду уважаемый ARV?
Цитата:
сделать все по 16 символов, дополнив справа пробелами
Извиняюсь если что за глупые вопросы, просто ни разу не имел дело с индикаторами, да и пишу недавно...
включите логику. если на экране было МАМА (остальное - пустое место, т.е. пробелы), а вы вывели (без очистки) ПАПА - будет мерцание? нет, конечно! мерцание есть от того, что на долю секунды слово МАМА исчезло и экран опустел, и вы это видели, а потом на экране новое слово. стоит убрать очистку - мерцание пропадет. что же будет, если вместо ПАПА вы решите вывести НА? на экране будет НАМА, потому что НА затирает не все 4 позиции, а только две от старого слова. поэтому в этом случае следует вывести еще и 2 пробела после НА. логично? распространяя логику на все случаи жизни, приходим к тому, что я уже сказал: всегда выводить по 16 символов. если симвлоов в строке меньше 16, то дополнять строку пробелами. это можно сделать двумя способами: либо на самом деле все строки уровнять по длине при помощи пробелов, либо написать функцию, которая будет выводить символы строки, пока строка не кончится, а затем выводить пробелы, пока общее количество символов не достигнет 16. это я и назвал "вывод с очисткой справа".
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Чт июл 06, 2017 11:59:35
Открыл глаза
Зарегистрирован: Ср май 30, 2012 09:24:06 Сообщений: 71
Рейтинг сообщения:0
ARV, спасибо огромное за разъяснение. Буду пробовать
Добавлено after 2 minutes 39 seconds: И еще такой вопросик: хватит ли частоты работы 4МГц? Если учесть, что общение с индикатором происходит по 4-х проводной линии.
Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Чт июл 06, 2017 12:20:21
Сверлит текстолит когтями
Карма: 15
Рейтинг сообщений: 210
Зарегистрирован: Вт мар 31, 2015 22:56:07 Сообщений: 1272 Откуда: Мы люди простые, живем в лесу, на пенек молимся
Рейтинг сообщения:0
И еще такой вопросик: хватит ли частоты работы 4МГц? Если учесть, что общение с индикатором происходит по 4-х проводной линии.
Вопрос не совсем корректен: зависит от того, каким кодом заполняются эти временные слоты. Возьми китайский логический анализатор и посмотри, сколько времени на что уходит.
Заголовок сообщения: Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Чт июл 06, 2017 12:54:30
Открыл глаза
Зарегистрирован: Ср май 30, 2012 09:24:06 Сообщений: 71
Рейтинг сообщения:0
Ой спасибо всем участвующим. С вашей помощью понял я свои ошибки. Понял в каком направлении действовать нужно Уже часть кода изменил. Вроде работает Если что, еще напишу.
Доброго времени суток! Тоже проблема с экраном Winstar WH2004A-YGH-CT. Если коротко - не работает команда занятия адреса(Set DDRAM Address). Пару лет назад начинал делать устройство с этим дисплейчиком и забросил, вроде все работало. Сейчас же делаю новое устройство на новом кристале. Теперь экран просто по порядку(точнее через строчку) заполняется нужным текстом, работают команды включения отключения курсора и подобные, но при попытке занятия адреса - выводит левый символ и пишет дальше со старого места. Пробовал играться с задержками(до 100-ен миллисекунд) - толку ноль. При этом при симуляции в Proteus все работает (и работало до всяких манипуляций) корректно. Прозвонил все цепи - от МК до LCD. На всякий случай подтянул выход R/W. В режиме отладки через MPlab замерял уровень напряжение на выводе RS - все правильно.(правда в этом режиме даже символ не напечатался) Контроллер pic16f1937, 32МГц.
Убил пол ночи. виню дисплей(хотя в глубине души понимаю - проблема во мне ) Спойлер
Код:
#define RS PORTD,0 #define RW PORTD,1 #define E PORTD,2 #define LCD_DB PORTC ;======================== ; Инициализация дисплея ;======================== INIT_LCD bcf RS bcf RW bcf E movlw .20 call pause_T ; задержка не менее 15мс bsf E movlw b'00110000' ;Команда "Function set" movwf LCD_DB call strobe bcf E movlw .5 call pause_T ; задержка не менее 4,1 мс
bsf E movlw b'00110000' ;снова команда "Function set" movwf LCD_DB call strobe bcf E
movlw .200 call pause_T ; задержка не менее 100 мкс
bsf E movlw b'00111100' ;И снова команда "Function set" movwf LCD_DB ;но уже с настройками: 8 бит, 2-line, 5x11dots call strobe bcf E
movlw .1 call pause_T ; задержка не менее 39 мкс
bsf E movlw b'00001110' ;Команда "Display On/OF" movwf LCD_DB ;включаем дисплей, курсор и отелючаем подсветку курсора call strobe bcf E
movlw .1 call pause_T ; задержка не менее 39 мкс
bsf E movlw b'00000001' ;Команда "Display Clear" movwf LCD_DB ;очистка дисплея call strobe bcf E
movlw .2 call pause_T ; задержка не менее 1,53 мс
bsf E movlw b'00000110' ;Команда "Entery Mode Set" movwf LCD_DB ;автоматический сдвиг курсора(вкл) и сдвиг всего дисплея(откл) call strobe bcf E
SET_ADRES movwf LCD_DB bsf LCD_DB,7 ;Команда "Set DDRAM Adress" bcf RS bcf RW call strobe bsf E call strobe bcf E movlw .5 call pause_T ; задержка не менее 39 мкс return
Менял порядок выставления данных в порт и изменения битов RS и R/W. Чередовал эти операции значительными задержками. Может кто сталкивался с подобными проблемами? Может я не в ту сторону копаю?(
P.S. добавлено 6 часов спустя. ошибка программная, так что вопрос снимаю. сейчас буду искать, где накосячил, так как при использовании следующей конструкции, все работает
Код:
bsf E movlw b'11000000' ;Команда "Команда "Set DDRAM Adresst" movwf LCD_DB ;с занятием места 40Н call strobe bcf E movlw .1 call pause_T ; задержка не менее 39 мкс
спасибо! А вот еще вопрос на засыпку: возможно ли вывести несколько курсоров? Или подчеркнуть строку? Ну или подскажите как выделить пункт меню, что он типа выбран. Моргалки (символ->пробел->символ ...) раздражают
_________________ Processor not found! Software emulation ...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения