Faster DIG algorithm


Closed Thread
Results 1 to 9 of 9

Hybrid View

  1. #1
    Join Date
    Sep 2009
    Posts
    755


    Did you find this post helpful? Yes | No

    Default Re: Faster DIG algorithm

    /My english isn't good. Tabsoft got it right.
    I'll try to explain better...
    I have word variable Pressure.
    I need to extract digits from Pressure variable to 4 different variables for displaying on static 7 segment LCD.
    Offtopic:
    To dive LCD just connect pin to pin LCD with MCU, and in ISR XOR LAT with mask every 20mS or so...
    BANKSEL PORTA 'Select Bank
    MOVLW 11101111b 'Mask unused pins
    XORWF LATA,F 'Invert unmasked pins and write to LATA
    It should have lower power consumption than multiplexed LCD wit LCD module on PIC.

    Back to topic:
    One thing that I tried is to use DIG and 4 variable. If I can extract one digit much faster, then do same thing for all 4 digits. That is why I ask for faster extracting for one variable...
    Other way is to use arraywrite, and DEC4 to extract digit. Each byte in array will have one digit.

    Tabsoft, thank you. You give me an idea:
    Pressure = 1234
    tmpDig0 = Pressure // 10 'tmpDig0 =4
    pressure = Pressure / 10 'Pressure=123
    tmpDig1 = Pressure // 10 'tmpDig1=3
    pressure = Pressure / 10 'Pressure=12
    tmpDig2 = Pressure // 10 'tmpDig2=2
    tmpDig3 = Pressure / 10 'tmpDig3=1
    This will be probably ok. It takes just under 1,5mS.
    I didn't mention that I'm using PBPL and running on intosc at 16MHZ for all test.
    I'm waiting boards to arrive, so I can't measure current consumption jet. So there is always option to go back to PBPW.

    Thank you all.
    Last edited by pedja089; - 13th February 2015 at 09:52.

  2. #2
    Join Date
    Jan 2013
    Location
    Texas USA
    Posts
    229


    Did you find this post helpful? Yes | No

    Default Re: Faster DIG algorithm

    I confirmed you observations when I reran the routines @ 16MHz and PBPL.

    I did notice if you use PBP's "DIG" command, the number of instruction cycles used are not consistent for various 4 digit numbers.

    Here is the data I collected.

    Code:
    Algorithm 1:
    Pressure = 1234
    'Start Stopwatch in MPLAB Simulator
    tmpDig0 = Pressure dig 0
    tmpDig1 = Pressure dig 1
    tmpDig2 = Pressure dig 2
    tmpDig3 = Pressure dig 3
    'Stop Stopwatch in MPLAB Simulator
    
    Algorithm 2:
    Pressure = 1234
    'Start Stopwatch in MPLAB Simulator
    tmpDig0 = Pressure // 10
    tmpDig1 = Pressure / 10
    tmpDig2 = Pressure / 100
    tmpDig3 = Pressure / 1000
    
    tmpDig1 = tmpDig1 // 10 
    tmpDig2 = tmpDig2 // 10
    tmpDig3 = tmpDig3 // 10
    'Stop Stopwatch in MPLAB Simulator
    
    Algorithm 3:
    Pressure = 1234
    tmpDig0  = Pressure // 10 
    pressure = Pressure / 10 
    tmpDig1  = Pressure // 10
    pressure = Pressure / 10
    tmpDig2  = Pressure // 10
    tmpDig3  = Pressure / 10
    'Stop Stopwatch in MPLAB Simulator
    
    
    PBPW @ 16MHz
    Algorithm   Inst Cycles     Time
    1           2958            739.50 us
    2           2086            521.50 us
    3           1783            445.75 us
    
    PBPL @ 16MHz
    Algorithm   Inst Cycles     Time
    1           9626            2.406500 ms
    2           6830            1.707500 ms
    3           5839            1.459750 ms
    Obviously PBPL slows down the routines considerably.

    Good luck.
    Regards,
    TABSoft

  3. #3
    Join Date
    Sep 2009
    Posts
    755


    Did you find this post helpful? Yes | No

    Default Re: Faster DIG algorithm

    Thanks.
    I'll post current consumption when I get PCB.

  4. #4


    Did you find this post helpful? Yes | No

    Default Re: Faster DIG algorithm

    Hi guys,

    This is an interesting topic.

    I was wondering if the following line ( i dont know how fast it runs ) can also run faster with the technic shown above:

    Code:
    LCDOUT $FE,LINE2,"FREQ ",DEC DISPFREQ DIG 2,DEC DISPFREQ DIG 1,",",DEC DISPFREQ DIG 0, " KHz    "
    Best regards
    Rui

  5. #5
    Join Date
    Jan 2013
    Location
    Texas USA
    Posts
    229


    Did you find this post helpful? Yes | No

    Default Re: Faster DIG algorithm

    Yes, it will reduce the number of instruction cycles in your example.
    Given that you are only extracting 3 digits of your DISPFREQ variable, Algorithm #2 will be faster.

    Assuming you are using PBPW not PBPL here are the instruction cycles results.

    Using the DIG method: 7606 Inst Cycles
    Using Algorithm #2: 7293 Inst Cycles

    That is a savings of 313 instruction cycles. If you are running a 4Mhz Fosc/4 MCU then that would be a 313us savings.
    Though it is a small savings on cycles and time, it does come at a cost of 3 extra byte variables to hold the values.

    Here are the two code options tested.

    Code:
    tmpDig0 var byte
    tmpDig1 var byte
    tmpDig2 var byte
    DISPFREQ var byte
    LINE2 con $c0
    
    
    DISPFREQ = 1234
    
    'Start Stopwatch in MPLAB Simulator
    LCDOUT $FE,LINE2,"FREQ ",DEC DISPFREQ DIG 2,DEC DISPFREQ DIG 1,",",DEC DISPFREQ DIG 0, " KHz    "
    'Stop Stopwatch in MPLAB Simulator
    'Output: FREQ 23,4 KHz
    
    'Start Stopwatch in MPLAB Simulator
    tmpDig0 = DISPFREQ // 10
    tmpDig1 =DISPFREQ / 10
    tmpDig1 = tmpDig1 // 10
    tmpDig2 = DISPFREQ / 100
    tmpDig2 = tmpDig2 // 10
    
    LCDOUT $FE,LINE2,"FREQ ",DEC tmpDig2,DEC tmpDig1,",",DEC tmpDig0, " KHz    "
    'Stop Stopwatch in MPLAB Simulator 
    'Output: FREQ 23,4 KHz
    Regards,
    TABSoft

  6. #6


    Did you find this post helpful? Yes | No

    Default Re: Faster DIG algorithm

    Greetings Tabsoft,

    Thank you for the information and tip.
    Very helpfull !

    Regards
    Rui

Similar Threads

  1. help about ds1804 (dig. pot.)
    By chailuck in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 7th August 2010, 10:33
  2. A Checksum Algorithm
    By amindzo in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 8th December 2008, 22:33
  3. DIG DEC Madness
    By earltyso in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 13th June 2008, 23:05
  4. Use of DIG, DCD, NCD
    By websmith in forum mel PIC BASIC Pro
    Replies: 0
    Last Post: - 6th November 2006, 06:14
  5. 'DIG' equivalent in other Languages?
    By Art in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 27th November 2005, 22:43

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