Всем доброго. Купил (на свою голову) этот 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) создается самой средой, и нет нужды их заявлять.
"хотел бы я в глаза взглянуть тому конструктору..." вместо эпиграфа.
Снова прошу помощи ибо близок к тому чтобы что-нибудь разбить. пишу в ЖКИ текст, пользуюсь программой из "лаборатории". Но CVAVR ни в дугу не хочет понимать нормально типы. Итак, вот кусок программы
Проблема, что в исходниках вместо flash char[] использовался просто char[]. и с ним срабатывала функция strlen. У меня же strlen не работает, тип данных не тот. А она, сами понимаете, нужна, без нее приходится ручками считать сколько символов. А написать параметром char мне нельзя, ибо "взятая в кавычки строка автоматически считается строковым литералом и отправляется во flash" (цитата Лебедева) Прошу любого решения.
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 это не просто доступ к переменной, на это команды у МК есть специальные.
Цитата:
А она, сами понимаете, нужна, без нее приходится ручками считать сколько символов.
Скажите, а зачем вы короткую фразу пытаетесь хранить в программной памяти? Разве у вас не хватило ОЗУ?
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения