реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> LCD128x64, Глюки чтения
zorromen
сообщение Dec 15 2006, 15:41
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Прошу помочь..проблема чтения из памяти экрана массива байтов...это нада для оптимизации...так вот первый байт верный, а все остальные идут через один..т.есть в экране после чтения не +1 а +2 адресса...Дайте рабочий код чтения байта из экрана..даю свой...

unsigned char LCD_Read_Byte(void)
{
unsigned char data;
LCD_WaitBusy();
RS=1;
RW=1;
DATADDR=0x00;
DATAOUT=0x00;
//delay_us(5);//5
E=1;
delay_us(3);//4
E=0;
delay_us(5);//5
E=1;
delay_us(3);//3
E=0;
data=DATAIN;
DATADDR=0xff;
return data;
}
Go to the top of the page
 
+Quote Post
Jury093
сообщение Dec 15 2006, 16:31
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Я в свое время ковырялся с 122x32 и 128x64. Там при чтение из памяти дисплея есть тонкость:
"One dummy read is necessary right after the address setting."..
Вероятно где-то тут "собака порылась". В смысле, неправильный алгоритм считывания.
Go to the top of the page
 
+Quote Post
zorromen
сообщение Dec 15 2006, 17:06
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Да дастала она меня эта сабака....пара её съесть)...дайте рабочую весию чтения...
Go to the top of the page
 
+Quote Post
vooon
сообщение Dec 15 2006, 17:33
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 27-06-06
Из: Msk
Пользователь №: 18 401



Мне кажется, что ошибка здесь:
Код
    E=1;
    delay_us(3);//4
    E=0;
    delay_us(5);//5
    E=1;
    delay_us(3);//3
    E=0;
    data=DATAIN;


Ведь указатель смещается при каждом стробе.
И чтение должно быть во время 1.
Код
    E=1;
    delay_us(3);
    data=DATAIN;
    E=0;
Go to the top of the page
 
+Quote Post
zorromen
сообщение Dec 15 2006, 18:37
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Шото несильно помогло...так ведь верное значение должно выводиться после второго строба...
Go to the top of the page
 
+Quote Post
=GM=
сообщение Dec 15 2006, 19:28
Сообщение #6


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(zorromen @ Dec 15 2006, 15:37) *
Шото несильно помогло...так ведь верное значение должно выводиться после второго строба...

Вы даёте два импульса Е, по-моему, надо один. Фиктивное чтение должно выполняться только один раз после установки начального адреса.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
bodja74
сообщение Dec 15 2006, 19:38
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



А шо у нас здэсь LCD_WaitBusy(); ?
Go to the top of the page
 
+Quote Post
=GM=
сообщение Dec 15 2006, 20:18
Сообщение #8


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Кстати, операторы
DATADDR=0x00;

DATAOUT=0x00;

DATADDR=0xff;

не работают, т.к. для них надо установить RW=0 и подрыгать Е.

Цитата(zorromen @ Dec 15 2006, 12:41) *
Прошу помочь..проблема чтения из памяти экрана массива байтов...это надо для оптимизации...так вот первый байт верный, а все остальные идут через один..т.есть в экране после чтения не +1 а +2 адресса...Дайте рабочий код чтения байта из экрана..даю свой...

unsigned char LCD_Read_Byte(void)
{
unsigned char data;
LCD_WaitBusy();
RS=1;
RW=1;
DATADDR=0x00;
DATAOUT=0x00;
E=1; delay_us(3);//4
E=0; delay_us(5);//5
E=1; delay_us(3);//3
E=0;
data=DATAIN;
DATADDR=0xff;
return data;
}


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
zorromen
сообщение Dec 15 2006, 21:05
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



void LCD_WaitBusy(void)
{
unsigned char data;
RW=1;
RS=0;
DATADDR=0;
do
{
E=1;
#asm
nop
nop
nop
nop
#endasm
data=DATAIN;
}
while (data>>7);
E=0;
}

Я непонял что значит
""""""
Кстати, операторы
DATADDR=0x00;

DATAOUT=0x00;

DATADDR=0xff;

не работают, т.к. для них надо установить RW=0 и подрыгать Е.
"""""""""
Можна подробнее или пример?
Go to the top of the page
 
+Quote Post
bodja74
сообщение Dec 15 2006, 21:51
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Может и не так актуально,но все таки стоит сначала выставлять порт на чтение DDR=0 а потом сигналы на чтение.

Читаться должно на первом стробе (если считать что строб=1) при Е=1 ,естественно немного подождав сигнал после перехода Е с 0 на 1.
Go to the top of the page
 
+Quote Post
zorromen
сообщение Dec 16 2006, 08:44
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147



Актуальность учел...с делал я её видно и правда два строба надо тока после установки адресса...а далее читаю одним стробом...

unsigned char LCD_Read_Byte_E(void)
{
unsigned char data;
LCD_WaitBusy();
DATADDR=0x00;
DATAOUT=0x00;
RS=1;
RW=1;
E=1;
delay_us(1);
E=0;
data=DATAIN;
DATADDR=0xff;
return data;
}
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01443 секунд с 7
ELECTRONIX ©2004-2016