|
Сорри но опять инициализация LCD, Не получается запустить LCD основаный на HD44780 |
|
|
|
Jan 23 2008, 13:43
|
Участник

Группа: Новичок
Сообщений: 15
Регистрация: 17-01-08
Пользователь №: 34 156

|
Здравствуйте! Понимаю что до дыр затёртая тема, но всё же прочитав подобные темы не смог применить к своей инициализации. У меня Atmega 128, с ней портом С подсоединён двустрочный LCD основаный на HD44780. Провожу всеми описываемую инициализацию, но результата нет. Если не сильно надоело отвечать на подобные вопросы подскажите пожалуйста как быть. Имеется вот такой вот примитивчик инициализации... Код void delay_ms(unsigned short ms) { unsigned short outer1, outer2; outer1 = 200; while (outer1) { outer2 = 1000; while (outer2) { while ( ms ) ms--; outer2--; } outer1--; } } //------------------------------------------------------------------------------------- //инициализация дисплея //------------------------------------------------------------------------------------- //VLED - PC0 //RS - PC1 //R/W - PC2 //E - PC3 //DB4..DB7 - PC4..PC7 //N - line number (2) //F - font type (5x8) //DL - data length (4 bit) //D - display //C - cursor //B - blink
void Write_8Bit(int value, int pause) { PORTC=value; sbi(PORTC,3); cbi(PORTC,3); PORTC=0xF1;/установить DB4-DB7 в HI delay_ms(pause); }
void Write_4Bit(int hi, int low, int pause) { PORTC=hi;//старший полубайт sbi(PORTC,3); cbi(PORTC,3); PORTC=low;//младший полубайт sbi(PORTC,3); cbi(PORTC,3); PORTC=0xF1;//установить DB4-DB7 в HI delay_ms(pause); }
void disp_init(void) { DDRC=0xFF;// порт С на выход PORTC=0x01;// включить питание delay_ms(40); //пауза после включения питания for(int c=0; c<3; c++) //3 раза устанавливается 8 битный режим { Write_8Bit(0x31, 40); }
Write_4Bit(0x21,0x01,40); // переход в 4 битный режим Write_4Bit(0x21,0x81,40); //переход в 4 битный режим, повтор Write_4Bit(0x01,0x81,40); //выключить дисплей Write_4Bit(0x01,0x61,40); //установить направление сдвига курсора Write_4Bit(0x01,0xF1,40); //включить индикатор и разрешить курсор, установить его тип Write_4Bit(0x01,0x11,40); //очистить индикатор и курсор домой } На дисплее ничего не происходит , кроме того что он светится при подаче на него питания. При посылке битов всегда добавляю 1 для того чтобы питание не пропало, потому как оно физически подсоеденено к PC0. Подскажите что у меня не так. Заранее спасибо.
|
|
|
|
|
 |
Ответов
|
Jan 23 2008, 17:56
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(Freeze Anti @ Jan 23 2008, 20:36)  Сейчас не помню уже, но функцию Write_8Bit(0x31, 40); придется, наверное, убрать из-под цикла... там после каждого раза - разные задержки... после первого - 4,1мс, после второго - 100мкс, я мог что-то напутать, поэтому вам необходимо свериться с даташитом... там все написано... Не нужно, это рекомендуемые МИНИМАЛЬНЫЕ задержки, если времени лишнего много, то и так нормально. Кстати - какая тактовая частота процессора? Если выше 10Мгц, то между Код sbi(PORTC,3); cbi(PORTC,3); неплохо было бы добавить задержку, на пару тактов процессора. Интересное решение - передавать нибблы отдельно. Не подскажете, чем оно вызвано?
|
|
|
|
Сообщений в этой теме
John23 Сорри но опять инициализация LCD Jan 23 2008, 13:43 Сергей Борщ Цитата(John23 @ Jan 23 2008, 15:43) Подск... Jan 23 2008, 14:19 Freeze Anti Что-то я тут не понял... функция void disp_init(vo... Jan 23 2008, 18:12 Kirill Frolov Цитата(John23 @ Jan 23 2008, 16:43) приме... Jan 23 2008, 20:05 Qwertty И еще что заметил - первый переход в 4 битный режи... Jan 23 2008, 21:33 John23 Здравствуйте попытаюсь оправдаться. Пользовался ре... Jan 24 2008, 08:07 aesok Цитата(John23 @ Jan 24 2008, 11:07) Я так... Jan 24 2008, 08:16 Kirill Frolov Цитата(John23 @ Jan 24 2008, 11:07) Здрав... Jan 24 2008, 18:20 smk ЦитатаЯ так понимаю нужно для начала найти цивилиз... Jan 24 2008, 08:25 John23 Цитата(aesok @ Jan 24 2008, 12:16) Скачай... Jan 24 2008, 09:14 Qwertty Цитата(John23 @ Jan 24 2008, 12:14) Я вид... Jan 24 2008, 10:59 John23 Не стал заморачиваться с неработающим у меня WinAv... Jan 24 2008, 14:02 Freeze Anti Да не... на инициализацию дисплея можно и delay по... Jan 24 2008, 19:11 John23 Спасибо, поэксперементирую ещё. Надо же его всё та... Jan 25 2008, 06:47 hd44780 Возьми LCD модуль из avrLib, попробуй.
У меня 3 ра... Jan 25 2008, 07:55 smk ЦитатаНе стал заморачиваться с неработающим у меня... Jan 25 2008, 21:06 John23 Доброго времени суток!
ЦитатаПопробуйте эти би... Jan 29 2008, 08:30 John23 Уважаемые знатоки, благодарю за помощь, проблема р... Jan 29 2008, 14:20 Pyku_He_oTTyda Даже когда индикатор не инициализирован, его полов... Jan 29 2008, 15:12 John23 Здравствуйте.
ЦитатаДаже когда индикатор не иници... Jan 31 2008, 09:13 Pyku_He_oTTyda я не дока в индикаторах, но когда первый раз подкл... Jan 31 2008, 09:43 John23 Да уж, я даже не догадывался что для маленького ди... Jan 31 2008, 10:03 j_serg Уважаемый John23. За AVR и С я взялся буквально ме... Jan 31 2008, 10:14 John23 Спасибо за совет , всегда рад здравым мыслям. Ко... Jan 31 2008, 11:41 j_serg Цитата(John23 @ Jan 31 2008, 14:41) Спаси... Feb 1 2008, 11:02
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|