Перейти к содержанию
    

Помогите запустить LCD под CodeVision

А JTAG-то — отключили?

Я уже перебрался на порт А =)

На счет JTAG я уже отвечал, с ним еще не работал

 

В папке \cvavr\lib\ есть файл LCD.lib который является текстовым на С с ASM вставками. В нем описаны все процедуры работы с LCD.

Можно подредактировать и сделать процедуру обмена как на Баскоме - без чтения с ЛСД?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно немного модернизировать LCD.lib. Там есть такое описание

#asm

.equ __lcd_direction=__lcd_port-1

.equ __lcd_pin=__lcd_port-2

.equ __lcd_rs=0

.equ __lcd_rd=1

.equ __lcd_enable=2

.equ __lcd_busy_flag=7

#endasm

 

__lcd_busy_flag используется только в _lcd_ready() замените

sbrc r26,__lcd_busy_flag

rjmp __lcd_busy

на задержку вставте несколько _lcd_delay(); если есть осцилограф посмотрите длительности по нему.

Удачи.

Изменено пользователем Stas_R

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно немного модернизировать LCD.lib. Там есть такое описание

#asm

.equ __lcd_direction=__lcd_port-1

.equ __lcd_pin=__lcd_port-2

.equ __lcd_rs=0

.equ __lcd_rd=1

.equ __lcd_enable=2

.equ __lcd_busy_flag=7

#endasm

 

Здесь задается к какому пину порта какой вывод ЛСД должен подключаться?

 

 

__lcd_busy_flag используется только в _lcd_ready() замените

sbrc r26,__lcd_busy_flag

rjmp __lcd_busy

на задержку вставте несколько _lcd_delay(); если есть осцилограф посмотрите длительности по нему.

Удачи.

 

Что на что менять, честно говоря, не понял =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что на что менять, честно говоря, не понял =)

Вам предлагают забить на ожидание готовности от ЖКИ, и сделать задержки больше чем по даташиту на Ваш ЖКИ.

 

Здесь задается к какому пину порта какой вывод ЛСД должен подключаться?

это определения линий, про порт здесь ничего не сказанно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемые друзья!

Сегодня проблема была решена. Библиотеки правда не редактировал. Деревенским методом навешал проводов, так, чтоб не резать дорог на плате, по схеме из Хелпа CodeVision. ЛСД выдал то, что от него просили. Проблема была аппаратная. Подвесил к порту С, JTAG не мешает.

Единственное, не хочет писать на второй строке . Поковыряю, может найду в чем тут дело. И функция lcd_gotoxy(unsigned char x, unsigned char y) не управляет координатыами курсора, а начинает писать с начала верхней строки.

 

Вопрос снят, lcd_gotoxy() работает. Забыл, что программисты начинает считать с нуля )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Друзья!

Помогите пожалуйста в моем смежном вопросе.

Подключил свои LCD 16x2.

Но при выводе строк наблюдается следующая фигня.

0-я строка выводится замечательно.

1-я постоянно подмигивает.

я подгонял задержку после вывода 0-й строки но все равно видно моргание.

Как вообще корректно выводить 2-е строки на LCD подскажите пожалуйтса.

Вот функция отображения :

 

void render_menu_new(p_menu p_item_name,unsigned char* p_poz_menu)

{

unsigned char adc[16];

lcd_clear();

lcd_puts(p_item_name[*p_poz_menu]->menu_name); // здесь выводится первая строка только текст

lcd_gotoxy(0,1);

sprintf(adc,"спецификаторы", вычилсения)

lcd_puts(adc); // вторая строка всегда мигает (выводит преобразование АЦП и значение ШИМ*коэфф)

delay_ms(250);

}

 

Помогите чем сможете или в книжку ткните.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...

 

Попробуйте убрать

lcd_clear();

тогда будет менее заметно. (Не забудьте только дополнить все пункты меню пробелами справа, и после lcd_puts(adc); добавьте lcd_puts(" ");)

 

Ну и числа, меняющиеся через 250 мс - сложно воспринимаются, я бы увеличил интервал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Забавно!

Но помогло!

Большое спасибо!

А без пробелов в конце 1-й строки вылазит начало следующего пункта :-)

Получается lcd_clear() можно неиспользовать???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Забавно!

Но помогло!

Большое спасибо!

А без пробелов в конце 1-й строки вылазит начало следующего пункта :-)

Получается lcd_clear() можно неиспользовать???

 

Конечно, зачем его использовать, если вы всё равно весь экран перерисовываете заново? :)

К тому же, не исключён вариант, что lcd_clear() тупо заполняет экран пробелами...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

все конечно хорошо, а вот 0-я строка перестала обновляться.

1-я в порядке.В чем бага???

Подскажите пожалуйста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

все конечно хорошо, а вот 0-я строка перестала обновляться.

1-я в порядке.В чем бага???

Подскажите пожалуйста.

 

Дык, добавьте перед выводом пункта меню

lcd_gotoxy(0,0);

Раньше это делала за вас ф-я lcd_clear().

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Согласен!

Спасибо!

Сегодня днем только дошло,что надо курсор переводить на другую позицию :)

Утро вечера мудренее!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...