Please help me understand this code


Closed Thread
Results 1 to 15 of 15

Hybrid View

  1. #1
    Join Date
    Jul 2003
    Posts
    2,405


    Did you find this post helpful? Yes | No

    Default

    In my DEBUG line "I" shows up as 0,2,4,5 randomly
    You probably have several timer interrupts while it's inside your DO LOOP, so I ends up with unexpected values.

    Example: With i = i + 1 being first in your timer interupt, it's changing the value of i on every interrupt, and sometimes even during the process of PBP trying to output everything with DEBUG.

    When DEBUG actually starts, your interrupt is still changing I before PBP outputs it.
    Regards,

    -Bruce
    tech at rentron.com
    http://www.rentron.com

  2. #2
    Join Date
    Nov 2005
    Location
    Bombay, India
    Posts
    966


    Did you find this post helpful? Yes | No

    Default

    Try this. Changes are in Bold

    Code:
    '---[INT - interrupt handler]------Signal found at RB0, take a reading
    SignalFound:
        T1CON.0 = 0                             ; Stop timer1
        i = i + 1                               
        FValue = TMR1H * 256 + TMR1L + fvalue   ; Add 10 readings to FValue
        if i >= 10 then                        ' COMPARISON CHANGED TO >=
            fvalue = fvalue / i                ; get the average of one reading CHANGED HERE
            i = 0                               ; Reset counter
            ReadFlag = 1                        ; FValue is ready to read 
        endif        
        TMR1H = 21                              ; reset timer1 to 60mS
        TMR1L = 167
        T1CON.0 = 1                             ; Start timer1
    @ INT_RETURN
    Last edited by Jerson; - 29th April 2010 at 02:26.

  3. #3
    Join Date
    May 2009
    Location
    Montreal, QC, Canada
    Posts
    118


    Did you find this post helpful? Yes | No

    Default

    Hi Bruce and Jersen,

    That is really fast !

    Jerson,
    I was able to observe the proper values by moving the DEBUG line inside the INT handler.

    Is there a more efficient way to observe variables values within a program?
    It seams like LCDOUT and DEBUG are taking too long to operate and are giving false values.

    Thank you

    Mike

  4. #4
    Join Date
    May 2009
    Location
    Montreal, QC, Canada
    Posts
    118


    Did you find this post helpful? Yes | No

    Default

    Bruce,

    I came across this link you wrote Entitled "Using MicroCode Studio ICD
    With The PIC16F628 Microcontroller" http://www.rentron.com/PicBasic/MCS_X3.htm
    Would this enable me to view each step of a program as well as where the PIC timer is at while executing a specific line of code?

    Mike

  5. #5
    Join Date
    Jul 2003
    Posts
    2,405


    Did you find this post helpful? Yes | No

    Default

    Hi Mike,

    Yep. MCS+ ICD is very handy if you have the paid version of MCS+. But if you're trying to view real-time timer values, I would go with MPLAB/MPSIM.

    By the time you LCDOUT, SEROUT, whatever, the timer is long past the value you're displaying.

    What precisely is it you need to do?
    Regards,

    -Bruce
    tech at rentron.com
    http://www.rentron.com

  6. #6
    Join Date
    May 2009
    Location
    Montreal, QC, Canada
    Posts
    118


    Did you find this post helpful? Yes | No

    Default

    I didn't think I could see real time values with MPSIM using a program written with PBP!
    I will give it a try, I guess I have to invest a little time learning the Stimulus properly, I have done very little assembly and was able to test buttons triggering LEDs but when I started going deeper into this I kind of got distracted with PBP.

    I am building an ultrasonic distance measurement device, I have seen some circuits here and there but I really want to fully understand what I am doing and build my own. I don't have any code to show just yet because I have started to isolate the different parts of my code and it doesn't look like any program right now.
    What I am trying to achieve is using Daryl's Interrupts.
    Using TMR1_INT I send HPWM and using INT_INT I detect the echo from the Rx on RB0.

    I keep trying to tell myself that the PIC is running fast but I am always amazed with how much I underestimate the speed at witch it operates.

    I think I am not too far from something, just wish I could slow down everything and observe what is going on during each operation of code (other than the operation itself)
    I guess MPSIM is probably the way to go?

    Mike

  7. #7
    Join Date
    May 2009
    Location
    Montreal, QC, Canada
    Posts
    118


    Did you find this post helpful? Yes | No

    Default

    I got PBP running with MPSIM and now I finely see what is happening and when, thanks for this info.

    Mike

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