На самом же деле не надо ничего выдерживать.
ведь я проверяю флаг занятости BF.
а это означает - что не надо вводить никаких задержек.
Код: Выделить всё
read_BF:
sbi portd, 2 ; E=1
in r18, pinc ; Считывание данных в r18
cbi portd, 2 ; E=0
retКод: Выделить всё
write_lcd:
out portc, r16 ; Запись в lcd
;здесь нужна задержка
RCALL W
sbi portd, 2 ; E=1
RCALL W
cbi portd, 2 ; E=0
RCALL W
out portd, r17 ; Data????????????????? line Hi-Z
W:
ret
. К схеме имеется готовая прошивка, но с индикатором WH1602. Собрал схему в протэусе, но вместо WH1602 я присоединил LM016. Вставил прошивку в МК. Запустил, ноги индикатора пинингуются, он загорается но при нажатии любой клавиши, на индикаторе ничего не появляется. Создавал еще несколько проектов в протеусе с заменой ЖКИ, тоже самое. Подсказали что, время задерки кажется не совподает. Я новичек, так что прошу сильно не бить. А вот и прошивка.
. К схеме имеется готовая прошивка, но с индикатором WH1602. Собрал схему в протэусе, но вместо WH1602 я присоединил LM016. Вставил прошивку в МК. Запустил, ноги индикатора пинингуются, он загорается но при нажатии любой клавиши, на индикаторе ничего не появляется. Создавал еще несколько проектов в протеусе с заменой ЖКИ, тоже самое. Подсказали что, время задерки кажется не совподает. Я новичек, так что прошу сильно не бить. А вот и прошивка.Для того, чтобы не гадать "сколько?" и служит флаг занятости BF. Если временная диаграмма обмена с HD44780 (установка адреса, RS, RW, E) выдержана, остается только анализ BF. В итоге это значительно ускоряет правильную выдачу на индикацию.Stalker46 писал(а):Между командами надо выдерживать паузы.
А между командами записи данных в DDRAM???? и сколько?
Пока что вот так)))).include "tn2313def.inc" ; Используем микроконтроллер Attiny2313
.cseg
.org 0
rjmp reset
;********************************************************************
reset:
ldi r16, low (RAMEND) ; Инициализация стека
out SPL, r16
rcall lcd_init
;********************************************************************
lcd_init:
ldi r16, 0b10000000 ; PUD>>1
out MCUCR, r16
ldi r16, 0b11111111 ; Настройка порта B
out ddrb, r16
ldi r16, 0b00000111 ; Настройка порта D
out ddrd, r16
;********************************************************************
ldi r16, 0b00000001 ; Сброс предделителя T0
out GTCCR, r16
;********************************************************************
ldi r16, 0b00000000 ; RS>>0
ldi r17, 0b00110000 ; Установка парамеров (Lcd Data 8 bit)
rcall delay_20000mks ; Пауза 20000мкс
rcall write_lcd ; Запись в lcd
rcall delay_40mks ; Пауза 40мкс
rcall write_lcd ; Запись в lcd
rcall delay_40mks ; Пауза 40мкс
rcall write_lcd ; Запись в lcd
rcall delay_40mks ; Пауза 40мкс
ldi r17, 0b00111000 ; Установка параметров
rcall write_lcd ; Запись в lcd
rcall delay_40mks ; Пауза 40мкс
ldi r17, 0b00001000 ; Выключение дисплея
rcall write_lcd ; Запись в lcd
rcall delay_40mks ; Пауза 40мкс
ldi r17, 0b00000001 ; Очистка дисплея
rcall write_lcd ; Запись в lcd
rcall delay_1500mks ; Пауза 1500мкс
ldi r17, 0b00000110 ; Установка режима ввода данных
rcall write_lcd ; Запись в lcd
rcall delay_40mks ; Пауза 40мкс
ret
;********************************************************************
delay_20000mks:
ldi r18, 0b
ldi r19, 0b
rjmp init_delay
delay_1500mks:
ldi r18, 0b
ldi r19, 0b
rjmp init_delay
delay_40mks:
ldi r18, 0b
ldi r19, 0b
init_delay:
out TCNT0, r18 ; Ввод переменной задержки
out TCCR0B, r19 ; Настройка предделителя
test:
in r20, TIFR ; Чтение TIFR
sbrs r20, 1 ; Пропустить, если TOV0>>1
rjmp test
out TCCR0B, r16 ; Остановка T0
ret
;********************************************************************
write_lcd:
out portd, r16 ; Установить значение линии RS
out portb, r17 ; Вывести байт данных DB0-DB7
sbi portd, 2 ; E>>1
cbi portd, 2 ; E>>0
out portd, r16 ; DB0-DB7 Hi-Z
ret
;********************************************************************
user_write_IR:
ldi r16, 0b00000000 ; Адресация IR
rcall write_lcd ; Запись в lcd
rcall delay_40mks ; Пауза 40мкс
ret
;********************************************************************
user_write_DR:
ldi r16, 0b00000001 ; Адресация DR
rcall write_lcd ; Запись в lcd
rcall delay_40mks ; Пауза 40мкс
ret
это методом тыка lcd_com(0x02); а почему оно так хз =))) сам мучался, наверное надо прочитать инструкцию к LM016L - хотя нафига=) если это только для протеуса.Babayjon писал(а):yaotzin спасибо. Всё заработало. Урааааа