PaulB 0 4 августа, 2007 Опубликовано 4 августа, 2007 · Жалоба Имеется мт-16S2D подключонный к мк Tiny2313 по 4-х битной шине. Программирую на С, но только что-то не чего не получается. При включении питания дисплей какбы загорает и сразуже гаснит (LCD новый) это так задуманно? Питание у меня 3.6В. Помогите запустить дисплей. ? :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 4 августа, 2007 Опубликовано 4 августа, 2007 · Жалоба Имеется мт-16S2D подключонный к мк Tiny2313 по 4-х битной шине. Программирую на С, но только что-то не чего не получается. При включении питания дисплей какбы загорает и сразуже гаснит (LCD новый) это так задуманно? Питание у меня 3.6В. Помогите запустить дисплей. ? :( Здесь есть исходники http://electronix.ru/forum/index.php?showtopic=10934 Кста, а Ваш дисплей точно поддерживает такое питание? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
PaulB 0 4 августа, 2007 Опубликовано 4 августа, 2007 · Жалоба Дисплей поддерживает 3-х В-ое и 5В-ое питание. Кстате, как должен вести себя дисплей при включении питания? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 4 августа, 2007 Опубликовано 4 августа, 2007 · Жалоба Кстате, как должен вести себя дисплей при включении питания?Вроде так и должен Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
PaulB 0 4 августа, 2007 Опубликовано 4 августа, 2007 · Жалоба а как заставить его хоть зажечься, неговорю о том чтобы он ещё что-то вывел? как реализовать это программно? Юзаю CVAVR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 4 августа, 2007 Опубликовано 4 августа, 2007 · Жалоба а как заставить его хоть зажечься, неговорю о том чтобы он ещё что-то вывел? как реализовать это программно? Юзаю CVAVR. Думаю, что сначала надо его как то запрограммировать:) Про исходники я уже говорил постом выше Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
PaulB 0 4 августа, 2007 Опубликовано 4 августа, 2007 · Жалоба Нашёл там один исходник, но он оказался очень сложным для меня. Даже сам пробовал по даташиту писать (написал какуюта ересь) , нечего неполучилось. Чайник Я! :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prottoss 0 4 августа, 2007 Опубликовано 4 августа, 2007 · Жалоба Нашёл там один исходник, но он оказался очень сложным для меня. Даже сам пробовал по даташиту писать (написал какуюта ересь) , нечего неполучилось. Чайник Я! :( Так может, чем хотеть устремится к звездам, Сначала хотя бы научится подпрыгивать :) . Например, поморгать светодиодами, или что то вывести на простой семисегментный индикатор? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
PaulB 0 4 августа, 2007 Опубликовано 4 августа, 2007 · Жалоба нУ ДИОДАМ ПОМОГАТЬ ПРЫГАТЬ УЖЕ НАУЧИЛСЯ. На С неодного простого исходника ненашёл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
korobov_michael 0 5 августа, 2007 Опубликовано 5 августа, 2007 · Жалоба Попробуй это. У меня это рабочая версия при тестировании новых железок с LCD. Только не забудь в главной программе правильно выставить направление портов Успехов! test_LCD.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
PaulB 0 5 августа, 2007 Опубликовано 5 августа, 2007 · Жалоба Вот посмотрите пожалуйсто код: -------------------------------------------------------- #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 0 5 августа, 2007 Опубликовано 5 августа, 2007 · Жалоба а как заставить его хоть зажечься, неговорю о том чтобы он ещё что-то вывел? как реализовать это программно? Юзаю CVAVR. В CVAVR уже есть готовая библиотека для работы с этим дисплеем. посмотрите в хэлпе функции lcd. Работает. Проверено =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
korobov_michael 0 5 августа, 2007 Опубликовано 5 августа, 2007 (изменено) · Жалоба Внимательно проверь инициализацию! Похоже, ты неправильно инициализируешь ЖКИ После каждого выставления на портах необходимо провести процедуру 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-ножечного она немного уменьшится. ВАЖНО!!! Может быть очень смешно, но уточни, как ты подаешь смещение на ножку контрастности - а то можно вообще ничего не увидеть и при правильной инициализации :) Скажешь, получилось ли :) Успехов! Изменено 5 августа, 2007 пользователем korobov_michael Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ESL 0 6 августа, 2007 Опубликовано 6 августа, 2007 · Жалоба Обратите внимание, что у МЭЛТовских дисплеев не до конца совместимая c hd44780 инициализация (сам в своё время обжёгся). Он требует не одного, а если память мне не врёт - 3х циклов. Также советую заглянуть к ним на форум - там были всякие исходники и подобные темы. З.Ы. Если делать по даташиту - всё работает, по крайней мере, у меня работало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serg_greS 0 6 августа, 2007 Опубликовано 6 августа, 2007 · Жалоба Посмотрите может вся проблема у Вас в этом: В 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), написано подробнее чем в даташитке мелта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться