|
Помогите запустить LCD под CodeVision, под Bascom работает, под CodeVision - нет |
|
|
|
Jul 22 2008, 11:41
|

Участник

Группа: Участник
Сообщений: 26
Регистрация: 22-03-08
Из: Харьков
Пользователь №: 36 149

|
Здравствуйте! Начал изучать АВРовские микроконтроллеры, одолжил готовую отладочную плату на Атмеге16. Хозяин подкинул мне некоторые из его программ, написанных на Bascom. В том числе и работающую программу для ЛСД. Начал программировать в CodeVision 1.23.6a. Воспользовался Визардом для подключения ЛСД, а также стандартными функциями вывода на экран из Хелпа, но ничего не получилось. Пришел к выводу, что программа перестает выполняться микроконтроллером начиная с места инициализации ЛСД. При этом у ЛСД (2*8) бывали следующие варианты: 1) верхняя строка полностью подсвечена, нижняя - выключена полностью 2) подсвечен первый символ верхней строки и мигает курсор. Но информация, которая должна выводиться на экран по программе - не выводится! Несколько дней пытаюсь решить, сейчас склонен думать, что проблема в CodeVision...
Кто сталкивался с подобной проблемой и знает как ее решить (обойти), просьба помочь. Спасибо!
|
|
|
|
|
 |
Ответов
|
Jul 23 2008, 08:20
|
Местный
  
Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017

|
Цитата Подфункцию lcd_ready() не применял Применяли, только неявно. Serj78 ведь писал: "вызывается каждый раз функциями верхнего уровня,(вывод, установка знакоместа, стирание, пр.)". То есть она вызывается функциями lcd_init(), lcd_clear(), lcd_gotoxy(),lcd_putsf("ххх") и др., в том числе и функцией lcd_init(). LCD - относительно медленное устройство и каждая команда (вывод одного символа, очистка экрана, смена положения курсора, ...) выполняется им довольно долго (37мкс...1,5мс, в зависимости от команды) по меркам контроллера. Поэтому контроллеру приходится ждать LCD. И сделать это можно 2-мя путями: 1. перед каждой следущей командой к LCD проверять/ждать очищения BusyFlag'а lcd-индикатора 2. контроллер между командами к LCD сам выдерживает время, необходимое для выполнения предыдущей команды индикатором. Недостаток 1-го варианта - обязательное наличие линии R/W между LCD и контроллером (для чтения BusyFlag). Недостаток 2-го - время, которое выдерживает контроллер между командами, должно быть с некоторым запасом, так как время выполнения команд ЖКИ-индикатором может отличаться от индикатора к индикатору и зависит от температуры. Видимо, в BascomAVR реализован 2й метод, поэтому он и работает.
|
|
|
|
|
Jul 23 2008, 10:30
|

Знающий
   
Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499

|
Цитата(Александр Куличок @ Jul 23 2008, 12:20)  Применяли, только неявно. Serj78 ведь писал: "вызывается каждый раз функциями верхнего уровня,(вывод, установка знакоместа, стирание, пр.)". То есть она вызывается функциями lcd_init(), lcd_clear(), lcd_gotoxy(),lcd_putsf("ххх") и др., в том числе и функцией lcd_init(). осмелюсь поправить: функция lcd_init не вешает программу, там таймаут написан, если индикатор не подключен (нет ответа кажется, в течении 5мс) то она возвращает 0. проверьте это значение (например светодиодом на любой ноге) и будет ясно где косяк.
|
|
|
|
|
Jul 23 2008, 11:26
|

Участник

Группа: Участник
Сообщений: 26
Регистрация: 22-03-08
Из: Харьков
Пользователь №: 36 149

|
Цитата(Serj78 @ Jul 23 2008, 13:30)  осмелюсь поправить: функция lcd_init не вешает программу, там таймаут написан, если индикатор не подключен (нет ответа кажется, в течении 5мс) то она возвращает 0. проверьте это значение (например светодиодом на любой ноге) и будет ясно где косяк. Контроллер выставляет сигнал RD, потом E после чего наступает зависание. Все остальные ножки в нуле. Можно сделать вывод, что ожидается чтение. Нашел описание для упомянутого выше НВ44780 http://files.lv-soft.info/Integrated-circu...hd44780_rus.pdf В нем по временной диаграмме контроллер должен сбросить сигнал E в ноль и по спадающему фронту прочитать данные с шины. Но E находится в 1 постоянно (смотрел осциллографом), значит он не пытается считать. Или же другой вариант: после нескольких безуспешных попыток, которые я не успеваю заметить пока сбрасываю, контроллер перестает считывать по какой-то причине. Как думаете, где косяк?
|
|
|
|
|
Jul 23 2008, 11:46
|

Участник

Группа: Участник
Сообщений: 26
Регистрация: 22-03-08
Из: Харьков
Пользователь №: 36 149

|
Цитата(AHTOXA @ Jul 23 2008, 14:36)  А JTAG-то — отключили? Я уже перебрался на порт А =) На счет JTAG я уже отвечал, с ним еще не работал Цитата(Stas_R @ Jul 23 2008, 14:30)  В папке \cvavr\lib\ есть файл LCD.lib который является текстовым на С с ASM вставками. В нем описаны все процедуры работы с LCD. Можно подредактировать и сделать процедуру обмена как на Баскоме - без чтения с ЛСД?
|
|
|
|
Сообщений в этой теме
Ветал Помогите запустить LCD под CodeVision Jul 22 2008, 11:41 MrYuran Ну и...
где, собственно?
что решать-то?
тип LCD, и... Jul 22 2008, 11:52 Ветал Исходник и даташит на ЛСД прилагаю.
Исходник:
#i... Jul 22 2008, 12:16 AHTOXA Цитата(Ветал @ Jul 22 2008, 18:16) Исходн... Jul 22 2008, 19:35  Ветал Цитата(AHTOXA @ Jul 22 2008, 22:35) Я так... Jul 23 2008, 06:52 MrYuran Осталось 4 неизвестных:
lcd_init();
lcd_clear();
l... Jul 22 2008, 12:25 ALexx Цитата(MrYuran @ Jul 22 2008, 15:25) Оста... Jul 22 2008, 12:42  Ветал Библиотека проверена - работает как часы.
Смотрите... Jul 22 2008, 13:01 Ветал Пардон, функции надо описать? Хоть бы компилятор... Jul 22 2008, 12:37 GDI Если вы поменяли расположение сигналов относительн... Jul 22 2008, 13:15 MrYuran Цитата(GDI @ Jul 22 2008, 17:15)
++
Всег... Jul 22 2008, 13:23  ALexx Цитата(MrYuran @ Jul 22 2008, 16:23) ++
В... Jul 22 2008, 13:58   Ветал 2 ALexx:
Благодарю! Попробую разобраться с ваш... Jul 22 2008, 15:37  Serj78 Цитата(MrYuran @ Jul 22 2008, 17:23) Всег... Jul 23 2008, 06:59   MrYuran Цитата(Serj78 @ Jul 23 2008, 10:59) Кстат... Jul 23 2008, 07:07   Ветал Цитата(Serj78 @ Jul 23 2008, 09:59) Дык в... Jul 23 2008, 07:21    WHALE Цитата(Ветал @ Jul 23 2008, 11:21) Похоже... Jul 23 2008, 07:33 Ветал GDI:
плата не моя, потому и не режу;
эту проблему ... Jul 22 2008, 13:38 DiMomite А JTAG на порте С отключен? Jul 22 2008, 20:28 Ветал Цитата(DiMomite @ Jul 22 2008, 23:28) А J... Jul 23 2008, 07:00 Stas_R CodeVision при работе с LCD читает бит состояния и... Jul 23 2008, 07:09 GDI ЦитатаХреновая в CV библиотечная функция для работ... Jul 23 2008, 07:55 delamoure Я давненько юзаю CodeVision, но библиотеки для сим... Jul 23 2008, 08:19 Ветал Цитата(delamoure @ Jul 23 2008, 11:19) Я ... Jul 23 2008, 08:42     Stas_R Можно немного модернизировать LCD.lib. Там есть та... Jul 23 2008, 12:06      Ветал Цитата(Stas_R @ Jul 23 2008, 15:06) Можно... Jul 23 2008, 12:53       sKWO Цитата(Ветал @ Jul 23 2008, 15:53) Что на... Jul 23 2008, 18:45  Stas_R В папке \cvavr\lib\ есть файл LCD.l... Jul 23 2008, 11:30 MrYuran Да компилятору-то вобщем-то по барабану. Он всё по... Jul 23 2008, 08:49 Ветал Цитата(MrYuran @ Jul 23 2008, 11:49) Да к... Jul 23 2008, 09:21 Ветал Уважаемые друзья!
Сегодня проблема была решена... Jul 24 2008, 11:11 Metallist64 Друзья!
Помогите пожалуйста в моем смежном воп... Jul 24 2008, 18:06 AHTOXA Цитата(Metallist64 @ Jul 25 2008, 00:06) ... Jul 24 2008, 18:16 Metallist64 Забавно!
Но помогло!
Большое спасибо!
... Jul 24 2008, 18:29 AHTOXA Цитата(Metallist64 @ Jul 25 2008, 00:29) ... Jul 24 2008, 18:35 Metallist64 все конечно хорошо, а вот 0-я строка перестала обн... Jul 24 2008, 19:13 AHTOXA Цитата(Metallist64 @ Jul 25 2008, 01:13) ... Jul 24 2008, 19:36  Metallist64 Согласен!
Спасибо!
Сегодня днем только дош... Jul 25 2008, 12:45
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|