Instant Interrupts - Revisited


Closed Thread
Results 1 to 40 of 773

Hybrid View

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


    Did you find this post helpful? Yes | No

    Wink

    Quote Originally Posted by Ioannis View Post
    Alain, there is no problem here where the lines of includes are placed. Either on the very top or just before the macros... Are you sure about that?

    Ioannis
    Hi,

    Yess .. I'm pretty sure !!!

    I had an error raising ( Vars_Saved not defined ... but it was correctly defined in the listing ) .

    but now I've also uncommented Wsaves and compiler has compiled fine once ... no more compiler errors appears, whatever line the "includes" are placed ...

    a bit strange, but not the first strange thing I see with MCS ...

    Alain
    ************************************************** ***********************
    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 " !!!
    *****************************************

  2. #2
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    4,116


    Did you find this post helpful? Yes | No

    Default

    Have tried to compile from command line and it went OK?

    Ioannis

  3. #3


    Did you find this post helpful? Yes | No

    Default

    I'm looking at a possible necessity to need to upgrade to PIC24's and above...
    I use DT INST INT's with my PIC16's and PIC18's however it would be a royal pain to have to write my own interrupt system for PIC24's and above...

    Is their any work being done on DT Ints at the moment?
    Is their any plans for DT Int's?
    Anyone working on DT int's in a team?

    Thanks

  4. #4
    Join Date
    Feb 2003
    Location
    Sydney, Australia
    Posts
    126


    Did you find this post helpful? Yes | No

    Default

    I have done a lot of work on the PIC24F series using MikroElektronika dsPIC Basic compiler, and have had no issues with Interrupt or having to implement a DT_INT style system. Interrupts are handed well in the compiler, which I think is due to the way the improved architecture handles them. One you try the Peripheral Pin mapping in the 24 series its hard to go back !

    The only issue I had was changing my coding style after years of working with PBP ! I still use PBP for all my 16F and 18F stuff, so don't shoot me down for promoting other peoples products !

    Bill.

  5. #5
    Join Date
    Jun 2005
    Location
    West Australia
    Posts
    116


    Did you find this post helpful? Yes | No

    Default Help with disabling DT_ Int's during a For/Next loop.

    Hi Folks,

    I don't have a lot of experience with using DT's Int's (thank you Darrel!) and had no problems until recently needing to selectively Disable them...

    I have an application measuring wind which requires a rolling (3 x 1 second) update easily taken care of by a For Next loop. At any time a master logger can interrogate this separate wind acquisition unit and request the processed data, but I want the ISR to only occur at the end of the loop so the math can complete as a set.

    The abbreviated code below shows what I am using but I have no Int's when the @ INT_DISABLE INT_INT is inserted. With this removed I do have them but immediately following the Debug data sent from within the ISR the remaining T loop count completes before Clearing and restarting i.e math is performed and data is sent from an incomplete routine.

    Code:
    16F88, PBP 2.60, MPASM 5.20
    
            Include "MODEDEFS.BAS"      ' Include Shiftin/out modes
            Include "DT_INTS-14.bas"    ' Darrel's routines.
            Include "ReEnterPBP.bas"    ' Only needed if Pbp Interrupts used.
    
        Define LCD_DREG PORTB           ' Port for LCD Data.
    	Define LCD_DBIT 4               ' Use upper 4 bits of Port.
    	Define LCD_RSREG PORTA          ' Port for RegisterSelect (RS) bit.
    	Define LCD_RSBIT 7              ' Port Pin for RS bit.
    	Define LCD_EREG PORTA           ' Port for Enable (E) bit.
    	Define LCD_EBIT 6               ' Port Pin for E bit.
    	Define LCD_BITS 4               ' Using 4-bit bus.
    	Define LCD_LINES 2              ' Using 2 line Display.
    	Define LCD_COMMANDUS 2000       ' Command Delay (uS).
    	Define LCD_DATAUS 50            ' Data Delay (uS).
    
        DEFINE DEBUG_REG PORTB          ' Debug pin port
        DEFINE DEBUG_BIT 1              ' Debug pin bit
        DEFINE DEBUG_BAUD 9600          ' Debug baud rate 
        DEFINE DEBUG_MODE 1             ' Debug mode: 0 = True, 1 = Inverted 
    
        DEFINE ADC_BITS 10              ' Set number of bits in result
        DEFINE ADC_CLOCK 3              ' Set clock source (rc = 3)
        DEFINE ADC_SAMPLEUS 50          ' Set sampling time in microseconds 
    
    '    DEFINE OSC 8                    ' Needed if oscon set for 8Mhz.
    '    OSCCON = %01110010              ' 8Mhz (F88).
    
            OPTION_REG.6=0      ' 0=Falling-Edge Trigger.
            OSCCON = %01100010  ' 4Mhz (F88).
            TRISA = %00101111   ' A.5 Set, A.3 WD2, A.2 WS2, A.1 WD1, A.0 WS1.
            TRISB = %00001101   ' B.3 -, B.2 +, B.0 Sin.
            ANSEL = %00001010   ' PORTA.1,3 analog, remainder digital (F88).
            ADCON0 = %11001101  ' Set A/D to Frc, Channel 1, On (F88).                   
            ADCON1 = %10000000  ' R justify (where the 6 MSB of ADRESH read as 0 i.e. 10 bit), Vdd for Vref.
            CMCON = 7         	' Comparators off.
            pause 100           ' Let everything settle...
            RedLED = 0		    ' Red LED Off.
    clear
            debug 10,13,"I'm Alive!",10,13            '
    
    ASM
    INT_LIST    macro      ; IntSource,   Label,  Type,  ResetFlag?
                INT_Handler    INT_INT,  _MyInt,   PBP,  yes
                endm
    INT_CREATE             ; Creates the interrupt processor
    ENDASM
    '@   INT_ENABLE   INT_INT     ; enable external (INT) interrupts     (enabled further down).
    
            GOTO Satu           ' Jump over the subroutines area.
     
    ' Subroutines here in the first page...
    
    ' Program area...
    Satu:      ' Operation when system first powered up.
    
    Running:    ' Normal running routine.
        if x=1 then                     ' Returning from 1Min Rollover or Interrupt.
        gosub ResetAll                  ' Start fresh count - Clear and reset all.
        gosub Read_offsets              ' Retrieve stored values.
        endif                           '
    
    @ INT_DISABLE INT_INT               ; No Ints during the For/Next loop - ensures complete set for math.
        for T = 0 to 2                  ' 3 event sliding window.
        gosub Blinky                    ' LED shows sampling.
        gosub Get_revs                  ' Run the count routine.
        ch = 1                          ' Second channel for direction 1 (ch0 for S1).    
        gosub Get_Dirn                  ' Read the realtime direction.
        LCDOUT $FE,$CF,Dec T            ' Second line, last position - indicates present count.
    
    ' This section averages the speed of the latest three samples i.e. derives Gust. 
    ' This section deals with Wind Direction.
    ' Get instant Wind Direction value.
    ' Update Max and Min Direction
    ' Update Sigma Theta                                       
    ' 1min period report.
        if Wsmpls=60 then               '
        debug 10,10,13,"S1i ",#S1i,", S1x ",#S1x,", Gu1x ",#Gu1x,", Gu1av ",#Gu1av,13,10,_
        "AD ",#AD_res,", WD1av ",#WD1d,", Max ",#D1x,", Min ",#D1n,", ST1av ",#ST1av,10,10,13 ' ****
    x=1    
    goto Running                   ' Reset all and start again.
        endif
        
    Continue:
        pause z                         ' This plus sensor 1 count period should equal 1 second 
        next                            '  Back to loop testing.
    @   INT_ENABLE   INT_INT     ; enable external (INT) interrupts only after For/Next loop is completed.   
        goto Running                    ' Repeat the whole cycle.
      
    '---[INT - interrupt handler]---------------------------------------------------
    MyInt:
    	toggle RedLED                   ' Blink the LED on interrupt.
    ' Report the Av wind speed, Maximum Gust, Maximum Speed, Av dirn and Sigma Theta since last interrupt.
        debug 10,13,dec3 S1av,".",dec1 S1avr,",",dec3 Gu1x,",",dec3 S1x,",",dec3 WD1d,",",dec3 ST1,13,10
        LCDOUT $FE,$C0,"Data out, Reset!"   ' Second line.
        pause 1000                      ' Time enough to read.
        x=1                             ' Flag the interrupt.
    @ INT_RETURN                        ; Return to point of Interrupt and resume.
    Can anyone offer some advice or point out where I am going wrong please?

    Thanks and regards to all,
    Bill
    Last edited by wjsmarine; - 7th May 2010 at 18:54. Reason: code box

  6. #6
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    Hi Bill,

    Are you using version 1.00 of DT_INTS-14.
    http://www.darreltaylor.com/DT_INTS-14/intro2.html (bottom of page)

    If so, try adding this define ...
    DEFINE INT_ENABLECLEARFIRST 0

    By default, the INT_ENABLE command clears the flag first before enabling.
    So, if there is an interrupt pending, it will be discarded.

    Adding the define tells it to NOT clear the flag first.
    It's only available in the 1.00 version.

    hth,
    DT

  7. #7
    Join Date
    Jun 2005
    Location
    West Australia
    Posts
    116


    Did you find this post helpful? Yes | No

    Default No change - no Int's.

    Hi Darrel,

    Thanks for your help.

    I am using ver 1.00 and added the new Define per your instructions - same result (no Int's).

    It compiles without errors (as before) and runs correctly in all other respects apart from an Interrupt taking place no matter how many times I trigger (or even hold the pin low).

    I'm not desperate for the fix so if it's not convenient for you I can wait, no problem.

    Kind regards,
    Bill

  8. #8
    Join Date
    Feb 2006
    Location
    Gilroy, CA
    Posts
    1,530


    Did you find this post helpful? Yes | No

    Default

    Are you still compiling for a 16f887? Because that chip doesn't even have a IOCIF. I think only the 16f1827's and such have one of those. So that is pretty weird.
    http://www.scalerobotics.com

  9. #9
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    For a 16F887, it's RBC_INT.
    You can tell that from the datasheet which specifies "PORTB change" interrupts.

    And with DT_INTS-14 you'll see some comments in the file ...
    Code:
    ;-- Place a copy of these variables in your Main program -------------------
    ;--   The compiler will tell you which lines to un-comment                --
    ;--   Do Not un-comment these lines                                       --
    ;---------------------------------------------------------------------------
    ;wsave   VAR BYTE    $20     SYSTEM      ' location for W if in bank0
    ;wsave   VAR BYTE    $70     SYSTEM      ' alternate save location for W 
                                             ' if using $70, comment wsave1-3
    
    ' --- IF any of these three lines cause an error ?? ------------------------
    '       Comment them out to fix the problem ----
    ' -- Which variables are needed, depends on the Chip you are using -- 
    ;wsave1  VAR BYTE    $A0     SYSTEM      ' location for W if in bank1
    ;wsave2  VAR BYTE    $120    SYSTEM      ' location for W if in bank2
    ;wsave3  VAR BYTE    $1A0    SYSTEM      ' location for W if in bank3
    ' --------------------------------------------------------------------------
    The idea is that wsave variables should be in your main program.
    The old way, when you compile for a different chip, it may not have had the correct variables, and it would not have warned you.

    Now it will always tell you when the wrong variables are commented.
    And you can just change them in your code, and NEVER have to edit DT_INTS-14.

    Some people get carried away with the editing and screw everything up.
    Now there's NO REASON to edit DT_INTS-14
    DT

  10. #10
    Join Date
    Feb 2006
    Location
    Gilroy, CA
    Posts
    1,530


    Did you find this post helpful? Yes | No

    Default

    I used DT-INTS 1.10 on a 16f887
    http://www.scalerobotics.com

  11. #11
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    4,116


    Did you find this post helpful? Yes | No

    Default

    When compiling the attached file I get the attached error.

    It drives me crazy....

    Ioannis
    Attached Images Attached Images  
    Attached Files Attached Files
    Last edited by Ioannis; - 15th September 2010 at 20:41.

  12. #12
    Join Date
    May 2008
    Location
    Italy
    Posts
    825


    Did you find this post helpful? Yes | No

    Default

    Hi Ioannis, you cannot use the wsave variable outside the DT interrupt since such a variable is in use within the routine.

    Code:
    wsave   VAR BYTE    $20     SYSTEM      ' location for W if in bank0
    ;wsave   VAR BYTE    $70     SYSTEM      ' alternate save location for W 
                                             ' if using $70, comment wsave1-3
    clear
    INCLUDE "c:\projects\picdem2\DT_INTS-14.bas"
    INCLUDE "c:\projects\picdem2\ReEnterPBP.bas"
    You have to comment/uncomment the variable within DT int routine.

    Al.
    All progress began with an idea

Similar Threads

  1. Clock using Instant Interrupts
    By PICpocket in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 16th February 2009, 21:43
  2. DT instant interrupts with mister_e keypad
    By Tomexx in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 26th November 2008, 20:02
  3. DT's Instant Interrupts trouble
    By Tomexx in forum mel PIC BASIC Pro
    Replies: 7
    Last Post: - 24th November 2008, 20:48
  4. Keypad and DT's Instant Interrupts
    By Homerclese in forum General
    Replies: 11
    Last Post: - 27th April 2007, 06:32
  5. Replies: 1
    Last Post: - 1st November 2006, 03:11

Members who have read this thread : 10

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

Tags for this Thread

Posting Permissions

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