HD44780 2x16, AC = 0x48

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
    Привет, All!

    Hарод, с такой проблемой столкнулся:
    В сабжевом ЖКИ пробую писать символы в определенные знакоместа. Загружаю в
AC значения от 0х40 до 0х47 - все нормально, вывод символов работает (в те
знакоместа, в которые задумывалось :). Пробую выставить AC в 0х48-0х4F, затем
пытаюсь вывести символ - хрен! Т.е. при контроле готовности к приему символа
ЖКИ, он постоянно отдает 01001000 (если AC непосредственно перед выводом
символа был выставлен в 0х48). Проходят десятки миллисекунд, секунды, десятки
секунд, а флаг готовности все сброшен!
    Эту хрень я заметил при отладке программы в VMlab. Ладненько, думаю,
наверное это глюки эмулятора. В темпе паяю макет - на "железном" ЖКИ все то же
самое!

    В общем, был бы очень благодарен за объяснения, где я был не прав.



    ЗЫ: Hа эмуляторе такую же хрень заметил и при выводе на 8-15 знакоместа в
первой строке. Hа "железе" не проверял.
    ЗЗЫ: При автоинкременте AC контроллером ЖКИ - все нормально.
    ЗЗЗЫ: Меня терзают смутные подозрения, что причина кроется где то между
двумя контроллерами ЖКИ. :)

                                                С уважением, Андрей АКА Хомич,
                                                                    АКА UR3LTG.
... аше дело пpавое, мы поедим. Вpаг бyдет pаспит!

HD44780 2x16, AC = 0x48
    Привет, All!

 AS>     В сабжевом ЖКИ пробую писать символы в определенные знакоместа.
    Hарод, ну неужели никто с такой хренью не сталкивался?! Или мой вопрос из
разряда элементарных, всем известных истин? В таком случае, прошу пихнуть мой
взор в нужном направлении.
    Или может быть моя попытка работы с ЖКИ как с обычной DOS-овской консолью в
корне неправильна?



                                                С уважением, Андрей АКА Хомич,
                                                                    АКА UR3LTG.
... Т.В.. - на братских могилах не ставят плюсов!

Re: HD44780 2x16, AC = 0x48
AS>>     В сабжевом ЖКИ пробую писать символы в определенные знакоместа.
AS>    Hарод, ну неужели никто с такой хренью не сталкивался?! Или мой
вопрос из
AS> разряда элементарных, всем известных истин? В таком случае, прошу
пихнуть мой
AS> взор в нужном направлении.
AS>    Или может быть моя попытка работы с ЖКИ как с обычной DOS-
овской консолью в
AS> корне неправильна?

А ты вообще не жди флажка готовности ЖКИ - работай чисто по таймингу -
сделай небольшую задержку после выставления очередного символа (из
даташитов можешь ее подсмотреть - я просто не помню).

--
Rifkat < Team /Grave\ >
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

HD44780 2x16, AC = 0x48

Hi Andrey,

Thu Jun 15 2006 11:53, Andrey Samarin wrote to All:

 AS>     Привет, All!

 AS>>     В сабжевом ЖКИ пробую писать символы в определенные знакоместа.

 AS>     Hарод, ну неужели никто с такой хренью не сталкивался?! Или мой
 AS> вопрос из разряда элементарных, всем известных истин? В таком случае,
 AS> прошу пихнуть мой взор в нужном направлении.
Флаг готовности не проверяется ваще никогда.
Сотни четыре 16*2 и 20*4, твоих проблем никогда не было.
Длинна шлейфа милимеров 150-250.
....

void wait(unsigned int ticks)
{
  while(--ticks);
}
void lcd_pulse(void)
{
  lcd_set_e();
  wait(5);
  lcd_clear_e();
  wait(30);
}
void lcd_long_pulse(void)
{
  lcd_set_e();
  wait(14);
  lcd_clear_e();
  wait(30);
}
void lcd_send(BYTE data)
{
  lcd_data = data;  
  lcd_pulse();
}
void lcd_long_send(BYTE data)
{
  lcd_data = data;  
  lcd_long_pulse();
}
void lcd_wait(void)
{
  wait(2500);
}

void lcd_init( void )
{
  // set lcd pins to write
  lcd_drs = 1;
  lcd_drw = 1;
  lcd_de = 1;
  lcd_ddir = 0xff;    
  
  lcd_clear_rs();     // instruction mode
  lcd_clear_rw();     // write
  wait(10000); // should be at lest 15mS

  //Init (set bus width)
  lcd_send(0x38);        // function set: DL = 1  N = 1  F=0
  wait(5000); // should be >4.1mS
  lcd_send(0x38);        
  wait(200); // should be >100uS
  lcd_send(0x38);        
  lcd_wait();
  
  lcd_send(8+4);        // turn on display (D=1 C,B = 0)
  lcd_wait();
 
  lcd_send(0x06);        // I/D =1 (incremental)
  lcd_wait();
}

void gotoz(BYTE z)
{
  lcd_clear_rs();
  lcd_clear_rw();
  lcd_long_send(z | 0x80);
}

void put_char(BYTE c)
{
  lcd_clear_rw();
  lcd_set_rs();
  lcd_send(c);
}


const char str1[] = "in reverse order";
const char str2[] = "my second string";

void lcd_refresh(void)
{
 char i;
 while(1)
 {
  for(i= 0; i <= 15;i++)
  {// выводим в обратном порядке
    gotoz(15-i);
    put_char(str1[i]);
  }
  for(i= 0; i <= 15;i++)
  {
    gotoz(i+0x40);
    put_char(str2[i]);
  }
 }
}

void main()
{
 lcd_init();
 lcd_refresh();
}
...

 AS>     Или может быть моя попытка работы с ЖКИ как с обычной DOS-овской
 AS> консолью в корне неправильна?

Приведенный выше код был написан по приколу,
я делаю другим путем.

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

WBR, Michael.


HD44780 2x16, AC = 0x48
    Привет, Michael!

15 июня 2006 22:02, Michael Zaichenko писал Andrey Samarin:

 MZ> Флаг готовности не проверяется ваще никогда.
 MZ> Сотни четыре 16*2 и 20*4, твоих проблем никогда не было.
 MZ> Длинна шлейфа милимеров 150-250.
 MZ> ....
    Спасибо, но с флагом готовности оно как то надежнее. А портов пока хватает.
Если что - буду иметь ввиду.

    За код - отдельное спасибо.



                                                С уважением, Андрей АКА Хомич,
                                                                    АКА UR3LTG.
... ... Водка - это квадовое пиво...

HD44780 2x16, AC = 0x48
Здpавствуй Andrey!
Thursday June 15 2006 10:53, Andrey Samarin wrote to All:

 AS>>     В сабжевом ЖКИ пробую писать символы в определенные знакоместа.

 AS>     Hарод, ну неужели никто с такой хренью не сталкивался?! Или мой вопрос
 AS> из разряда элементарных, всем известных истин? В таком случае, прошу
 AS> пихнуть мой взор в нужном направлении.

Разбеpись с адpесацией в ЖКИ.

Пеpвая стpока с 0 до 39 пpичем отобpажается только окно из 16 символов.
Hеобходимо задавать начальный адpес окна отобpажения. Окно можно сдвигать.
Втоpя стpока с 64 до 103

Я делаю так:
Инициализация ЖКИ т.е. Задание pежимов интеpфейса и куpсоpа (один pаз в начале
пpогpаммы).

Затем по меpе необходимости вывод данных на экpан по такому алгоpитму:
Установить адpес ЖКИ
Записать в ЖКИ начальный адpес 1 стpоки
Записать даннные в ЖКИ .....

Установить адpес ЖКИ
Записать в ЖКИ начальный адpес 2 стpоки
Записать данные в ЖКИ .... (сколько надо или до конца стpоки)

Hекотоpые pекомендуют пpи pаботе с ЖКИ использовать таймаут. Hеудобно.
Я опpашиваю флаг готовности от ЖКИ. Работает стабильнее.

Если хочешь, то вышлю на твой электpонный адpес фpагмент pабочей пpогpаммы с
комментаpиями на pусском. Hаписано под Algorritm Builderom 5.00.
AtMega8 + DV1621.


HD44780 2x16, AC = 0x48

   Alexandr, ты ещё здесь сидишь?


Пятница Июнь 16 2006 00:02, Alexandr Zhurov wrote to Andrey Samarin:

[...]

 AZ> Hекотоpые pекомендуют пpи pаботе с ЖКИ использовать таймаут. Hеудобно.

 Зато высвобождает одну ножку контроллера. Бывает критично.

 AZ> Я опpашиваю флаг готовности от ЖКИ. Работает стабильнее.

 У меня в газоанализаторах такой ЖКИ работал по таймаутам. Стабильно.


                                                   Георгий


HD44780 2x16, AC = 0x48
    Привет, Alexandr!

16 июня 2006 01:02, Alexandr Zhurov писал Andrey Samarin:

 AZ> Разбеpись с адpесацией в ЖКИ.
    С адресацией - все нормально. :)


 /цитата сокращена/

 AZ> Если хочешь, то вышлю на твой электpонный адpес фpагмент pабочей
 AZ> пpогpаммы с комментаpиями на pусском. Hаписано под Algorritm Builderom
 AZ> 5.00. AtMega8 + DV1621.
    Спасибо, но я работаю под WinAVR. Честно говоря, AB даже и не запускал
никогда.



                                                С уважением, Андрей АКА Хомич,
                                                                    АКА UR3LTG.
... За пpекpасных дам и дpyгих мифических пеpсонажей!

HD44780 2x16, AC = 0x48

   Andrey, ты ещё здесь сидишь?


Четверг Июнь 15 2006 10:53, Andrey Samarin wrote to All:

 AS>>     В сабжевом ЖКИ пробую писать символы в определенные
 AS>> знакоместа.
 AS>     Hарод, ну неужели никто с такой хренью не сталкивался?!

 С аналогичным дисплеем работал. С "такой хренью" не сталкивался.


                                                   Георгий


HD44780 2x16, AC = 0x48 - разобрался
    Привет, All!

15 июня 2006 11:53, Andrey Samarin писал All:

 AS>>     В сабжевом ЖКИ пробую писать символы в определенные
 AS>> знакоместа.
 AS>     Hарод, ну неужели никто с такой хренью не сталкивался?! Или мой
 AS> вопрос из разряда элементарных, всем известных истин? В таком случае,
 AS> прошу пихнуть мой взор в нужном направлении.
 AS>     Или может быть моя попытка работы с ЖКИ как с обычной DOS-овской
 AS> консолью в корне неправильна?


    Ребята, всем спасибо за ответы, очень благодарен.
    В общем, я использовал для работы с сабжем стороннюю библиотеку AVRlib
(http://hubbard.engr.scu.edu/embedded/avr/avrlib /).
    Кое что конечно же выкинул, но нужные мне функции оставил.
    Собственно, проблема оказалась в том, что автор этой библиотеки
предпочитает не трогать линию RW во время однотипных операций (чтения или
записи). И где то в алгоритме моей программы сбилалась очередность чтения
младшей и старшей половинки байта из ЖКИ. И когда процедура ожидания сброса
флага занятости читала из сабжа 0х8 и выше, то справедливо считала что флаг
установлен. %)
    Все полечилось дерганием RW перед операцией чтения. Теперь - никаких
пробем.

    Еще раз всем спасибо!


                                                С уважением, Андрей АКА Хомич,
                                                                    АКА UR3LTG.
... За пpекpасных дам и дpyгих мифических пеpсонажей!

Re: HD44780 2x16, AC = 0x48 - разобрался
Hello, Andrey!
You wrote to All on Tue, 20 Jun 2006 13:05:20 +0400:

 AS>     Привет, All!

 AS> 15 июня 2006 11:53, Andrey Samarin писал All:

 AS>>>     В сабжевом ЖКИ пробую писать символы в определенные
 AS>>> знакоместа.
 AS>>     Hарод, ну неужели никто с такой хренью не сталкивался?! Или мой
 AS>> вопрос из разряда элементарных, всем известных истин? В таком случае,
 AS>> прошу пихнуть мой взор в нужном направлении.
 AS>>     Или может быть моя попытка работы с ЖКИ как с обычной DOS-овской
 AS>> консолью в корне неправильна?

 AS>     Ребята, всем спасибо за ответы, очень благодарен.
 AS>     В общем, я использовал для работы с сабжем стороннюю библиотеку
 AS> AVRlib (http://hubbard.engr.scu.edu/embedded/avr/avrlib /).
 AS>     Кое что конечно же выкинул, но нужные мне функции оставил.
 AS>     Собственно, проблема оказалась в том, что автор этой библиотеки
 AS> предпочитает не трогать линию RW во время однотипных операций (чтения
 AS> или записи). И где то в алгоритме моей программы сбилалась очередность
 AS> чтения младшей и старшей половинки байта из ЖКИ. И когда процедура
 AS> ожидания сброса флага занятости читала из сабжа 0х8 и выше, то
 AS> справедливо считала что флаг установлен. %)
 AS>     Все полечилось дерганием RW перед операцией чтения. Теперь -
 AS> никаких пробем.

Странно вообще. Я обычно RW индикатора на W мертво сажаю и не использую
лишний пин контроллера. Готовность конечно не проверяется, все по времени,
но еще ниразу небылопролем в 4-х битном режиме.


With best regards,
Alexandr Torres.  E-mail: snipped-for-privacy@yahoo.com
[ Бомжей любить - не эхи модерить! ]



HD44780 2x16, AC = 0x48 - разобрался

   Andrey, ты ещё здесь сидишь?


Вторник Июнь 20 2006 13:05, Andrey Samarin wrote to All:

 AS>     Собственно, проблема оказалась в том, что автор этой библиотеки
 AS> предпочитает не трогать линию RW во время однотипных операций (чтения
 AS> или записи). И где то в алгоритме моей программы сбилалась очередность
 AS> чтения младшей и старшей половинки байта из ЖКИ.

 Вот и ищи, где сбилась очерёдность.

 AS> И когда процедура ожидания сброса флага занятости читала из сабжа 0х8
 AS> и выше, то справедливо считала что флаг установлен. %)
 AS>     Все полечилось дерганием RW перед операцией чтения.

 Это - лечение симптомов, а не болезни.


                                                   Георгий


Site Timeline