Отговори на тема  [ 5 мнения ] 
Oтново борба с LCD и асемблер. 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Яну 04, 2006 6:23 pm
Мнения: 43
Местоположение: Earth
Мнение Oтново борба с LCD и асемблер.
Дисплея е Ampire АC162BY1, свързан е с pic16f913 по 4 битов интерфейс, ето снимка от протеуса:

Изображение

Инициализира се, работи си, единствения и дразнещ проблем който искам да отстраня е следния:

след ресет се инициализира и работи само първия ред. Протеус извежда грешка че дисплея получава данни когато е зает.
При спиране и пускане на захранването диспеля си тръгва нормално. Това се получава само при ресет. При симулацията след първия ресет се инициализира само първия ред, след втория ресет се инициализра правилно и двата реда, след третия ресет пак само първия ред и така се редува.
На платката обаче винаги след ресет се инициализара само първия.

Пробвах да не ползвам RW и да го вържа към маса, увеличавах времезакъснение, по няколко пъти виках инициализация :D, проверявах флаг зает (тука на симулацията дисплея пали а на платката не, но пак ресета е проблемен). Не става и не става.
Често ползвам този дисплей, при програмките на С всичко е точно. На асемблера ми прави мизерии.
Ето подпрограмките за инициализация, изпращане на команда и символи:


Код:
LCD_Init   
      movlw   D'15'   
      movwf   Counter   
      call   Wait         ;15мс 
   
      movlw   B'00110000'
      movwf   PORTC
      bsf   E            
      bcf   E         
      movlw   D'5'
      movwf   Counter   
      call   Wait         ; 5мс
      movlw   B'00100000'      
      movwf   PORTC      
      bsf   E         
      bcf   E
      
      MOVLW    0x28          ; Set 4-bit mode, 2 lines
      CALL    Send_command    
      MOVLW    0x08          ; Switch off display
      CALL    Send_command      
      MOVLW    0x0C          ; Turn on display
      CALL    Send_command      
      MOVLW    0x01          ; Clear display
      CALL    Send_command    
      MOVLW    0x06          ; Enable cursor auto inc
      CALL    Send_command      
      MOVLW    0x80          ; Zero display address
      CALL    Send_command      
      RETURN



Код:
Send_command   
      movwf   LCD_temp
      movlw   D'3'                             ;3мс
      movwf   Counter
      call   Wait
   ;   call   Check_BF      
      movf    LCD_temp,w       
      movlw    0x0F          
      andwf    PORTC,f        
      movf    LCD_temp,w
      andlw   0xF0             
      xorwf    PORTC,f       
      bcf    RW    
      bcf    RS
      bsf    E
      bcf    E
      movlw    0x0F          
      andwf    PORTC,f        
      swapf    LCD_temp,w        
      andlw    0xF0                 
      xorwf    PORTC,f              
      bsf   E
      bcf   E

      return



Код:
Send_char
      movwf   LCD_temp
      movlw   D'3'
      movwf   Counter
      call   Wait   
   ;   call   Check_BF
      movf   LCD_temp,w
      movlw    0x0F      
      andwf    PORTC,f     
      movf    LCD_temp,w
      andlw   0xF0        
      xorwf    PORTC,f    
      bcf   RW         
      bsf   RS         
      bsf   E
      bcf   E
      movlw    0x0F       
      andwf    PORTC,f     
      swapf    LCD_temp,w     
      andlw    0xF0           
      xorwf    PORTC,f     
      bsf   E
      bcf   E
                       (и тук съм слагал времезакъснение, без ефект)
      return   


Дали ресета ще е от пина, или той ще е забранен от конфигурационните битове и ще ресетва стражевия примерно, пак си я прави тази мизерия. :)


Пет Юни 25, 2010 2:29 pm
Профил ICQ
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 27, 2006 11:13 am
Мнения: 381
Местоположение: Варна
Мнение 
пробвай повторно пращане на 28 в инициализацията


Пет Юни 25, 2010 3:33 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Яну 04, 2006 6:23 pm
Мнения: 43
Местоположение: Earth
Мнение 
И така не става ... :(


Пет Юни 25, 2010 3:56 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 13, 2007 12:12 pm
Мнения: 712
Мнение 
"Пенчо, бре чети! Пенчо не чете..." :)
http://ww1.microchip.com/downloads/en/A ... 00587b.pdf

Код:
   LCD_Init   
      movlw   D'15'   
      movwf   Counter   
      call   Wait            ;15мс 
   
      movlw   B'00110000'
      movwf   PORTC
      bsf   E             
      bcf   E         
      movlw   D'5'
      movwf   Counter   
      call   Wait            ; 5мс
nop
      bsf   E             ;B'00110000'
      bcf   E                     
nop
      bsf   E            ;B'00110000'
      bcf   E               
nop    
      movlw   D'5'   
      movwf   Counter   
      call   Wait            ;5мс     
      movlw   B'00100000'       
      movwf   PORTC       
      bsf   E         
      bcf   E
       
      MOVLW    0x28         ; Set 4-bit mode, 2 lines
      CALL    Send_command     
      MOVLW    0x08         ; Switch off display
      CALL    Send_command       
      MOVLW    0x0C         ; Turn on display
      CALL    Send_command       
      MOVLW    0x01         ; Clear display
      CALL    Send_command     
      MOVLW    0x06         ; Enable cursor auto inc
      CALL    Send_command       
      MOVLW    0x80         ; Zero display address
      CALL    Send_command       
      RETURN


Съб Юни 26, 2010 6:06 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Яну 04, 2006 6:23 pm
Мнения: 43
Местоположение: Earth
Мнение 
Мдааа, то обикновено от не дочитане стават тия работи. :oops:
Благодаря за помощта. :prayer:


Пон Юни 28, 2010 8:31 am
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 5 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни