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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Помогите запустить 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
MrYuran
сообщение Jul 22 2008, 11:52
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Ну и...
где, собственно?
что решать-то?
тип LCD, исходники - в студию.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Ветал
сообщение Jul 22 2008, 12:16
Сообщение #3


Участник
*

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



Исходник и даташит на ЛСД прилагаю.Прикрепленный файл  WH0802A_YGH.pdf ( 447.6 килобайт ) Кол-во скачиваний: 337


Исходник:
#include <mega16.h>

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15
#endasm
#include <lcd.h>
#include <delay.h>

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTC=0x00;
DDRC=0xff;

// Port D initialization
// Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In
// State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
GICR=0x00;
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
SFIOR=0x00;

// LCD module initialization
lcd_init(16);
lcd_clear();
while (1)
{
// Place your code here

lcd_gotoxy(1,5);
lcd_putsf("First");
delay_ms(1000);
};
}
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 22 2008, 12:25
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Осталось 4 неизвестных:
lcd_init();
lcd_clear();
lcd_gotoxy();
lcd_putsf();


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Ветал
сообщение Jul 22 2008, 12:37
Сообщение #5


Участник
*

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



Пардон, функции надо описать? Хоть бы компилятор выругался, а то ж никаких ошибок.

void lcd_init(unsigned char lcd_columns);
void lcd_clear(void);
void lcd_gotoxy(unsigned char x, unsigned char y);
void lcd_putsf(char flash *str);

Добавляю в код
Go to the top of the page
 
+Quote Post
ALexx
сообщение Jul 22 2008, 12:42
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 22-09-04
Из: Burbach, Germany
Пользователь №: 704



Цитата(MrYuran @ Jul 22 2008, 15:25) *
Осталось 4 неизвестных:
lcd_init();
lcd_clear();
lcd_gotoxy();
lcd_putsf();

Это функции библиотеки "LCD.h" CodeVision-а.
Их прототипы уже описаны в упомянутом хидере.

2 Ветал
Библиотека проверена - работает как часы.
Смотрите на подключение ЖКИ к контроллеру.
Выдержка из ХЕЛПа:

Код
The LCD module must be connected to the port bits as follows:
[LCD]    [AVR Port]
RS (pin4) ------     bit 0
RD (pin 5) ------    bit 1
EN (pin 6) ------    bit 2
DB4 (pin 11) ---    bit 4
DB5 (pin 12) ---    bit 5
DB6 (pin 13) ---    bit 6
DB7 (pin 14) ---    bit 7


И еще... Вы цепляете ЖКИ к порту С (.equ __lcd_port=0x15).
А ниже этот же порт настраиваете на ВВОД... Не гуд..
Go to the top of the page
 
+Quote Post
Ветал
сообщение Jul 22 2008, 13:01
Сообщение #7


Участник
*

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



Библиотека проверена - работает как часы.
Смотрите на подключение ЖКИ к контроллеру.
Выдержка из ХЕЛПа:

То есть программа должна работать?

Выдержки из хелпа смотрел. Есть отличия

1) RD (pin5) -- GND (работаем только с записью), думаю с этим проблем не может быть;
2) EN (pin6) -- Bit1 (по хелпу Bit2), тут может быть трабл.

Вроде как проблема зарыта в пункте 2. Резать дороги не могу, чтоб окончательно убедиться. Проделал следующее. Отключил ЛСД. Прошил под BasCom и посмотрел осциллографом все упомянутые в Хелпе сигналы. Прошил под CodeVision, сигналов на осциллографе не увидел. От сюда и начал грешить на то что проблема в CodeVision.
Go to the top of the page
 
+Quote Post
GDI
сообщение Jul 22 2008, 13:15
Сообщение #8


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

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Если вы поменяли расположение сигналов относительно того как требудется для библиотечной функции, то чего вы ожидали? Если дорожки резать не можете, пишите тогда свою библиотеку для работы с ЖКИ в необходимой вам конфигурации выводов. Или используйте готовую стороннюю библиотеку которая позволяет переопределить синалы на выводах порта. Готовую библиотеку можно поискать тут http://electronix.ru/forum/index.php?showtopic=10934


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 22 2008, 13:23
Сообщение #9


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(GDI @ Jul 22 2008, 17:15) *

++
Всегда отрицательно отношусь к применению чего-то, чего руками не потрогаешь и не поменяешь. Особенно к разным библиотекам, притянутым за уши к конкретным компиляторам. Будь то хоть delay() на циклах. А с некоторых пор являюсь поклонником GCC (и дело тут не столько в халяве, сколько в открытости исходников, в том числе и всех библиотек.)
Но к теме это, конечно, не относится. Тут всё понятно. Раз неправильно подключен индикатор - ясное дело, работать он не обязан.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Ветал
сообщение Jul 22 2008, 13:38
Сообщение #10


Участник
*

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



GDI:
плата не моя, потому и не режу;
эту проблему попытаюсь решить своими силами - шлейф попробую обжать по-другому. Но на данный момент смущает другое: сигналов на осциллографе нет на порту С!
Повторюсь, прошивал Баскомом и наблюдал их!

GDI:
плата не моя, потому и не режу;
эту проблему попытаюсь решить своими силами - шлейф попробую обжать по-другому. Но на данный момент смущает другое: сигналов на осциллографе нет на порту С!
Повторюсь, прошивал Баскомом и наблюдал их!
Go to the top of the page
 
+Quote Post
ALexx
сообщение Jul 22 2008, 13:58
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 243
Регистрация: 22-09-04
Из: Burbach, Germany
Пользователь №: 704



Цитата(MrYuran @ Jul 22 2008, 16:23) *
++
Всегда отрицательно отношусь к применению чего-то, чего руками не потрогаешь и не поменяешь.


+1

2 Ветал
На форуме есть тема с исходниками - посмотрите туда.
В прикреплении - мой вариант библиотеки для ЖКИ (писалось под CodeVision). Вся настройка в хидере.
Пример применения:
Код
#include "CharLCD.h"
#include <delay.h>
#include <string.h>
#include <stdio.h>

flash char *mesF="Строка из FLASH";
char mesR[20];  
uchar i=0;
  
void main(void){
LCD_setup();

LCD_fputs(LINE1,mesF); // Вывод строки из FLASH
strcpyf(mesR,mesF);
mesR[10]='S'; mesR[11]='R'; mesR[12]='A'; mesR[13]='M';  mesR[14]=0;
LCD_puts(LINE2,mesR);  // Вывод строки из SRAM
//вывод бегущего текста
for(i=0;i<=16;i++){
  LCD_fputs(LINE3+(16-i),"Test");
  delay_ms(100);
  LCD_clrline(LINE3+(16-i),4);
}
i=0;
// использование функции sprintf для вывода значений
while(1){
  LCD_clrline(LINE3,CHARS_PER_LINE);
  sprintf(mesR,"Параметр=%d",i);
  LCD_puts(LINE3,mesR);  

  LCD_clrline(LINE4,CHARS_PER_LINE);
  sprintf(mesR,"Value=%d points",i++);
  LCD_puts(LINE4,mesR);  
  delay_ms(200);
  #asm("WDR")
}
}

Прикрепленные файлы
Прикрепленный файл  CharLCD.rar ( 2.8 килобайт ) Кол-во скачиваний: 60
 
Go to the top of the page
 
+Quote Post
Ветал
сообщение Jul 22 2008, 15:37
Сообщение #12


Участник
*

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



2 ALexx:
Благодарю! Попробую разобраться с вашим вариантом библиотеки под ЖКИ.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 22 2008, 19:35
Сообщение #13


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

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



Цитата(Ветал @ Jul 22 2008, 18:16) *
Исходник и даташит на ЛСД прилагаю.Прикрепленный файл  WH0802A_YGH.pdf ( 447.6 килобайт ) Кол-во скачиваний: 337

Код
lcd_init(16);


Я так понимаю, 0802 - это 8x2? Тогда наверное надо писать lcd_init(8)? smile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
DiMomite
сообщение Jul 22 2008, 20:28
Сообщение #14


Участник
*

Группа: Свой
Сообщений: 47
Регистрация: 8-04-06
Из: Одесса
Пользователь №: 15 959



А JTAG на порте С отключен?
Go to the top of the page
 
+Quote Post
Ветал
сообщение Jul 23 2008, 06:52
Сообщение #15


Участник
*

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



Цитата(AHTOXA @ Jul 22 2008, 22:35) *
Я так понимаю, 0802 - это 8x2? Тогда наверное надо писать lcd_init(8)? smile.gif


Спасибо, исправил, не помогло, сейчас пытаюсь выяснить почему нет сигналов обмена с ЛСД.
Go to the top of the page
 
+Quote Post

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

 


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


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