Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Oтново борба с LCD и асемблер.
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=7935
Страница 1 от 1

Автор:  MegatroniC [ Пет Юни 25, 2010 2:29 pm ]
Заглавие:  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   


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

Автор:  didofen [ Пет Юни 25, 2010 3:33 pm ]
Заглавие: 

пробвай повторно пращане на 28 в инициализацията

Автор:  MegatroniC [ Пет Юни 25, 2010 3:56 pm ]
Заглавие: 

И така не става ... :(

Автор:  fan [ Съб Юни 26, 2010 6:06 am ]
Заглавие: 

"Пенчо, бре чети! Пенчо не чете..." :)
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

Автор:  MegatroniC [ Пон Юни 28, 2010 8:31 am ]
Заглавие: 

Мдааа, то обикновено от не дочитане стават тия работи. :oops:
Благодаря за помощта. :prayer:

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/