Использую LCD WH1602 совместно с ATtiny2313, при 5-ти Вольт-ах питания отображаемая информация нормальная. При снижении питания до 3,13 В (2 новые батарейки типа ААА) иногда при переключениях между менюшками появляются произвольные знаки в конце выводимых строк. Предварительно для перехода между менюшками используется комманда очистки экрана (clear - 0x01). Если урезать комманду очистки то экран не "мусорит" но изображение накладывается друг на друга, что не есть приемлемо. "Мусор" не исчезает при увеличении временных интервалов импульсов управляющих дисплеем, так же не исчезает при расстановке блокировочных керамических конденсаторов вокруг микроконтроллера и самого дисплея. Длина проводов до дисплея около 10 см. (В ранних проектах использовал провода достигающие 1 метра при питании 5 В). Ещё одной особенностью данного дисплея при низких напряжениях питания, является необходимость использования дополнительного отрицательного напряжения питания подаваемого на вход управления контрастностью Vo. Отрицательное напряжение получается выдачей меандра 4042 Гц на один из выводов, далее преобразованием диодным (шоттки) умножителем. Согласно даташитам управляющий контроллер дисплея сохраняет работоспособность при снижении напряжения питания до 3 В, в моём случае дисплей работает и при 2,12 В (значит запас есть).
Также на одной из линий порта, на котором "висит" дисплей находиться "пьезо-буззер" (типа ЗП) с собственной ёмкостью 0,15 мкФ. При каждом нажатии на клавиши "буззер" пикает в течении 33-х мс на своей резонансной частоте. Изначально решил что из-за значительной ёмкостной нагрузки возникают сильные наводки на внутренние цепи МК или дисплея. Установил 330 Ом балластный резистор, но ситуация не изменилась. Программно временно отключил буззер, ситуация снова не изменилась.
В чём фокус? Симуляторы "мусор" не показывают. (И вообще симуляторам не очень доверяю.) _________________ Тротила для дураков не бывает® One
При снижении питания до 3,13 В (2 новые батарейки типа ААА) иногда при переключениях между менюшками появляются произвольные знаки в конце выводимых строк.
Питание даже чуть больше чем 3 В.
Вообщем разобрался в чём дело. Дело было так:
Уже однажды прокалывался c функцией (подпрограммой) ожидания занятости дисплея - циклического считывание бита BUSY и ожидания пока дисплей "раздуплится". Поэтому сразу эту процедуру урезал и вместо неё вставил задержку на 3 мс. Мусор исчез сразу, при 2,56 В (2 металл-гидритных аккумулятора) дисплей и микроконтроллер работающий на 4 МГц отлично себя чувствуют. Поэту в очередной раз полез в даташит смотреть тайминги злостного ожидания. Обнаружил интервалы между переводом дисплея в состояние считывания и тактированием для получения бита состояния (на диаграмме выделил красным цветом). После того как вставил 2 задержки по 10 мкс, сразу всё заработало. Правда всё равно не вставлял задержку указанную на диаграмме желтым цветом _________________ Тротила для дураков не бывает® One
У меня были подобные грабли, только не с дисплеем, а с микрой AD7142, там стандартная шина SPI, тайминги поленился лезть смотреть, просто увидел строчку в ДШ, что максимальная частота SPI 5МГц. Вломил со спокойной душой 4 МГц, и месяц ломал мозги, почему девайс жестоко глючит. Все исходники перебрал по букве. Проверил монтаж, согласование уровней, напряжения... .Ну все, а глючит зараза... Делать было нечего, полез в тайминги... а судя по ним, макс. частота шины 2,5МГц, а не 5, как было написано на предыдущем листе в ДШ. Внимательно надо читать мануалы. В них сила
Так дисплейчик (мать-его-так) при пятёрке Вольт работает изумительно! А при снижении вольтажа... Всё! теперь если буду писать библиотечки буду железку тестировать в "крайних" режимах. _________________ Тротила для дураков не бывает® One
One, не советую использовать крайние режимы. Технологический запас, конечно, есть, но он может варьироваться от партии к партии. И ещё вопрос: у тя только от питания глюки? Логических уровней хватает?
Тогда мой совет: не мучайся, а поставь DC/DC c диапазоном входного напряжения, как ты предполагаешь и с выходом +5 В. Мы такие в интегральном исполнении уже упоминали в теме: "Ищу преобразователь напряжения"
Я в реальном устройстве не собираюсь выходить за рамки нормальных параметров. Я имел ввиду что тест программы будет проводиться в более жестких условиях, для повышения устойчивости устройства когда оно будет работать в рамках нормы.
DC/DC не подходит в виду того что устройство планируется экономичное, лишнее преобразование и лишнее поднятие напряжения до почти максимального уровня приведёт к существенному увеличению потребления.
Глюки, как оказалось, были с таймингами. Тайминги сильно растягивать не хочется в виду того что микроконтроллеру придётся больше бодрствовать нежели спать, а значит экономить он будет меньше. С уровнями всё в порядке. Согласовывать уровни я умею _________________ Тротила для дураков не бывает® One
Если паузы в еденицы мкс формировать таймером, то это очень не рационально. Микроконтроллер будет относительно большую часть времени терять на подготовку таймерной задержки. Дело в том что задержки в еденицы мкс соизмеримы с тактами микроконтроллера. А значит точность такой задержки будет весьма сомнительной. Если задержка требуется в несколько миллисекунд или несколько секунд то тут и так понятно, что лучше "взвести" таймер, а ядро пусть дальше занимается рутинной работой, после того как таймер "щёлкнет" предустановленным битиком то можно выполнить отсроченное действие. _________________ Тротила для дураков не бывает® One
Например, когда идет вывод на приличных размеров графические дисплеи с параллельным интерфейсом, когда пауз много , то тут каждый такт на счету. Паузы по 8-10 микросекунд предпочитаю формировать все же таймером, ибо при частоте 16-20 МГц, это 160-200 тактов. Пускай, половина тактов уйдет на взвод/остановку таймера, обработку прерывания, даже если на каждый баит, отправленный на дисплей, выигрывать 50-100 тактов, то параллельно с выводом каждого кадра, мк еще много чего сможет обработать. ИМХО, в подобных задачах, формирование даже таких мелких пауз выгодно.
Антон, я как-то раз вообще оригинально решил вопрос задержек (на мой взгляд конечно), когда необходима была задержка в еденицы микросекунд, врубал на полную катушку прескаллер такта контроллера (clk/256), выставлял на линии порта 1, выставлял на линии порта 0, вырубал прескаллер. Таким образом даже 50 нс микроконтроллера превращались в 50 * 256 = 12800 нс, тоесть 12,8 мкс, а с учётом того что инструкции микроконтроллера sbi и cbi (PORT.x=1 и PORT.x=0) выполняются за 2 такта то это получается уже 25,6 мкс, при этом микроконтроллер меньше потреблял от источника и минимум исполняемого кода.
А вообще предельные частоты контроллера которые Вы привели очень редко использую, в основном когда требуется большая вычислительная скорость. Точнее использовал только раз, в генераторе сигналов (DDS) 20 MHz, при этом получил ~2,1 Мегавыборок в секунду. Программу пришлось писать и вылизывать на ассемблере, Си-шный код сдох на 250 кГц обработчика прерывания таймера который и делал выборки. _________________ Тротила для дураков не бывает® One
Ну я пока что на своем уровне поступаю тупо: не хватает скорости - ставлю кварц побыстрее и даю команду компилятору - оптимизация скорости исполнения кода
Когда пишу на Сях и программа начинает тормозить (допустим слишком часто вызывается прерывание) то тут два пути ставить быстрее кварц и отключать оптимизацию по компактности кода. В асме вариантов очень много, компромиссов между объёмом и скорость тоже много. Причем определённые куски кода можно написать с учётом скорости, другие же (которые особо не влияют не результат) можно расписать покомпактнее. Я уже не говорю о фокусах которые не возможно сделать на сях и о существовании которых просто не догадываешься пока не залезешь в дебри внутренностей МК. То что на асме всё пишется дольше конечно правда, особенно долго когда только начинаешь, позже появляются куча наработок в виде макросов и инклудов, например работы с графическим ЖКИ. Хотя это одинаково как для высоких языков так и для низкоуровневых. Просто Си компиляторы развивают активнее, тут и кодогенераторы и куча легко подключаемых быблиотек о содержимом которых просто не приходится задумываться. Сейчас никак не могу стартонуть с AVR32, чё-то не даются они мне (программатор, отладочная плата, деньги на это всё...), так что пока теория. _________________ Тротила для дураков не бывает® One
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы