QEI Hardware Quadrature Encoder Inputs PIC 18F4431


Results 1 to 11 of 11

Threaded View

  1. #7
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,624


    Did you find this post helpful? Yes | No

    Default Re: QEI Hardware Quadrature Encoder Inputs PIC 18F4431

    Hi Mark,
    I'll explain a bit further: I can load POSCNTH and POSCNTL, and they show up as correctly loaded, but as soon as the encoder moves, it jumps back to 5535 and rolls to 0 from there.
    Then my guess is that you have MAXCNT set to 5535 and you're moving the enocer backwards from 0 (so it rolls over to MAXCNT) or you're preloading POSCNT with a value bigger than MAXCNT.

    I can change MAXCNT, but that doesn't put it in the middle of the count range and avoid the rollover.
    MAXCNT isn't there to prevent roll over. It's there to set the value at which rollover occurs. For example, if you have a 2000 counts/rev encoder you could set MAXCNT to 2000. Then you'll get an QEI interrupt for each revolution of the encoder.

    When counting up and POSCNT tries to go one count "beyond" MAXCNT POSCNT will roll over to 0.
    When counting down and POSCNT tries to go one count "below" 0 it'll roll over to MAXCNT.

    So, if you set MAXCNT to 999 then then POSCNT will count 0...999...998...997...998....999...0...1...2...3 and so on.


    The reason I asked about MAXCNT value of 1527h is that it is mentioned in the datasheet, on page 173, note 5, and I thought it is a strange number.
    That's only to show the counter action that I'm trying to explain above and that it rolls over when POSCNT = MAXCNT, which in the case shown in the datasheet happens to be at 1527h. The maximum value you can set it MAXNCT (and POSCNT) to is 65535.

    If all you want is a 16 bit counter, starting in the "middle" then try this:
    Code:
    '******************************************************************************
    QEICON = %10011000                      ' Setup QEI, 4X mode, reset on POSCNT = MAXCNT. 
    
    MAXCNTH = 255                           ' MAXCNT = 65535
    MAXCNTL = 255 
    
    POSCNTH = 128
    POSCNTL = 0                             'Set QEI counter to "center".
    '******************************************************************************
    PAUSE 2500
    HSEROUT["Program start.", 10, 13]
    
    Main:
        HSEROUT[DEC POSCNTH*256+POSCNTL,13]
        Pause 250
    Goto Main
    The counter will start at 32768, count up or down from there, roll over will occur from 65535->0 and from 0->65535 depending on direction.

    /Henrik.
    Last edited by HenrikOlsson; - 21st October 2014 at 19:42.

Members who have read this thread : 1

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