Interruption


Closed Thread
Results 1 to 15 of 15

Thread: Interruption

Hybrid View

  1. #1
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default

    Check the data sheet and see what that pin can do. If it has ADC then with some imagination you could do an ADC interrupt.
    But just change things around to use an interrupt pin. That is what they are for.
    Dave
    Always wear safety glasses while programming.

  2. #2
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,648


    Did you find this post helpful? Yes | No

    Talking

    Hi,

    My crystal ball says ...

    " Pickit2 with a ready made demo card means a 16F690 " ...

    RA.3 shows an Interrupt on change feature ...

    soooo ... just use it !!!

    Alain

    PS: try to give SOME MORE INFOS if you have further questions ...
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

  3. #3
    Join Date
    Aug 2003
    Posts
    985


    Did you find this post helpful? Yes | No

    Default

    An interrupt is overkill for this, and not the typical way to handle the problem at all.
    I'd use a counter to have your button checked every 10ms, and LED routine run every 500ms like this.
    and you get to save the interrupt for when it's actually needed.

    Code:
    x var byte
    direction var bit
    timerbyte var byte
    TRISA = 1
    TRISC = 0
    x = 1
    
    loop:
    PORTC = x
    pause 10
    timerbyte = timerbyte + 1
    
    IF PORTA.3 = 0 then
    IF direction = 0 THEN
    direction = 1
    ELSE
    direction = 0
    ENDIF ' direction
    ENDIF ' button
    
    IF timerbyte = 50 THEN timerbyte = 0 ' 500ms has passed if timerbyte = 0
    
    IF timerbyte = 0 THEN
    IF direction = 0 THEN
    	IF x = 8 THEN x = 1
    	x = x << 1
    ELSE
    	IF x = 1 THEN x = 8
    	x = x >> 1
    ENDIF ' direction
    ENDIF ' timerbyte
    
    goto loop
    Last edited by Art; - 30th December 2009 at 23:24.

  4. #4
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default

    Overkill????

    Please explain.
    Dave
    Always wear safety glasses while programming.

  5. #5
    Join Date
    Aug 2003
    Posts
    985


    Did you find this post helpful? Yes | No

    Default

    Thought I already did.
    It's using hardware to do what should and can be done in software.
    Like wiring a circuit to turn the pic's power off to turn an LED off.
    and developing bad habit at the same time, and not learning anything.

  6. #6
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default

    Well after you made an edit to your post you have some explanation.

    Looping back through the code every so often to check on a button smells like some sort of pasta to me.

    Maybe the OP should learn to use the hardware. Then when the code grow to more than a few lines......

    Wait a minute. Your joking, right?
    Using an interrupt is forming bad habits.
    Now I get it.
    NOT!
    Dave
    Always wear safety glasses while programming.

  7. #7
    Join Date
    Aug 2003
    Posts
    985


    Did you find this post helpful? Yes | No

    Default

    When it's not needed, I think it is.
    What if the platform didn't support interrupts?
    I think using an interrupt when it isn't needed is forming a bad habit.
    The loop is happening anyway, and I have one less label in my code.
    It's less spaghetti than the original which doesn't run in one single loop.
    An interrupt would add more spaghetti in the generated asm to goto 0x04.

    This is a simple program, but as it grew, you might need an interrupt for something else.

    EDIT; ps I edited to edit the program, but haven't actually run it.
    if it has any issue, it still offers a solution.
    Last edited by Art; - 31st December 2009 at 00:25.

  8. #8
    Join Date
    Dec 2009
    Posts
    7


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Art View Post
    An interrupt is overkill for this, and not the typical way to handle the problem at all.
    I'd use a counter to have your button checked every 10ms, and LED routine run every 500ms like this.
    and you get to save the interrupt for when it's actually needed.

    Code:
    x var byte
    direction var bit
    timerbyte var byte
    TRISA = 1
    TRISC = 0
    x = 1
    
    loop:
    PORTC = x
    pause 10
    timerbyte = timerbyte + 1
    
    IF PORTA.3 = 0 then
    IF direction = 0 THEN
    direction = 1
    ELSE
    direction = 0
    ENDIF ' direction
    ENDIF ' button
    
    IF timerbyte = 50 THEN timerbyte = 0 ' 500ms has passed if timerbyte = 0
    
    IF timerbyte = 0 THEN
    IF direction = 0 THEN
    	IF x = 8 THEN x = 1  <- You forgot that if x = 8 and then x = 1 you must  go to loop or else x will never be 1 but MORE than one
    	x = x << 1
    ELSE
    	IF x = 1 THEN x = 8  <- Same here
    	x = x >> 1
    ENDIF ' direction
    ENDIF ' timerbyte
    
    goto loop
    I have pointed out some mistakes. Thanks for your code man anyway, cool way to do things, much better than ON INTERRUPT I believe. Don't be too harsh on me guys I've been learning this for less than a week

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


    Did you find this post helpful? Yes | No

    Default

    I've been learning this for less than a week
    I would say you're definitely doing good for someone just getting started.

    It's nice here since you find so many various ways of doing something, which really
    helps one to think outside-the-box. Embedded programming is just creative problem
    solving, and you'll find a lot of different creative approaches around here for
    sure.

    Which one is best for your application is totally up to you.
    Regards,

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

  10. #10
    Join Date
    Dec 2009
    Posts
    7


    Did you find this post helpful? Yes | No

    Default

    Thanks Bruce, you just pointed out the reason why I love programming and why I love programming a micro controller is because you can see the results in real life, not only digitally.

    Thanks, really

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