Отговори на тема  [ 21 мнения ]  Отиди на страница 1, 2  Следваща
Проблем с PIC16F874A и LCD дисплей - не се инициализира. 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Юли 06, 2010 4:42 pm
Мнения: 20
Мнение Проблем с PIC16F874A и LCD дисплей - не се инициализира.
Имам този дисплей http://home.comet.bg/datasheets/LCD/AC-162B.pdf свързан към PIC16F874A чрез 8 битова шина за данни. Написах следния код за инициализацията на дисплея:
Код:
#define LCD_DB0   PIN_D0
#define LCD_DB1   PIN_D1
#define LCD_DB2   PIN_D2
#define LCD_DB3   PIN_D3
#define LCD_DB4   PIN_D4
#define LCD_DB5   PIN_D5
#define LCD_DB6   PIN_D6
#define LCD_DB7   PIN_D7

#define LCD_E     PIN_E2
#define LCD_RS    PIN_E0
#define LCD_RW    PIN_E1

// Send a byte to the LCD.
void lcd_send_byte(int8 address, int8 n)
{
output_low(LCD_E);
if(address==1)
   output_high(LCD_RS);
else
   output_low(LCD_RS);   
delay_ms(500);
output_bit(LCD_DB0, !!(n & 1));
output_bit(LCD_DB1, !!(n & 2));
output_bit(LCD_DB2, !!(n & 4));   
output_bit(LCD_DB3, !!(n & 8));
output_bit(LCD_DB4, !!(n & 16));
output_bit(LCD_DB5, !!(n & 32));
output_bit(LCD_DB6, !!(n & 64));   
output_bit(LCD_DB7, !!(n & 128));
delay_ms(500);
output_high(LCD_E);
delay_ms(50);
output_low(LCD_E);
delay_ms(50);
}

//LCD initialization
void lcd_init(void)
{
output_low(LCD_RW);
delay_ms(500);
lcd_send_byte(0,0x3C);
delay_ms(500);
lcd_send_byte(0,0xF);
delay_ms(500);
lcd_send_byte(0,0x1);
delay_ms(500);
lcd_send_byte(0,0x7);
delay_ms(500);
}

Но дисплея не се инициализира като извикам lcd_init. На дисплея първия ред е празен, а втория изцяло запълнен и така стои каквото и да го правя.
Проверих поотделно всички пинове на дисплея дали са коректно вързани към съответните на ПИКа - да, няма грешки. Пробвах да обърна огледално младшите и старшите битове - нищо. Дигах всички delay-ове до 5000 ms - нищо. lcd_send_byte задава коректно шината за данни т.е. няма проблеми с 8-те извиквания на output_bit. Пробвах с flex_lcd.c драйвер с 4 битова шина - нищо. Някой да има идеи за решаването на този проблем?


Вто Юли 06, 2010 4:47 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Чет Ное 20, 2008 1:49 pm
Мнения: 276
Местоположение: Бургас
Мнение 
Омотал си последователността на импулсите.
Когато тактуваш Е, не трябва нищо друго на променяш.
Значи - държиш Е ниско ниво, сетваш си изходите както трябва да са, вдигаш Е, изчакваш малко над 230 наносекунди (аз го правя 256 наносекунди, удобно ми е с таймер1), сваляш Е, изчакваш колкото е за съответната операция (написани са в таблица в даташита) и след това повтаряш тази процедура за всяка следваща команда.
Забелязах, че ползваш милисекундни закъснения (50, 500 ...). Те може да са причина дисплеят да не те слуша - доста са големи ... Дисплеят работи с наносекундни времена. Пробвай с времената, които ти написах.
Проверил ли си с осцилоскоп дали върви правилна комуникация?
Накрая ако не стане, пробвай с друг дисплей - при китайските има голям процент на фабрично дефектни.

_________________
Digitally yours: Optron


Вто Юли 06, 2010 8:16 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Юли 06, 2010 4:42 pm
Мнения: 20
Мнение 
Намалих закъснението на Enable до 1 микросекунда, намалих другите до 5 ms заради някои от командите, които изисват по около 2 ms изчакване. Ефект - никакъв. Проверявал съм пиновете с мултицет (нямам осцилоскоп) - коректно са свързани, коректно се сетват от PIC-a. Днес ще отскоча за да си купя друг дисплей и довечера ще го пробвам.

Нормално ли е в неинициализирано състояние, на дисплея първия ред да е празен, а втория - изцяло запълнен?


Сря Юли 07, 2010 10:11 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Юни 01, 2008 9:54 pm
Мнения: 1503
Местоположение: Пловдив
Мнение 
Demoman написа:
Нормално ли е в неинициализирано състояние, на дисплея първия ред да е празен, а втория - изцяло запълнен?

По принцип първият ред е нормално да е запълнен, вторият празен, ама твоя може да е малко с модерни разбирания, та да е на обратно...
и optron е прав - омотал си времедиаграмите. разгледай как изглеждат в пдф-то и ги следвай точно: смъкваш/качваш първо RS-a, нагласяш RW, изчакваш, качваш Е, изчакваш, буташ данните на шината (много странно си си написал тая функция при все че е на един порт, за какво така?!), изчакваш, сваляш Е, изчакваш (пък може и да не много). ако се прежаля днес ще ти постна инициализацията на тоя боклук на асемблер, нейде я бях писал (стига да я намеря), та да спестим на бъдещите поколения мъките - гледам, че много ви затруднява специално тоя дисплей.
в крайна сметка може и да се окаже дефектен, тогава поздравяваш майката на произодителя, вносителя и продавача в магазина. и топлофикация, и енергото, и ВИК... ще тръгне, но без мили думи не става :D


Сря Юли 07, 2010 10:35 am
Профил WWW
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Юли 06, 2010 4:42 pm
Мнения: 20
Мнение 
Не схващам кое съм омотал при времедиаграмите - свалям E, сетвам шината, качвам Е, чакам 1 милисек., свалям Е, чакам 1 милисек. Къде тук е грешката? :oops:

Функцията съм я писал така, щото не знаех, че може и по-лесно с PORTD=n :oops:


Сря Юли 07, 2010 10:56 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Юни 01, 2008 9:54 pm
Мнения: 1503
Местоположение: Пловдив
Мнение 
това са изрезки да не се сърдят издателите, но работи, щото съм го ползвал преди 4-5 години с някакъв пик18Ф(нещо си) - за това има и LAT-ове, вече не помня точно какво беше, сигурно 452 или нещо такова, но минаваше без проблеми. то всъщност беше в оригинал нещо на МК, 2ра книга - за справка на останалите фукции имаше кодове които се теглеха от сайта някога отдавна. Та бях го направил за 162b и всъщност май повече не се докоснах до пик (хвала бог Ом) до преди няколко месеца. И помни вълшебните думички "Аз твойта мама китайска моа ли да... " :D


Прикачени файлове:
162b.txt [1.63 KiB]
233 пъти
Сря Юли 07, 2010 11:25 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
Не познавам конкретно този дисплей, но на повечето дисплеи има един бит, който показва кога контролерът му е зает. Понякога при начална инициализация може да е зает дълго - до секунди. Не виждам да го четеш някъде, така кодът ти е хем по-несигурен, хем по-бавен.
За пробата може да увеличиш закъсненият 10 ( десет ) пъти и да провериш какво ще стане. Не пречи да провериш и константите, които зареждаш, дали са правилните.


Сря Юли 07, 2010 11:32 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Юли 06, 2010 4:42 pm
Мнения: 20
Мнение 
Константите съм ги проверявал с мултицет - правилни са. Ами, бях изпраскал по 5 секунди закъснения навсякъде и ефект нямаше. Пък и във второто мнение от темата ми казаха да намаля драстично закъсненията. :)


Сря Юли 07, 2010 11:38 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение 
Не става въпрос да се сменят времената безразборно и да се налучква. Ако прочетеш внимателно, всеки казва как е решил проблема, но те съветва да се съобразиш с datasheet'a на дисплея. Аз съм работил точно с такъв дисплей и при мен тръгна от раз. Не е лоша идеята на bateAz след като изпратиш команда да четеш бит 7 (Busy Flag) докато стане пак 0. Контролерът на дисплея сам си казва кога е готов за следващата команда. Аз за себе си опитно установих, че 25 ms са ми достатъчни. Това съм писал за инициализация и работи. Трябва само да го промениш за 8 бита ако ще го ползваш.

Цитат:
Init_LCD_4 movlw D'15'
movwf Counter
call Wait
movlw B'00110000'
movwf PORTB
bsf E
bcf E
movlw D'5'
movwf Counter
call Wait
movlw B'00100000'
movwf PORTB
bsf E
bcf E
movlw B'00101000'
call Send_command
movlw DISP_OFF
call Send_command
movlw DISP_ON
call Send_command
return

п.п.
константите не се проверяват с мултицет


Сря Юли 07, 2010 3:57 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Юни 01, 2008 9:54 pm
Мнения: 1503
Местоположение: Пловдив
Мнение 
@Demoman, сега ми направи впечатление, че ти казваш на горният ред долен и на долният горен. каква е вероятността да си объркал кой е първи и кой последен пин от рейката, ако си завъртял дисплея с главата на долу (само на контраста му дреме, няма да се усетиш, че си го обърнал на четене, ако не изгърмиш порта)? я пак погледни последната страница от даташита, то чак звучи невероятно, ама ... 8O


Сря Юли 07, 2010 11:25 pm
Профил WWW
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Юли 06, 2010 4:42 pm
Мнения: 20
Мнение 
head_up написа:
@Demoman, сега ми направи впечатление, че ти казваш на горният ред долен и на долният горен. каква е вероятността да си объркал кой е първи и кой последен пин от рейката, ако си завъртял дисплея с главата на долу (само на контраста му дреме, няма да се усетиш, че си го обърнал на четене, ако не изгърмиш порта)? я пак погледни последната страница от даташита, то чак звучи невероятно, ама ... 8O

Пиновете не съм ги объркал, просто е закрепен наобратно самия дисплей т.е. дупките за пиновете идват отдолу на екрана заради самата платка. Дисплеят стърчи над платката. А може ли дисплей да изтрещи ако объркам + и - на захранването? :oops:


Чет Юли 08, 2010 10:07 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Юни 01, 2008 9:54 pm
Мнения: 1503
Местоположение: Пловдив
Мнение 
може, ако китаеца е спестил едно диодче :D


Чет Юли 08, 2010 10:10 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 25, 2005 11:41 am
Мнения: 1680
Мнение 
Вземи дръпни едно MikroC, там има работещи драйвери - така ще разбереш дали е дисплея или на тебе ти е рано още да пише драйвери.


Чет Юли 08, 2010 11:30 am
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение 
Можеш ли да пуснеш една снимка на дисплея да видиме на кое викаш горе и на кое долу.


Чет Юли 08, 2010 4:37 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран
Аватар

Регистриран на: Съб Фев 05, 2005 10:58 pm
Мнения: 284
Местоположение: Varna
Мнение 
Обърна ли внимание как са разположени изводите, че имаше едни странни модели дето първите 2 извода са 15-ти и 16-ти, а после започваха от 1 до 14. Да не е такъв модел, че няма да тръгне колкото и да го мъчиш. Мисля, че такива бяха с буква "В" накрая и изводите им са от долу? Виж да не е там проблема.

_________________
Господ прощава, тока не. А глада е по силен от тока !


Пет Юли 09, 2010 11:02 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 21 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни