PIC HANGS with SERIN and Timeout?


Closed Thread
Results 1 to 21 of 21
  1. #1

    Default PIC HANGS with SERIN and Timeout?

    I'm struggling for hours now.
    I use the following code and added an LED Blink for debug purposes,
    but only gets one blink and then it hangs (on the serin2).
    I have also tried serin.
    Using Pic16F877 and have 2 PIR Sensors,
    one on SENSORPIN1 and one on SENSORPIN2.

    Any ideas?

    <code>


    &nbsp;&nbsp;&nbsp;Include "Modedefs.bas"

    &nbsp;&nbsp;&nbsp;DEFINE&nbsp;&nbsp;&nbsp;OSC 4 ' Set the Xtal frequency

    &nbsp;&nbsp;&nbsp;N2400&nbsp;&nbsp;&nbsp;CON 16780
    &nbsp;&nbsp;&nbsp;P0&nbsp;&nbsp;&nbsp;VAR PORTB.6
    &nbsp;&nbsp;&nbsp;P1&nbsp;&nbsp;&nbsp;VAR PORTB.7
    &nbsp;&nbsp;&nbsp;SENSORNUMBER&nbsp;&nbsp;&nbsp;CO N 0
    &nbsp;&nbsp;&nbsp;SENSORPIN1&nbsp;&nbsp;&nbsp;V AR PORTB.4
    &nbsp;&nbsp;&nbsp;SENSORPIN2&nbsp;&nbsp;&nbsp;V AR PORTB.5
    &nbsp;&nbsp;&nbsp;LEDPIN&nbsp;&nbsp;&nbsp;VAR PORTD.1
    &nbsp;&nbsp;&nbsp;SENSORSTATUS&nbsp;&nbsp;&nbsp;VA R BYTE
    &nbsp;&nbsp;&nbsp;DATARECEIVED&nbsp;&nbsp;&nbsp;va r byte
    &nbsp;&nbsp;&nbsp;CCP1CON = 0
    &nbsp;&nbsp;&nbsp;ADCON1 = 7

    Main:
    &nbsp;&nbsp;&nbsp;OUTPUT LEDPIN
    &nbsp;&nbsp;&nbsp;input SENSORPIN1
    &nbsp;&nbsp;&nbsp;input SENSORPIN2
    Loop:
    &nbsp;&nbsp;&nbsp;IF (SENSORPIN1 = 1) OR (SENSORPIN2 = 1) THEN
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SENSORSTATU S = "1"
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HIGH LEDPIN
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PAUSE 1000
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOW LEDPIN
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PAUSE 1000
    &nbsp;&nbsp;&nbsp;ENDIF

    &nbsp;&nbsp;&nbsp;OUTPUT P0
    &nbsp;&nbsp;&nbsp;INPUT P1
    &nbsp;&nbsp;&nbsp;LOW P0

    &nbsp;&nbsp;&nbsp;' ============ LED BLINK FOR DEBUG PURPOSES =================
    &nbsp;&nbsp;&nbsp;HIGH LEDPIN
    &nbsp;&nbsp;&nbsp;PAUSE 100
    &nbsp;&nbsp;&nbsp;LOW LEDPIN
    &nbsp;&nbsp;&nbsp;PAUSE 100
    &nbsp;&nbsp;&nbsp;' ================================================== =========

    &nbsp;&nbsp;&nbsp;SERIN2 P1, N2400, 10, Loop,[wait("T"),DATARECEIVED]

    &nbsp;&nbsp;&nbsp;' ============ LED BLINK FOR DEBUG PURPOSES =================
    &nbsp;&nbsp;&nbsp;HIGH LEDPIN
    &nbsp;&nbsp;&nbsp;PAUSE 100
    &nbsp;&nbsp;&nbsp;LOW LEDPIN
    &nbsp;&nbsp;&nbsp;PAUSE 100
    &nbsp;&nbsp;&nbsp;' ================================================== =========

    &nbsp;&nbsp;&nbsp;if (DATARECEIVED = SENSORNUMBER) then
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OUTPUT P1
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SEROUT2 P1, N2400, ["R",SENSORSTATUS]
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SENSORSTATU S = "0"
    &nbsp;&nbsp;&nbsp;endif

    &nbsp;&nbsp;&nbsp;' ============ LED BLINK FOR DEBUG PURPOSES =================
    &nbsp;&nbsp;&nbsp;HIGH LEDPIN
    &nbsp;&nbsp;&nbsp;PAUSE 100
    &nbsp;&nbsp;&nbsp;LOW LEDPIN
    &nbsp;&nbsp;&nbsp;PAUSE 100
    &nbsp;&nbsp;&nbsp;' ================================================== =========

    &nbsp;&nbsp;&nbsp;Goto Loop
    end
    </code>

    Thank you!!
    koossa

  2. #2
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by koossa View Post
    I'm struggling for hours now.
    I use the following code and added an LED Blink for debug purposes,
    but only gets one blink and then it hangs (on the serin2).
    I have also tried serin.
    Using Pic16F877 and have 2 PIR Sensors,
    one on SENSORPIN1 and one on SENSORPIN2.
    Any ideas?
    koossa
    I think this is going to tie back into that IDLE state thing, not sure off the top of my head.
    Do a search on the IDLE. Seems to me, if the pin is IDLING in the wrong state, SERIN will hangout waiting for something that ain't comin...

    In the meanwhile, try using a timeout in the SERIN command and see what happens.

  3. #3


    Did you find this post helpful? Yes | No

    Default

    Skimask, thank you very much for your feedback.

    I have taken a look at the idling thing, but don't understand it.

    I have also tried both SERIN and SERIN2 with timeout (10 milliseconds)

    Koossa

  4. #4
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by koossa View Post
    I have taken a look at the idling thing, but don't understand it.
    I have also tried both SERIN and SERIN2 with timeout (10 milliseconds)
    Koossa
    Well, I've never had the idling problem myself, so I can't really comment.
    About all I can suggest is to read the threads again (there's one by Melanie that's especially long and useful) and you're answer will be in there somewhere.
    If I would have to guess, I would say that your input pin is just sitting there at a low logic level. If it is, pull it high and see if the timeout works.
    If it's sitting high, pull it low and see if the timeout works.

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


    Did you find this post helpful? Yes | No

    Default

    I do not use spaces in the SERIN2. Try:
    Code:
    SERIN2 P1,N2400,10,Loop,[wait("T"),DATARECEIVED]
    And maybe use 16780 instead of N2400? And DEC before DATARECEIVED.

    Maybe
    Dave
    Always wear safety glasses while programming.

  6. #6
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by mackrackit View Post
    I do not use spaces in the SERIN2. Try:
    Code:
    SERIN2 P1,N2400,10,Loop,[wait("T"),DATARECEIVED]
    And maybe use 16780 instead of N2400? And DEC before DATARECEIVED.

    Maybe
    I haven't had a problem with spaces in PBP2.50, had problems back in 2.42 I think it was.
    I've got a program that has about 50-60 different SERIN2 lines and they all look like:

    SERIN2 serialinpin , 84 , 5000 , baddata , [ WAIT ( ">" ) , STR string\255 ]

    Lots of spaces, etc.etc.etc...like I said, the older PBP, broke, newer, good.

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


    Did you find this post helpful? Yes | No

    Default

    COOL ,Now I need to upgrade. I am still at 2.47.
    Dave
    Always wear safety glasses while programming.

  8. #8
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by mackrackit View Post
    COOL ,Now I need to upgrade. I am still at 2.47.
    I tell ya, in my little world, it's those LONG's that make all the difference.

  9. #9


    Did you find this post helpful? Yes | No

    Default

    Thank you for your replies!!
    I Think this is it!!

    http://www.picbasic.co.uk/forum/show...highlight=idle

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


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by skimask View Post
    I tell ya, in my little world, it's those LONG's that make all the difference.
    I just came out of a four hour meeting with one of those as Dilbert says Pointy Haired Bosses. So my brain is still a bit dead...

    What are you talking about? "LONGs" ?
    Dave
    Always wear safety glasses while programming.

  11. #11
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by mackrackit View Post
    I just came out of a four hour meeting with one of those as Dilbert says Pointy Haired Bosses. So my brain is still a bit dead...
    What are you talking about? "LONGs" ?
    LONGs = double words, 32 bits (31 bits + sign) math, no more DIV32 (not included in PBPL because PBPL will do 32 bits)...
    Check the melabs website for the upgrade info.

  12. #12
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by koossa View Post
    Thank you for your replies!!
    I Think this is it!!
    http://www.picbasic.co.uk/forum/show...highlight=idle
    That be the one...I'm fairly sure anyways...

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


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by skimask View Post
    LONGs = double words, 32 bits (31 bits + sign) math, no more DIV32 (not included in PBPL because PBPL will do 32 bits)...
    Check the melabs website for the upgrade info.
    That is something to get excited about. I really need to keep up with things.
    Thanks again!
    Dave
    Always wear safety glasses while programming.

  14. #14
    Join Date
    Sep 2003
    Location
    Vermont
    Posts
    373


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by skimask View Post
    I haven't had a problem with spaces in PBP2.50, had problems back in 2.42 I think it was.
    I've got a program that has about 50-60 different SERIN2 lines and they all look like:

    SERIN2 serialinpin , 84 , 5000 , baddata , [ WAIT ( ">" ) , STR string\255 ]

    Lots of spaces, etc.etc.etc...like I said, the older PBP, broke, newer, good.
    This may be a moot point, but, I recently had the hang situation with a GPS unit interface. The unit's serial output would go to ground when the unit was put into sleep. I did a little loop that would sense if the line went high at all over a hundred mS period. If not,I would skip the Serin line. It works quite well without any hardware changes.
    Ron

  15. #15


    Did you find this post helpful? Yes | No

    Default

    Thank you Ron, I will keep that in mind!

  16. #16


    Did you find this post helpful? Yes | No

    Default

    I'm a real beginner with PICS and don't understand the posts about idling that good.

    If I connect he Serin Pin to ground it don't hang anymore, or if I rather use the "True" and not "inverted" state.
    Is any one of these a reliable solution?

  17. #17
    Join Date
    Oct 2004
    Posts
    448


    Did you find this post helpful? Yes | No

    Default

    Sorry to jump in late. Just tie a 4.7 K between the serin pin and ground; should solve the problem.

    Regards,

    Anand

  18. #18


    Did you find this post helpful? Yes | No

    Default

    Thank you Anand, I will do!!

  19. #19
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by ardhuru View Post
    Sorry to jump in late. Just tie a 4.7 K between the serin pin and ground; should solve the problem.
    Oh...hey...good point...no kidding.
    Jeez, sometimes the simplest fixes are the best.
    And if tying it to ground doesn't work (which it should), tie it high, or maybe use a 10K instead of a 4.7K, or maybe a 1K. Might take a bit of experimentation. But I don't see why 4.7K shouldn't work just fine.

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


    Did you find this post helpful? Yes | No

    Default

    I would try to find or fix the problem VS using the external resistor. Especially if you're using the same pin for sending & receiving serial data.

    If the other device is holding its pin at logic 1, and you do make it through to your SEROUT2 routine in the lower section, you have a potential short between two pins.

    The idle state just means the serial input or output pins are held at the idle logic level during periods when no serial data is being transmitted or received.

    For inverted, the TX output should idle at logic 0. And the RX input should be held at logic 0 by the sending device for the SERIN2 timeout/label options to work.

    PBP times the idle logic on the RX pin for the duration of the timeout period. If it sees noise, or a steady non-idle logic signal on the RX pin, the timeout period gets reset, and it never exits to the label.

    If you're using two PIC's talking together on a serial network type connection with the same pins on each side being used for TX & RX, then you might want to use one of the open baud modes.

    If you use SEROUT2/SERIN2 then use mode # 49548, and use the pull-down resistor on the serial network TX/RX pins.

    For inverted, open baud mode, the resistor holds the pin that's transmitting & receiving on the serial network at the idle logic level. Each PIC will TX a logic 1 only. Logic 0 for data bits and the idle state is handled by the pull-down resistor.

    For true mode you would use a pull-up resistor on the serial network pins, and each PIC would output only logic 0 when transmitting serial data. Logic 1 gets handled by the pull-up resistor. Open baud modes are really handy for single pin serial networks.
    Regards,

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

  21. #21
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Bruce View Post
    I would try to find or fix the problem..........
    Should sticky this in the FAQ's somewhere...
    Like I said, haven't had the problem myself, but I'm sure that day is coming...

Similar Threads

  1. Serin timeout not working properly!
    By Megahertz in forum mel PIC BASIC Pro
    Replies: 26
    Last Post: - 1st January 2010, 21:56
  2. PIC Hangs when using Serin TimeOut
    By Squibcakes in forum Serial
    Replies: 2
    Last Post: - 20th July 2006, 02:59
  3. 16F628A Serin timeout and Timer1
    By Rubicon in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 27th March 2006, 00:20
  4. SERIN SERIN2 Timeout
    By markedwards in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 23rd June 2005, 19:59
  5. SERIN & Timeout
    By BigWumpus in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 30th October 2004, 08:33

Members who have read this thread : 3

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