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

 
 
> 16S2D, LCD
PaulB
сообщение Aug 4 2007, 13:02
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Имеется мт-16S2D подключонный к мк Tiny2313 по 4-х битной шине.
Программирую на С, но только что-то не чего не получается.
При включении питания дисплей какбы загорает и сразуже гаснит (LCD новый) это так задуманно? Питание у меня 3.6В.
Помогите запустить дисплей. ? sad.gif


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 14)
prottoss
сообщение Aug 4 2007, 14:01
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(PaulB @ Aug 4 2007, 21:02) *
Имеется мт-16S2D подключонный к мк Tiny2313 по 4-х битной шине.
Программирую на С, но только что-то не чего не получается.
При включении питания дисплей какбы загорает и сразуже гаснит (LCD новый) это так задуманно? Питание у меня 3.6В.
Помогите запустить дисплей. ? sad.gif
Здесь есть исходники http://electronix.ru/forum/index.php?showtopic=10934

Кста, а Ваш дисплей точно поддерживает такое питание?


--------------------
Go to the top of the page
 
+Quote Post
PaulB
сообщение Aug 4 2007, 14:21
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Дисплей поддерживает 3-х В-ое и 5В-ое питание.

Кстате, как должен вести себя дисплей при включении питания?


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
prottoss
сообщение Aug 4 2007, 14:45
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(PaulB @ Aug 4 2007, 22:21) *
Кстате, как должен вести себя дисплей при включении питания?
Вроде так и должен


--------------------
Go to the top of the page
 
+Quote Post
PaulB
сообщение Aug 4 2007, 15:02
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



а как заставить его хоть зажечься, неговорю о том чтобы он ещё что-то вывел? как реализовать это программно?

Юзаю CVAVR.


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
prottoss
сообщение Aug 4 2007, 15:05
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(PaulB @ Aug 4 2007, 23:02) *
а как заставить его хоть зажечься, неговорю о том чтобы он ещё что-то вывел? как реализовать это программно?

Юзаю CVAVR.
Думаю, что сначала надо его как то запрограммироватьsmile.gif Про исходники я уже говорил постом выше


--------------------
Go to the top of the page
 
+Quote Post
PaulB
сообщение Aug 4 2007, 15:13
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Нашёл там один исходник, но он оказался очень сложным для меня.
Даже сам пробовал по даташиту писать (написал какуюта ересь) , нечего неполучилось.

Чайник Я! sad.gif


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
prottoss
сообщение Aug 4 2007, 15:26
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(PaulB @ Aug 4 2007, 23:13) *
Нашёл там один исходник, но он оказался очень сложным для меня.
Даже сам пробовал по даташиту писать (написал какуюта ересь) , нечего неполучилось.

Чайник Я! sad.gif
Так может, чем хотеть устремится к звездам, Сначала хотя бы научится подпрыгивать smile.gif . Например, поморгать светодиодами, или что то вывести на простой семисегментный индикатор?


--------------------
Go to the top of the page
 
+Quote Post
PaulB
сообщение Aug 4 2007, 15:47
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



нУ ДИОДАМ ПОМОГАТЬ ПРЫГАТЬ УЖЕ НАУЧИЛСЯ.

На С неодного простого исходника ненашёл.


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
korobov_michael
сообщение Aug 5 2007, 07:05
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 11-03-07
Из: Украина, Харьков
Пользователь №: 26 059



Попробуй это.
У меня это рабочая версия при тестировании новых железок с LCD. Только не забудь в главной программе правильно выставить направление портов
Успехов!
Прикрепленные файлы
Прикрепленный файл  test_LCD.rar ( 1.86 килобайт ) Кол-во скачиваний: 150
 
Go to the top of the page
 
+Quote Post
PaulB
сообщение Aug 5 2007, 09:00
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Вот посмотрите пожалуйсто код:
--------------------------------------------------------
#include <TINY2313.h>
#include<delay.h>

#define D7 PD3
#define D6 PD2
#define D5 PD1
#define D4 PD0
#define E PD4
#define RW PD5
#define RS PD6


// ii?aaaeyai naaoiaeia
#define LED_OFF (PORTD |= (1<<6))
#define LED_ON (PORTD &= ~(1<<6))


#define SET_D7 (PORTD |= (1<<3))
#define SET_D6 (PORTD |= (1<<2))
#define SET_D5 (PORTD |= (1<<1))
#define SET_D4 (PORTD |= (1<<0))

//#define SET_RW (PORTB |= (1<<5))
//#define CLR_RW (PORTB &= ~(1<<5))
#define SET_RS (PORTD |= (1<<6))
#define CLR_RS (PORTD &= ~(1<<6))
#define SET_E (PORTD |= (1<<4))
#define CLR_E (PORTD &= ~(1<<4))

// ?EE iiaee??ai ieaaoaio iieoaaeoo ii?oa PB!
#define WRITE_HIGH_NIBBLE(x) ( PORTD = (PORTD & 0xF0) | ((x) >> 4) )
#define WRITE_LOW_NIBBLE(x) ( PORTD = (PORTD & 0xF0) | ((x) & 0x0F) )

#define MKS_PBYT 2 /* a?aiy ia ia?aaa?o iieoaaeoa ia aenieae */
#define MKS_BYTE 40 /* a?aiy iinea ia?aaa?e aaeoa ia aenieae */

#define PAGE0 0x28 // Ia?aay eiaiaay no?aieoa
#define PAGE1 0x2A // Aoi?ay eiaiaay no?aieoa

//**************************************
// P R O T O T Y P E
//**************************************
void CLR_ALL(void);
void BLINK_LED (void);

void WRITE_LCD(char);

void INIT_LCD(void);
void CLR_LCD(void);


//**************************************
// M A I N
//**************************************
int main(void)
{

DDRB = 0xff; // iacia?aai ana eeiee ii?oa B ia auoia
PORTB = 0x00; // e onoaiaaeeaaai ia ieo ieceee o?iaaiu
DDRD = 0xff; // iacia?aai ana eeiee ii?oa D ia auaoia
PORTD = 0x00; // e onoaiaaeeaaai ia ieo ieceee o?iaaiu
LED_OFF;

BLINK_LED ();
INIT_LCD();
while(1);
}

void INIT_LCD(void)
{
CLR_ALL();
delay_ms(MKS_BYTE); // ?aai aieaa 30 in

// O?e?au onoaiaaeeaaai 8-aeoiue ?a?ei - ia?aeuiay eieoeaeecaoey
SET_D5;
SET_D4; // eiiaiaa "8-aeoiue ?a?ei"


CLR_ALL();
SET_D5; // Ia?aaiaei a 4-aeoiue ?a?ei


/***************************************************/

WRITE_LCD(0x2A);
WRITE_LCD(0x0C);
CLR_LCD();
WRITE_LCD(0x06);


}
void CLR_LCD()
{
WRITE_LCD (0x01);
delay_ms(30);
}

void _E (void)
{
delay_us(MKS_PBYT);
SET_E;
delay_us(MKS_PBYT);
CLR_E;
delay_us(MKS_BYTE); //iaoca ia?ao eiiaiaaie
}

void _Epb (void)
{
delay_us(MKS_PBYT);
SET_E;
delay_us(MKS_PBYT);
CLR_E;
delay_us(MKS_PBYT); // iaoca ia?ao iieoaaeoaie
}
void WRITE_LCD(char value) {
delay_us(MKS_PBYT);
WRITE_HIGH_NIBBLE(value);
_Epb();
WRITE_LOW_NIBBLE(value);
_E();
delay_us(MKS_BYTE);
}

void BLINK_LED (void)
{
delay_ms(50);
LED_ON; // Ca?eaaai LED
delay_ms(5); // iaoca 250 ms
LED_OFF; // aanei LED
delay_ms(15); // Anaai 500 ms
// Delay_50ms(50); // n yoie no?ieie 1 nae.
}

void CLR_ALL(){

PORTD = 0x00; // onoaiaaeeaaai ia PB ieceee o?iaaiu

}

------------------------------------------------------------------------------
Что не так?

Всё некак немогу сделать так чтобы он загорелся.


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
Petka
сообщение Aug 5 2007, 10:57
Сообщение #12


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

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(PaulB @ Aug 4 2007, 19:02) *
а как заставить его хоть зажечься, неговорю о том чтобы он ещё что-то вывел? как реализовать это программно?

Юзаю CVAVR.

В CVAVR уже есть готовая библиотека для работы с этим дисплеем. посмотрите в хэлпе функции lcd. Работает. Проверено =)
Go to the top of the page
 
+Quote Post
korobov_michael
сообщение Aug 5 2007, 21:21
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 11-03-07
Из: Украина, Харьков
Пользователь №: 26 059



Внимательно проверь инициализацию!
Похоже, ты неправильно инициализируешь ЖКИ
После каждого выставления на портах необходимо провести процедуру clockE(); иначе эти данные не защелкнутся и ЖКИ их не увидит!
И, поскольку ты все равно не пользуешься прерываниями, сделай отдельную функцию clockE, что-то вроде

Код
void lcd_clock_E(void)
{
    CNTRL_PORT |= _BV(LCD_ENABLE);    //E = 1
    __delay_cycles(150);            //10us но вроде достаточно 1мкс
    CNTRL_PORT &= ~(_BV(LCD_ENABLE)); //E = 0

}


Код
void lcd_init(void)
{
    CNTRL_PORT &= ~(_BV(LCD_RS));
    CNTRL_PORT &= ~(_BV(LCD_RW));
    __delay_cycles(222000);    // Wait more than 15ms
    LCD_PORT = 0x3A;            // Startup Sequence
    lcd_clock_E();  //Вот это ты забыл!!!
    __delay_cycles(61000);      // Wait more than 4.1ms
    lcd_clock_E();  //Вот это ты забыл!!!
    __delay_cycles(1500);        // Wait more than 0.1ms
    lcd_clock_E();  //Вот это ты забыл!!!
    LCD_PORT = 0x3A;
    lcd_clock_E();  //Вот это ты забыл!!!
     while(LCD_GET_BUSY()); //С этого момента ЖКИ дает адекватную инфу в бите BF
     __delay_cycles(61000);

    lcd_wr_reg(INST_REG,0x0E);
     while(LCD_GET_BUSY());
     __delay_cycles(61000);

     lcd_wr_reg(INST_REG,0x01);
     while(LCD_GET_BUSY());
     __delay_cycles(61000);

    lcd_wr_reg(INST_REG,0x06);
     while(LCD_GET_BUSY());
     __delay_cycles(61000);
}


По окончании инициализации индикатор может мигнуть. Это можно расценивать как успешную инициализацию. Только учти, что данная процедура -- для 8-ножечного обмена. Для 4-ножечного она немного уменьшится.
ВАЖНО!!! Может быть очень смешно, но уточни, как ты подаешь смещение на ножку контрастности - а то можно вообще ничего не увидеть и при правильной инициализации smile.gif
Скажешь, получилось ли smile.gif
Успехов!

Сообщение отредактировал korobov_michael - Aug 5 2007, 21:26
Go to the top of the page
 
+Quote Post
ESL
сообщение Aug 6 2007, 05:59
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 153
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 932



Обратите внимание, что у МЭЛТовских дисплеев не до конца совместимая c hd44780 инициализация (сам в своё время обжёгся). Он требует не одного, а если память мне не врёт - 3х циклов. Также советую заглянуть к ним на форум - там были всякие исходники и подобные темы.

З.Ы. Если делать по даташиту - всё работает, по крайней мере, у меня работало.
Go to the top of the page
 
+Quote Post
Serg_greS
сообщение Aug 6 2007, 07:25
Сообщение #15


Частый гость
**

Группа: Новичок
Сообщений: 85
Регистрация: 13-01-05
Из: Москва
Пользователь №: 1 922



Посмотрите может вся проблема у Вас в этом:

В 4-х битном режиме включения ЖК индикаторов недопустимо изменение состояний сигналов R/W и A0 в течении всего цикла передачи байта, в том числе и при неактивном сигнале E между двумя передачами полубайтов. По любому изменению сигналов R/W и A0 внутренний счётчик полубайтов в ЖК индикаторе сбрасывается в состояние приёма старшего полубайта. Это является отличием наших ЖК индикаторов от импортных аналогов и направлено на повышение надёжности работы ЖК индикатора.

h__p://melt.com.ru/work/display/330#4bit

а оперативно проверить работоспособность индикатора можно с помощью их софтинки h__p://melt.com.ru/work/display/330#check

и еще, посмотрите документацию от производителя чипа h__p://www.angstrem.ru/product/lcd.htm (An6866), написано подробнее чем в даташитке мелта.
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 Текстовая версия Сейчас: 18th July 2025 - 16:36
Рейтинг@Mail.ru


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