На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Вывод на ЖКИ на базе HD44780 , Можеть кто делал? Расскажите, плз,...
      Очень интересует реализация вывода на ЖКИ(на ассемблере) для AVR. Если есть, поделитесь, пожалуйста. А то моя не пашет :'(
        Цитата COOLibin @
        реализация вывода на ЖКИ(на ассемблере)

        Есть на Bolimin SC1602ESLB на Пик 18F452 (и даже рабочая) :D Процессор ЖКИ - Hitachi KS066 (стандарт), если не путаю. Посмотри подойдет стандарт к твоему ЖКИ??? Или ссылку на даташит дай.

        Добавлено
        Цитата COOLibin @
        А то моя не пашет

        Кинь на мыло если не трудно. :)
          Взял отсюда: Сопряжение AVR-микроконтроллеров и ЖКИ и немного переделал
            Посмотрел...ну очень похоже.
            Цитата COOLibin @
            А то моя не пашет

            Показывай инициализацию контроллера ЖКИ (как у тебя в программе идет) + схему включения.Чудес обычно не бывает. :D И опиши что именно не работает??? Вообще ничего не выводится или как??? Дисплей вкл. курсор есть???
              Хм...ну что я могу сказать:
              ExpandedWrap disabled
                icom_2313:
                        swap r25                ;подготовить старшую тетраду для передачи
                        mov r26,r25
                        andi r26,$ef            ;очистка бита 4 порта D (сигнал RS=0)
                        ori  r26,$e0            ;установка бита 5 порта D ( сигнал E=1)
                        out portd,r26
                        nop
                        nop
                        nop
                        nop
                        cbi portd, 5            ;стробирующий сброс бита 5 порта D ( сигнал E=0).
              Начнем с того, что данные должны висеть на порту Д до подачи импульса стробирования Е
              ExpandedWrap disabled
                         out portd,r26        
                         ori  r26,$e0            ;установка бита 5 порта D ( сигнал E=1)
                        nop
                        nop
                        nop
              Далее я отправил тебе даташит на контроллер обрати внимание на НАЧАЛЬНУЮ УСТАНОВКУ и перечень команд отмеченных знаком *. СколЬко работал с подобными ЖКИ - все они требуют соблюдения этого при инициализации. У тебя это условие не выполнено. Начни с этого и добейся просто очиски дисплея и появления курсора на том месте которое ты выбрал!!! :)
              Сообщение отредактировано: medved_68 -
                Цитата
                Начнем с того, что данные должны висеть на порту Д до подачи импульса стробирования Е

                Чего не скажешь по временным диаграммам :)
                  Цитата COOLibin @
                  Чего не скажешь по временным диаграммам

                  Согласен, но сам на это налетал, поэтому зачем грабли создавать???? Даташит смотрел??? :)
                    А можно RS выставить одновременно с данными?
                      Всё равно не пашет:)
                      Вот основные функции:
                      ExpandedWrap disabled
                        INITLCD:
                                ldi r25,    0x20  
                                rcall   ICOM_2313  
                                rcall   DELAY_50_MKS
                                ldi r25,    0x0F  
                                rcall   ICOM_2313  
                                rcall   DELAY_50_MKS
                                ldi r25,    0x20  
                                rcall   ICOM_2313  
                                rcall   DELAY_50_MKS
                                ldi     r25,    0x01  
                                rcall   ICOM_2313      
                                rcall   DELAY_50_MKS
                                ret
                         
                        icom_2313:
                                swap    r25            
                                mov       r26,  r25
                                andi    r26,    0x0F    
                                out PORTD,  r26
                                cbi PORTD,  4
                                nop
                                sbi PORTD,  5
                                nop
                                nop
                                nop
                                nop
                                nop
                                cbi PORTD,  5
                         
                                swap    r25
                                mov r26,    r25
                                andi    r26,    0x0F
                                out PORTD,  r26
                                cbi PORTD,  4
                                nop
                                sbi PORTD,  5
                                nop
                                nop
                                nop
                                nop
                                nop
                                cbi PORTD,  5
                                ret
                         
                        DELAY_50_MKS:
                            ldi r16, 200
                        DEL_50_MKS:
                            dec r16
                            brne DEL_50_MKS
                            ret
                         
                        DELAY_ON_START:
                            ldi r16, 0
                            ldi r17, 0
                            ldi r18, 3
                        DEL_ON_START:
                            dec r16
                            brne DEL_ON_START
                            dec r17
                            brne DEL_ON_START
                            dec r18
                            brne DEL_ON_START
                            ret
                        Всё круто, всё работает. Просто ЖКИ по умолчанию работает в 8ми битном режиме, поэтому первую команду надо отсылать только по высшей тетраде :)
                          Цитата COOLibin @
                          Всё круто, всё работает. Просто ЖКИ по умолчанию работает в 8ми битном режиме, поэтому первую команду надо отсылать только по высшей тетраде :)

                          и даже не одну !
                          рекомендую глянуть аппноты на данную тематику. Есть "магическая" последовательность команд при инициализации девайса на 4 или 8 пинов данных. как правило запуск происходит в несколько этапов...
                          1) проверка подключения - схемотехника...
                          2) выведение яркости (чтоб засветка была на половину рядов)...
                          3) инициализация - сброс засветки (изменение интенсивности)...
                          4) элементарные команды типа позиционирование курсора, стерание с экрана, мигание курсора...
                          5) запуск полного вывода на экран (строк, данных)...


                          с уважением
                          (круглый)
                          ЗЫ
                          Очень актуальны временные задержки при инициализации девайса. При переходе с одного мк на другой - именно они отсасывают основное время у проверенных алгоритмов.
                            А может кто-нибудь дать толковую по его мнению документацию по сопряжению того же ЖКИ, только 8031\51?
                              Цитата Крон @
                              А может кто-нибудь дать толковую по его мнению документацию по сопряжению того же ЖКИ, только 8031\51?

                              Даташита на индикатор вполне достаточно для сопряжения с любым контроллером.
                                А на русском языке ена бывает?
                                  Цитата Крон @
                                  А на русском языке ена бывает?

                                  Да.
                                    Цитата medved_68 @
                                    Цитата Крон @
                                    А на русском языке ена бывает?

                                    Да.

                                    Ссылки нет случайно :rolleyes: ?
                                      А адрес начала ДДРАМ обеих строк какой?
                                        Цитата Крон @
                                        Ссылки нет случайно ?

                                        Есть даташит на аналог. :) Посмотри во всяком случае я им пользуюсь эпизодически - проблем не было.
                                        Цитата Крон @
                                        А адрес начала ДДРАМ обеих строк какой?

                                        00-0F - Первая строка.
                                        40-4F - Вторая строка.
                                          Цитата medved_68 @
                                          00-0F - Первая строка.
                                          40-4F - Вторая строка.

                                          А есть ли какой-нибудь указатель дисплея?
                                          Т. е. что бы начать выводить на дисплей с пророизвольной ячейки? Или надо последовательно сдвигать экран?
                                          Сообщение отредактировано: Крон -
                                            Цитата Крон @
                                            А есть ли какой-нибудь указатель дисплея?
                                            Конечно. Есть команда выбора области для записи данных (DDRAM или CGRAM).
                                            Цитата Крон @
                                            Т. е. что бы начать выводить на дисплей с пророизвольной ячейки? Или надо последовательно сдвигать экран?

                                            Сначала необходимо выбрать (установить) активную ячейку и только потом выводить данные. Ну а далее - хочешь сдвигай экран, хочешь по новой определяй следующую ячейку для вывода.
                                              medved_68
                                              А какая команда для установки активной ячейки? Что то не нахожу.
                                              Сообщение отредактировано: Крон -
                                                Цитата Крон @
                                                А какая команда? Что то не нахожу.

                                                А ты какой даташит смотришь???
                                                  Ну то что Вы дали и методичку еще одну по HD44780.
                                                  Установка адреса для послед. операции и выбор области DDRAM это не то случаем? =)
                                                  Сообщение отредактировано: Крон -
                                                    Цитата Крон @
                                                    Ну то что Вы дали и методичку еще одну по HD44780

                                                    Тогда вот это:
                                                    Цитата
                                                    Set
                                                    DDRAM
                                                    Address
                                                    0 0 1 ADD
                                                    Установка адреса для
                                                    последующих операций и выбор
                                                    области DDRAM
                                                    40 мкс
                                                      Адреса устанавливаются синхроно для обоих строк ?
                                                      По дефалту на нуле установлен?
                                                      Сообщение отредактировано: Крон -
                                                        Цитата Крон @
                                                        Адреса устанавливаются синхроно для обоих строк ?

                                                        Нет. Ты устанавливаешь активной ячейку с определенном адресом. А будет она в первой или во второй строке - зависит от адреса, который передашь этой команде. ;)
                                                        Цитата Крон @
                                                        По дефалту на нуле установлен?
                                                        Нет. зависит от того как провел инициализацию. Если выполнил как предписывает даташит - то активная ячейка в правом углу во второй строке. ;)
                                                          medved_68
                                                          Спасибо. И последняя просьба.
                                                          У меня такая задача "Вывести в верхнюю строку '_РАСХОД_'
                                                          А в нижнюю '___xx___', где xx 2 ASCI кода из РПД. Всего их там 10. То есть получается 5 2-х значных чисел.
                                                          Если не трудно посмотрите мой код.
                                                          А то вохможности проверки нет.Заранее спасибо
                                                          ExpandedWrap disabled
                                                            ADR         equ 0E000h  ;адрес ЖКИ в адресном простр-ве ВПД
                                                            Adr_Count   equ 30h     ; адрес чисел в РПД
                                                            Count       equ 05h     ; кол-во чисел
                                                            R_W         equ   P1.7  ;линия R/W
                                                            RS          equ   P1.5  ;линия RS - 0 - команды; 1 - данные
                                                              
                                                            org 2000h
                                                            Message: db 20h, 50h, 41h, 43h, 58h, 4Fh, 0E0h, 20h ; ' РАСХОД '
                                                            Text:    db 20h, 20h, 20h ; '   '      
                                                             
                                                            ;******************************************************
                                                            OUT:    ;подпрограмма вывода на ЖКИ команды/данных из A
                                                                ;Вход : A - команда/данные
                                                                ;C - выбор команды(0) или данных(1)
                                                              MOV RS,C  ;C=0 - команда С=1 - данные
                                                              MOVX @DPTR,A  ;отправить команду/данные
                                                              RET
                                                            ;******************************************************
                                                            IN: ;подпрограмма чтения статуса/данных ЖКИ в A
                                                                ;Вход : C - выбор статуса(0) или данных(1)
                                                                ;Выход: A - статус/данные
                                                              MOV RS,C  ;C=0 - статус; С=1 - данные
                                                              SETB R_W  ;установить линию R/W = 1
                                                              MOVX A,@DPTR  ;получить статус/данные
                                                              CLR  R_W  ;установить линию R/W = 0
                                                              RET
                                                            ;******************************************************
                                                            MACRO @_DELL    ;задержка (max 131588 мкс при dd1 = dd2 = 0)
                                                              MOV R4,#|1
                                                              MOV R5,#|2
                                                              DJNZ R5,$
                                                              DJNZ R4,$-2
                                                            ENDMAC          ;задержка = 6 + 2*dd2 + 514*(dd1-1) mks
                                                            ;******************************************************
                                                            MACRO @_WAIT_BISY   ;ожидание готовности ЖКИ (BF=1)
                                                              CALL IN
                                                              JB ACC.7,$-2
                                                            ENDMAC
                                                            ;******************************************************
                                                            MACRO @_OUTCOM      ;посылка команды с ожиданием готовности ЖКИ
                                                            @_WAIT_BISY
                                                              MOV A,#|1
                                                              CALL OUT
                                                            ENDMAC
                                                            ;******************************************************
                                                            MACRO @_OUTDAN  ;посылка данных с ожиданием готовности
                                                            @_WAIT_BISY
                                                              MOV A,#|1
                                                              SETB C
                                                              CALL OUT
                                                              CLR C
                                                            ENDMAC
                                                            ;******************************************************
                                                            SYM_WR:     ;подпрограмма записи символа в память ЖКИ
                                                                        ;Вход : R2 - символ
                                                                        ;R0 - адрес DDRAM/CGRAM
                                                              @_OUTCOM 00h  ;установка адреса DDRAM/CGRAM
                                                              @_OUTDAN 02h  ;запись символа
                                                              RET
                                                             
                                                            MACRO @_SYM_WR
                                                              MOV R0,#|1
                                                              MOV R2,#|2
                                                              CALL SYM_WR
                                                            ENDMAC
                                                            ;******************************************************
                                                            SYM_RD:     ;подпрограмма чтения символа из памяти
                                                                    ;DDRAM/CGRAM ЖКИ
                                                                    ;Вход : R0 - адрес DDRAM/CGRAM
                                                                    ;Выход: A - код символа
                                                              @_OUTCOM 00h  ;установка адреса DDRAM/CGRAM
                                                              SETB C
                                                              CALL IN   ;чтение символа из DDRAM/CGRAM
                                                              CLR C
                                                              RET
                                                            ;******************************************************
                                                            STR_WR_RPP: ;подпрограмма записи строки символов в память
                                                                    ;DDRAM/CGRAM ЖКИ
                                                                    ;строка символов находится в РПП
                                                                    ;Вход : DPTR - адрес таблицы символов
                                                                        ;R0 - адрес DDRAM/CGRAM
                                                                        ;R2 - кол-во записыв. символов
                                                                    ;Используются : R3,R4,R5.
                                                              MOV R4,DPL    ;сохренение регистра DPTR
                                                              MOV R5,DPH
                                                              MOV DPTR,#ADR ;запись в DPTR адреса ЖКИ
                                                              @_OUTCOM 00h  ;установка адреса DDRAM/CGRAM
                                                              ANL A,#0
                                                            L_STR_RPP:
                                                              MOV DPL,R4    ;восстановление рег-ра DPTR
                                                              MOV DPH,R5
                                                              MOV R3,A  ;сохранение A
                                                              @_WAIT_BISY   ;ожидание готовности ЖКИ
                                                              MOV A,R3  ;восстановление А
                                                              MOVC A,@A+DPTR    ;получить символ из таблицы
                                                              MOV DPTR,#ADR ;запись в DPTR адреса ЖКИ
                                                              SETB C
                                                              CALL OUT  ;вывод данных
                                                              CLR C
                                                              MOV A,R3  ;восстановление A
                                                              INC A     ;следующий символ из таблицы
                                                              DJNZ R2,L_STR_RPP
                                                              RET
                                                             
                                                            MACRO @_STR_WR_RPP
                                                              MOV R0,#|1
                                                              MOV R2,#|3
                                                              MOV DPTR,#|2
                                                              CALL STR_WR_RPP
                                                            ENDMAC
                                                            ;******************************************************
                                                            STR_WR_RPD: ;подпрограмма записи строки символов в память
                                                                    ;DDRAM/CGRAM ЖКИ
                                                                    ;строка символов находится в РПД
                                                                    ;Вход : R1 - адрес таблицы символов
                                                                        ;R0 - адрес DDRAM/CGRAM
                                                                        ;R2 - кол-во записыв. символов
                                                                    ;Используется A
                                                              @_OUTCOM 00h  ;установка адреса DDRAM/CGRAM
                                                            L_STR_RPD:
                                                              @_OUTDAN 01h  ;вывод данных
                                                              INC R1    ;следующий символ из таблицы
                                                              DJNZ R2,L_STR_RPD
                                                              RET
                                                             
                                                            MACRO @_STR_WR_RPD
                                                              MOV R0,#|1
                                                              MOV R2,#|3
                                                              MOV R1,|2
                                                              MOV A, @R1
                                                              MOV R1, A
                                                              CALL STR_WR_RPD
                                                            ENDMAC
                                                            ;******************************************************
                                                            INIT:   ;инициализация ЖКИ
                                                              MOV DPTR,#ADR ;здесь указать адрес ЖКИ в адресном простр-ве
                                                              CLR R_W   ;линия R_W нулевой уровень
                                                              CLR C ;посылаем команды
                                                                ;сброс ЖКИ
                                                              MOV A,#38h        ;необходимо для сброса ЖКИ
                                                              CALL OUT
                                                              @_DELL #8,#248    ;задержка не менее 4.1 мс
                                                              CALL OUT
                                                              @_DEL #01,#49     ;задержка не менее 100мкс
                                                              CALL OUT
                                                                        ;стандартные установки ...
                                                              @_OUTCOM #03h     ;очистка экрана, AC = 0, AC -> DDRAM , начало строки адресуется
                                                                        ;в начале DDRAM
                                                              @_OUTCOM #38h     ;ширина данных - 8, две строки, матрица 5х8 точек
                                                              @_OUTCOM #0Ch     ;включить изображение, отключить курсор
                                                              @_OUTCOM #06h     ;режим автоматического сдвига курсора
                                                              
                                                             
                                                              @_STR_WR_RPP #00h,#Message, #08h  ; #80h
                                                             
                                                              RET
                                                            ;******************************************************
                                                            ; 2 строка #40h
                                                            BEGIN:
                                                                Call INIT
                                                                mov R4, #Count
                                                             
                                                            for:    
                                                                @_STR_WR_RPP #40h, #Text, #03h  
                                                                @_STR_WR_RPD #43h, 03h, #02h
                                                                    @_STR_WR_RPP #45h, #Text, #03h  
                                                                    @_DELL #00h, #00h
                                                                    
                                                                    inc R3
                                                                inc R3
                                                                    DJNZ R4, for
                                                            END

                                                          Есть не много не нужных вещей но вы них внимания не обращаите.
                                                            Цитата Крон @
                                                            А то вохможности проверки нет.Заранее спасибо

                                                            Схемку по которой работаешь (пишешь сию программу (подключение индикатора к контроллеру)) приложи. А то въезжать куда какой сигнал идет - долго. ;)

                                                            Добавлено
                                                            Кстати а строб данных где???? Так называемая линия Е????
                                                              Вот не большой фаил. Там в принципе все есть =)наверное=)

                                                              -Added
                                                              Цитата medved_68 @
                                                              Кстати а строб данных где???? Так называемая линия Е????

                                                              Она как бы автоматически формируется.
                                                              Я подключаю кстати к ОЦМ31. Может это имеет значение =)
                                                              Прикреплённый файлПрикреплённый файлЖКИ.rar (52.18 Кбайт, скачиваний: 560)
                                                                Цитата Крон @
                                                                Вот не большой фаил.

                                                                Попробуй не РАР а ЗИП архив, а то что то только ссылка скачивается, а не сам файл
                                                                  ВОт
                                                                  Прикреплённый файлПрикреплённый файлЖКИ.zip (64.53 Кбайт, скачиваний: 1558)
                                                                    Хм...согласно схеме строб формируется в 1 при помощи элемента 3 ИЛИ-НЕ. Т.Е. другими словами 1 на Е возникнет только тогда, когда все входные линии (3 шт.) будут опущены в 0. Либо маркировка элемента на схеме неверна, либо..... :( Вообщем в данной интерпретации диалога с ЖКИ не получится. ;) Твой контроллер автоматом опустит либо шину RD, либо WR при использовании команды:
                                                                    ExpandedWrap disabled
                                                                      MOVX @DPTR,......
                                                                    , а согласно схеме любой из входных каналов который будет находится в 1 установит на выходе элемента 3 ИЛИ - НЕ железный 0. Т.Е прыжка строба не будет. :)
                                                                    Сообщение отредактировано: medved_68 -
                                                                      medved_68
                                                                      Спасибо. С меня пиво. куда везти?: =)
                                                                        Цитата Крон @
                                                                        Спасибо. С меня пиво. куда везти?: =)

                                                                        Зачем везти??? :blink: Приезжай в Рязань - напьемся!!!! :D
                                                                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                        0 пользователей:


                                                                        Рейтинг@Mail.ru
                                                                        [ Script execution time: 0,0686 ]   [ 16 queries used ]   [ Generated: 25.04.24, 14:28 GMT ]