пытаюсь подключить мэлтовский mt-10s1-1ylg к своей меге8535. хочется использовать 4битную шину... поправьте, если ошибаюсь, каким образом должен идти обмен между мк и модулем?
если биты по байту - null E AO RW DB7 DB6 DB5 DB
PORTA = 0b01101111; // устанавливаем E и посылаем команду(первая часть данных)
_delau_us(50);
PORTA = 0b00101111; // сбрасываем Е
_delay_us(50);
PORTA = 0b01101010; //устанавливаем E и посылаем команду(вторая часть данных)
_delay_us(50);
PORTA = 0b00101010; // сбрасываем Е
_delay_us(50);
Прикрепил к посту код... кривовато, но вроде правильно. только не работает(
надо сначала адрес/данные установить на входы, подождать некоторое время, дернуть выводом Е (0=>1=>0).
в даташите даже есть такое время "предустановки адреса". что то около 40 наносекнд.
А у вас Е устанавливается сразу с данными. надо чуть раньше.
перекинул Е на другой порт и изменил код . всё равно не работает( а есть какие-нибудь признаки того, что жки нормально инициализировался?
хм, странно, прощупал мультиметром порт, везде еденицы... ничё не понимаю о_О
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Пробую подключить к Pic'у ЖКИ WH1602B-GTI-CT. Почему-то не горит даже подсветка. В связи с чем вопрос - она управляется командами, или просто должна гореть при подаче напряжения? Пробовал прозванивать - не звонится.. Подавалось на него около 3.6В.
Горит просто при подаче питания. Только надо бы ограничивать ток в цепи, все же там светодиоды, скорее всего (но бывает и люминесцентная - см. Ваш индикатор), а питание подавать непосредственно на подсветку, потому как с выводами питания контроллера индикатора подсветка соединяется не всегда.
Спасибо, уже разобрался. Просто в даташите не было указано, что там несколько светодиодов последовательных (написано просто "LED" - китайцы, что с их взять и напряжения 3.6В не хватало чтобы они открылись. Кстати, в даташите вроде как нарисован и токоограничительный резистор в самом модуле. Сейчас гадаю - есть он или нет . Судя по яркости свечения от 5В аккумулятора - есть.
обычно на них или рядом есть надписи A и К. так вот А-Анод(+) К-Катод(-). напряжение зависит от дисплея. подсветка, в основном, с уже поставленным токоограничивающим резистором, но я бы перестарховался поставил резюк где-то 500 Ом и подключил бы к 5В.
500 Ом - много, может не загореться. У меня начинает гореть подсветка, только когда R<=47 Ом. А вообще, я обычно ставлю подстроечник на 100 Ом, и все ОК!
Привет всем! не думал что напишу сюда с проблемой))) но все таки приходится. имеется мега8535 и однострочный WH1601 при включении инициализацию проходит (не знаю правильно ли проходит, но проходит - видно что после нее закрашивается равномерными пробелами, когда как без инициализации он ярко светится первой половинкой ну вы меня понимаете)
так вот, ничего не могу вывести на дисплей, как ни пробовал, не получается. вот листинг на асме. подскажите, что у меня неправильно?
4-х битный интерфейс
lcd_init:
clr adr
rcall delay20ms
ldi temp,(1<<DB5)|(1<<DB4)
out lcd,temp
rcall strobe
rcall delay20ms
rcall strobe
rcall delay20ms
rcall strobe
rcall delay20ms
cbr temp,(1<<DB4)
out lcd,temp
rcall strobe
rcall delay40us
rcall strobe
clr temp
sbr temp,(1<<DB7)
out lcd,temp
rcall strobe
rcall delay40us
clr temp
out lcd,temp
rcall strobe
sbr temp,(1<<DB7)
out lcd,temp
rcall strobe
rcall delay40us
clr temp
out lcd,temp
rcall strobe
sbr temp,(1<<DB4)
out lcd,temp
rcall strobe
rcall delay20ms
clr temp
out lcd,temp
rcall strobe
sbr temp,(1<<DB6)|(1<<DB5)
out lcd,temp
rcall strobe
rcall delay40us
clr temp
out lcd,temp
ret
это подпрограмма вывода данных:
data - данные, lcd- бит порта, подключенный к транзистору, который управляет подсветкой. DB4,DB5,DB6,DB7 - соответствующие выводы порта подключенные к ЖКИ. A_D-бит порта подключенный к ЖКИ к ноге выбора регистра (адрес/данные) strobe - подпрограмма ниже. Е-бит подключенный к одноименной ноге ЖКИ
send_data:
push data ;запоминаем data
push temp
in temp,lcd ;считываем порт, чтобы не изменить бит led
;(возможен ШИМ для управления яркостью)
andi temp,(1<<led)
bst data,4 ;копируем соответствующие биты данных
bld temp,DB4 ;на их места в выходном порту,
bst data,5 ;подключенному к ЖКИ
bld temp,DB5 ;старшая тетрада данных
bst data,6
bld temp,DB6
bst data,7
bld temp,DB7
sbr temp,(1<<A_D);устанавливаем сигнал "A_D"
out lcd,temp ;выводим полученные данные в порт
rcall strobe
bst data,0 ;копируем соответствующие биты данных
bld temp,DB4 ;на их места в выходном порту,
bst data,1 ;подключенному к ЖКИ
bld temp,DB5 ;младшая тетрада данных
bst data,2
bld temp,DB6
bst data,3
bld temp,DB7
out lcd,temp ;выводим полученные данные в порт
rcall strobe
rcall delay40us
andi temp,(1<<led)
out lcd,temp
pop temp
pop data ;восстанавливаем data
ret
Тоже башня уже варит плохо, но сразу в глаза бросается длительность задержек. При инициализации я ожидал увидеть по крайней мере 1 задержку в 1.5 мс. А вообще программа как то странно написана, плохо читаемо. По моему, перепутан порядок комманд.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Один раз сделал, работает, а переделывать по нормальному не охота
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
у меня там аж три задержки на 20 миллисекунд. ваша инициализация под конкретное подключение ЖКИ к тому же 8-битный режим.
я имею в виду то, что плату мне удобнее было развести так:
portB0=DB7
portB1=DB6
portB2=DB5
portB3=DB4
portB4=E
portB5=R/W
portB6=A0
portB7=led
просто в .equ прописываю как мне надо и все. при этом не надо менять программу. вот что требовалось.
Режим 4-х битный.
Для "подгонки" к нужным пинам просто надо поменять соответствующие строки + добавить необходимые комманды для того, чтобы не менялись остальные биты используемых портов:
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
хорошо) напиши пожалуйста команды инициализации для WH1601, организованного как двухстрочный. чему равен бит N при инициализации?
насчет твоей инициализации- теперь понял, что у тебя между тетрадами тоже задержка 40микросекунд. думаю это не целесообразно, но мешать не должно. попробовал как ты посоветовал, все равно не получается ничего вывести. такое чувство как будто инициализация неправильно проходит.
вот мой порядок.
1)задержка 2 секунды (чтобы увидеть что включились 8 первых знакомест)
2)инициализация (знакоместа пропадают, ЖКИ ровно горит по всей ячейкам)
3)устанавливаю адрес 0 (хотя в инициализации он уже должен был быть установлен, но думаю не помешает)
4)вывожу одни и те же данные ($41) по всем адресам от 0 до 40 и от 64 до 104.
в итоге на экране ничего.
поэтому грешу на подпрограмму вывода данных. может задержки побольше поставить. прогу отлаживал в АВРстудии в симуляции стоит камень мега8535, частота 16МГц. delay20ms дает около 21мс задержки при 16МГц. так что с этим проблем нет.
также нет проблем с контрастностью, регулируется резистором.
в общем ума не приложу, что может быть тут такое.