Changing LCD display refresh rate


Results 1 to 11 of 11

Threaded View

  1. #7
    Join Date
    Sep 2005
    Location
    Campbell, CA
    Posts
    1,107


    Did you find this post helpful? Yes | No

    Default Re: Changing LCD display refresh rate

    A slightly different method:

    Updating LCDs is really time consuming, from a PIC viewpoint. I find that a .25(once every 4 seconds) update rate is about right for most people, especially if it a two-line display.

    The code below lets your code run at full speed and updates the LCD once every 4 seconds. Of course the rate can be changed to suit the user. It uses an ASM interrupt for low overhead.
    Of course, you could read the timer directly, but I find that I always need interrupts anyway.



    Code:
          DEFINE OSC 4 
    
         MasterClock VAR WORD BANKA SYSTEM
    ;----------------Timer Setup-----------------------------------  
        T0CON = 000010 ; /1:8   prescaler, tmr0 ON
    ;
    ;-------------------------------------------------------------     
       
    INCLUDE "DT_INTS-18.bas"    '
    ;---------------------------------------------------------------
    asm
        INT_LIST  macro     
            INT_Handler    TMR0_INT,  MainTimer, ASM, yes
           endm
        INT_CREATE              
    endasm
    ''----------------- Initialization Done! -----------------------------
        Goto OverInt 
    ;----------------------- Timer INt ------------------------------------    
    ASM
    MainTimer
            movlw   0xCF         ;  100 mSec @ 4MHz
            movwf   TMR0H
            movlw   0x2C
            movwf   TMR0L
           
            btfsc   MasterClock + 1,7     ; Don't let MasterClock roll over
            bra     DontCount
            infsnz  MasterClock
            incf    MasterClock + 1          
            
          
    DontCount        
          
          bcf     INTCON,2
        INT_ENABLE TMR0_INT
        INT_RETURN
    ENDASM
    ;---------------------------------------------------------------------
    OverInt:
    
       INTCON.7 = 1  ; Main Ints
       INTCON.6 = 1  ; Peripheral ints
    
        MasterClock = 0
    @ bcf INTCON,2
    @ INT_ENABLE TMR0_INT
    TopOfLoop:
        If MasterClock >= 20 then     ; 20 X .1 sec = 2 seconds
           MasterClock = 0
             
             ; Do LCD routines here
        endif
        
            ; Your main program here
            
            goto TopOfLoop
    Last edited by Charles Linquis; - 4th November 2011 at 00:08.
    Charles Linquist

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts