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

|
У меня есть два вопроса
Первый он же главный. Подскажите пожалуйста, как с помощью CodeVision можно создать, записать в память дисплея и потом прочитать с памяти собственный символ для HD44780 совместимых ЖКИ?
Второй. Есть ли еще команды для роботы с ЖКИ в CodeVision кроме стандартных в lcd.h, если есть, то как их можно использовать в том же CodeVision (синтаксис команды или функции)?
Заранее благодарен.
|
|
|
|
|
Feb 16 2007, 23:36
|
Частый гость
 
Группа: Новичок
Сообщений: 110
Регистрация: 8-01-07
Из: Украина
Пользователь №: 24 216

|
Цитата(Рома_С @ Feb 16 2007, 22:01)  У меня есть два вопроса
Первый он же главный. Подскажите пожалуйста, как с помощью CodeVision можно создать, записать в память дисплея и потом прочитать с памяти собственный символ для HD44780 совместимых ЖКИ?
Второй. Есть ли еще команды для роботы с ЖКИ в CodeVision кроме стандартных в lcd.h, если есть, то как их можно использовать в том же CodeVision (синтаксис команды или функции)?
Заранее благодарен. Глянь тему в верху страници "! Исходники программ и библиотек", там вроде есть библиотеки для работы с HD44780  . Может что-то подойдет!!!!!!!
|
|
|
|
|
Feb 28 2007, 12:42
|
Участник

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

|
Цитата(Рома_С @ Feb 16 2007, 23:01)  ...как с помощью CodeVision можно создать, записать в память дисплея и потом прочитать с памяти собственный символ для HD44780 совместимых ЖКИ? http://www.atmel.ru/Spec/LCD.htmтут информация для AVR
--------------------
начинающий программист
|
|
|
|
|
Feb 28 2007, 22:30
|

Участник

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

|
Цитата(Рома_С @ Feb 16 2007, 23:01)  У меня есть два вопроса
Первый он же главный. Подскажите пожалуйста, как с помощью CodeVision можно создать, записать в память дисплея и потом прочитать с памяти собственный символ для HD44780 совместимых ЖКИ? вот как писать символ (прям из хелпа) чтение никогда не делал, поэтому на вторую часть вопроса не отвечу  (кстати здесь: http://nix-06.nm.ru/Programma/hd/hd_js.html можете найти мою програмку чтобы удобно рисовать их  ) Код /* 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-для вывода русского текста
|
|
|
|
|
Mar 1 2007, 00:04
|
Группа: Новичок
Сообщений: 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
Заранее благодарен.
|
|
|
|
|
Mar 1 2007, 01:09
|

Участник

Группа: Свой
Сообщений: 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  a - это адрес куда будем писать, у 44780 есть две области памяти знакогенератор и данные, отображаемые на экране адрес первой ячейки знакогенератора 0x40, а данных - 0x80 на каждый _свой_ символ нужно 8 байт (т. е. для символа 0 это 0x40 - 0x47, соответственно для 1ого 0x48 - 0x4F, и т.д.) это делаем сдвигом номера символа на 3 влево, и побитное или с 0х40. далее в цикле записываем 8 значений из массива переданного через указатель pc Ах да! забыл сказать: у 44780 данные разделены на две строки по 40 байт у двухстрочных для удобства первая строка это первая  , а вторая - вторая Но у четырехстрочных первая строка в озу отображается на 1ой и 3ей(!) строках а вторая строка в озу - на 2ой и 4ой надеюсь понятно написал
|
|
|
|
|
Mar 1 2007, 22:25
|
Группа: Новичок
Сообщений: 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 Спасибо конечно за ответ, но если чесно я еще болие запутался.  Почему мы сдвигаем номер символа именно на 3. А номер символа это что? А где можно про это поподробней прочитать? Уж больно интересно узнать принципы создания символа. Извините меня пожалуйста за мои, возможно, ламерские вопросы.
|
|
|
|
|
Mar 1 2007, 23:24
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Mar 2 2007, 00:27
|

Участник

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

|
Цитата(Рома_С @ Mar 1 2007, 22:25)  А где можно про это поподробней прочитать? Уж больно интересно узнать принципы создания символа. вот гляньте, достаточно полное описание http://www.gaw.ru/html.cgi/txt/lcd/chips/hd44780/start.htm
|
|
|
|
|
Mar 2 2007, 17:12
|

Участник

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

|
Цитата(Сергей Борщ @ Mar 2 2007, 14:40)  ... про программирование знакогенератора там практически ничего нет. а впринципе про программирование знакогенератора нужно знать совсем чуть-чуть  при шрифте 5х8 (самый распространный) образ состоит из 8и байт, в которых используются с 0ого по 4ый биты; 1 - черная точка, 0 - прозрачная 8ой байт обычно не отображается. номера символов: с 0 по 7ой (чтобы вывести символ 0 придется писать lcd_putchar() , т.к. 0 "обрубит" строку) вот полное описание от хитачи http://www.atmel.ru/Spec/HD44780.pdfPS: если что-то непонятно всеравно можно воспользоваться http://vooon.narod.ru/test/hd/index.html?&...62=16&c63=0я ей пользуюсь постоянно(когда в проекте есть 44780)
|
|
|
|
|
Mar 5 2007, 21:27
|
Местный
  
Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737

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

Участник

Группа: Свой
Сообщений: 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
|
|
|
|
|
Mar 6 2007, 01:10
|
Профессионал
    
Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886

|
Цитата(Wano @ Mar 5 2007, 21:27)  Люди  те кто будет пробовать использовать стандартные библиотеки для работы с I2C и LCD под CodeVision!!!!! Во первых I2C полный отстой по времени работы,пишите свои функции на асме(вставки) увидите реальный прирост скорости. Во вторых функции работы с LCD глючны!! Не используйте их.Мной проверены они на 4433 и на меги8 блин виснет нафиг проц минут через 15-10.Они также очень тормозные. Возьмите сядьте и напишите свои функции. Просто очень хочется огородить начинающих,когда проц будет виснуть и не будешь знать из-за чего. Я переписал нужные мне функции под I2C и LCD гонял их непрерывно - всё работало как часы. Ну а может просто версия у меня старая CodeVision 1.24 щас свежее есть. Если у Вас не получилось нормально работать с библиотечными функциями это не значит что они плохие... Они вполне рабочие. Использовал и LCD и I2C (програмную и аппаратные реализации). Всё работало. Кроме того не забывайте внимательно читать help, man, faq, и смотреть examples. Напомню: в каталоге lib находятся исходики библиотечных функций. Если Вы считаете что там есть ошибки, то покажите пожалуйста их общественности.
|
|
|
|
|
Mar 6 2007, 21:34
|
Местный
  
Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737

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