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

 
 
> HD44780
_Макс
сообщение Jun 8 2010, 22:07
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



После подачи трех посылок 0x30 в 8ми битном режиме по четырем проводам, без проверки BF с выдержкой пауз, BF=1. Что делать? Программа работает правильно, проверено пошагово в отладчике + мультиметр, к сожалению логического анализатора нет.

Сообщение отредактировал _Макс - Jun 8 2010, 22:08
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 25)
Genadi Zawidowsk...
сообщение Jun 9 2010, 07:30
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Код
static void
ws1602_wrcmd_nowait(
    uint_fast8_t v)
{
    enum { as = 0 };
    _delay_ms(20);        // 4.1 ms in examples from ATMEL

    ws1602_to_write(as);

    ws1602_send4_high(v);
    ws1602_pulse_strobe();

    _delay_ms(20);        // 4.1 ms in examples from ATMEL

    ws1602_send4_low(v);
    ws1602_pulse_strobe();

    ws1602_to_read(0);    // as=0: status register will be read - initial state
}


...
    // switch interface to 4-bit wide mode
    ws1602_wrcmd_nowait(0x33);
    ws1602_wrcmd_nowait(0x32);

    ws1602_wrcmd(0x28);        // two lines

    ws1602_wrcmd(0x0c);       // ВКЛ.LCD , КУРСОР ОТКЛ., МИГАНИЕ КУРС. ОТКЛ.
    ws1602_wrcmd(0x06);        // автомат перемещение курсора вправо



Перевожу: в Вашем случае надо переслать три знаяения 0x30 и одно 0x20.
Да, для проверки BF надо читать два ниббла (старшие 4 бита, затем младшие). Потом анализировать.

Сообщение отредактировал Genadi Zawidowski - Jun 9 2010, 07:32
Go to the top of the page
 
+Quote Post
_Макс
сообщение Jun 9 2010, 09:03
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Цитата(Genadi Zawidowski @ Jun 9 2010, 10:30) *
Перевожу: в Вашем случае надо переслать три значения 0x30 и одно 0x20.
Да, для проверки BF надо читать два ниббла (старшие 4 бита, затем младшие). Потом анализировать.

Пишу под ARM свой драйвер, поэтому приведенный код не особо понятен.
Что значит два ниббла? В даташите говорится только про DB7 он и есть BF, предварительно нужно устанавливать RS=L, RW=H. И для записи 0x20 (четвертым шагом) нужно проверять BF, до этого шага у меня не доходит поскольку BF остается высоким.

Сообщение отредактировал _Макс - Jun 9 2010, 09:45
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jun 9 2010, 10:28
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



[attachment=44896:TC1_Jun_09_2010.zip]Два ниббла - означает, что чтение статуса по четырёхбитной шине возвращает 8 бтит регистра состояния за два приёма - старшие четыре бита и младшие. Кроме BF там ещё данные лежат.

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

Код моего проекта для ARM AT91SAM7Sxxx в аттачмете. Работа с дисплеем в файле hd44780.c

Сами представьте себе - идут чтения регистра статуса в 4-х битном режиме. Контроллер дисплея отдаёт по "половинкам". Первое чтение даёт старшую половину и BF. Проверяете и повторяете чтение - а контроллер отдаёт младшую половину - а Вы интерпретируете опть как статус!

Проверил вот такой вариант инициализации:

Код
    ws1602_io_initialize();


    _delay_ms(20);        /* 40 ms needed for Vcc = 2.7 V */
    _delay_ms(20);

    // switch interface to 4-bit wide mode
    ws1602_wrcmd_nowait(0x33);
    ws1602_wrcmd_nowait(0x33);
    //ws1602_wrcmd_nowait(0x32);

    _delay_ms(20);        // 4.1 ms in examples from ATMEL
    ws1602_wrcmd(0x20);

    ws1602_wrcmd(0x28);        // two lines

    ws1602_wrcmd(0x0c);       // ВКЛ.LCD , КУРСОР ОТКЛ., МИГАНИЕ КУРС. ОТКЛ.
    ws1602_wrcmd(0x06);        // автомат перемещение курсора вправо


Работает!

Сообщение отредактировал Genadi Zawidowski - Jun 9 2010, 11:17
Go to the top of the page
 
+Quote Post
_Макс
сообщение Jun 13 2010, 13:22
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Взял последовательность инициализации из даташита по дисплею:
Без BF 8-бит:
0x20
Без BF 4-бита:
0x2C
Ждем 1мс
0x0F
Ждем 1ms
0x01
Ждем 2ms
BF 4-бита:
/* Дальше не идет, проверка BF в четырех битном режиме отдает FF */
0x06
0x88 (устанавливаем курсор в надежде что-то увидеть)

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

Сообщение отредактировал _Макс - Jun 13 2010, 13:23
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jun 13 2010, 13:32
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



_Макс, выложите сюда Ваш даташит на контроллер. Очень интересно глянуть.
Комментарии к тому даташиту, что я выложил:
Выдача кодов 33 в нчале - гарантированно из любого предшествовавшего состояния и при любой шине (8 или 4) переводит в 8-ми битный режим. Далоее 20- перевод в 4 бита.
Из любого предшествовавшего состояния может произойти например при отладке... Вы же не всегда передёргтиваете питание контроллера?

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

Сообщение отредактировал Genadi Zawidowski - Jun 13 2010, 14:20
Go to the top of the page
 
+Quote Post
_Макс
сообщение Jun 13 2010, 13:51
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Спасибо, но я не могу выкладывать программу в публичный доступ, даже если она не работает) К тому же контроллер у меня ARM CM3, вряд ли у вас такой же.

Сообщение отредактировал _Макс - Jun 13 2010, 14:05
Прикрепленные файлы
Прикрепленный файл  WH2004A_YYK_CT.pdf ( 456.65 килобайт ) Кол-во скачиваний: 29
Прикрепленный файл  KS0066.pdf ( 528.54 килобайт ) Кол-во скачиваний: 29
 
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 13 2010, 14:04
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(_Макс @ Jun 13 2010, 15:51) *
Спасибо, но я не могу выкладывать программу в публичный доступ, даже если она не работает

Ой, а может тогда удалить эту тему, дабы режим секретности не нарушать? Тем более, что тема абсолютно "дежурная" и таких тем на этом форуме уже не менее сотни. Может поиском для начала воспользуетесь? Дабы не разводить гадание на кофейной гуще.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Макс
сообщение Jun 13 2010, 14:06
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Цитата(zltigo @ Jun 13 2010, 17:04) *
Ой, а может тогда удалить эту тему, дабы секретность не пострадала? Тем более, что тема абсолютно "дежурная" и таких тем на этом форуме уже не менее сотни. Может поиском для начала воспользуетесь? Дабы не разводить гадание на кофейной гуще.

Поиском пользовался, не помогло. Благодарю за понимание.

Сообщение отредактировал _Макс - Jun 13 2010, 14:06
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jun 13 2010, 14:13
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Что с питанием дисплея (3.3 или 5) - по даташтту ли?
Если секретно показать свою - что мешает взять рабочий код (например мой)?
Скорее всего у вас не перепрограммируется на вход шина. Или перепрограммируется всё, включая управляющие биты.
Что за такой поцессор СМ3? Полное имя не секретно?
Мне лично вмё равно, на каком процессоре - язык С вроде не отменяли...

Сообщение отредактировал Genadi Zawidowski - Jun 13 2010, 14:14
Go to the top of the page
 
+Quote Post
_Макс
сообщение Jun 13 2010, 14:34
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Цитата(Genadi Zawidowski @ Jun 13 2010, 17:13) *
Что с питанием дисплея (3.3 или 5) - по даташтту ли?
Если секретно показать свою - что мешает взять рабочий код (например мой)?
Скорее всего у вас не перепрограммируется на вход шина. Или перепрограммируется всё, включая управляющие биты.
Что за такой поцессор СМ3? Полное имя не секретно?
Мне лично вмё равно, на каком процессоре - язык С вроде не отменяли...

STM32, питание 5V. Для перепрограммирования на вход вызывается соответствующая функция, в IDR видны единички соответствующие определенным пинам, по мультиметру так и есть. Получается LCD не подтягивает ни одну линию от того 0xFF. Думаю уже может он мертв.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 13 2010, 14:35
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(_Макс @ Jun 13 2010, 16:06) *
Поиском пользовался, не помогло.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Макс
сообщение Jun 13 2010, 14:59
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Рискну. Исходники в приложении. Спасибо!

Сообщение отредактировал _Макс - Jun 13 2010, 15:00
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jun 13 2010, 15:00
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Да, насчёт чтения BF в четырёхбитном режиме в самсунговском файле на странице 19 есть рисунок 5. Там как раз нарисовано чтение регистра состояния за два приёма - по четыре бита.

Полное название STM32 c 5 вольт питанием можно?
Go to the top of the page
 
+Quote Post
_Макс
сообщение Jun 13 2010, 15:03
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Цитата(Genadi Zawidowski @ Jun 13 2010, 18:00) *
Да, насчёт чтения BF в четырёхбитном режиме в самсунговском файле на странице 19 есть рисунок 5. Там как раз нарисовано чтение регистра состояния за два приёма - по четыре бита.

Полное название STM32 c 5 вольт питанием можно?

Да, там в два приема при 4х битном режиме все читается. Исходники выложил, посмотрите пожалуйста.
STM32F107 питание у него 3.3V работает с открытым стоком на подтяжки к 5V. Порты five voltage tolerant.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jun 13 2010, 15:13
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Смотрю... Не уверен, что task.data очищается перед установкой в него битов, считанных из порта индикатора... Есть простой тест - закоротите D7 индикатора на землю - и посмотреите, дожидается ли в этом случае state machine нужного значения флага?
Go to the top of the page
 
+Quote Post
_Макс
сообщение Jun 13 2010, 15:43
Сообщение #17


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



task.data = 0; очищается при возврате из processTask() с CMD_RD.
Закоротил, получилось 0x77. Читается правильно, но ведь LCM должен коротить, а не я.
Go to the top of the page
 
+Quote Post
_Макс
сообщение Jun 13 2010, 16:58
Сообщение #18


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Нашел ошибку, данные читаютcя по фронту, а пишутся по спаду. Переделал processIO(), так еще проще получилось. Теперь читается всегда 0x00 и даже после записи нового значения AC командой 0x88 sad.gif я уж не говорю о том, что ничего не светиться.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jun 13 2010, 17:02
Сообщение #19


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(_Макс @ Jun 13 2010, 20:58) *
Нашел ошибку, данные читаютcя по фронту, а пишутся по спаду. Переделал processIO(), так еще проще получилось. Теперь читается всегда 0x00 и даже после записи нового значения AC командой 0x88 sad.gif я уж не говорю о том, что ничего не светиться.


Исходите из того, что к моменту строба на E данные (и W) уже жолжны стоять на шиyе. А при чтении - заранее ставите W в неактивное состояние, открываете (1-й) E и читаете после задержки на установление данных.

Состоение E по умолчанию - 0 (не активное) для любых операций.

Сообщение отредактировал Genadi Zawidowski - Jun 13 2010, 17:03
Go to the top of the page
 
+Quote Post
_Макс
сообщение Jun 13 2010, 17:52
Сообщение #20


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Цитата(Genadi Zawidowski @ Jun 13 2010, 20:02) *
Исходите из того, что к моменту строба на E данные (и W) уже жолжны стоять на шиyе. А при чтении - заранее ставите W в неактивное состояние, открываете (1-й) E и читаете после задержки на установление данных.

Состоение E по умолчанию - 0 (не активное) для любых операций.

Судя по даташиту данные для записи можно устанавливать после поднятия E но до спуска, не так ли? По умолчанию у меня Е низкое.

Сообщение отредактировал _Макс - Jun 13 2010, 17:52
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jun 13 2010, 19:34
Сообщение #21


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



В этом Вы правы... но я так не пробовал.

Есть вопрос - можете проверить работоспособность индикатора, подключённого к контроллеру, вне многозадачного ядра, что работает?

Просто с задержкой 0.1 секунды выдать 4-хбитные значения друг за другом и не проверять busy. Потом отлаживать.

Сообщение отредактировал Genadi Zawidowski - Jun 13 2010, 19:35
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 13 2010, 22:42
Сообщение #22


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(_Макс @ Jun 13 2010, 19:58) *
я уж не говорю о том, что ничего не светиться.
То есть при подаче питания на дисплей без запуска программы вы на нем ничего не наблюдаете? Тогда вам надо разбираться со входом напряжения контраста. После подачи напряжения и до инициализации вы должны наблюдать закрашенные знакоместа в первой строке.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Макс
сообщение Jun 14 2010, 08:31
Сообщение #23


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Цитата(Сергей Борщ @ Jun 14 2010, 01:42) *
То есть при подаче питания на дисплей без запуска программы вы на нем ничего не наблюдаете? Тогда вам надо разбираться со входом напряжения контраста. После подачи напряжения и до инициализации вы должны наблюдать закрашенные знакоместа в первой строке.

Правда? У меня только подсветка светится и чуть-чуть виднеются знакоместа как и в любом LCD. Правда ли что для LCD с расширенным диапазоном напряжение контраста должно быть отрицательным?
Но соль еще и в другом, как я уже писал, даже после присвоения командой 0x88 нового адреса, все равно AC-BF = 0x00 sad.gif значит таки не проходит инициализация полностью.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 14 2010, 09:47
Сообщение #24


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(_Макс @ Jun 14 2010, 11:31) *
Правда? У меня только подсветка светится и чуть-чуть виднеются знакоместа как и в любом LCD.
Зуб даю! biggrin.gif Добейтесь сочного свечения первой строки. Для этого достаточно трех выводов - питания, земли и Vo.
Цитата(_Макс @ Jun 14 2010, 11:31) *
Правда ли что для LCD с расширенным диапазоном напряжение контраста должно быть отрицательным?
Напряжение контраста измеряется отностительно положительного вывода питания. Его диапазон указан в даташите. Лет 10 назад, для дисплеев с расширенным диапазоном, оно было меньше -5в, поэтому при 5в питании контроллера относительно земляного вывода напряжение контраста получалось отрицательным. Каков его диапазон у современных дисплеев - не следил. При 3в питании контроллера напряжение контраста будет отрицательным относительно земли и для дисплеев с обычным диапазоном.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Макс
сообщение Jun 14 2010, 12:45
Сообщение #25


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Цитата(Сергей Борщ @ Jun 14 2010, 12:47) *
Зуб даю! biggrin.gif Добейтесь сочного свечения первой строки. Для этого достаточно трех выводов - питания, земли и Vo.Напряжение контраста измеряется отностительно положительного вывода питания. Его диапазон указан в даташите. Лет 10 назад, для дисплеев с расширенным диапазоном, оно было меньше -5в, поэтому при 5в питании контроллера относительно земляного вывода напряжение контраста получалось отрицательным. Каков его диапазон у современных дисплеев - не следил. При 3в питании контроллера напряжение контраста будет отрицательным относительно земли и для дисплеев с обычным диапазоном.

Вы гений! a14.gif Заработало! 08.gif
Действительно потенциометр контраста стоял в крайнем верхнем положении и от области видимости был очень далек.
Теперь проблема другая, при выводе символов в которых во младшей тетраде 7 либо F, BF_AC становится равным 0xAA. Как я понимаю дело в трех единичках, когда они под ряд стоят, но как это связано с контроллером или программной ума не приложу, ковыряю дальше.

Очень странно, переписал processIO() по тому как говорил Genadi Zawidowski и как написано на gaw.ru и все стало отображаться правильно. Выходит действительно, выводить данные на запись нужно перед стробом, в даташитах ошибка. Если кто выводил данные на запись перед спуском E, пожалуйста отзовитесь.

Сообщение отредактировал _Макс - Jun 14 2010, 11:55
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 14 2010, 13:16
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(_Макс @ Jun 14 2010, 14:45) *
Вы гений!

Ну а Вы тогда соответственно обманщик, когда утверждали, что поиском пользовались sad.gif. Ибо это ошибка номер раз sad.gif.
Цитата
Выходит действительно, выводить данные на запись нужно перед стробом, в даташитах ошибка.

Не надо. Удобнее всего при ногомахании данные и Enable Hi одновременно выставлять. Только дальше даташит читайте по поводу длительности этого строба и его зависимости от напряжения питания. Да и дальше, например, время после Enable Lo до снятия данных, времена соблюдать надо. Соблюдайте диаграммы, а не занимайтесь copy-paste из интернету и все заработает сразу и везде.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


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


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