SERIN Timeout


Closed Thread
Results 1 to 16 of 16

Thread: SERIN Timeout

Hybrid View

  1. #1
    Join Date
    Oct 2005
    Location
    New Zealand
    Posts
    171

    Default SERIN Timeout

    I'm trying to write some code for a receiver which really was just going to be a timing loop - the sender unit sends time and an on or off, the receiver then should start counting down the time if the sender has told it to run - so I was going to do a timeout and a small timing loop outside of the SERIN command - however it seems the timeout isn't working - prolly due to the fact the input from the RF module is constantly sending noise down the line.

    I think my only other way is to interupt out using a timer - but not realy sure how to do it and I have a bit of a phobia about interupts - have done quite a bit of searching on here but still find it a bit of a struggle to understand what everything means -

    Does anyone know a simple way I can do what I'm trying to achieve?

    Thanks

    @ DEVICE PIC16F676, INTRC_OSC_NOCLKOUT, MCLR_OFF, PROTECT_OFF, BOD_ON, CPD_OFF


    Define OSCCAL_1K 1
    DEFINE OSC 4

    TRISA = %001000
    TRISC = %000000


    ANSEL = 0 'disable analog
    T1CON = %00000100
    VRCON = 0 ' A/D Voltage reference disabled
    CMCON = 7 'Disable comparitor

    timesw var PortA.5
    gosw var PortA.3
    stopsw var PortA.4
    timeset var byte
    display var byte
    'time var word
    b0 var byte
    b1 var bit
    b2 var byte

    clear
    timeset = 1
    PortA = 0
    PortC = 0

    Begin: 'start sequence

    display = (1 << b0) - 1
    PORTC = display
    pause 100
    if b0 < 7 then
    b0 = b0 + 1
    goto begin
    Else
    Pause 1000
    b0 = 0
    portC = b0
    Endif

    Start:

    serin PORTA.3,0,100,time,["READY"],timeset,b1 'Read receiver
    gosub disply

    time:
    b2 = b2 + 1
    if b2 > 200 and timeset > 0 and b1 = 1 then
    timeset = timeset - 1
    b2 = 0
    endif
    if timeset = 0 then b1 = 0
    goto start




    disply:

    display = (1 << timeset) 'Set display to be bar type
    PORTC = display 'output LEDs
    PORTA.0 = b1

    return

  2. #2
    Join Date
    Sep 2006
    Location
    Venezuela - Caracas
    Posts
    48


    Did you find this post helpful? Yes | No

    Default

    Code:
    Start:
    
    serin PORTA.3,0,100,time,["READY"],timeset,b1 'Read receiver
    gosub disply
    
    time:
    b2 = b2 + 1
    if b2 > 200 and timeset > 0 and b1 = 1 then
    timeset = timeset - 1
    b2 = 0
    endif
    if timeset = 0 then b1 = 0
    goto start


    try

    Start:

    'serin PORTA.3,0,100,time,["READY"],timeset,b1 'Read receiver
    serin PORTA.3, 0, 100, time, next, ["READY"], timeset, b1 'Read receiver
    gosub disply

    time:
    b2 = b2 + 1
    if b2 > 200 and timeset > 0 and b1 = 1 then
    timeset = timeset - 1
    b2 = 0
    endif
    if timeset = 0 then b1 = 0

    next:
    goto start

  3. #3
    Join Date
    Oct 2005
    Location
    New Zealand
    Posts
    171


    Did you find this post helpful? Yes | No

    Default

    Thanks - but even with the next renamed (cos next is a reserved word) it comes up with compilation errors cos there are 3 things on the timeout label where there should only be 2. The issue is, because it's a radio connection there is static whenever there is not a radio transmission, PBP sees this as potential data, and if not met by the qualifier then it just loops to the beginning of the command again - so long as it's seeing these pin fluctuations and doing this loop, it will not timeout.

    I also figure that I can't use the ON INTERUPT command - because that only works when a PBP statement is complete and the SERIN command will never complete if it doesn't get a qualifier and gets RF staic noise through all the time.

    BTW I forgot to mention the PIC I'm using is a PIC16F676
    Last edited by George; - 19th March 2007 at 23:03.

  4. #4
    Join Date
    Oct 2005
    Location
    New Zealand
    Posts
    171


    Did you find this post helpful? Yes | No

    Default

    I've now tried DT's interupt files - however I get a million errors - ie. not being able to fit variables - sigh
    ERROR: Variable wsave3 position request 416 beyond RAM_END 95.
    ERROR: Variable wsave2 position request 288 beyond RAM_END 95.
    ERROR: Variable wsave1 position request 160 beyond RAM_END 95.
    that sort of thing

    Any advice on how to do this would be greatly appreciated - I've just about pulled all my hair out!

    How do you do an interrupt in ASM for this simply so that it will come out of the serin command - increment a timing incrementation and go back to the serial loop it's stuck in?

    Thanks in advance
    Last edited by George; - 21st March 2007 at 23:05.

  5. #5
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by George View Post
    I also figure that I can't use the ON INTERUPT command - because that only works when a PBP statement is complete and the SERIN command will never complete if it doesn't get a qualifier and gets RF staic noise through all the time.

    BTW I forgot to mention the PIC I'm using is a PIC16F676
    Use a timeout just a bit longer than the length of the start bit at your baud rate and put it in a loop. If you get a SOLID start bit, then all should be well...if the start bit is flakely, it should timeout. That should let you use ON INTERRUPT alright, should is the key word

    Also, can you rewrite the code a bit on the sending unit? I'm thinking maybe some qualifying bytes sent before the actual data is sent might come in handy in a case like this. The qualifying bytes get a short timeout, the data gets a longer timeout, in seperate SERIN statements.

  6. #6
    Join Date
    Oct 2005
    Location
    New Zealand
    Posts
    171


    Did you find this post helpful? Yes | No

    Default

    Hey skimask, Took me a while to understand what you are saying (am a bit slow this far into the week). I think what you are saying would work, tho I'm concerned tho that it would be a bit intermittant as far as timing goes - as your timing may be dependant on what's coming through the airwaves at the time.

    Currently I'm thinking about building a squelch circuit which will no doubt limit my range but should enable the serin timeout to work - tho i do think the ideal would be an assembly interupt.

  7. #7
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by George View Post
    Hey skimask, Took me a while to understand what you are saying (am a bit slow this far into the week). I think what you are saying would work, tho I'm concerned tho that it would be a bit intermittant as far as timing goes - as your timing may be dependant on what's coming through the airwaves at the time.

    Currently I'm thinking about building a squelch circuit which will no doubt limit my range but should enable the serin timeout to work - tho i do think the ideal would be an assembly interupt.
    Again, do you have access to the data sending unit? Can you change the code in that? I'll thinking you could eliminate the squelch circuit by just adding a load of preamble bytes before the data...
    Otherwise...a squelch circuit probably wouldn't work either since you have to break squelch, which takes time, which takes bytes, and so on...
    I'm still thinking on this one...

Similar Threads

  1. Serin timeout not working properly!
    By Megahertz in forum mel PIC BASIC Pro
    Replies: 26
    Last Post: - 1st January 2010, 20:56
  2. SERIN timeout
    By Del Tapparo in forum Serial
    Replies: 3
    Last Post: - 20th November 2007, 04:34
  3. 16F628A Serin timeout and Timer1
    By Rubicon in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 26th March 2006, 23:20
  4. SERIN SERIN2 Timeout
    By markedwards in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 23rd June 2005, 18:59
  5. SERIN & Timeout
    By BigWumpus in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 30th October 2004, 07:33

Members who have read this thread : 1

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