Зарегистрирован: Ср май 20, 2009 10:38:26 Сообщений: 2
Рейтинг сообщения:0
пытаюсь подключить мэлтовский 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 наносекнд.
А у вас Е устанавливается сразу с данными. надо чуть раньше.
Зарегистрирован: Ср май 20, 2009 10:38:26 Сообщений: 2
Рейтинг сообщения:0
перекинул Е на другой порт и изменил код . всё равно не работает( а есть какие-нибудь признаки того, что жки нормально инициализировался?
хм, странно, прощупал мультиметром порт, везде еденицы... ничё не понимаю о_О
_________________ Научить нельзя, можно научиться. Пифагор. Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
void Command_8bit_4bit() //переход из 8 битного в 4 битный - режим ЛСД { PORTD=0x42;delay_ms(30); PORTD=0x02;delay_ms(200); PORTD=0x00; }
void conv(uchar a,uchar *b) // функция перевода числа в понятный код для лсд { b[0]=a/100;a=a-b[0]*100;b[0]+=0x30; b[1]=a/10;a=a-b[1]*10;b[1]+=0x30; b[2]=a;b[2]+=0x30; }
uchar comparator() //АЦП на основе шим { SETBIT(DDRB,PORTB2); int i; int n; for(int a=0;a<=255;a++) { for(n=0;n<4;n++) { CLRBIT(PORTB,PORTB2); for(i=0;i<=a;++i) delay_mks(1); SETBIT(PORTB,PORTB2); for(i=0;i<=255-a;++i) delay_mks(1); } if(TSTBIT1(ACSR,ACO))return a; } return 255; }
Пробую подключить к Pic'у ЖКИ WH1602B-GTI-CT. Почему-то не горит даже подсветка. В связи с чем вопрос - она управляется командами, или просто должна гореть при подаче напряжения? Пробовал прозванивать - не звонится.. Подавалось на него около 3.6В.
Горит просто при подаче питания. Только надо бы ограничивать ток в цепи, все же там светодиоды, скорее всего (но бывает и люминесцентная - см. Ваш индикатор), а питание подавать непосредственно на подсветку, потому как с выводами питания контроллера индикатора подсветка соединяется не всегда.
_________________ Оптимизм х (Опыт + Знания) = const
Спасибо, уже разобрался. Просто в даташите не было указано, что там несколько светодиодов последовательных (написано просто "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
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
Зарегистрирован: Вс янв 07, 2007 01:45:48 Сообщений: 491 Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения:0
Тоже башня уже варит плохо, но сразу в глаза бросается длительность задержек. При инициализации я ожидал увидеть по крайней мере 1 задержку в 1.5 мс. А вообще программа как то странно написана, плохо читаемо. По моему, перепутан порядок комманд.
_________________ Научить нельзя, можно научиться. Пифагор. Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
WrCMD: push lcddata swap lcddata sbi portB, e nop nop nop nop nop nop nop out portc, lcddata nop nop nop nop nop nop nop nop nop nop cbi PortB, e pop lcddata ret
Один раз сделал, работает, а переделывать по нормальному не охота
_________________ Научить нельзя, можно научиться. Пифагор. Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
у меня там аж три задержки на 20 миллисекунд. ваша инициализация под конкретное подключение ЖКИ к тому же 8-битный режим.
я имею в виду то, что плату мне удобнее было развести так:
portB0=DB7
portB1=DB6
portB2=DB5
portB3=DB4
portB4=E
portB5=R/W
portB6=A0
portB7=led
просто в .equ прописываю как мне надо и все. при этом не надо менять программу. вот что требовалось.
Зарегистрирован: Вс янв 07, 2007 01:45:48 Сообщений: 491 Откуда: Российская Федерация, будь она неладна...
Рейтинг сообщения:0
Режим 4-х битный.
Для "подгонки" к нужным пинам просто надо поменять соответствующие строки + добавить необходимые комманды для того, чтобы не менялись остальные биты используемых портов:
Код:
WrCMD: push lcddata swap lcddata sbi portB, e nop nop nop nop nop nop nop out portc, lcddata nop nop nop nop nop nop nop nop nop nop cbi PortB, e pop lcddata ret
Вместо PortC - Ваш порт e (и rs) - определяется в equ Вот код для вывода данных:
Код:
write: push lcddata swap lcddata sbi portB, e sbi portB, rs nop nop nop nop nop nop nop nop nop nop out portc, lcddata nop nop nop nop nop nop nop nop nop nop cbi PortB, e cbi portB, rs pop lcddata ret
_________________ Научить нельзя, можно научиться. Пифагор. Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
хорошо) напиши пожалуйста команды инициализации для WH1601, организованного как двухстрочный. чему равен бит N при инициализации?
насчет твоей инициализации- теперь понял, что у тебя между тетрадами тоже задержка 40микросекунд. думаю это не целесообразно, но мешать не должно. попробовал как ты посоветовал, все равно не получается ничего вывести. такое чувство как будто инициализация неправильно проходит.
вот мой порядок.
1)задержка 2 секунды (чтобы увидеть что включились 8 первых знакомест)
2)инициализация (знакоместа пропадают, ЖКИ ровно горит по всей ячейкам)
3)устанавливаю адрес 0 (хотя в инициализации он уже должен был быть установлен, но думаю не помешает)
4)вывожу одни и те же данные ($41) по всем адресам от 0 до 40 и от 64 до 104.
в итоге на экране ничего.
поэтому грешу на подпрограмму вывода данных. может задержки побольше поставить. прогу отлаживал в АВРстудии в симуляции стоит камень мега8535, частота 16МГц. delay20ms дает около 21мс задержки при 16МГц. так что с этим проблем нет.
также нет проблем с контрастностью, регулируется резистором.
в общем ума не приложу, что может быть тут такое.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения