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

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

|
Спасибо, поэксперементирую ещё. Надо же его всё таки включать когда то.
|
|
|
|
|
Jan 25 2008, 21:06
|
Гуру
     
Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446

|
Цитата Не стал заморачиваться с неработающим у меня WinAvr 20071221. Поставил назад старый. WinAVR2007 работает с AVR Studio 4.13, а WinAVR2006 работает с AVR Studio 4.12. Павильней было бы поставить свежую студию с сервиспаками. Цитата Надоел уже мне этот экранчик порядком, обидно тратить столько времини для того чтобы привести к жизни этот противный кусочек железа, выполняющий не такую уж важную роль. Попробуйте эти библиотеки.
lsd.rar ( 13.53 килобайт )
Кол-во скачиваний: 149Цитата Возьми LCD модуль из avrLib, попробуй. Код громоздкий. при попытке разрешить прерывания глобально у меня прога виснет. там только lcdProgressBar() мне нравится и lcdPrintData().
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
Jan 29 2008, 08:30
|
Участник

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

|
Доброго времени суток! Цитата Попробуйте эти библиотеки. lsd.rar Стянул библиотечку, действительно понятное описание и читабельный код, спасибо за ссылочку)). Содрал код инициализации и добавил лишь VLED ножку на которую даётся питание, проверил пошагово - всё работае так как написано, а продвижения все равно нет, он всего лиш загорается при подаче питания. Если не трудно читать, то вот что есть на инициализации: Код //------------------------------------------------------------------------------------- //инициализация дисплея //------------------------------------------------------------------------------------- #define F_CPU 1000000UL // 1 MHz //---------- #define VLED 0 //power #define LCD_RS 1 //define MCU pin connected to LCD RS #define LCD_RW 2 //define MCU pin connected to LCD R/W #define LCD_E 3 //define MCU pin connected to LCD E #define LCD_D4 4 //define MCU pin connected to LCD D3 #define LCD_D5 5 //define MCU pin connected to LCD D4 #define LCD_D6 6 //define MCU pin connected to LCD D5 #define LCD_D7 7 //define MCU pin connected to LCD D6 #define LDP PORTC //define MCU port connected to LCD data pins #define LCP PORTC //define MCU port connected to LCD control pins #define LDDR DDRC //define MCU direction register for port connected to LCD data pins #define LCDR DDRC //define MCU direction register for port connected to LCD control pins //VLED - PC0 //RS - PC1 //R/W - PC2 //E - PC3 //DB4..DB7 - PC4..PC7
void _delay_ms(double __ms) { uint16_t __ticks; double __tmp = ((F_CPU) / 4e3) * __ms; if (__tmp < 1.0) __ticks = 1; else if (__tmp > 65535) { // __ticks = requested delay in 1/10 ms __ticks = (uint16_t) (__ms * 10.0); while(__ticks) { // wait 1/10 ms _delay_loop_2(((F_CPU) / 4e3) / 10); __ticks --; } return; } else __ticks = (uint16_t)__tmp; _delay_loop_2(__ticks); }
void LCDsendCommand(uint8_t cmd) //Sends Command to LCD { LDP=(cmd&0b11110000)|1<<VLED; LCP|=1<<LCD_E; _delay_ms(1); LCP&=~(1<<LCD_E); _delay_ms(1); LDP=((cmd&0b00001111)<<4)|(1<<VLED); LCP|=1<<LCD_E; _delay_ms(1); LCP&=~(1<<LCD_E); _delay_ms(1); } void LCDinit(void)//Initializes LCD { LDP=1<<VLED; LCP=1<<VLED; _delay_ms(15); //LDP=0x00; //LCP=0x00; LDDR|=1<<LCD_D7|1<<LCD_D6|1<<LCD_D5|1<<LCD_D4; LCDR|=1<<LCD_E|1<<LCD_RW|1<<LCD_RS; //---------one------ LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|1<<LCD_D4|1<<VLED; //4 bit mode LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS; _delay_ms(1); LCP&=~(1<<LCD_E); _delay_ms(1); //-----------two----------- LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|1<<LCD_D4|1<<VLED; //4 bit mode LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS; _delay_ms(1); LCP&=~(1<<LCD_E); _delay_ms(1); //-------three------------- LDP=0<<LCD_D7|0<<LCD_D6|1<<LCD_D5|0<<LCD_D4|1<<VLED; //4 bit mode LCP|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS; _delay_ms(1); LCP&=~(1<<LCD_E); _delay_ms(1); //--------4 bit--dual line--------------- LCDsendCommand(0b00101000); //-----increment address, cursor shift------ LCDsendCommand(0b00001110); } Я просто вызываю LCDinit() из main(). Может на момент инициализации нужно запретить глобально прерывания может это мешает тоже?
|
|
|
|
|
Jan 29 2008, 14:20
|
Участник

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

|
Уважаемые знатоки, благодарю за помощь, проблема решена благодаря моему сообразительному другу. Проблема оказалась не в порядке посылки команд и выставления задержек а в коварном подстроичном резисторе регулирующем контрастность. На самом деле значок курсора выводился уже около двух недель , только благодаря резистору я его не видел. Совет начинающим - если вдруг инициализация не проходит НЕ исключайте этой ошибки и обязательно проверяйте етот самый резистор. Всем спасибо, тема закрыта.
|
|
|
|
|
Jan 31 2008, 09:13
|
Участник

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

|
Здравствуйте. Цитата Даже когда индикатор не инициализирован, его половина "закрашивается черным" при регулировке контрастности Да уж теперь то я понимаю как много времени зря потерял из за незнания. Но поймите, плата с атмегой и дисплейчиком мне досталась в наследство и поэтому ничего о том как всё устроено и что должно быть отрегулировано не знал. Я начал подозревать что подсветка и питание мк - реализованы отдельно, так как на форуме читал что должны подсветится знакоместа, оказалось не так, мне помогли в принципиальных схемах разобраться и нашли этот резистор, после этого притензии только к разработчику схемы(ну и к себе - за то что раньше не догадался).
|
|
|
|
|
Jan 31 2008, 10:03
|
Участник

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

|
Да уж, я даже не догадывался что для маленького дисплейчика тоже реализовали подстройку контрастности. Просто не подумал, я за собой заметил что зачастую ищу ошибку в чём то сложном, вместо того чтоб проверить самое банальное. Как говорится- посыпаю голову пеплом, но рад что могу двигаться дальше, а точнее пока ползти  . Впереди куча всего что прийдётся делать впервые.
|
|
|
|
|
Jan 31 2008, 10:14
|
Группа: Новичок
Сообщений: 14
Регистрация: 28-01-08
Пользователь №: 34 483

|
Уважаемый John23. За AVR и С я взялся буквально месяц назад. Наберусь смелости и дам совет. Мой совет будет в общем, о хорошо забытой рекомендации. В кратце расскажу о своих мытарствах. LCD взял МТ-10-Т7 -- единственное, что было в нашем захолустье. Попутно скачал с какого-то форума рекомендации бедолаги, который смог запустить эту стекляшку только с помощью группы поддержки самой фирмы(фирма МЭЛТ). Хорошо, что запросы не надо было сочинять на английском. Ушло у него на это около 10 дней, если я правильно помню. Естественно я пошел по пути его рекомендаций и потерял несколько дней. Потом плюнул и скачал ДШ. с сайта фирмы и за пару часов получил рабочий код. Ваш LCD очень популярный и информации на него много. И вот выводы из приобретенного опыта. Язык Си слишком вольный, особенно для начинающего. Не используйте отточенные конструкции опытных Си-шников, т.к. есть вероятность сразу не въехать в алгоритм и долго няньчиться с проблемой. Пишите может быть и не оптимально, но как можно проще для своего понимания и у вас все заработает. В будущем это мнение возможно и поменяется. У меня уже тоже появились затыки и я уже позвонил на форум.
|
|
|
|
|
Jan 31 2008, 11:41
|
Участник

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

|
Спасибо за совет  , всегда рад здравым мыслям. Копаться в ДШ сразу желания не было, поэтому сначала поискал в инете как это делают другие ( к стати тоже натыкался на вышеупомянутого бедолагу  ), после того как их советы не помогли покопался в ДШ, к моему недоумению это тоже было безрезультатно. Спасением стал этот форум, уважаемые участники которого мне всячески старались помочь. Но жалко что проблемма была такой глупой и неожиданной - просто контраст на нуле. А касательно языка С, для меня он удобнее потому что пишу на нём не первый год (с асмом ,как ни стыдно признаться, разбираться лень, хотя в институте заставляли). До недавнего времени писал приложения под винду и волей случая сейчас приходится вникать в другую область программирования, поэтому сейчас тяжковато.
|
|
|
|
|
Feb 1 2008, 11:02
|
Группа: Новичок
Сообщений: 14
Регистрация: 28-01-08
Пользователь №: 34 483

|
Цитата(John23 @ Jan 31 2008, 14:41)  Спасибо за совет  , всегда рад здравым мыслям. Копаться в ДШ сразу желания не было, поэтому сначала поискал в инете как это делают другие ( к стати тоже натыкался на вышеупомянутого бедолагу  ), после того как их советы не помогли покопался в ДШ, к моему недоумению это тоже было безрезультатно. Спасением стал этот форум, уважаемые участники которого мне всячески старались помочь. Но жалко что проблемма была такой глупой и неожиданной - просто контраст на нуле. А касательно языка С, для меня он удобнее потому что пишу на нём не первый год (с асмом ,как ни стыдно признаться, разбираться лень, хотя в институте заставляли). До недавнего времени писал приложения под винду и волей случая сейчас приходится вникать в другую область программирования, поэтому сейчас тяжковато. Вам проще. Я в институте учил Паскаль, да и программистом никогда не работал. К томуже был перерыв в 16 лет, а вот теперь снова пришлось взяться и взяться с ходу за С. Тяжеловато по началу мыслить на С.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|