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

Имеется мт-16S2D подключонный к мк Tiny2313 по 4-х битной шине.

Программирую на С, но только что-то не чего не получается.

При включении питания дисплей какбы загорает и сразуже гаснит (LCD новый) это так задуманно? Питание у меня 3.6В.

Помогите запустить дисплей. ? :(

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


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

Имеется мт-16S2D подключонный к мк Tiny2313 по 4-х битной шине.

Программирую на С, но только что-то не чего не получается.

При включении питания дисплей какбы загорает и сразуже гаснит (LCD новый) это так задуманно? Питание у меня 3.6В.

Помогите запустить дисплей. ? :(

Здесь есть исходники http://electronix.ru/forum/index.php?showtopic=10934

 

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

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


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

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

 

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

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


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

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

 

Юзаю CVAVR.

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


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

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

 

Юзаю CVAVR.

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

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


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

Нашёл там один исходник, но он оказался очень сложным для меня.

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

 

Чайник Я! :(

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


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

Нашёл там один исходник, но он оказался очень сложным для меня.

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

 

Чайник Я! :(

Так может, чем хотеть устремится к звездам, Сначала хотя бы научится подпрыгивать :) . Например, поморгать светодиодами, или что то вывести на простой семисегментный индикатор?

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


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

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

 

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

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


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

Попробуй это.

У меня это рабочая версия при тестировании новых железок с LCD. Только не забудь в главной программе правильно выставить направление портов

Успехов!

test_LCD.rar

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


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

Вот посмотрите пожалуйсто код:

--------------------------------------------------------

#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

 

}

 

------------------------------------------------------------------------------

Что не так?

 

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

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


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

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

 

Юзаю CVAVR.

В CVAVR уже есть готовая библиотека для работы с этим дисплеем. посмотрите в хэлпе функции lcd. Работает. Проверено =)

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


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

Внимательно проверь инициализацию!

Похоже, ты неправильно инициализируешь ЖКИ

После каждого выставления на портах необходимо провести процедуру 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-ножечного она немного уменьшится.

ВАЖНО!!! Может быть очень смешно, но уточни, как ты подаешь смещение на ножку контрастности - а то можно вообще ничего не увидеть и при правильной инициализации :)

Скажешь, получилось ли :)

Успехов!

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

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


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

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

 

З.Ы. Если делать по даташиту - всё работает, по крайней мере, у меня работало.

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


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

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

 

В 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), написано подробнее чем в даташитке мелта.

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


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

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

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

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

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

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

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

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

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

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