Всем доброго. Купил (на свою голову) этот LCD и пытаюсь его оживить по нарастающей. Столкнулся с проблемой в простейшей же программе. После подачи питания дисплей весь заполнен точками, я подал ему команду нарисовать прямую с дыркой... а он все равно весь черный. С лупой проверил все пиксели - светятся все. Кто знает в чем беда, поможите. Код прикладываю. Проблема в том, что у него контроллер - SED1520DOA, информации маловато. Программа простейшая, на методы (процедуры) не разбивал специально. Пишу в CVAVR. микроконтроллер ATMEGA8515. За шину данных отвечает регистр С, A0=PA0 микро, E1=PA1, E2=PA2, RES=PA7 Проблема программная или аппаратная? Микроконтроллер прошивается, на небольшие изменения программы реагирует (светодиод ставил)
Код:
#include <mega8515.h> #include <delay.h> void main (void) { DDRC= 0b11111111; // порты на вывод DDRA= 0b11111111; // порты на вывод PORTC=0b00000000; //очистка портов PORTA=0b00000000; delay_ms(100); //начало инициализации. ждем. PORTA.7=1; //сбрасываем reset delay_ms(10); PORTA.0=0; // бит команда/данные в режим "команда" PORTA.3=0; //бит чтения/записи в режим "запись" PORTC=0b11100010; //команда reset (не бит RST) PORTC=0b11101110; //снять флаг RMW PORTC=0b10100100; // режим работы обычный PORTC=0b10101001; // мультиплекс установить PORTC=0b11000000; // начальная строка - 0 PORTC=0b10100000; // установить нормальный порядок отображения бит PORTC=0b10101111; // дисплей включить PORTC=0b10111000; //установка страницы delay_ms(1); PORTA.1=1; //строб Е1 PORTA.2=1; //строб Е2 delay_ms(1); PORTA.1=0; //снять стробы PORTA.2=0; delay_ms(1); PORTC=0b00000011; //установка адреса колонки delay_ms(1); PORTA.1=1; PORTA.2=1; delay_ms(1); PORTA.1=0; PORTA.2=0; delay_ms(1); PORTA.3=0; PORTA.0=1; PORTC=0b00011001; // пишем байт, жду что черными будут только 4,5,8 пиксель, а остальные потухнут delay_ms(1); PORTA.1=1; delay_ms(1); PORTA.1=0; delay_ms(1); }
Дело в том, что надо подавать стробы после каждой команды при инициализации. Посмотрите примеры программ работы с дисплеем на сайте производителя. http://www.melt.com.ru/shop/mt-12232b-2ylg.html
Ser60, спасибо. Мой преподаватель программирования всегда говорил: "какой бы код ты не писал, он должен как-то компилироваться" Это я к примерам от melt.ru
Вроде заработало, но столкнулся с новой напастью. С напастью я справился, но на всякий случай напишу лекарство. Итак, если CVAVR при попытке вызвать функцию из функции ругается на вызов "undefined symbol *имя_функции*", то нужно вынести ее в начало кода декларативно. То есть, допустим, есть функция:
Для программистов, привыкших к С++ и выше это может стать открытием, т.к. перечень функций (идиотское название, перечень методов) в полномасштабных средах программирования (Visual studio) создается самой средой, и нет нужды их заявлять.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
"хотел бы я в глаза взглянуть тому конструктору..." вместо эпиграфа.
Снова прошу помощи ибо близок к тому чтобы что-нибудь разбить. пишу в ЖКИ текст, пользуюсь программой из "лаборатории". Но CVAVR ни в дугу не хочет понимать нормально типы. Итак, вот кусок программы
Проблема, что в исходниках вместо flash char[] использовался просто char[]. и с ним срабатывала функция strlen. У меня же strlen не работает, тип данных не тот. А она, сами понимаете, нужна, без нее приходится ручками считать сколько символов. А написать параметром char мне нельзя, ибо "взятая в кавычки строка автоматически считается строковым литералом и отправляется во flash" (цитата Лебедева) Прошу любого решения.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
jakob291: Я прямо сейчас уезжаю на неделю на озера, Интернет там местами будет, но на ходу мне печатать сложно. Может быть вечерами... Как я посмотрю, у Вас проблемы с С, почему-бы не прочитать сначала учебник по программированию. Иной выход - пишите на АСМе, как Вы и начинали. МЭЛТ-овские функции на АСМ перерабатываются элементарно, я так в свое время и поступил для ПИК-ов. Там в этих функциях все-равно большей частью работа с SFR или битами, так что С или АСМ - без разницы. Проблемы со strlen() - ну напишите ее тоже сами, там делов-то - один цикл, быстрее будет написать чем пост печатать. А со временем разберетесь. Удачи!
Ser60, за идею спасибо, не всегда быстро до меня доходит, что можно обойти даже штатную операцию. с языками у меня проблем нет, я профессионально пишу на C#, попутно знаю еще четыре. Просто в CVAVR же не чистый С, а обрезанный и дополненный. Ассемблер я, кстати, тоже немного знаю, но реализовать на нем что-то сложное невероятно сложно.
Ладно, эту процедуру я обойду своей, а пока еще вопрос: Как правильно подключить контрастность? Я поставил на цепь VCС-GND (пины 1 и 2) настроечный резистор... потом стационарный. В общем попробовав сопротивления от 100 Ом до 40 КОм я добился изменения контраста в определенных пределах, но все равно при взгляде "в лоб" я вижу неактивные точки, зато под "тупым углом" их уже не видно. Это я чего-то не понимаю или нужно еще больший номинал сопротивления? (кстати, я питаю его 5,8 В вместо 5, нет у меня источника на 5, но по даташиту он выдерживает 6)
Да, согласен с Вами, странный дисплей... Обычно системой команд чипа контроллера ЖКИ предусмотрена регулировка контраста, например изменением ЖКИ "bias voltage", или есть вывод регулирови контраста. В этом дисплее ничего такого нет, значит регулировка контраста там не предусмотрена вообще. При изменении напряжения питания ЖКИ в пределах 4-6в по ДШ (то, что Вы делаете с резистором) может немного меняться и контраст. Ну не знаю - лично я такие партизанские методы не приветствую, поскольку следует следить, чтобы была небольшая разница между напряжением питания ЖКИ и МК. Следует просто смириться с природой, забив на контраст, или купить другой ЖКИ. А при изменении угла зрения контраст, конечно, будет меняться тоже.
с языками у меня проблем нет, я профессионально пишу на C#, попутно знаю еще четыре.
В таком случае, вам стоит освежить знания языков. Нет, серьёзно.
Цитата:
Просто в CVAVR же не чистый С, а обрезанный и дополненный.
Ну вот зачем вы это говорите? Это ладно, я только поиронизирую, а вот если тролль какой придёт? Застебут же! Особенно, если читать ниже процитированное про открытие для программистов на Си++. Это одно разом перечёркивает "с языками у меня проблем нет, я профессионально пишу на C#". Не стоит так делать. Лучше сначала книжку по Си найдите, там вы все эти откровения прочтёте.
Цитата:
Для программистов, привыкших к С++ и выше это может стать открытием, т.к. перечень функций (идиотское название, перечень методов) в полномасштабных средах программирования (Visual studio) создается самой средой, и нет нужды их заявлять.
Описанное вами - это, как бы, стандарт Си, вообще-то. Компилятор не в курсе, какая функция у вас есть, а какой нет, вот и просит указать прототипы. При раздельной компиляции с той же целью используются заголовочные файлы. И, к примеру, VC6, конечно же, задавать "перечень функций" за вас не будет.
Цитата:
У меня же strlen не работает, тип данных не тот.
Нет. У вас не тип данных не тот, а способ чтения данных по указателю не тот. Не умеет strlen читать из FLASH. Чтение из FLASH это не просто доступ к переменной, на это команды у МК есть специальные.
Цитата:
А она, сами понимаете, нужна, без нее приходится ручками считать сколько символов.
Скажите, а зачем вы короткую фразу пытаетесь хранить в программной памяти? Разве у вас не хватило ОЗУ?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения