реклама на сайте
подробности

 
 
> Вопрос по LCD и CodeVision
Рома_С
сообщение Feb 16 2007, 23:01
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 23-01-07
Пользователь №: 24 699



У меня есть два вопроса

Первый он же главный.
Подскажите пожалуйста, как с помощью CodeVision можно создать, записать в память дисплея и потом прочитать с памяти собственный символ для HD44780 совместимых ЖКИ?

Второй.
Есть ли еще команды для роботы с ЖКИ в CodeVision кроме стандартных в lcd.h, если есть, то как их можно использовать в том же CodeVision (синтаксис команды или функции)?

Заранее благодарен.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Рома_С
сообщение Mar 1 2007, 00:04
Сообщение #2





Группа: Новичок
Сообщений: 8
Регистрация: 23-01-07
Пользователь №: 24 699



О спасибо всем, очень помогли ваши советы. Что самое интересно что в хелпе на сvavr как и показал vooon есть пример:

/* table for the user defined character
arrow that points to the top right corner */
flash byte char0[8]={
0b0000000,
0b0001111,
0b0000011,
0b0000101,
0b0001001,
0b0010000,
0b0100000,

0b1000000};

/* function used to define user characters */
void define_char(byte flash *pc,byte char_code)
{
byte i,a;
a=(char_code<<3) | 0x40;
for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);
}



но он както так непонятно (тогда был) написан или я чтото недопонимаю но после ваших советов, стало все так красиво получатся, и я смог даже отобразить курсор с его разными формами (их вроде там три).

И что означают вот ети две строчки функции define_char

a=(char_code<<3) | 0x40;
for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);

если можно поподробней.


А сейчас я поставил себе задачу, вывести на экран бегущую строку тобишь есть строка символов которая имеет допустим 50 символов то ее нужно вывести на дисплей имеющий 20 символов в строке.

Кстати написал я вот такой код то, что первое пришло наум и явно чтото не здравое
Вот

int i;
char s[12]="Hello world";
.......
for(i=0;i<=19;i++)
{
delay_ms(500);
lcd_gotoxy(i,0);
lcd_puts(s);
}
........

и он мне нормально сдвигал строку пока символ d не дошел до края дисплея, а потом с начала нижней строки стали отображаться исчезнувшие символы верхней строки. Почему? Я подумал что строка должна просто себе исчезать по мере продвижения.

Подскажите что я сделал не так, помогите пожалуйста ссылками или советами по поводу бегущей строки символов по строке дисплея. И как все это можна организовать на CodeVisionAVR

Вот еще, дисплей у меня 4х20

Заранее благодарен.
Go to the top of the page
 
+Quote Post
vooon
сообщение Mar 1 2007, 01:09
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401



Цитата(Рома_С @ Mar 1 2007, 00:04) *
И что означают вот ети две строчки функции define_char

a=(char_code<<3) | 0x40;
for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);

если можно поподробней.


А сейчас я поставил себе задачу, вывести на экран бегущую строку тобишь есть строка символов которая имеет допустим 50 символов то ее нужно вывести на дисплей имеющий 20 символов в строке.

посмотрите http://electronix.ru/forum/index.php?s=&am...st&p=129947 smile.gif

a - это адрес куда будем писать, у 44780 есть две области памяти знакогенератор и данные, отображаемые на экране
адрес первой ячейки знакогенератора 0x40, а данных - 0x80
на каждый _свой_ символ нужно 8 байт (т. е. для символа 0 это 0x40 - 0x47, соответственно для 1ого 0x48 - 0x4F, и т.д.)
это делаем сдвигом номера символа на 3 влево, и побитное или с 0х40.

далее в цикле записываем 8 значений из массива переданного через указатель pc


Ах да! забыл сказать:

у 44780 данные разделены на две строки по 40 байт
у двухстрочных для удобства первая строка это первая smile.gif , а вторая - вторая
Но у четырехстрочных первая строка в озу отображается на 1ой и 3ей(!) строках
а вторая строка в озу - на 2ой и 4ой

надеюсь понятно написал rolleyes.gif
Go to the top of the page
 
+Quote Post
Рома_С
сообщение Mar 1 2007, 22:25
Сообщение #4





Группа: Новичок
Сообщений: 8
Регистрация: 23-01-07
Пользователь №: 24 699



Цитата(vooon @ Mar 1 2007, 00:09) *
a - это адрес куда будем писать, у 44780 есть две области памяти знакогенератор и данные, отображаемые на экране
адрес первой ячейки знакогенератора 0x40, а данных - 0x80
на каждый _свой_ символ нужно 8 байт (т. е. для символа 0 это 0x40 - 0x47, соответственно для 1ого 0x48 - 0x4F, и т.д.)
это делаем сдвигом номера символа на 3 влево, и побитное или с 0х40.

далее в цикле записываем 8 значений из массива переданного через указатель pc


Спасибо конечно за ответ, но если чесно я еще болие запутался. huh.gif Почему мы сдвигаем номер символа именно на 3. А номер символа это что? А где можно про это поподробней прочитать? Уж больно интересно узнать принципы создания символа.

Извините меня пожалуйста за мои, возможно, ламерские вопросы.
Go to the top of the page
 
+Quote Post
vooon
сообщение Mar 2 2007, 00:27
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401



Цитата(Рома_С @ Mar 1 2007, 22:25) *
А где можно про это поподробней прочитать? Уж больно интересно узнать принципы создания символа.


вот гляньте, достаточно полное описание http://www.gaw.ru/html.cgi/txt/lcd/chips/hd44780/start.htm
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 2 2007, 14:40
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(vooon @ Mar 1 2007, 23:27) *
вот гляньте, достаточно полное описание http://www.gaw.ru/html.cgi/txt/lcd/chips/hd44780/start.htm
Я тоже хотел кинуть эту ссылку, но бегло просмотрев ее понял, что как раз про программирование знакогенератора там практически ничего нет.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
vooon
сообщение Mar 2 2007, 17:12
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401



Цитата(Сергей Борщ @ Mar 2 2007, 14:40) *
... про программирование знакогенератора там практически ничего нет.


а впринципе про программирование знакогенератора
нужно знать совсем чуть-чуть smile.gif

при шрифте 5х8 (самый распространный)
образ состоит из 8и байт, в которых используются с 0ого по 4ый биты; 1 - черная точка, 0 - прозрачная
8ой байт обычно не отображается.

номера символов: с 0 по 7ой (чтобы вывести символ 0 придется писать lcd_putchar() , т.к. 0 "обрубит" строку)

вот полное описание от хитачи http://www.atmel.ru/Spec/HD44780.pdf

PS: если что-то непонятно всеравно можно воспользоваться http://vooon.narod.ru/test/hd/index.html?&...62=16&c63=0
я ей пользуюсь постоянно(когда в проекте есть 44780)
Go to the top of the page
 
+Quote Post
Wano
сообщение Mar 5 2007, 21:27
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737



Люди ohmy.gif те кто будет пробовать использовать стандартные библиотеки для работы с I2C и LCD под CodeVision!!!!!
Во первых I2C полный отстой по времени работы,пишите свои функции на асме(вставки) увидите реальный прирост скорости.
Во вторых функции работы с LCD глючны!! Не используйте их.Мной проверены они на 4433 и на меги8
блин виснет нафиг проц минут через 15-10.Они также очень тормозные.
Возьмите сядьте и напишите свои функции. Просто очень хочется огородить начинающих,когда проц
будет виснуть и не будешь знать из-за чего.
Я переписал нужные мне функции под I2C и LCD гонял их непрерывно - всё работало как часы.
Ну а может просто версия у меня старая CodeVision 1.24 щас свежее есть.
Go to the top of the page
 
+Quote Post
vooon
сообщение Mar 6 2007, 01:04
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401



Цитата(Wano @ Mar 5 2007, 21:27) *
Во вторых функции работы с LCD глючны!! Не используйте их.Мной проверены они на 4433 и на меги8
блин виснет нафиг проц минут через 15-10.Они также очень тормозные.


возможно вам попался плохо вылеченный CV. устройство на М8 нормально работает круглые сутки почти пол года - проблем нет
скомпилен был CV 1.24.8b
возможно конечно что вы пользовались ф-цией srintf() она действительно может виснуть при некоторых настройках.
I2C CV не пользую - зачем, когда есть TWI wink.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Рома_С   Вопрос по LCD и CodeVision   Feb 16 2007, 23:01
- - Яrik   Цитата(Рома_С @ Feb 16 2007, 22:01) У мен...   Feb 16 2007, 23:36
- - Artur Nikitin   Цитата(Рома_С @ Feb 16 2007, 23:01) ...ка...   Feb 28 2007, 12:42
- - vooon   Цитата(Рома_С @ Feb 16 2007, 23:01) У мен...   Feb 28 2007, 22:30
|- - Сергей Борщ   Цитата(Рома_С @ Mar 1 2007, 21:25) Почему...   Mar 1 2007, 23:24
|- - Petka   Цитата(Wano @ Mar 5 2007, 21:27) Люди т...   Mar 6 2007, 01:10
|- - Wano   Кароче товарищи жаль что нельзя с вами поспорить.Х...   Mar 6 2007, 21:34
- - megachip   Использую 1.24.6, никаких проблем с библиотекой LC...   Mar 6 2007, 21:48
- - Wano   Киньте на ksotпсюкlist.ru свою версию,я посравнива...   Mar 6 2007, 21:57
- - Рома_С   Ну, наконец то разобрался я с вот этой функцией. ...   Mar 6 2007, 23:32
- - vooon   Цитатасколько можно собственных символов записать ...   Mar 7 2007, 01:39


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 02:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01455 секунд с 7
ELECTRONIX ©2004-2016