| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Проблем с PIC16F874A и LCD дисплей - не се инициализира. http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=7973 |
Страница 1 от 2 |
| Автор: | Demoman [ Вто Юли 06, 2010 4:47 pm ] | |||||||||
| Заглавие: | Проблем с PIC16F874A и LCD дисплей - не се инициализира. | |||||||||
Имам този дисплей http://home.comet.bg/datasheets/LCD/AC-162B.pdf свързан към PIC16F874A чрез 8 битова шина за данни. Написах следния код за инициализацията на дисплея:
Но дисплея не се инициализира като извикам lcd_init. На дисплея първия ред е празен, а втория изцяло запълнен и така стои каквото и да го правя. Проверих поотделно всички пинове на дисплея дали са коректно вързани към съответните на ПИКа - да, няма грешки. Пробвах да обърна огледално младшите и старшите битове - нищо. Дигах всички delay-ове до 5000 ms - нищо. lcd_send_byte задава коректно шината за данни т.е. няма проблеми с 8-те извиквания на output_bit. Пробвах с flex_lcd.c драйвер с 4 битова шина - нищо. Някой да има идеи за решаването на този проблем? |
||||||||||
| Автор: | optron [ Вто Юли 06, 2010 8:16 pm ] |
| Заглавие: | |
Омотал си последователността на импулсите. Когато тактуваш Е, не трябва нищо друго на променяш. Значи - държиш Е ниско ниво, сетваш си изходите както трябва да са, вдигаш Е, изчакваш малко над 230 наносекунди (аз го правя 256 наносекунди, удобно ми е с таймер1), сваляш Е, изчакваш колкото е за съответната операция (написани са в таблица в даташита) и след това повтаряш тази процедура за всяка следваща команда. Забелязах, че ползваш милисекундни закъснения (50, 500 ...). Те може да са причина дисплеят да не те слуша - доста са големи ... Дисплеят работи с наносекундни времена. Пробвай с времената, които ти написах. Проверил ли си с осцилоскоп дали върви правилна комуникация? Накрая ако не стане, пробвай с друг дисплей - при китайските има голям процент на фабрично дефектни. |
|
| Автор: | Demoman [ Сря Юли 07, 2010 10:11 am ] |
| Заглавие: | |
Намалих закъснението на Enable до 1 микросекунда, намалих другите до 5 ms заради някои от командите, които изисват по около 2 ms изчакване. Ефект - никакъв. Проверявал съм пиновете с мултицет (нямам осцилоскоп) - коректно са свързани, коректно се сетват от PIC-a. Днес ще отскоча за да си купя друг дисплей и довечера ще го пробвам. Нормално ли е в неинициализирано състояние, на дисплея първия ред да е празен, а втория - изцяло запълнен? |
|
| Автор: | head_up [ Сря Юли 07, 2010 10:35 am ] | |||||||||
| Заглавие: | ||||||||||
По принцип първият ред е нормално да е запълнен, вторият празен, ама твоя може да е малко с модерни разбирания, та да е на обратно... и optron е прав - омотал си времедиаграмите. разгледай как изглеждат в пдф-то и ги следвай точно: смъкваш/качваш първо RS-a, нагласяш RW, изчакваш, качваш Е, изчакваш, буташ данните на шината (много странно си си написал тая функция при все че е на един порт, за какво така?!), изчакваш, сваляш Е, изчакваш (пък може и да не много). ако се прежаля днес ще ти постна инициализацията на тоя боклук на асемблер, нейде я бях писал (стига да я намеря), та да спестим на бъдещите поколения мъките - гледам, че много ви затруднява специално тоя дисплей. в крайна сметка може и да се окаже дефектен, тогава поздравяваш майката на произодителя, вносителя и продавача в магазина. и топлофикация, и енергото, и ВИК... ще тръгне, но без мили думи не става |
||||||||||
| Автор: | Demoman [ Сря Юли 07, 2010 10:56 am ] |
| Заглавие: | |
Не схващам кое съм омотал при времедиаграмите - свалям E, сетвам шината, качвам Е, чакам 1 милисек., свалям Е, чакам 1 милисек. Къде тук е грешката? Функцията съм я писал така, щото не знаех, че може и по-лесно с PORTD=n |
|
| Автор: | head_up [ Сря Юли 07, 2010 11:25 am ] | ||
| Заглавие: | |||
това са изрезки да не се сърдят издателите, но работи, щото съм го ползвал преди 4-5 години с някакъв пик18Ф(нещо си) - за това има и LAT-ове, вече не помня точно какво беше, сигурно 452 или нещо такова, но минаваше без проблеми. то всъщност беше в оригинал нещо на МК, 2ра книга - за справка на останалите фукции имаше кодове които се теглеха от сайта някога отдавна. Та бях го направил за 162b и всъщност май повече не се докоснах до пик (хвала бог Ом) до преди няколко месеца. И помни вълшебните думички "Аз твойта мама китайска моа ли да... "
|
|||
| Автор: | bateAz [ Сря Юли 07, 2010 11:32 am ] |
| Заглавие: | |
Не познавам конкретно този дисплей, но на повечето дисплеи има един бит, който показва кога контролерът му е зает. Понякога при начална инициализация може да е зает дълго - до секунди. Не виждам да го четеш някъде, така кодът ти е хем по-несигурен, хем по-бавен. За пробата може да увеличиш закъсненият 10 ( десет ) пъти и да провериш какво ще стане. Не пречи да провериш и константите, които зареждаш, дали са правилните. |
|
| Автор: | Demoman [ Сря Юли 07, 2010 11:38 am ] |
| Заглавие: | |
Константите съм ги проверявал с мултицет - правилни са. Ами, бях изпраскал по 5 секунди закъснения навсякъде и ефект нямаше. Пък и във второто мнение от темата ми казаха да намаля драстично закъсненията. |
|
| Автор: | CarBeta [ Сря Юли 07, 2010 3:57 pm ] | |||||||||
| Заглавие: | ||||||||||
Не става въпрос да се сменят времената безразборно и да се налучква. Ако прочетеш внимателно, всеки казва как е решил проблема, но те съветва да се съобразиш с datasheet'a на дисплея. Аз съм работил точно с такъв дисплей и при мен тръгна от раз. Не е лоша идеята на bateAz след като изпратиш команда да четеш бит 7 (Busy Flag) докато стане пак 0. Контролерът на дисплея сам си казва кога е готов за следващата команда. Аз за себе си опитно установих, че 25 ms са ми достатъчни. Това съм писал за инициализация и работи. Трябва само да го промениш за 8 бита ако ще го ползваш.
п.п. константите не се проверяват с мултицет |
||||||||||
| Автор: | head_up [ Сря Юли 07, 2010 11:25 pm ] |
| Заглавие: | |
@Demoman, сега ми направи впечатление, че ти казваш на горният ред долен и на долният горен. каква е вероятността да си объркал кой е първи и кой последен пин от рейката, ако си завъртял дисплея с главата на долу (само на контраста му дреме, няма да се усетиш, че си го обърнал на четене, ако не изгърмиш порта)? я пак погледни последната страница от даташита, то чак звучи невероятно, ама ... |
|
| Автор: | Demoman [ Чет Юли 08, 2010 10:07 am ] | |||||||||
| Заглавие: | ||||||||||
Пиновете не съм ги объркал, просто е закрепен наобратно самия дисплей т.е. дупките за пиновете идват отдолу на екрана заради самата платка. Дисплеят стърчи над платката. А може ли дисплей да изтрещи ако объркам + и - на захранването? |
||||||||||
| Автор: | head_up [ Чет Юли 08, 2010 10:10 am ] |
| Заглавие: | |
може, ако китаеца е спестил едно диодче |
|
| Автор: | relsys [ Чет Юли 08, 2010 11:30 am ] |
| Заглавие: | |
Вземи дръпни едно MikroC, там има работещи драйвери - така ще разбереш дали е дисплея или на тебе ти е рано още да пише драйвери. |
|
| Автор: | CarBeta [ Чет Юли 08, 2010 4:37 pm ] |
| Заглавие: | |
Можеш ли да пуснеш една снимка на дисплея да видиме на кое викаш горе и на кое долу. |
|
| Автор: | StiV [ Пет Юли 09, 2010 11:02 pm ] |
| Заглавие: | |
Обърна ли внимание как са разположени изводите, че имаше едни странни модели дето първите 2 извода са 15-ти и 16-ти, а после започваха от 1 до 14. Да не е такъв модел, че няма да тръгне колкото и да го мъчиш. Мисля, че такива бяха с буква "В" накрая и изводите им са от долу? Виж да не е там проблема. |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|