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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Вопрос по 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
Яrik
сообщение Feb 16 2007, 23:36
Сообщение #2


Частый гость
**

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



Цитата(Рома_С @ Feb 16 2007, 22:01) *
У меня есть два вопроса

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

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

Заранее благодарен.

Глянь тему в верху страници "! Исходники программ и библиотек", там вроде есть библиотеки для работы с HD44780 biggrin.gif . Может что-то подойдет!!!!!!!
Go to the top of the page
 
+Quote Post
Artur Nikitin
сообщение Feb 28 2007, 12:42
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 30
Регистрация: 28-11-06
Из: Набережные Челны
Пользователь №: 22 856



Цитата(Рома_С @ Feb 16 2007, 23:01) *
...как с помощью CodeVision можно создать, записать в память дисплея и потом прочитать с памяти собственный символ для HD44780 совместимых ЖКИ?

http://www.atmel.ru/Spec/LCD.htm
тут информация для AVR


--------------------
начинающий программист
Go to the top of the page
 
+Quote Post
vooon
сообщение Feb 28 2007, 22:30
Сообщение #4


Участник
*

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



Цитата(Рома_С @ Feb 16 2007, 23:01) *
У меня есть два вопроса

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

вот как писать символ (прям из хелпа)
чтение никогда не делал, поэтому на вторую часть вопроса не отвечу smile.gif
(кстати здесь: http://nix-06.nm.ru/Programma/hd/hd_js.html можете найти мою програмку чтобы удобно рисовать их smile.gif )
Код
/* table for the user defined character
** arrow that points to the top right corner
**/
flash unsigned char    lcd_cg[] = {
    /* .....
    ** .####
    ** ...##
    ** ..#.#
    ** .#..#
    ** #....
    ** .....
    ** .....
    */
     0, 15, 3, 5, 9, 16, 0, 0
}

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

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

Заранее благодарен.

доп функций нет

очень удобно использовать
#pragma rl+
#pragma rl-

для вывода русского текста
Go to the top of the page
 
+Quote Post
Рома_С
сообщение Mar 1 2007, 00:04
Сообщение #5





Группа: Новичок
Сообщений: 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
Сообщение #6


Участник
*

Группа: Свой
Сообщений: 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
Сообщение #7





Группа: Новичок
Сообщений: 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
Сергей Борщ
сообщение Mar 1 2007, 23:24
Сообщение #8


Гуру
******

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



Цитата(Рома_С @ Mar 1 2007, 21:25) *
Почему мы сдвигаем номер символа именно на 3.
Потому что сдвиг на три в двоичной системе это умножение на два в третьей, т.е на восемь.
Цитата(Рома_С @ Mar 1 2007, 21:25) *
А номер символа это что?
Это адрес начала образа символа в знакогенераторе.
Цитата(Рома_С @ Mar 1 2007, 21:25) *
А где можно про это поподробней прочитать?
В даташите на контроллер HD44780, погуглите, их (даташитов) много в сети и они отличаются. Попадаются довольно подробные.


--------------------
На любой вопрос даю любой ответ
"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, 00:27
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 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
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #11


Участник
*

Группа: Свой
Сообщений: 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
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #13


Участник
*

Группа: Свой
Сообщений: 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
Petka
сообщение Mar 6 2007, 01:10
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Wano @ Mar 5 2007, 21:27) *
Люди ohmy.gif те кто будет пробовать использовать стандартные библиотеки для работы с I2C и LCD под CodeVision!!!!!
Во первых I2C полный отстой по времени работы,пишите свои функции на асме(вставки) увидите реальный прирост скорости.
Во вторых функции работы с LCD глючны!! Не используйте их.Мной проверены они на 4433 и на меги8
блин виснет нафиг проц минут через 15-10.Они также очень тормозные.
Возьмите сядьте и напишите свои функции. Просто очень хочется огородить начинающих,когда проц
будет виснуть и не будешь знать из-за чего.
Я переписал нужные мне функции под I2C и LCD гонял их непрерывно - всё работало как часы.
Ну а может просто версия у меня старая CodeVision 1.24 щас свежее есть.


Если у Вас не получилось нормально работать с библиотечными функциями это не значит что они плохие... Они вполне рабочие. Использовал и LCD и I2C (програмную и аппаратные реализации). Всё работало. Кроме того не забывайте внимательно читать help, man, faq, и смотреть examples.

Напомню: в каталоге lib находятся исходики библиотечных функций. Если Вы считаете что там есть ошибки, то покажите пожалуйста их общественности.
Go to the top of the page
 
+Quote Post
Wano
сообщение Mar 6 2007, 21:34
Сообщение #15


Местный
***

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



Кароче товарищи жаль что нельзя с вами поспорить.Хотя через всю Россию буду ехать скоро,пиво могу поставить biggrin.gif .
Давайте не будем переходить на личности.Могу скинуть версию 1.24 на мыло,оставьте ссылочку кто может ответить за свои слова.
Для перерисовки используйте функцию clear,буквально код инит-адрес-строка-стереть и покругу,ну задержечка ещё для приличия.
Если он у вас не повиснет - я дурак чистосердечно признаюсь. Если он у вас повиснет,я думаю просто мы помолчим.Могу так же заслать свою функцию,что пашет как часики.100% помню что вешается первой функция стирания экрана. Чем чаще она используется тем быстрей повисон.Второй по глюкам сама функция вывода. Я уже мегагерцовый кварц ставил,сначало думал,что что-то в моей проге.Второе устройство собрал - стабилизатор тока для машинного аккомулятора.Думал помеха пробивается,поставил операционник - виснет. Отцепил вообще всё,что можно от контроллера кроме экрана - виснет.Стёр весь код обработки АЦП - виснет.
Поверьте, когда со злости готов разбить устройство,это уж точно не неумение использовать функции и настройки,это просто безызсходность. Я когда просёк фишку матюкался до небес.
Ну и на счёт I2C кто скажет что они работают быстро,значит такой вы прогер.Я хоть и самоучка но всё можно сделать гараздо быстрее.
Проверено с 24-й памятью на I2C.
Более подробно отвечу,правдо щас у предков,а тут у меня тока одна платка на ARM.
Как до дому доберусь распишу про LCD и I2C. На жестком диске тока код остался.

Сообщение отредактировал Wano - Mar 6 2007, 21:55
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th July 2025 - 15:49
Рейтинг@Mail.ru


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