Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ЖКИ SD1602X
Форум разработчиков электроники ELECTRONIX.ru > Поставщики компонентов для электроники > Компоненты > Средства индикации
wingbladeZ
имеется эта радость. SD1602X фирмы SUNLIKE. из интерфейсов - только послеовательный, I2C.

Как ее правильно адресовать и инициализировать? (адрес на шине, команды)
делал по докам на контроллер NT7651, пока - 0 реакции. Тупо горит подсветка, экран пустой.

проверьте распиновку заодно(мб в ней косяк)
выводы подключал так:
1-земля
2-питальник
3-вроде контрастность, заземлил - сомневаюсь, мб это косяк
4-SDA
5-SCL
6-Enable - подал питание
7-ресет, ничего не подключал

все что может сказать про него производитель - во вложении (страничка бумаги, качеством близкой к туалетной. выводы и электрические характеристики)
Texnik
В своё время я тестировал их, вот исходничек на бейсике (BASCOM-AVR)

$regfile = "m8def.dat"
$crystal = 1000000

CONFIG SDA = PORTB.6
CONFIG SCL = PORTB.7
CONFIG I2CDELAY = 100

dim tmp as byte
dim sa as byte
dim n as byte
dim t as string * 1
dim ts as string * 16

'rem const sa = &b01110000 ' slave address
'rem const sa = &b01110100 ' slave address

declare sub WriteCData(dat as byte)
declare sub WriteData()

Init:
sa = &b01110100

DDRD = &b00001000
set PORTD.3
waitms 1
reset PORTD.3

tmp = &b00110110 '8,
call WriteCData(tmp)
tmp = &b00001111 'D=1 C=1 B=1
call WriteCData(tmp)

tmp = &b00110101 'M=1 SL=0 H=1
call WriteCData(tmp)
tmp = &b10010111 'VALCD
call WriteCData(tmp)
tmp = &b11000000 'VBLCD
call WriteCData(tmp)
tmp = &b00110100 'M=1 SL=0 H=0
call WriteCData(tmp)

Main:
ts = "{211}{196}{177}{182}{176}{178}{216}{213}{204}{194}{173}{206}{211}{173}{199}
{194}"
call WriteData()
tmp = &b10101000 ' locate (2,1)
call WriteCData(tmp)
' ts = "{1}{1}{1}{1}{1}{1}"
' call WriteData()
' ts = "{089}{240}{089}{091}{091}{089}"
' call WriteData()
ts = "{050}{201}{178}{195}{034}{145}{203}{089}{240}{089}{091}{091}{089}{093}{225}"
call WriteData()
wait 1


mEnd:
sleep
goto mEnd


sub WriteCData(dat as byte)
I2CStart
' slave address
I2CWByte sa
I2CWByte &b00000000
I2CWByte dat
' stop
I2CStop
waitms 40
end sub

sub WriteData()
for n = 1 to len(ts)
t = mid(ts , n , 1)
tmp = asc(t)

I2CStart
' slave address
I2CWByte sa
I2CWByte &b01000000
I2CWByte tmp
' stop
I2CStop
next n
end sub


По схематехнике, вывод VLCD - это выход, точно уже не помню, давно это было, ИМХО оставить в воздухе.
А в процедуре инициализации еще надо настроить напряжение встроенного генератора отрицательного напряжения (в исходнике есть).
dundi
Цитата(wingbladeZ @ Dec 8 2008, 09:01) *
имеется эта радость. SD1602X фирмы SUNLIKE. из интерфейсов - только послеовательный, I2C.


А где вы это приобрели? smile.gif
wingbladeZ
2 Техник: спасибо, в примере разобрался, делал почти также... только на пике и на асме соответственно. еще без команд которые VALCD VBLCD. поменял согласно твоему примеру. однако ЖКИ как молчал так и молчит

выходит, проблема таки в неправильном подключении?

вот результаты бесчеловечных экспериментов:

если оставить 3ю ногу(Vlsd) пустой, те же яйца,вид сбоку.

если подать на нее 5 вольт(случайно выяснил сегодня перепутав выводы) сначала оба ряда черные, потом видно как мееедленно и печально разворачиваются кристаллы и все сходит на пустые строчки

питание на Vdd кстати подаю 3.5 с подстроечного резистора.вроде SUNLIKE так советуют в своей бумажке. при питании 5 картинки нет и в вышеописанном случае.

все

ps догадываюсь, что такими экспериментами его проще запороть чем запустить sad.gif но он все равно лежит без дела. интересно ведь.
Сергей Борщ
Цитата(wingbladeZ @ Dec 8 2008, 08:01) *
Как ее правильно адресовать и инициализировать? (адрес на шине, команды)

делал по докам на контроллер NT7651, пока - 0 реакции. Тупо горит подсветка, экран пустой.
Второй вопрос противоречит первому. Если дисплей отвечает ACK на запись адреса, то адрес вы знаете. Если он не ответил - то как вы можете в него записать команды? Если не записали команды, то экран и будет пустым.
Выкладывайте свой код, телепатия - не самое любимое занятие участников этого форума. Будете выкладывать - не берите пример с Texnik, для оформления исходника используйте кнопку "#" на форме ввода сообщения.
wingbladeZ
Цитата(Сергей Борщ @ Dec 9 2008, 01:53) *
Второй вопрос противоречит первому. Если дисплей отвечает ACK на запись адреса, то адрес вы знаете. Если он не ответил - то как вы можете в него записать команды? Если не записали команды, то экран и будет пустым.
Выкладывайте свой код, телепатия - не самое любимое занятие участников этого форума. Будете выкладывать - не берите пример с Texnik, для оформления исходника используйте кнопку "#" на форме ввода сообщения.


где противоречие то?
у товарища Texnik работал пример выше. разница с моим была в отсутствии команд, помеченных у него как VALCD VBLCD. добавил. бестолку.

соощаю внешние проявления. все.

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

pps предвосхищая дальнейшие вопросы - нет, в реализации i2c косяка нет. юзаю ее давно ,всегда работала.
zltigo
Цитата(wingbladeZ @ Dec 9 2008, 07:22) *
где противоречие то?

Перечтите пост Сергея ВНИМАТЕЛЬНО и скорректируйте свое описание состояния дел.
Сергей Борщ
Цитата(wingbladeZ @ Dec 9 2008, 06:22) *
ps неужели если вам дадут чужой асмовый листинг и спросят "где здесь ошибка?" вы будете ее искать?
Вы пришли сюда чтобы решить проблему или как? Вероятность того, что в вашем коде попытаются разобраться зависит от того, как этот код написан и оформлен. Просто так "потрещать" тоже можно, но для этого есть раздел Offtopic.
Цитата(wingbladeZ @ Dec 9 2008, 06:22) *
pps предвосхищая дальнейшие вопросы - нет, в реализации i2c косяка нет. юзаю ее давно ,всегда работала.
Что-то я сомневаюсь, что вы давно пользуете I2C, если не можете даже сказать - получаете ACK от индикатора или нет и что это из этого ACK следует.
wingbladeZ
окк. поясняю состояние дел. по пунктам.

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

I2C использую не так чтобы давно, месяца 3. ранее по нему работал с PCF8574 (расширитель порта ввода вывода) и термодатчиками DS.

по пришедшему ACC (NAC)можно судить, принял ли контрллер команду или проигнорил. но прихоит ли ACC мне без отладчика посмотреть затруднительно. могу судить только по внешним проявлениям.

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

PS если ЖКИ неправильно запитан, ведь не факт что он будет на команды хоть както реагировать? я не прав? хочу всетаки разобраться со схемой его включения. потом поговорим о программе.
Сергей Борщ
Цитата(wingbladeZ @ Dec 9 2008, 15:27) *
по пришедшему ACC (NAC)можно судить, принял ли контрллер команду или проигнорил.
Сразу после старт-условия вы посылаете адрес. По ACK на этот адрес вы определяете, что контроллер есть и готов принимать команду. Если был NACK - посылать что-либо (команду) нет смысла, вас все равно никто не слушает. Вот по получению этого ACK вы можете зажигать светодиод или отсылать какой-либо символ в UART и наблюдать его в терминале. Никакой отладчик на данном этапе не нужен. Получите ACK - можно думать про команды.

По схеме: Судя по документации на контроллер, ваш вход контраста (3) - это замкнутые между собой Vlcd1 и Vlcd2. Сажать их на землю не нужно ни в коем случае. Туда подключается емкость (0.1мкф) и по появлению напряжения порядка 4-9в на этой емкости вы сможете определить, что вам удалось запустить внутренний источник напряжения контраста.
Сигнал A (6) - не важно, куда подключите, но такой же уровень должен быть у соответствующегот адресного бита.
Сигнал reset(7) - кто вас учил бросать важные выводы в воздухе? В даташите на контроллер нигде не сказано, что эта нога имеет подтягивающий резистор. Посадите ее на землю, а еще лучше - заведите на контроллер и перед инициализацией подавайте на нее единичку на некоторое время. Точного времени в даташите не нашел, думаю 10мс будет с головой.

Цитата(wingbladeZ @ Dec 9 2008, 15:27) *
PS если ЖКИ неправильно запитан, ведь не факт что он будет на команды хоть както реагировать? я не прав?
Если правильно подключены Vcc, Vss, Reset (ну и SDA/SCL), то он должен выдавать ACK.
rezident
Цитата(wingbladeZ @ Dec 9 2008, 18:27) *
PS если ЖКИ неправильно запитан, ведь не факт что он будет на команды хоть както реагировать? я не прав? хочу всетаки разобраться со схемой его включения. потом поговорим о программе.
Дык вы приведите реальную схему вашего подключения. В первом сообщении вы указали, что сигнал RESET не подключили. Почему, спрашивается? Что за дискриминация такая?
Сигнал Enable это всего лишь включение подсветки, на работу контроллера влияния оказывать не должен.
Pull-up резисторы на шине I2C какого номинала? Если нет дебаггера, то сделайте программный вывод состояний вашего программного автомата I2C. Ну хоть каким-нибудь свободным пином с подключенным светодиодом. Ну и моргайте им если нет ACK.
Судя по даташиту NT7651 у контроллера имеется встроенный источник питания для жидких кристаллов, но вы не программируете соответствующие регистры. Чего же вы ждете тогда, какого изображения? Можно конечно попробовать подать внешнее напряжение на контраст в диапазоне от -5В до +5В, но желательно через резистор (на всякий пожарный). Т.е. включите потенциометр между -5В и +5В, а с движка через резистор 300Ом - 1кОм подаватйе на 3 пин LCD модуля. Хотя-по моему это лишнее. лучше добиться нормальной работы I2C и запрограммировать нужные регистры.
wingbladeZ
Сергей, респектище вам, оно заработало))) a14.gif
Спасибо, что донесли до меня понимание проблеммы, несмотря на сопротивление меня.
Вы гуру)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.