Такой код будет работать неправильно. Нужно ещё, как минимум, перед PORTA |= nibble добавить PORTA &= 0xF0, для очистки полубайта в порту, иначе рано или поздно там скопятся 4 единичных бита и по факту в дисплей будут всегда уходить данные 0xFF.
Есть контакт, вы помогли, спасибо! Осталось инициализировать дисплей, ST7036 такая гадость надо сказать
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Прочитал все 82 страницы ... Так и не нашел (не понял)
При инициализации дисплея передаем три раза команду установки разрядности 8 бит с паузами между ними в 40 мкс. А четвертую команду уже устанавливаем 4 бита разрядности интерфейса тоже с паузой 40 мкс.
Так вот, эти паузы это длина периода строба???? Или период строба, как по таблице всего 500 нс, а это пауза между самими командами?
Извиняюсь, что я такой тупой...
и еще момент. КАк строб работает. Когда идет перепад с высокого на низкий? Или полный, когда и туда и обратно? Т.Е. дисплей принимает команду именно в момент перепада с высокого на низкий? А потом начинает тупить обрабатывая ее? для этого и нужны задержки. Или когда строб обратно поднимется, только тогда команда будет записана?
Длительность строба может быть небольшая (для большинства индикаторов минимум 0,5 мксек), длинные паузы нужны между стробами. Во время этих пауз и происходит выполнение команды. Дисплей начинает отработку команды после полного цикла строба (нарастающий и затем спадающий). На самом деле разные производители могут делать немного по-разному, кто-то по нарастающему, кто-то по спадающему, но если вы почитаете документацию, то там однозначно сказано о том, что данные (или команда) должны быть установлены до нарастающего фронта строба и оставаться неизменными до спадающего. Во время высокого уровня строба менять данные на шине нельзя.
Блин... Я все сделал шиворот навыворот... Хотя в таблицах (диаграммах) нарисовано сначала поднять строб, а потом данные выставлять... (даже пометка есть "действительные данные")...
Вообще-то на диаграммах фронт E никакими временнЫми параметрами не связан с моментом установки данных. А вот спад - связан (через параметр tSU2). Ну а то что нарисовано так, словно E поднимается до установки данных - это просто нарисовано. Внимание нужно обращать на параметры, а не картинку.
Хотя, с другой стороны, по диаграмме нет и никакого требования начинать строб только после установки данных - лишь обязательно после установки RS/RW. Возможно, в тексте даташита это и оговорено, но на диаграммах - нет.
В любом случае, программу писать проще, когда работа со стробом выделена в отдельную сущность. Поднять - подождать 450нс - опустить - подождать 450нс. Оформить это функцией ли, макросом - и будет проще. Установил данные - дёрнул строб.
Почти победил его!!!! Инициализация не проходит.. Данные не выводит.
Но! если поставить во фьюзах бит СКОРТ (т.е. убрать его), то амплитуда на кварце снижается. Потом пальцем прикасаешься к выводам кварца и все! Инициализируется и работает!!!! И выводит то, что я на него отправил.
А если СКОРТ включить, то пальцем бесполезно прикасаться. И не работает...
Ткните носом пожалуйста!
Да и еще, если его запустить образом, описанным выше, то работает, снова прошиваю... вообще никак не реагирует (показывает, то что и было), опять прикасаюсь к ногам кварца - снова инициализируется и показывает то, что я хочу...
У меня даже больше стоят... Еще с учетом того, что включение МК идет с задержкой в 64 мс. Так фьюз настроен. А все остальные больше поставил, чем написано в этой таблице. Могу исходники выложить. Все с комментариями.
Вот ведь, когда контроллер прошивается, то линия РЕЗЕТ прижимается на землю... А после ее отпускания идет снова запуск, значит и инициализация должна происходить снова? А он у меня во время прошивки показывает то, что я на него вывел и после нее тоже самое показывает. Даже не дрогнул!!! ))))) Козел.
Ещё вопрос: После установки разрядности, после следующих команд, флаг занятости проверяете? /Я всегда делал по этой документации и проблем никогда не возникало. Единственное, у них не написано про то, что после INIT-а надо дать команду "включить индикатор" /
_________________ С Уважением, Альберт (Albert_V).
Последний раз редактировалось Albert_V Пт янв 09, 2015 15:08:59, всего редактировалось 1 раз.
Команду включить индикатор отправляю. Включается же. ))) Я уже почти их все наизусть выучил, пока с ним разбирался... Флаг не проверяю. R\W на земле сидит жестко... Ибо линии экономлю. Всего 6 проводов подключено. )))) Я грешу на задержки. Хотя вычисленные они при 16 МГц... получается 62,5 нс на такт. От этого и пляшу. Все на ассемблере. Все задержки вручную посчитаны. Сделаны чуть больше, чем в даташитах. Даже уже выставлял в два-три раза больше, но все равно та же картина...
Ухты, ептить... Новый дадашит. ))) Такого у меня еще не было. Уже штук 8 разных есть.
Если такая свистопляска с кварцем - может дело в нём? Попробуйте прошить фьюзы на внутренний 8МГц генератор, не меняя задержки (хуже ведь не станет). Вдруг проблема как раз в неработающем 16МГц генераторе? Хорошо бы осциллографом посмотреть.
Самое интересное... есть у меня осциллограф!!! ))) Смотрел. На одном выводе кварца красивая синусоида, на другом малость кривая... Может быть из-за этого? СКОРТ включаю, картина та же самая, только амплитуда больше... Думаю, что-то в программе. Кстати. переписал по вашему. Строб теперь один. Сначала данные, потом строб. )))) Самое интересное, что программа пашет. Просто старт не проходит... Не пойму почему.
З.Ы. перепрошил от внутренней RС 8 МГц.. Не запускается... ))))
_________________ Станислав
Последний раз редактировалось СКАЗОЧНИК Пт янв 09, 2015 15:30:13, всего редактировалось 1 раз.
Посмотрел у себя в программах. Для Init-а я шлю такую последовательность команд: Спойлерb'00000011' b'00000011' b'00000011'
b'00000010'
b'00101010' b'00001011' b'00000001' b'00000110' b'00000010' b'00001100' После этого он обязан ожить. Может, конечно, у вашего индикатора занижена внутренняя частота тактирования. Попробуйте, всё-таки, считывать флаг заняности.
_________________ С Уважением, Альберт (Albert_V).
Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 8
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения