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

Кста, а Ваш дисплей точно поддерживает такое питание?
PaulB
Дисплей поддерживает 3-х В-ое и 5В-ое питание.

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

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

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

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

Чайник Я! sad.gif
Так может, чем хотеть устремится к звездам, Сначала хотя бы научится подпрыгивать smile.gif . Например, поморгать светодиодами, или что то вывести на простой семисегментный индикатор?
PaulB
нУ ДИОДАМ ПОМОГАТЬ ПРЫГАТЬ УЖЕ НАУЧИЛСЯ.

На С неодного простого исходника ненашёл.
korobov_michael
Попробуй это.
У меня это рабочая версия при тестировании новых железок с LCD. Только не забудь в главной программе правильно выставить направление портов
Успехов!
PaulB
Вот посмотрите пожалуйсто код:
--------------------------------------------------------
#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

}

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

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

Юзаю CVAVR.

В CVAVR уже есть готовая библиотека для работы с этим дисплеем. посмотрите в хэлпе функции lcd. Работает. Проверено =)
korobov_michael
Внимательно проверь инициализацию!
Похоже, ты неправильно инициализируешь ЖКИ
После каждого выставления на портах необходимо провести процедуру 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
Успехов!
ESL
Обратите внимание, что у МЭЛТовских дисплеев не до конца совместимая c hd44780 инициализация (сам в своё время обжёгся). Он требует не одного, а если память мне не врёт - 3х циклов. Также советую заглянуть к ним на форум - там были всякие исходники и подобные темы.

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

В 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), написано подробнее чем в даташитке мелта.
PaulB
Переделал схему, сделал на меге16, но вот всё равно прошивка неработает что не так?

Код
#include <MEGA16.h>
#include <delay.h>

#define D7        PA1
#define D6        PA0
#define D5        PA3
#define D4        PA2
#define E         PC5
#define RW        PC6
#define RS        PC4


// определяем светодиод
#define LED_OFF (PORTD |= (1<<6))
#define LED_ON (PORTD &= ~(1<<6))


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

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

// ЖКИ подключен младшему полубайту порта PB!
#define WRITE_HIGH_NIBBLE(x)  ( PORTA = (PORTA & 0xF0) | ((x) >> 4) )
#define WRITE_LOW_NIBBLE(x) ( PORTA = (PORTA & 0xF0) | ((x) & 0x0F) )

#define MKS_PBYT 2 /* время на передачу полубайта на дисплей */
#define MKS_BYTE 40 /* время после передачи байта на дисплей */

#define PAGE0 0x28 // Первая кодовая страница
#define PAGE1 0x2A // Вторая кодовая страница

//**************************************
//          P R O T O T Y P E
//**************************************

void BLINK_LED (void);
void WRITE_LCD(char);
void _E (void);
void _Epb (void);
void INIT_LCD(void);
void Delay_50ms(int t);
void CLR_LCD();
    
  int main(void)
{

  DDRA  = 0xff;  // назначаем все линии порта B на выход
  PORTA = 0x00;  // и устанавливаем на них низкий уровень
  DDRD  = 0xff;  // назначаем все линии порта D на вывход
  PORTD = 0x00;  // и устанавливаем на них низкий уровень
  LED_OFF;

    BLINK_LED (); //Вспышка светодиода на порту
    INIT_LCD(); //ИНИЦИАЛИЗАЦИЯ

while(1);
}

/**********************************************************
Имя функции:    void Delay_50ms(int t)
Описание:       Задержка, кратная 50 ms
Вход:           t -> Число повторов цикла
Выход:          нет
Примечание:     Arsen, редакция от 17.04.2006
**********************************************************/

void Delay_50ms(int t) {
  unsigned int i;
  for(i=0; i<t; i++) {
  delay_ms(50);
  }
}
/**********************************************************
Имя функции:    void BLINK_LED(void)
Описание:       Вспышка светодиода на порту PD6
Вход:           нет
Выход:          нет
Примечание:     Arsen, редакция от 17.04.2006
**********************************************************/

void BLINK_LED (void)
{
    Delay_50ms(50);
    LED_ON; // Зажигаем LED
    Delay_50ms(5);  // пауза 250 ms
    LED_OFF; // гасим LED
    Delay_50ms(15);  // Всего 500 ms
//    Delay_50ms(50);  // с этой строкой 1 сек.
}

/**********************************************************
Имя функции:    void CLR_LCD(void)
Описание:       Очистка экрана ЖКИ
Вход:           нет
Выход:          нет
Примечание:     Arsen, редакция от 17.05.2006
**********************************************************/

void CLR_LCD()
{
WRITE_LCD (0x01);
delay_ms(3);
}
          
/**********************************************************
Имя функции:    void _E(void)
Описание:       выдача сигнала "Е" на ЖКИ с полным временем
                ожидания (после выдачи всей команды)
Вход:           нет
Выход:          нет
Примечание:     Arsen, редакция от 17.04.2006
**********************************************************/

void _E (void)
{
    delay_us(MKS_PBYT);
    SET_E;
    delay_us(MKS_PBYT);
    CLR_E;
    delay_us(MKS_BYTE);        //пауза между командами
}    
  

/**********************************************************
Имя функции:    void _Epb(void)
Описание:       выдача сигнала "Е" на ЖКИ с укороченным временем
                ожидания (между вводом полубайтов)
Вход:           нет
Выход:          нет
Примечание:     Arsen, редакция от 17.04.2006
**********************************************************/

void _Epb (void)
{
     delay_us(MKS_PBYT);
    SET_E;
     delay_us(MKS_PBYT);
    CLR_E;
     delay_us(MKS_PBYT);        // пауза между полубайтами
}
    
/**********************************************************
Имя функции:    void WRITE_LCD(unsigned char ch)
Описание:       Запись байта команды в ЖКИ
Вход:           ch -> байт для записи
Выход:          нет
Примечание:     Arsen, редакция от 17.04.2006
**********************************************************/

void WRITE_LCD(char value) {
  delay_us(MKS_PBYT);
    WRITE_HIGH_NIBBLE(value);
    _Epb();
    WRITE_LOW_NIBBLE(value);
    _E();
  delay_us(MKS_BYTE);
}


/**********************************************************
Имя функции:    void INIT_LCD(void)
Описание:       Начальная инициализация ЖКИ
Вход:           нет
Выход:          нет
Примечание:     Arsen, редакция от 17.05.2006
**********************************************************/

void INIT_LCD(void)
{
PORTA = 0x00;
delay_ms(MKS_BYTE); // ждем более 30 мс

// Трижды устанавливаем 8-битный режим - начальная инициализация
    SET_D5;
    SET_D4;    // команда "8-битный режим"
    _E();
    _E();
    _E();

/***/

    PORTA = 0x00;
    SET_D5;           // Переводим в 4-битный режим
    _E();

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

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


}
Serg_greS
Попробуйте так:

WRITE_LCD(0x2e);
WRITE_LCD(0x0f);
WRITE_LCD(0x01);
WRITE_LCD(0x06);
WRITE_LCD(0x02);


вместо
WRITE_LCD(0x2A);
WRITE_LCD(0x0C);
CLR_LCD();
WRITE_LCD(0x06);

и кстати в мелтовском индикаторе кодовые будут не так:
#define PAGE0 0x28 // Первая кодовая страница
#define PAGE1 0x2A // Вторая кодовая страница

а вот так:
#define PAGE0 0x2C // Первая кодовая страница
#define PAGE1 0x2E // Вторая кодовая страница

возможно что проблема именно тут,

0x2E, это та, которая соответствует win1251

если надо, то вечером могу выложить проект для IAR на М88 точно работающий, модифицированный из этого же IronFelix`а
PaulB
Всё мучаюсь!
Вот код программы, Проверял в протеусе - она работает.

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

/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.3 Standard
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 02.10.2007
Author : F4CG
Company : F4CG
Comments:


Chip type : ATmega16
Program type : Application
Clock frequency : 4,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/

#include <mega16.h>
#include<delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>

// Declare your global variables here

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

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

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

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

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=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
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=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
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
ACSR=0x80;
SFIOR=0x00;

// LCD module initialization
lcd_init(16);
#pragma rl+
lcd_gotoxy(0,0);
lcd_putsf("F");

PORTD.6=1;
delay_ms(50);
PORTD.6=0;
delay_ms(50);
while (1)
{
};
}
----------------------------------------------------------------------
Прошиваю- неработает. Проверял подключение МК к ЖК вроде тоже все нормально.
Я уже начинаю подазривать что ЖК нерабочий.
Что делать? sad.gif
Serg_greS
Цитата
Я уже начинаю подазривать что ЖК нерабочий.Что делать?

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

и вообще попробуйте в этом коде http://electronix.ru/forum/index.php?showt...id=301548&#
заменить WRITE_LCD(0x2A);
WRITE_LCD(0x0C);
CLR_LCD();
WRITE_LCD(0x06);

на
WRITE_LCD(0x2e);
WRITE_LCD(0x0f);
WRITE_LCD(0x01);
WRITE_LCD(0x06);
WRITE_LCD(0x02);

и
#define PAGE0 0x28 // Первая кодовая страница
#define PAGE1 0x2A // Вторая кодовая страница
на
#define PAGE0 0x2C // Первая кодовая страница
#define PAGE1 0x2E // Вторая кодовая страница
D H
Прекрасно работает библиотека CodeVision с Мелтовским LCD. Используй ее.
Пример:

#asm
.equ __lcd_port=0x15 ;PORTC // LCD на PORTC
#endasm

#include <lcd.h>
lcd_init(16);
lcd_putsf("Initializing...");
lcd_gotoxy(0,0);
lcd_putsf("Ready ");

Библиотека для 4-х битного режима.
Разная маркировка наименований выводов у Melt и в документации CV. Подключается все по порядку выводов Melt.
Если перешел на мегу16, попробуй в 5-и вольтовом режиме. Не забудь контрастность повесить на землю, иначе ничего видно не будет.
PaulB
Контрасность на землю завёл даже подсветку подключил (подсветка работает), а что за 5-и вольтовый режим?
В даташите на дисплей, А0-адресный сигнал, а обозначение RS идентично А0?

Кстате, а от чистота МК как то влияет на выводимый текст?
PaulB
Вот обнаружил один момент: в то время когда происходит инициализация дисплея, его экран немного мерцает.
Ичтобы это означало?
D H
Цитата(D H @ Oct 2 2007, 11:05) *
Прекрасно работает библиотека CodeVision с Мелтовским LCD. Используй ее.
Пример:

#asm
.equ __lcd_port=0x15 ;PORTC // LCD на PORTC
#endasm

#include <lcd.h>
lcd_init(16);
lcd_putsf("Initializing...");
lcd_gotoxy(0,0);
lcd_putsf("Ready ");

Библиотека для 4-х битного режима.
Разная маркировка наименований выводов у Melt и в документации CV. Подключается все по порядку выводов Melt.
Если перешел на мегу16, попробуй в 5-и вольтовом режиме. Не забудь контрастность повесить на землю, иначе ничего видно не будет.


В мануале CV, есть пример как подключать LCD.
A0=RS
R/W=RD
E=EN
Т.е. подключаем для моего примера так:
PortC.0=A0
PortC.1=R/W
PortC.2=E
PortC.4=DB4
PortC.5=DB5
PortC.6=DB6
PortC.7=DB7

1-й и 3-й LCD вывод GND
2-й LCD вывод +5в

Поставь для диагностики в программу зажигание светодиода, после выполнения операции. Увидишь, где косяк.
Все.
PaulB
Всё точно так же и у меня, даже светодиод стоит (гаснет когда заканчивается инициализация), вот только у меня LCD к порту А подключон.
>Вот обнаружил один момент: в то время когда происходит инициализация дисплея, его экран немного мерцает.
>Ичтобы это означало?

Код
#include <MEGA16.h>
#include<delay.h>
// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15;PORTA
#endasm
#include <lcd.h>

void main(void)
{

PORTD=0xFF;
DDRD=0xFF;

// LCD module initialization
lcd_init(16);
lcd_putsf("Initializing...");
lcd_putchar(0);

PORTD.6=1;
delay_ms(50);
PORTD.6=0;
delay_ms(50);
while (1);

}
D H
Что значит "немного мерцает"? Зажигаются нижние строчки всех сегментов одновременно и сразу гаснут? Инициализация прошла.

Для порта А должно быть так:
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm

А у тебя в исходнике:
#asm
.equ __lcd_port=0x15;PORTA
#endasm
Согласно твоему исходнику, у тебя LCD подключен к порту C. Следовательно, инициализация у тебя _НЕ_ПРОХОДИТ_. Как у тебя светодиод гаснет по окончании инициализации ???
PaulB
Мерцает сама подсветка одновременно с миганием светодиода, а сам экран попрежнему пуст sad.gif хоть точку какую нибудь вывел, я уже бы прыгал до потолка.

Код
#include <Mega16.h>
  #include <delay.h>

#asm
  .equ __lcd_port=0x1B;PORTA
#endasm
#include <lcd.h>

void main(void)
{

PORTD=0xFF;
DDRD=0xFF;

lcd_init(16);
lcd_putsf("Initializing...");

PORTD.6=1;
delay_ms(50);
PORTD.6=0;
delay_ms(50);

}

А в протеусе видно что после того как заканчивается инициализация и перед выводом надписи - светодиод гаснет.
D H
Вот твой текст:
lcd_init(16);
Где здесь у тебя выключение светодиода???
lcd_putsf("Initializing...");
Не вижу.
PaulB
>Вот твой текст:
>lcd_init(16);
>Где здесь у тебя выключение светодиода???
>lcd_putsf("Initializing...");
>Не вижу.

Сам непонемаю, но так оно и есть.
REGBIST11
#include <Mega16.h>
#include <delay.h>
--------------------------------------------------------------------------------------------------------
#asm
.equ __lcd_port=0x1B;PORTA
#endasm ;
#include <lcd.h> ;

void main(void)
{
PORTD=0xFF;
DDRD=0xFF;
lcd_init(16);
while(1)
{
lcd_gotoxy(0,0);
lcd_putsf("Initializing...");
PORTD.6=1;
delay_ms(50);
PORTD.6=0;
delay_ms(50);
}
-------------------------------------------------------------------------------------------------------------------

Всем привет!
Я вот чуток изменил Ваш исходник. Попробуй его.. beer.gif
И ещё один совет : шину данных ( D4-D7) подтяни к +5 через рез ~5кОм yeah.gif
Да и ещё на счёт контрастности : 0 или +5 это две крайние точки,то есть при 0-контрастность 0 % а при 5В-контрастность 100% а нам необходимо что-то среднее... возьми переменный 10 кОм рез.и попробуй с ним. wassat.gif
}
PaulB
Получилось!!!!!!!!!!!!!!
Всем спасибо, Просто поставил пер резистор на 10кОм,.
Я просто счастлив.
REGBIST11
Цитата(PaulB @ Oct 5 2007, 09:15) *
Получилось!!!!!!!!!!!!!!
Всем спасибо, Просто поставил пер резистор на 10кОм,.
Я просто счастлив.


Но подтяжки я всёравно бы поставил , для помехозащещённости maniac.gif biggrin.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.