Страница 1 из 1
перемещение графобъекта между полуэкранами на ЖКИ BG12864E
Добавлено: Чт дек 09, 2010 12:20:04
Slavast
Вопрос по разделу "Лаборатория/Цифровые устройства/Использование графического LCD WG12864A."
Доброго всем!"
Видел использование похожего ЖКИ в вышеуказанном разделе. Но вывод информации на дисплей там осуществляется не в динамике.
Использую BG12864E на ATMEGA2561 для вывода катящегося мячика. Прокатить плавно мячик с одной стороны полуэкрана в другой не составило труда - с задержкой выводим массив байтов на экран и сдвигаем по горизонтали. Но вот прокатить этот шарик между полуэкранами - задача, т.к. как только он заезжает за правый край полуэкрана, он тут же появляется в его начале. Переключая полуэкраны нельзя добиться плавного заезда, т.к. объект во всю свою длину перескакивает на второй полуэкран и получается резкий рывок. До сих пор не могу понять как это можно сделать. Конечная цель - чтоб бильярдный мячик бегал по экрану, отталкиваясь от его краев.
Поделитесь идеей как это можно сделать?
Заранее, спасибо!!!
Re: перемещение графобъекта между полуэкранами на ЖКИ BG1286
Добавлено: Чт дек 09, 2010 12:27:33
ARV
я, к сожалению, не помню, в каких ЖКИ установлен такой контроллер, как вы описали, но когда я ковырялся с МЭЛТовским ЖКИ 32х122 точки МТ-12232, я тоже рвал и метал из-за этой, мягко говоря, неудобной особенности... но я ее решил!

в общем, все достаточно просто: необходимо делать преобразование координат, прежде чем выводить байт в индикатор... если координата от 0 до середины дисплея - выводим в первый контроллер сразу, а если координата больше - выводим во второй, но при этом координату корректируем...
Re: перемещение графобъекта между полуэкранами на ЖКИ BG1286
Добавлено: Чт дек 09, 2010 12:47:21
Slavast
ARV писал(а):я, к сожалению, не помню, в каких ЖКИ установлен такой контроллер,
...
если координата от 0 до середины дисплея - выводим в первый контроллер сразу, а если координата больше - выводим во второй, но при этом координату корректируем...
Использую микроконтроллер ATMega2561. На нем пишу.
А как корректировать координату? Указывать больше чем необходимо, чтоб мяч начал заезжать за край? Тогда он начинает выплывать с другой стороны текущего экрана((
Re: перемещение графобъекта между полуэкранами на ЖКИ BG1286
Добавлено: Чт дек 09, 2010 12:54:16
ARV
у вас обязательно есть преобразование "координата --> адрес в ОЗУ". вот когда вы вычисляете адрес, и надо производить коррекцию, т.е. не самой координаты, а вычисляемого адреса. ну и естественно, выводить в нужный контроллер.
Re: перемещение графобъекта между полуэкранами на ЖКИ BG1286
Добавлено: Чт дек 09, 2010 13:10:38
Slavast
ARV писал(а):у вас обязательно есть преобразование "координата --> адрес в ОЗУ". вот когда вы вычисляете адрес, и надо производить коррекцию, т.е. не самой координаты, а вычисляемого адреса. ну и естественно, выводить в нужный контроллер.
Пардон, если не понял.
В моем случае переменная komand насколько я понимаю находится в ОЗУ. так?
Я же вывожу нач адрес по горизонтали (удивительно, но в этом ЖКИ в даташите координаты по горизонтали именуются как Y!). И потом его просто инкрементирую и сравниваю с опред значением, как только равен - то вывод на второй экран.
...
ldi r23, 0x40
sts komand, r23
rcall PokazKom1 ; начало горизонтали
inc r23 ; след адрес вправо
cpi r23, 0x80
Re: перемещение графобъекта между полуэкранами на ЖКИ BG1286
Добавлено: Чт дек 09, 2010 13:11:44
Slavast
детальный инфошит
Re: перемещение графобъекта между полуэкранами на ЖКИ BG1286
Добавлено: Чт дек 09, 2010 16:24:15
ARV
не знаю, как в вашем случае, а в у-помянутом-не-добрым-словом МЭЛТе адреса "столбиков байтов" в ОЗУ в контроллерах идут навстречу друг другу, т.е. у первого от края к середине, и у второго от края к середине (т.е. у первого слева направо, а у второго справа налево)... есть еще режим, когда они идут оба от середины к краям... убивал бы изобретателей таких контроллеров...
поэтому мне приходилось корректировку адреса делать путем несложных математических вычислений

Re: перемещение графобъекта между полуэкранами на ЖКИ BG1286
Добавлено: Чт дек 09, 2010 18:57:59
ARV
вот моя функция:
Код: Выделить всё
void set_byte_at(uint8_t x, uint8_t pg, uint8_t byte){
uint8_t controller;
if(x < COLUMNS){
controller = 1;
sed_cmd_to(controller, SED_CMD_SET_ADDR | (COLUMNS - x - 1));
} else {
controller = 0;
sed_cmd_to(controller, SED_CMD_SET_ADDR | (x - COLUMNS));
}
sed_cmd_to(controller, SED_CMD_SET_PAGE | pg);
sed_data_to(controller, byte);
}
x - это номер байта памяти по горизонтали, pg - номер столбика байтов по вертикали, согласно принципу адресации. эти координаты в обычном стиле, т.е. непрерывные, а реальные адреса байтов в памяти обоих контроллеров вычисляет функция.
Re: перемещение графобъекта между полуэкранами на ЖКИ BG1286
Добавлено: Пн дек 13, 2010 14:33:19
Slavast
ARV писал(а):вот моя функция:
Код: Выделить всё
void set_byte_at(uint8_t x, uint8_t pg, uint8_t byte){
.[/quote]
Спасибо за пример!
Сейчас пробую его ввести в жизнь!