Форум РадиоКот https://radiokot.ru/forum/ |
|
Прошу помощи с LCD 12232b-2Y(F)LG https://radiokot.ru/forum/viewtopic.php?f=20&t=75976 |
Страница 1 из 1 |
Автор: | jakob291 [ Ср июл 25, 2012 20:37:00 ] |
Заголовок сообщения: | Прошу помощи с LCD 12232b-2Y(F)LG |
Всем доброго. Купил (на свою голову) этот 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); } Заранее всем спасибо |
Автор: | Ser60 [ Чт июл 26, 2012 00:02:51 ] |
Заголовок сообщения: | Re: Прошу помощи с LCD 12232b-2Y(F)LG |
Дело в том, что надо подавать стробы после каждой команды при инициализации. Посмотрите примеры программ работы с дисплеем на сайте производителя. http://www.melt.com.ru/shop/mt-12232b-2ylg.html |
Автор: | s_black [ Чт июл 26, 2012 05:58:46 ] |
Заголовок сообщения: | Re: Прошу помощи с LCD 12232b-2Y(F)LG |
Всё уже придумано до нас |
Автор: | jakob291 [ Чт июл 26, 2012 10:09:45 ] |
Заголовок сообщения: | Re: Прошу помощи с LCD 12232b-2Y(F)LG |
Ser60, спасибо. Мой преподаватель программирования всегда говорил: "какой бы код ты не писал, он должен как-то компилироваться" Это я к примерам от melt.ru Вроде заработало, но столкнулся с новой напастью. С напастью я справился, но на всякий случай напишу лекарство. Итак, если CVAVR при попытке вызвать функцию из функции ругается на вызов "undefined symbol *имя_функции*", то нужно вынести ее в начало кода декларативно. То есть, допустим, есть функция: Код: void LCDStrobe( void ) { delay_ms(1); PORTA.1=1; PORTA.2=1; delay_ms(1); PORTA.1=0; PORTA.2=0; delay_ms(1); } Мы пытаемся вызвать ее так: Код: #include <mega8515.h> #include <delay.h> void main (void) { LCDStrobe(); ... } Получаем ошибку "Error: ...\avr\LCD1st.c(8): undefined symbol 'LCDStrobe'" Это значит, что начать программу нужно так: Код: #include <mega8515.h> #include <delay.h> void LCDStrobe(void); void main (void) { LCDStrobe(); ... } Для программистов, привыкших к С++ и выше это может стать открытием, т.к. перечень функций (идиотское название, перечень методов) в полномасштабных средах программирования (Visual studio) создается самой средой, и нет нужды их заявлять. |
Автор: | jakob291 [ Чт июл 26, 2012 19:20:42 ] |
Заголовок сообщения: | Re: Прошу помощи с LCD 12232b-2Y(F)LG |
"хотел бы я в глаза взглянуть тому конструктору..." вместо эпиграфа. Снова прошу помощи ибо близок к тому чтобы что-нибудь разбить. пишу в ЖКИ текст, пользуюсь программой из "лаборатории". Но CVAVR ни в дугу не хочет понимать нормально типы. Итак, вот кусок программы Код: void puts (flash char str[], unsigned char n, unsigned char inv) { unsigned char a; for(a=0;(a<n);a++) { if (globAddr<=55) { putc(str[a],inv,1); } else { putc(str[a],inv,2); } } } flash char locstr[] = "radiokot"; void main (void) { InitLCD(); ClearLCDRAM(); puts(locstr, 11, 0); } Проблема, что в исходниках вместо flash char[] использовался просто char[]. и с ним срабатывала функция strlen. У меня же strlen не работает, тип данных не тот. А она, сами понимаете, нужна, без нее приходится ручками считать сколько символов. А написать параметром char мне нельзя, ибо "взятая в кавычки строка автоматически считается строковым литералом и отправляется во flash" (цитата Лебедева) Прошу любого решения. |
Автор: | Ser60 [ Чт июл 26, 2012 19:40:58 ] |
Заголовок сообщения: | Re: Прошу помощи с LCD 12232b-2Y(F)LG |
jakob291: Я прямо сейчас уезжаю на неделю на озера, Интернет там местами будет, но на ходу мне печатать сложно. Может быть вечерами... Как я посмотрю, у Вас проблемы с С, почему-бы не прочитать сначала учебник по программированию. Иной выход - пишите на АСМе, как Вы и начинали. МЭЛТ-овские функции на АСМ перерабатываются элементарно, я так в свое время и поступил для ПИК-ов. Там в этих функциях все-равно большей частью работа с SFR или битами, так что С или АСМ - без разницы. Проблемы со strlen() - ну напишите ее тоже сами, там делов-то - один цикл, быстрее будет написать чем пост печатать. А со временем разберетесь. Удачи! |
Автор: | jakob291 [ Чт июл 26, 2012 21:53:18 ] |
Заголовок сообщения: | Re: Прошу помощи с LCD 12232b-2Y(F)LG |
Ser60, за идею спасибо, не всегда быстро до меня доходит, что можно обойти даже штатную операцию. с языками у меня проблем нет, я профессионально пишу на C#, попутно знаю еще четыре. Просто в CVAVR же не чистый С, а обрезанный и дополненный. Ассемблер я, кстати, тоже немного знаю, но реализовать на нем что-то сложное невероятно сложно. Ладно, эту процедуру я обойду своей, а пока еще вопрос: Как правильно подключить контрастность? Я поставил на цепь VCС-GND (пины 1 и 2) настроечный резистор... потом стационарный. В общем попробовав сопротивления от 100 Ом до 40 КОм я добился изменения контраста в определенных пределах, но все равно при взгляде "в лоб" я вижу неактивные точки, зато под "тупым углом" их уже не видно. Это я чего-то не понимаю или нужно еще больший номинал сопротивления? (кстати, я питаю его 5,8 В вместо 5, нет у меня источника на 5, но по даташиту он выдерживает 6) |
Автор: | Ser60 [ Пт июл 27, 2012 04:52:03 ] |
Заголовок сообщения: | Re: Прошу помощи с LCD 12232b-2Y(F)LG |
Да, согласен с Вами, странный дисплей... Обычно системой команд чипа контроллера ЖКИ предусмотрена регулировка контраста, например изменением ЖКИ "bias voltage", или есть вывод регулирови контраста. В этом дисплее ничего такого нет, значит регулировка контраста там не предусмотрена вообще. При изменении напряжения питания ЖКИ в пределах 4-6в по ДШ (то, что Вы делаете с резистором) может немного меняться и контраст. Ну не знаю - лично я такие партизанские методы не приветствую, поскольку следует следить, чтобы была небольшая разница между напряжением питания ЖКИ и МК. Следует просто смириться с природой, забив на контраст, или купить другой ЖКИ. А при изменении угла зрения контраст, конечно, будет меняться тоже. |
Автор: | da-nie [ Пт июл 27, 2012 05:19:37 ] |
Заголовок сообщения: | Re: Прошу помощи с LCD 12232b-2Y(F)LG |
Цитата: с языками у меня проблем нет, я профессионально пишу на C#, попутно знаю еще четыре. В таком случае, вам стоит освежить знания языков. Нет, серьёзно. Цитата: Просто в CVAVR же не чистый С, а обрезанный и дополненный. Ну вот зачем вы это говорите? Это ладно, я только поиронизирую, а вот если тролль какой придёт? Застебут же! Особенно, если читать ниже процитированное про открытие для программистов на Си++. Это одно разом перечёркивает "с языками у меня проблем нет, я профессионально пишу на C#". Не стоит так делать. Лучше сначала книжку по Си найдите, там вы все эти откровения прочтёте. Цитата: Для программистов, привыкших к С++ и выше это может стать открытием, т.к. перечень функций (идиотское название, перечень методов) в полномасштабных средах программирования (Visual studio) создается самой средой, и нет нужды их заявлять. Описанное вами - это, как бы, стандарт Си, вообще-то. Компилятор не в курсе, какая функция у вас есть, а какой нет, вот и просит указать прототипы. При раздельной компиляции с той же целью используются заголовочные файлы. И, к примеру, VC6, конечно же, задавать "перечень функций" за вас не будет. Цитата: У меня же strlen не работает, тип данных не тот. Нет. У вас не тип данных не тот, а способ чтения данных по указателю не тот. Не умеет strlen читать из FLASH. Чтение из FLASH это не просто доступ к переменной, на это команды у МК есть специальные. Цитата: А она, сами понимаете, нужна, без нее приходится ручками считать сколько символов. Скажите, а зачем вы короткую фразу пытаетесь хранить в программной памяти? Разве у вас не хватило ОЗУ? |
Автор: | U235 [ Пт июл 27, 2012 07:30:37 ] |
Заголовок сообщения: | Re: Прошу помощи с LCD 12232b-2Y(F)LG |
jakob291 писал(а): У меня же strlen не работает, тип данных не тот. Используйте strlenf. В справочнике CodeVisionAVR можно найти и другие функции для памяти программ. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |