роботы робототехника микроконтроллеры


 Страниц (2): [1] 2 »   

> Без описания
FranzSib Post Id


Лейтенант


Сообщений всего: 23
Дата рег-ции: Сент. 2011  



Кое как заставил его инициализироваться. После появления положенной полоски из кубиков, после так называемой инициализации, экран затирается, но тускло видно как горят все кубики экрана. Как эту заразу заставить работать уже не знаю. Висит по 4х битной схеме на порте D. RS-D0, E-D1, E2 (Для больших дисплеев типа Wh4004) -D3, Ноги 4-7 висят соответственно на пинах D3-D6.

CODE:

/* * * * * * * * * * *
* ИНИЦИАЛИЗАЦИЯ LCD *
* * * * * * * * * * */
void LCD_Init (void)
{
_delay_ms(30);

LCD_Command(0b0010,0b0010);
LCD_Command(0b1100,0b0000);

_delay_ms(40);

LCD_Command(0b0000,0b1110);//0b1100);

_delay_ms(40);

LCD_Command(0b0000,0b0001);

_delay_ms(2);

LCD_Command(0b0000,0b0110);

_delay_ms(10);
}

/* * * * * * * * * * * * *
* ПЕРЕДАЧА КОМАНД В LCD *
* * * * * * * * * * * * */

void LCD_Command (unsigned char Command1,unsigned char Command2)
{
asm("cli");
unsigned char Temp;
unsigned char RS = 0b11111110; //&
unsigned char E0 = 0b11111101; //&
unsigned char E1 = 0b00000010; //|

/*Передача первой тетрады данных*/
PORTB &= 0b10000000 | E1 & RS;
_delay_ms(1);
Temp = (Command1 << 3) & 0b01111000;
PORTB |= Temp;
_delay_ms(1);
PORTB &= E0;
_delay_ms(1);

/*Передача второй тетрады данных*/
PORTB &= 0b10000000 | E1 & RS;
_delay_ms(1);
Temp = (Command2 << 3) & 0b01111000;
PORTB |= Temp;
_delay_ms(1);
PORTB &= E0;
_delay_ms(1);

/*Передача второй тетрады данных
PORTB &= 0b10000000;
Temp = (Command >> 1) & 0b01111000 | E1 & RS;
PORTB |= Temp;
_delay_ms(1);
PORTB &= E0;

_delay_ms(1);*/
asm("sei");
}


/* * * * * * * * * * * * *
* ПЕРЕДАЧА ДАННЫХ В LCD *
* * * * * * * * * * * * */

void LCD_Data (unsigned char Data)
{
asm("cli");
unsigned char Temp;
unsigned char RS = 0b11111111; //&
unsigned char E0 = 0b11111101; //&
unsigned char E1 = 0b00000010; //|

/*Передача первой тетрады данных*/
PORTB &= 0b10000000;
Temp = (Data << 3) & 0b01111000 | E1 & RS;
PORTB |= Temp;
_delay_ms(1);
PORTB &= E0;

_delay_ms(1);

/*Передача второй тетрады данных*/
PORTB &= 0b10000000;
Temp = (Data >> 1) & 0b01111000 | E1 & RS;
PORTB |= Temp;
_delay_ms(1);
PORTB &= E0;

_delay_ms(1);
asm("sei");
}

 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



http://www.gaw.ru/html.cgi/txt/l...char/WH2002L.htm
http://www.gaw.ru/html.cgi/txt/l...d44780/start.htm
 
 Top
FranzSib Post Id


Лейтенант


Сообщений всего: 23
Дата рег-ции: Сент. 2011  





Выходы все прозванивал, подключено всё правильно. Программно вроде также всё. Не понимаю вот, может у кого пример на си есть человеческий.
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



увеличте для начала все задержки раза в 2 - 3 ...
если не заработает - можно и дальше смотреть ...
 
 Top
FranzSib Post Id


Лейтенант


Сообщений всего: 23
Дата рег-ции: Сент. 2011  



nest пишет:
увеличте для начала все задержки раза в 2 - 3 ...
если не заработает - можно и дальше смотреть ...

Большие задержки ставил, результата ноль, единственное что происходит как надо, это первоначальный запуск дисплея с чёрной линией сверху. Возможно у меня не хватает резистора чтобы доконца поднять контрастность всего дисплея, но после инициализации такой вид (местами тускловатый), что почернели все знакоместа, и если бы контраста хватало полностью, то экран был бы полностью чёрный. Ну а когда горит только тестовая полоса сверху экрана, то всё насыщенно чёрненькое, контраста хватает.

(Отредактировано автором: 03 Сентября, 2011 - 01:06:51)

 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



FranzSib пишет:
когда горит только тестовая полоса сверху экрана
это говорит о том, что модуль проинициализирован правильно. Вы что на экран то выводите? в вашем приведённом коде ничего на экран не выводится, только инициализация.
 
 Top
FranzSib Post Id


Лейтенант


Сообщений всего: 23
Дата рег-ции: Сент. 2011  



nest пишет:
FranzSib пишет:
когда горит только тестовая полоса сверху экрана
это говорит о том, что модуль проинициализирован правильно. Вы что на экран то выводите? в вашем приведённом коде ничего на экран не выводится, только инициализация.


Ну он хотябы обнулялся бы, а то все знакоместа горят


И кстати говоря данная полоса загорается только даже при подключении питания без шины передачи данных.

Запитываю свой девайс и питание заходит в экран, соответственно загорается подсветка и хорошо контрастно первая строчка дисплея. Сразу скажу все ножки шлейфов обзванивал, всё подключено верно без разрывов в том числе и к девайсу. При попытке так называемой инициализации, либо ничего не происходит, либо контраст тускнеет и загоряются чёрным все знакоместа.

И собственно следом вопрос, имеет ли принципеальное значение на какой порт посажен экран и на какие ножки. К примеру у меня экран посажен на порт Б следующим образом:

PB0 - RS
PB1 - E
PB2 - E2 (Для больших дисплеев типа Winstar WH4004, в данный момент не используется)
PB3 - Линия № 4 Дисплея
PB4 - Линия № 5 Дисплея
PB5 - Линия № 6 Дисплея
PB6 - Линия № 7 Дисплея
PB7 - Здесь висит звуковая пищалка которая в проге пикает при нажатии клавиш.

Может на этом порте нужно чтото отключить (какойто режим, чтото наподобие JTAG для порта С), который мешает работать ножкам?

(Отредактировано автором: 03 Сентября, 2011 - 13:35:04)

 
 Top
FranzSib Post Id


Лейтенант


Сообщений всего: 23
Дата рег-ции: Сент. 2011  



Даже если я и пинаю символы в экран ноль эмоций.
Скачать файл: LCD_WH2002L.c
Скачан раз: 275
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



FranzSib пишет:
И собственно следом вопрос, имеет ли принципеальное значение на какой порт посажен экран и на какие ножки.
нет. Но проверять правильно ли вы расставили ноги и соответствует ли они програмно - это уж на ваших плечах Улыбка Ковырять чужой код - это ...

у вас, кстати "/*Передача второй тетрады данных*/" два раза.

Откуда вы взяли этот код инициализации?
 
 Top
FranzSib Post Id


Лейтенант


Сообщений всего: 23
Дата рег-ции: Сент. 2011  



nest пишет:
FranzSib пишет:
И собственно следом вопрос, имеет ли принципеальное значение на какой порт посажен экран и на какие ножки.
нет. Но проверять правильно ли вы расставили ноги и соответствует ли они програмно - это уж на ваших плечах Улыбка Ковырять чужой код - это ...

у вас, кстати "/*Передача второй тетрады данных*/" два раза.

Откуда вы взяли этот код инициализации?


Саму LCD_Init я копал в даташите по микрушке дисплея, а функции запинывания данных в экран писал тоже сам, при проделывании отправки в AVR Studio всё вроде как надо работало.
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



А где, кстати, в вашей инициализации переход в 4-ёх битный режим?
 
 Top
FranzSib Post Id


Лейтенант


Сообщений всего: 23
Дата рег-ции: Сент. 2011  



nest пишет:
А где, кстати, в вашей инициализации переход в 4-ёх битный режим?

Я тоже об этом думал но в даташите об этом умолчино в примере инициализации.
(Добавление)
Добавил соответствующую команду два раза в начале, но результаты теже:

CODE:

/* * * * * * * * * * *
* ИНИЦИАЛИЗАЦИЯ LCD *
* * * * * * * * * * */
void LCD_Init (void)
{
Pause(100);
LCD_Command(0b00101000); /*Число строчек, 4 бита, 5х8*/
Pause(50);
LCD_Command(0b00101000); /*Число строчек, 4 бита, 5х8*/
LCD_Command(0b00100000); /*Число строк и включение дисплея*/
LCD_Command(0b00100000);
LCD_Command(0b11000000);
Pause(50);
LCD_Command(0b00000000); /*Включение и курсоры*/
LCD_Command(0b11000000);
Pause(50);
LCD_Command(0b00000000); /*Очистка дисплея*/
LCD_Command(0b00010000);
Pause(50);
LCD_Command(0b00000000); /*Смещение курсора и экрана*/
LCD_Command(0b01100000);
}
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



FranzSib пишет:
Я тоже об этом думал но в даташите об этом умолчино в примере инициализации.
ничего подобного, в даташите на контроллер дисплея это описано.

что значит тут 4 бита? ( *Число строчек, 4 бита, 5х8*)

вам нужно после включения сообщить контроллеру дисплея, что вы с ним хотите общаться по 4-ёх битному каналу. для этого САМОЕ ПЕРВОЕ - три раза отправить в дисплей число 0b00000011 :

CODE:
/* * * * * * * * * * *
* ИНИЦИАЛИЗАЦИЯ LCD *
* * * * * * * * * * */
void LCD_Init (void)
{
_delay_ms(30);
LCD_Command(0b00000011);
_delay_ms(30);
LCD_Command(0b00000011);
_delay_ms(30);
LCD_Command(0b00000011);
_delay_ms(30);
...........................


Цитата из старых архивов:
Цитата:
Магические числа 3(перевод в 8-биный режим), 3(перевод в 8-биный режим), 3(перевод в 8-биный режим), 2(перевод в 4-биный режим).
Абисняю:
Обозначим эти команды как a, b, c, d

Допустим, дисплей был в 8-битном режиме. Тогда:
команда a - не влияет на работу, он и так в 8-битном режиме
команда b - то же самое
команда c - то же самое
команда d - воспринимается как 8-битная команда и переводит в 4-битный режим.

Допустим, дисплей был в 4-битном режиме и ждал команду. Тогда:
команда a - воспринимается как старшая тетрада команды перевода в 8-битный режим
команда b - воспринимается как младшая тетрада команды перевода в 8-битный режим, дисплей переходит в 8-битный режим
команда c - не влияет на работу, он и так в 8-битном режиме
команда d - воспринимается как 8-битная команда и переводит в 4-битный режим.

Теперь допустим, дисплей был в 4-битном режиме и уже получил первую тетраду команды когда проц сбросили. Тогда:
команда a - воспринимается как младшая тетрада предыдущей команды. Да и ... с ней, все равно инитим дисплей.
команда b - воспринимается как старшая тетрада команды перевода в 8-битный режим
команда c - воспринимается как младшая тетрада команды перевода в 8-битный режим, дисплей переходит в 8-битный режим
команда d - воспринимается как 8-битная команда и переводит в 4-битный режим.

 
 Top
FranzSib Post Id


Лейтенант


Сообщений всего: 23
Дата рег-ции: Сент. 2011  



Спасибо большое
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



заработало?
 
 Top
Страниц (2): [1] 2 »
« Микроконтроллеры »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru