LCD DV16236 - глюк, то ли в коде, то ли в партии железок..
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено LordN 03 июня 2005 г. 20:43


проект на МК PIC16F877-20I/P.

Купил новую партию дисплеев DV16236(буквы не помню, если это важно - завтра напишу)
и одновременно поменял тактовую с 4.0МГц на 20МГц. и вот наткнулся на такой баг -
есть функция LcdRdAdr(), возвращает адрес курсора (позицию), в даташите
(см.по ссылке:
Таблица 4. Операция чтения для 4-х разрядной шины
и
Таблица 6. Значения временных характеристик. Операция чтения)
http://asan.gaw.ru/html.cgi/txt/lcd/chips/hd44780/start.htm
все расписано, чтение/запись, тайм-ауты. Лупой проглядел все, где надо поправил,
добавил NOP-ов, а корректно эта хрень срабатывает через раз... ]
Увеличил тайм-ауты в разы!!! если на 4МГц функция выполнялась за 20мкс, то теперь
аж 100мкс, но этот глюк вроде пропал...


// Так было
unsigned char LcdRdAdr(void)
{
unsigned char Adr;
LCD_DIRECT = 0b11110001;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
asm("nop");
Adr = LCD_PORT & 0xf0;
LCD_EN = 0;
asm("nop");
LCD_EN = 1;
asm("nop");
Adr |= ((LCD_PORT >> 4) & 0x0f);
LCD_EN = 0;
return Adr;
}

// теперь после почти каждой стоки пришлось вставить

count = 10;
while(count--)asm("nop");

Проверил из старой партии дисп. - все прет без глюков, и даже на старом коде. На
4МГц эти диспы вроде пашут без траблов... то ли я дурак, то ли хз че делать.

кто-нить с подобным сталкивался?

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru