Remain counting while sending out a pulse


Closed Thread
Results 1 to 6 of 6

Hybrid View

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


    Did you find this post helpful? Yes | No

    Default

    Hi,
    I'd sugest you set up the TMR1 module as an asychcronous counter and feed your pulses to Pin2. The timer module will then count the pulses for you and you can read/reset/preset the count any time you like. The timer will keep on counting no matter what the rest of program is doing. Have a look at section 6 in the datasheet.

    /Henrik Olsson.

  2. #2
    Join Date
    Apr 2006
    Location
    GearSweaterMountain, The Netherlands
    Posts
    52


    Did you find this post helpful? Yes | No

    Default

    Hi Henrik, thanks for replying !

    I have looked at section 6 in the datasheet. Do you have some sample code
    on how to setup pin 2 as an asychcronous counter ?

    Is the counter able to put it's "number of pulses count" into a variable ?

    I have got no clue on how to implement this within my code ...

    Thanks in advance !

  3. #3
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,612


    Did you find this post helpful? Yes | No

    Default

    Hi,
    First you need to set GP5 as an input. Then you set the function of the TMR1 module using the T1CON register. The value of the TMR1 module is can be read/written from/to using TMR1H and TMR1L register.

    Here's a shot at it (untested):
    Code:
    TRISA.5 = 1    'Set GP5 to input.
    
    Count Var Word
    Temp var byte
    
    'Set TMR1 to increment on rising edge of T1CKI pin, no prescaler, no sync to internal clock, TMR 1 is on.
    T1CON = %00000111
    
    Loop:
    Count.highbyte = TMR1H     'Get high byte of counter
    Count.Lowbyte = TMR1L     'Get low byte of counter
    
    
    'Make sure that the counter did not roll over between reads of the high and low byte.
    
    Temp var TMR1H              'Get highbyte again.
    If Temp - Count.HighByte <> 0 then     'The two values differs so we read it again.
      Count.HighByte = TMR1H
      Count.LowByte = TMR1L
    ENDIF
    
    Serout ser,T9600,[#Count,13,10]    'Send count to computer.
    Pause 100
    Goto Loop
    As I said - not tested but should be close to what you want.

    (Edit)
    Oh..I forgot...
    You can stop counting by setting bit0 of T1CON to 0, start again by setting it to 1 and you can set the TMR1H and TMR1L register to what ever you want by writing to them just like any other variable.

    /Henrik Olsson.
    Last edited by HenrikOlsson; - 10th January 2007 at 14:32.

  4. #4
    Join Date
    Apr 2006
    Location
    GearSweaterMountain, The Netherlands
    Posts
    52


    Did you find this post helpful? Yes | No

    Default

    Henrik ! Wow !

    Compiled your code, and it counts great !
    Many thanks for getting me started !

  5. #5
    Join Date
    Oct 2005
    Location
    Sweden
    Posts
    3,612


    Did you find this post helpful? Yes | No

    Smile

    Hi,
    Compiled your code, and it counts great !
    Woohoo....I don't think that has ever happend to me before..... :-)
    You're welcome!

    /Henrik Olsson.

Similar Threads

  1. Pulse Capture and byte building
    By boroko in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 21st July 2009, 01:59
  2. Single digit 7 Seg LED clock - PIC16F88
    By thirsty in forum Code Examples
    Replies: 4
    Last Post: - 17th July 2009, 08:42
  3. COUNT is not counting again
    By jellis00 in forum mel PIC BASIC Pro
    Replies: 33
    Last Post: - 19th June 2009, 04:52
  4. Replies: 3
    Last Post: - 13th September 2008, 17:40
  5. Pulse Frequency Multiplication
    By jamie_s in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 21st August 2005, 10:39

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