Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> инициализация граф ЖКИ, проблема с опросом флагов готовности 
:(
    Опции темы
goodking
Дата 12.3.2010, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 15.10.2009

Репутация: нет
Всего: нет



Привет! Пробую инициализировать графический ЖКИ (t6963c), микроконтроллер silabs c8051F120, делаю все как указано в примере

Код


#include "c8051F120.h"

#define DATA P4

sbit WR=P2^0;

sbit RD=P2^1;

sbit CE=P2^2;

sbit CD=P2^3;

sbit RST=P2^4;

sbit FS=P2^5;

sbit RV=P2^6;

char GetStatusLCD(void);
void LcdInit (void);
void Send8LCD(unsigned char cmd, unsigned char bt);
void LcdInit(void);
void delay(unsigned int i);
int a;

void main (void)

{   WDTCN     = 0xDE;
    WDTCN     = 0xAD;
    SFRPAGE   = CONFIG_PAGE;

    P2MDOUT   = 0xFF;
    P4MDOUT   = 0xFF;
    XBR2      = 0x40;

    LcdInit();
    
   



while (1) {};
}


char GetStatusLCD(void)
{

 
char i;
P4MDOUT   = 0x00;
i=0;
CD=1;
WR=1;
CE=0;
RD=0;

for (a=0;a<2;a++);//Задержка

i=DATA;

WR=1;
RD=1;
CE=1;
CD=1;

for (a=0;a<2;a++);//Задержка
return i;
 P4MDOUT   = 0xFF;
}


void delay(unsigned int i)
     {
       while ( i--!=0);
     }



void Send8LCD(unsigned char cmd, unsigned char bt)
{
char i;

if (cmd)
CD=1;
else
CD=0; 

for (i=0;i<2;i++);

CE=0;
WR=0;
DATA=bt;

for (i=0;i<2;i++);

CE=1;
WR=1;
CD=1;
}



void LcdInit()
{
delay(1000);
RST=0;
delay(100);
RST=1;

Send8LCD(1,0x80);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);//graphic home
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0x42);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x28);//graphic ar
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0x43);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);//text home
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x17);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0x40);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x28);//text ar
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0x41);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x17);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0x24);

while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x24);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0xc0);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x25);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0xc0);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x2e);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0xc0);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0x9c);

}  

 почему -то не опрашиваются флаги готовности (GetStatusLCD()) , программа зависает уже на первом. Посоветуйте, в чем может быть проблема?? 
PM MAIL   Вверх
xvr
Дата 12.3.2010, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Для начала - строки
Код

return i;
 P4MDOUT   = 0xFF;
в GetStatusLCD переставь местами

PM MAIL   Вверх
goodking
Дата 12.3.2010, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 15.10.2009

Репутация: нет
Всего: нет



Цитата(xvr @ 12.3.2010,  15:00)
Для начала - строки
Код

return i;
 P4MDOUT   = 0xFF;
в GetStatusLCD переставь местами

Переставил, ничего не изменилось! Почему -то эти два бита вообще никогда не устанавливаются  smile 

Это сообщение отредактировал(а) goodking - 12.3.2010, 15:45
PM MAIL   Вверх
xvr
Дата 12.3.2010, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Переставь местами 
Код

CE=0;
RD=0;
там же.

Добавь явную настройку уровней управляющих сигналов LCD в начало Init

Не уверен, что твои задержки (на циклах) будут что то задерживать - компилятор их может выкинуть

В Send8LCD последовательность
Код

CE=0;
WR=0;
DATA=bt;
поменяй на
Код

DATA=bt;
WR=0;
CE=0;


Посмотри осцилографом, что вообще читается с LCD

PM MAIL   Вверх
goodking
Дата 13.3.2010, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 15.10.2009

Репутация: нет
Всего: нет



сделал все, как ты советовал, и еще, как увидел одном примере, перед опросом флагов на шину данных выставил сигнал 0xFF
Код

char GetStatusLCD(void)
{
char i;


DATA=0xff;
CD=1;
WR=1;
RD=0;
CE=0;




for (a=0;a<2;a++);//Задержка


i=DATA;

WR=1;
RD=1;
CE=1;
CD=1;

for (a=0;a<2;a++);//Задержка

return i;

}



теперь после инициализации на экране появляются всякие разные узоры   smile , линии и т.д. правильно ли это? 

Код

void LcdInit()
{
CE=1;
RST=1;
CD=1;
RD=1;
WR=1;
RST=0;
delay(10000);
RST=1;
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);//Text Home Address
Send8LCD(1,0x40);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x40);
while ((GetStatusLCD()&0x03)!=0x03);//Graphic Home Address
Send8LCD(1,0x42);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x40);
while ((GetStatusLCD()&0x03)!=0x03);//Text Area
Send8LCD(1,0x41);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x00);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(0,0x40);
while ((GetStatusLCD()&0x03)!=0x03);//Graphic Area
Send8LCD(1,0x43);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0x83);
while ((GetStatusLCD()&0x03)!=0x03);
Send8LCD(1,0x9f);
}  



Это сообщение отредактировал(а) goodking - 13.3.2010, 12:26
PM MAIL   Вверх
xvr
Дата 13.3.2010, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата

теперь после инициализации на экране появляются всякие разные узоры , линии и т.д. правильно ли это? 
Наверное правильно  smile 
PM MAIL   Вверх
goodking
Дата 15.3.2010, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 15.10.2009

Репутация: нет
Всего: нет



Но почему-то, когда пытаюсь вывести на экран какую-то надпись, экран снова полностью закрашивается smile   
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0505 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.