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

 
 
> Помогите запустить LCD под CodeVision, под Bascom работает, под CodeVision - нет
Ветал
сообщение Jul 22 2008, 11:41
Сообщение #1


Участник
*

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



Здравствуйте!
Начал изучать АВРовские микроконтроллеры, одолжил готовую отладочную плату на Атмеге16. Хозяин подкинул мне некоторые из его программ, написанных на Bascom. В том числе и работающую программу для ЛСД.
Начал программировать в CodeVision 1.23.6a. Воспользовался Визардом для подключения ЛСД, а также стандартными функциями вывода на экран из Хелпа, но ничего не получилось. Пришел к выводу, что программа перестает выполняться микроконтроллером начиная с места инициализации ЛСД. При этом у ЛСД (2*8) бывали следующие варианты:
1) верхняя строка полностью подсвечена, нижняя - выключена полностью
2) подсвечен первый символ верхней строки и мигает курсор.
Но информация, которая должна выводиться на экран по программе - не выводится!
Несколько дней пытаюсь решить, сейчас склонен думать, что проблема в CodeVision...

Кто сталкивался с подобной проблемой и знает как ее решить (обойти), просьба помочь.
Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Александр Куличо...
сообщение Jul 23 2008, 08:20
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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й метод, поэтому он и работает.
Go to the top of the page
 
+Quote Post
Serj78
сообщение Jul 23 2008, 10:30
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 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. проверьте это значение (например светодиодом на любой ноге) и будет ясно где косяк.
Go to the top of the page
 
+Quote Post
Ветал
сообщение Jul 23 2008, 11:26
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 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 постоянно (смотрел осциллографом), значит он не пытается считать. Или же другой вариант: после нескольких безуспешных попыток, которые я не успеваю заметить пока сбрасываю, контроллер перестает считывать по какой-то причине.
Как думаете, где косяк?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 23 2008, 11:36
Сообщение #5


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Ветал @ Jul 23 2008, 17:26) *
Как думаете, где косяк?


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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Ветал
сообщение Jul 23 2008, 11:46
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 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.

Можно подредактировать и сделать процедуру обмена как на Баскоме - без чтения с ЛСД?
Go to the top of the page
 
+Quote Post
Stas_R
сообщение Jul 23 2008, 12:06
Сообщение #7





Группа: Участник
Сообщений: 12
Регистрация: 18-10-05
Из: г.Донецк
Пользователь №: 9 806



Можно немного модернизировать 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 - Jul 23 2008, 12:07
Go to the top of the page
 
+Quote Post
Ветал
сообщение Jul 23 2008, 12:53
Сообщение #8


Участник
*

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



Цитата(Stas_R @ Jul 23 2008, 15:06) *
Можно немного модернизировать 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


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


Цитата(Stas_R @ Jul 23 2008, 15:06) *
__lcd_busy_flag используется только в _lcd_ready() замените
sbrc r26,__lcd_busy_flag
rjmp __lcd_busy
на задержку вставте несколько _lcd_delay(); если есть осцилограф посмотрите длительности по нему.
Удачи.


Что на что менять, честно говоря, не понял =)
Go to the top of the page
 
+Quote Post
sKWO
сообщение Jul 23 2008, 18:45
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(Ветал @ Jul 23 2008, 15:53) *
Что на что менять, честно говоря, не понял =)

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

Цитата(Ветал @ Jul 23 2008, 15:53) *
Здесь задается к какому пину порта какой вывод ЛСД должен подключаться?

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


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Ветал   Помогите запустить 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   В папке \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


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

 


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


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