|
|
  |
ЖКИ SD1602X |
|
|
|
Dec 8 2008, 06:01
|
Группа: Новичок
Сообщений: 5
Регистрация: 7-12-08
Пользователь №: 42 274

|
имеется эта радость. SD1602X фирмы SUNLIKE. из интерфейсов - только послеовательный, I2C. Как ее правильно адресовать и инициализировать? (адрес на шине, команды) делал по докам на контроллер NT7651, пока - 0 реакции. Тупо горит подсветка, экран пустой. проверьте распиновку заодно(мб в ней косяк) выводы подключал так: 1-земля 2-питальник 3-вроде контрастность, заземлил - сомневаюсь, мб это косяк 4-SDA 5-SCL 6-Enable - подал питание 7-ресет, ничего не подключал все что может сказать про него производитель - во вложении (страничка бумаги, качеством близкой к туалетной. выводы и электрические характеристики)
|
|
|
|
|
Dec 8 2008, 06:21
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 14-01-05
Пользователь №: 1 945

|
В своё время я тестировал их, вот исходничек на бейсике (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 - это выход, точно уже не помню, давно это было, ИМХО оставить в воздухе. А в процедуре инициализации еще надо настроить напряжение встроенного генератора отрицательного напряжения (в исходнике есть).
|
|
|
|
|
Dec 8 2008, 06:40
|

Участник

Группа: Новичок
Сообщений: 16
Регистрация: 25-11-08
Пользователь №: 41 946

|
Цитата(wingbladeZ @ Dec 8 2008, 09:01)  имеется эта радость. SD1602X фирмы SUNLIKE. из интерфейсов - только послеовательный, I2C. А где вы это приобрели?
--------------------
Жить - хорошо. А хорошо жить - еще лучше. (С)
|
|
|
|
|
Dec 8 2008, 22:39
|
Группа: Новичок
Сообщений: 5
Регистрация: 7-12-08
Пользователь №: 42 274

|
2 Техник: спасибо, в примере разобрался, делал почти также... только на пике и на асме соответственно. еще без команд которые VALCD VBLCD. поменял согласно твоему примеру. однако ЖКИ как молчал так и молчит выходит, проблема таки в неправильном подключении? вот результаты бесчеловечных экспериментов: если оставить 3ю ногу(Vlsd) пустой, те же яйца,вид сбоку. если подать на нее 5 вольт(случайно выяснил сегодня перепутав выводы) сначала оба ряда черные, потом видно как мееедленно и печально разворачиваются кристаллы и все сходит на пустые строчки питание на Vdd кстати подаю 3.5 с подстроечного резистора.вроде SUNLIKE так советуют в своей бумажке. при питании 5 картинки нет и в вышеописанном случае. все ps догадываюсь, что такими экспериментами его проще запороть чем запустить  но он все равно лежит без дела. интересно ведь.
|
|
|
|
|
Dec 8 2008, 22:53
|

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

|
Цитата(wingbladeZ @ Dec 8 2008, 08:01)  Как ее правильно адресовать и инициализировать? (адрес на шине, команды)
делал по докам на контроллер NT7651, пока - 0 реакции. Тупо горит подсветка, экран пустой. Второй вопрос противоречит первому. Если дисплей отвечает ACK на запись адреса, то адрес вы знаете. Если он не ответил - то как вы можете в него записать команды? Если не записали команды, то экран и будет пустым. Выкладывайте свой код, телепатия - не самое любимое занятие участников этого форума. Будете выкладывать - не берите пример с Texnik, для оформления исходника используйте кнопку "#" на форме ввода сообщения.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 9 2008, 04:22
|
Группа: Новичок
Сообщений: 5
Регистрация: 7-12-08
Пользователь №: 42 274

|
Цитата(Сергей Борщ @ Dec 9 2008, 01:53)  Второй вопрос противоречит первому. Если дисплей отвечает ACK на запись адреса, то адрес вы знаете. Если он не ответил - то как вы можете в него записать команды? Если не записали команды, то экран и будет пустым. Выкладывайте свой код, телепатия - не самое любимое занятие участников этого форума. Будете выкладывать - не берите пример с Texnik, для оформления исходника используйте кнопку "#" на форме ввода сообщения. где противоречие то? у товарища Texnik работал пример выше. разница с моим была в отсутствии команд, помеченных у него как VALCD VBLCD. добавил. бестолку. соощаю внешние проявления. все. ps неужели если вам дадут чужой асмовый листинг и спросят "где здесь ошибка?" вы будете ее искать? сомневаюсь. ну могу я сюда запостить свою реализацию софтового i2c которую и юзаю, толку от этого будет чуть. pps предвосхищая дальнейшие вопросы - нет, в реализации i2c косяка нет. юзаю ее давно ,всегда работала.
|
|
|
|
|
Dec 9 2008, 11:31
|

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

|
Цитата(wingbladeZ @ Dec 9 2008, 06:22)  ps неужели если вам дадут чужой асмовый листинг и спросят "где здесь ошибка?" вы будете ее искать? Вы пришли сюда чтобы решить проблему или как? Вероятность того, что в вашем коде попытаются разобраться зависит от того, как этот код написан и оформлен. Просто так "потрещать" тоже можно, но для этого есть раздел Offtopic. Цитата(wingbladeZ @ Dec 9 2008, 06:22)  pps предвосхищая дальнейшие вопросы - нет, в реализации i2c косяка нет. юзаю ее давно ,всегда работала. Что-то я сомневаюсь, что вы давно пользуете I2C, если не можете даже сказать - получаете ACK от индикатора или нет и что это из этого ACK следует.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 9 2008, 13:27
|
Группа: Новичок
Сообщений: 5
Регистрация: 7-12-08
Пользователь №: 42 274

|
окк. поясняю состояние дел. по пунктам.
с адресом и командами похоже разобрались. тот адрес и те команды. я не был уверен что контроллер именно NT7651, благодаря товарищу Технику я в этом убедился.
I2C использую не так чтобы давно, месяца 3. ранее по нему работал с PCF8574 (расширитель порта ввода вывода) и термодатчиками DS.
по пришедшему ACC (NAC)можно судить, принял ли контрллер команду или проигнорил. но прихоит ли ACC мне без отладчика посмотреть затруднительно. могу судить только по внешним проявлениям.
мне теперь кажется проблема всетаки не в командах а в схеме подключения. прокомментируйте распиновку. листок от производителя см выше.
PS если ЖКИ неправильно запитан, ведь не факт что он будет на команды хоть както реагировать? я не прав? хочу всетаки разобраться со схемой его включения. потом поговорим о программе.
|
|
|
|
|
Dec 9 2008, 14:04
|

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

|
Цитата(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.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 9 2008, 14:15
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(wingbladeZ @ Dec 9 2008, 18:27)  PS если ЖКИ неправильно запитан, ведь не факт что он будет на команды хоть както реагировать? я не прав? хочу всетаки разобраться со схемой его включения. потом поговорим о программе. Дык вы приведите реальную схему вашего подключения. В первом сообщении вы указали, что сигнал RESET не подключили. Почему, спрашивается? Что за дискриминация такая? Сигнал Enable это всего лишь включение подсветки, на работу контроллера влияния оказывать не должен. Pull-up резисторы на шине I2C какого номинала? Если нет дебаггера, то сделайте программный вывод состояний вашего программного автомата I2C. Ну хоть каким-нибудь свободным пином с подключенным светодиодом. Ну и моргайте им если нет ACK. Судя по даташиту NT7651 у контроллера имеется встроенный источник питания для жидких кристаллов, но вы не программируете соответствующие регистры. Чего же вы ждете тогда, какого изображения? Можно конечно попробовать подать внешнее напряжение на контраст в диапазоне от -5В до +5В, но желательно через резистор (на всякий пожарный). Т.е. включите потенциометр между -5В и +5В, а с движка через резистор 300Ом - 1кОм подаватйе на 3 пин LCD модуля. Хотя-по моему это лишнее. лучше добиться нормальной работы I2C и запрограммировать нужные регистры.
|
|
|
|
|
Dec 9 2008, 21:32
|
Группа: Новичок
Сообщений: 5
Регистрация: 7-12-08
Пользователь №: 42 274

|
Сергей, респектище вам, оно заработало))) Спасибо, что донесли до меня понимание проблеммы, несмотря на сопротивление меня. Вы гуру)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|