Transmission works with wires but not always with wireless


Closed Thread
Results 1 to 40 of 43

Hybrid View

  1. #1
    Join Date
    Dec 2005
    Posts
    1,073


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by oneohthree View Post
    I am using the digital data output pin. Also, since I need to send my data 5 times and with a pause of 5 does it mean that I should make my preamble longer?
    I would use a 5ms pulse as the preamble and a 20ms pause between data packets (it allows the AGC and threshold to reset).
    On the receiving end I would use PulsIn to wait for the 5ms pulse and then go into the normal receive routine once it's received. Using some type of error detection (e.g. checksum) is a necessity.

    What range do you need? How much data do you need to send?

    Looking at the digital data pin with a 'scope (or recording it with a soundcard as I suggested earlier) can eliminate a lot of guesswork by telling you whether your signal strength is adequate. I find it invaluable.

  2. #2
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by dhouston View Post
    I would use a 5ms pulse as the preamble and a 20ms pause between data packets (it allows the AGC and threshold to reset).
    I'm curious as to why you use the 20ms pause between packets? I know you said that the pause would reset the AGC & threshold, and that certainly makes sense. But I would figure if you're continuously sending bi-phase encoded data (manchester encoded) practically non-stop, wouldn't everything stay where it would need to be?

    EDIT: (add)
    I suppose if the TX and RX were changing positions relative to each other, the signal strength would vary, and maybe the AGC/threshold wouldn't 'keep up' with the varying conditions. The 20ms pause would compensate. If that's the case, then it really makes a lot more sense to me.
    Last edited by skimask; - 25th April 2007 at 03:46. Reason: Thought about it for a bit...

  3. #3
    Join Date
    Dec 2005
    Posts
    1,073


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by skimask View Post
    I'm curious as to why you use the 20ms pause between packets? I know you said that the pause would reset the AGC & threshold, and that certainly makes sense. But I would figure if you're continuously sending bi-phase encoded data (manchester encoded) practically non-stop, wouldn't everything stay where it would need to be?
    AGC reduces the gain as the signal gets stronger. Repeating the signal at close intervals can cause the gain to taper off, resulting in poorer reception. A gap between transmissions lets it reset to its baseline. You can play with the duration of the gap - in this case 5-10mS is probably adequate but its hard to say without hands-on experience to determine typical signal strength and performance. Also, I'm eliminating the manchester encoding - the NEC protocol assures a relatively balanced ratio of pulses/spaces for the dataslicer threshold.

    Another reason for inserting a gap is to allow the receiver time to analyze what it has received and decide what action to take.

    It is possible to get a measure of signal strength by taking ADC readings of the receiver's Linear output pin. I measure the difference between a pulse and space which, while it is not an absolute measure (due to AGC), gives a good relative indication of signal strength. IOW, if one signal registers 700 and another 500 I know which signal is stronger (and can use it for tuning) but I cannot definitively compare measurements from separate receivers since I'm not measuring an absolute magnitude.
    Last edited by dhouston; - 26th April 2007 at 13:28.

  4. #4
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by dhouston View Post
    AGC reduces the gain as the signal gets stronger......since I'm not measuring an absolute magnitude.
    Everything you said makes perfect sense to me. And it might also explain a few issues I've always had with a couple of my RF projects and lengthy/continuous packet transmissions getting dropped after a few seconds of transmitting. I'm going to try your 'pause between packets'/'making the packets smaller' idea and see what happens.

  5. #5
    Join Date
    Nov 2003
    Location
    Greece
    Posts
    4,144


    Did you find this post helpful? Yes | No

    Default

    I can understand that the issues you had might be module related. I never had any problems with FM modules and the ones I designed with the classic slicer approach (given that the proper transmission rules are followed). A good receiver should work 24/7 with no problem.

    Ioannis

  6. #6
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Ioannis View Post
    I can understand that the issues you had might be module related. I never had any problems with FM modules and the ones I designed with the classic slicer approach (given that the proper transmission rules are followed). A good receiver should work 24/7 with no problem.
    Ioannis
    It's not really 'problems' I have with the modules. They work fine for me, in bursts. I have a couple of project where one of my remotes acts sort of like a volume control and I have to continuously hold the transmit button down to get the receiver to change, takes about 15 seconds to run from one end to the other. About 3 or 4 seconds into holding the button, it craps out. If I release the button for less than a second and press it again, it'll work for another 3-4 seconds, then repeat. Again, no real problems, and I have a feeling that dhouston's hints earlier may solves this issue.

  7. #7
    Join Date
    Dec 2005
    Posts
    1,073


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by skimask View Post
    It's not really 'problems' I have with the modules. They work fine for me, in bursts. I have a couple of project where one of my remotes acts sort of like a volume control and I have to continuously hold the transmit button down to get the receiver to change, takes about 15 seconds to run from one end to the other. About 3 or 4 seconds into holding the button, it craps out. If I release the button for less than a second and press it again, it'll work for another 3-4 seconds, then repeat. Again, no real problems, and I have a feeling that dhouston's hints earlier may solves this issue.
    That's somewhat analogous to dimming a lamp using an X-10 palmpad to send RF to a module that translates it to powerline commands to control the lamp module.

    X-10 uses the NEC protocol and the palmpad will send 32-bits continuously with each 32-bit burst preceded by a ~9ms/4.5ms lead-in and followed by a 40ms gap (so each code is ~105ms). It takes about 4-5 seconds to go from full on to full dim and it's very smooth.

    I conduct range tests (and RF tune receivers) by clamping a button down on a palmpad. The receiver operates smoothly for the several minutes I leave the transmitter clamped.

    IOW, I think you'll do better using the NEC protocol or some variation on it.

    One other thing to consider (which I alluded to earlier) is that you usually have at least two timelines. One is for the RF bitstream and one is for the action to be taken by the receiver (e.g. adjust volume or brightness). Things will be smoother if the end action can finish during the gap between code bursts. That way the receiver is ready to capture the next burst(s) and act on it (them).

    The NEC protocol (or variations of it) is the most popular (and oldest) protocol used for IR control of AV gear. If it has been so successful there, it makes sense to me to use it in similar low data rate RF applications.
    Last edited by dhouston; - 26th April 2007 at 16:49.

  8. #8
    Join Date
    Dec 2005
    Posts
    1,073


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by Ioannis View Post
    I can understand that the issues you had might be module related. I never had any problems with FM modules and the ones I designed with the classic slicer approach (given that the proper transmission rules are followed). A good receiver should work 24/7 with no problem.
    Agreed - but these are $5 (retail at Mouser Electronics) superregenerative ASK receivers with a maximum data rate of 4800bps.

  9. #9
    Join Date
    Dec 2005
    Posts
    1,073


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by skimask View Post
    Everything you said makes perfect sense to me. And it might also explain a few issues I've always had with a couple of my RF projects and lengthy/continuous packet transmissions getting dropped after a few seconds of transmitting. I'm going to try your 'pause between packets'/'making the packets smaller' idea and see what happens.
    Almost all of my experience is with these specific superregenerative ASK receivers (at various frequencies) or with very similar superregenerative receivers. My suggestions may not apply if you're using more sophisticated receivers (e.g. superheterodyne) or FSK. Most of my applications send/receive 2-3 payload bytes. I think a wireless RS232 link and manchester encoding is overly complicated for such simple needs. If there's a need to send lengthy text or data streams, a superheterodyne or FSK receiver and a wireless RS232 link may make more sense.

    I cited the following web page earlier in the thread.You can see the effects of AGC on the initial pulse in the top trace of the first 'scope screenshot. The slope is from the AGC reacting to the wide pulse. You can see the slope starting in the other direction after the pulse ends. If you look a a lot of 'scope screenshots you'll see the same (less pronounced) effect even between the data pulses and see more pronounced differences between a closely spaced series of 0-bit (narrow space) versus 1-bit (wider space). Of course, it's affected by the absolute pulse space widths as well.

    The bottom picture is of a signal captured as a .WAV file with a soundcard. You can see that it's more difficult to discern a signal when it has no pronounced initial pulse to set the AGC. In this case, it's the signal sent by a Pronto touchscreen to a Philips RF extender. The three copies of the preamble contain information to address a specific RF extender and set its carrier frequency, etc. which must precede the actual IR code the extender is meant to relay. Philips doesn't use a superregenerative reveiver and they take other steps to improve reception (double modulation) but the picture illustrates the weaknesses of using no preamble or a narrow lead-in pulse with a superregenerative receiver.

  10. #10


    Did you find this post helpful? Yes | No

    Thumbs up REG: ISM band and the WMTS band

    Hi,
    Any idea or estimation that are available towards the usage of the ISM band (2.4Ghz to 2.48Ghz) and the WMTS (Wireless medical telemetry service) band ( 608MHZ to 614MHZ, 1395MHZ to 1400MHZ) in the next coming decade for the purpose of the wireless communication implementation.

    It would be really great if any info available towards the same is linked to me, [email protected].

    Thank you.

  11. #11
    Join Date
    Apr 2007
    Posts
    9


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by dhouston View Post
    I would use a 5ms pulse as the preamble and a 20ms pause between data packets (it allows the AGC and threshold to reset).
    On the receiving end I would use PulsIn to wait for the 5ms pulse and then go into the normal receive routine once it's received. Using some type of error detection (e.g. checksum) is a necessity.

    What range do you need? How much data do you need to send?

    Looking at the digital data pin with a 'scope (or recording it with a soundcard as I suggested earlier) can eliminate a lot of guesswork by telling you whether your signal strength is adequate. I find it invaluable.
    Is the code that I wrote below what you are trying to tell me?
    I am only trying to send 4 bits (8 bits encoded). I looked at the digital data pin of the scope and my signal has an amplitude of about 3.72 v.

    Transmit:
    Pulsout PORTB.7, 500
    Pause 20000
    serout PORTB.7, n2400, [$aa,encoded2]
    Pause 20000

    Receive:
    Wait55:
    Pulsin PORTB.0,1,ct55
    If ct55 = 500 Then
    goto Waitaa
    Else
    goto Wait55
    Endif
    'goto Wait55

    Waitaa:
    serin PORTB.0, n2400, encoded1
    If encoded1 <> $aa Then goto Maina
    serin PORTB.0, n2400, encoded1
    write 0, encoded1

  12. #12
    Join Date
    Dec 2005
    Posts
    1,073


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by jyi1 View Post
    Is the code that I wrote below what you are trying to tell me?
    I am only trying to send 4 bits (8 bits encoded). I looked at the digital data pin of the scope and my signal has an amplitude of about 3.72 v.
    Code:
    Transmit:
    	Pulsout PORTB.7, 500
    	Pause 20000
    	serout PORTB.7, n2400, [$aa,encoded2]
    	Pause 20000
    
    Receive: 
    Wait55:
            Pulsin PORTB.0,1,ct55
            If ct55 = 500 Then 
               goto Waitaa
            Else
              goto Wait55
            Endif
            'goto Wait55
    Yes, more or less. I would change it to...
    Code:
    Transmit:
    	Pulsout PORTB.7, 500
    	Pause 2500     'shorten space
    	serout PORTB.7, n2400, [$aa,encoded2]
    	Pause 20000
    
    Receive: 
    Wait55:
            Pulsin PORTB.0,1,ct55
            If ct55 < 450 Then Wait55
            goto Waitaa
    The important thing with the signal is that it be clean with no noise pulses interspersed with the data.

    With only 4 bits, I think I would use a variation of the NEC protocol, sending only 1 byte with each code. The NEC protocol has error detection built in so you can discard any corrupted codes. Read the NEC protocol documentation in the link I cited earlier and if you still have questions I'll try to answer them here.

  13. #13
    Join Date
    Apr 2007
    Posts
    9


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by dhouston View Post
    Yes, more or less. I would change it to...
    Code:
    Transmit:
    	Pulsout PORTB.7, 500
    	Pause 2500     'shorten space
    	serout PORTB.7, n2400, [$aa,encoded2]
    	Pause 20000
    
    Receive: 
    Wait55:
            Pulsin PORTB.0,1,ct55
            If ct55 < 450 Then Wait55
            goto Waitaa
    The important thing with the signal is that it be clean with no noise pulses interspersed with the data.

    With only 4 bits, I think I would use a variation of the NEC protocol, sending only 1 byte with each code. The NEC protocol has error detection built in so you can discard any corrupted codes. Read the NEC protocol documentation in the link I cited earlier and if you still have questions I'll try to answer them here.
    I tested out the above code thats included in my code and it does not work by wireless or by wire.

  14. #14
    Join Date
    Dec 2005
    Posts
    1,073


    Did you find this post helpful? Yes | No

    Default

    I'm not going to try to read your unformatted code or write the entire application but here are code snippets that show you what you need to do. It sends 4 bits both "as is" and as bitwise complement using a variation of the NEC protocol. I've hardcoded the 4 bits of data as 1101. This is adapted from code I use to send and receive 2-4 bytes so the pins are the ones I used. There are more efficient ways to do things but I've tried to show it step-by-step so you see the logic.
    Code:
    '-----Transmit-----
    SendRF: wb.0=data0  '00000001
            wb.1=data1  '00000001 
            wb.2=data2  '00000101
            wb.3=data3  '00001101
            wb=~wb      '11110010
            wb=wb<<4    '00100000
            wb.0=data0  '00100001
            wb.1=data1  '00100001
            wb.2=data2  '00100101
            wb.3=data3  '00101101
            'bits 0-3=data, bits 4-7=~data
            Low 4
    	For c=1 To Copies
    	  PulsOut 4, 500
              PauseUs 2500
    	  For i=0 To 7
    	    PulsOut 4, 50
    	    If wb.0=1 Then
    	      PauseUs 1500
    	    Else
    	      PauseUs 500
    	    EndIf 
    	    wb=wb>>1
    	  Next
    	  PulsOut 4, 50
    	  Pause 20			
    	Next
    
    '-----Receive-----	
    DEFINE PULSIN_MAX = 550
    	
    RcvRF:  PulsIn GPIO.1, 1, STX
            wb=0
            If STX<450 Then RcvRF
            While GPIO.1=0:Wend
            For i = 0 To 7
              PulsIn GPIO.1, 0, space
              If (space<40) Or (space>175) Then RcvRF
              If (space>75) Then
                wb.0=1				
              EndIf
              wb=wb<<1
            Next i	
            comp=wb>>4
            wb=wb & 7
            If wb + comp = 15 Then
              'wb is good data
            Else
              'wb is corrupt
            EndIf
    Last edited by dhouston; - 25th April 2007 at 20:59.

  15. #15
    Join Date
    Apr 2007
    Posts
    9


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by dhouston View Post
    I'm not going to try to read your unformatted code or write the entire application but here are code snippets that show you what you need to do. It sends 4 bits both "as is" and as bitwise complement using a variation of the NEC protocol. I've hardcoded the 4 bits of data as 1101. This is adapted from code I use to send and receive 2-4 bytes so the pins are the ones I used. There are more efficient ways to do things but I've tried to show it step-by-step so you see the logic.
    Code:
    '-----Transmit-----
    SendRF: wb.0=data0  '00000001
            wb.1=data1  '00000001 
            wb.2=data2  '00000101
            wb.3=data3  '00001101
            wb=~wb      '11110010
            wb=wb<<4    '00100000
            wb.0=data0  '00100001
            wb.1=data1  '00100001
            wb.2=data2  '00100101
            wb.3=data3  '00101101
            'bits 0-3=data, bits 4-7=~data
            Low 4
    	For c=1 To Copies
    	  PulsOut 4, 500
              PauseUs 2500
    	  For i=0 To 7
    	    PulsOut 4, 50
    	    If wb.0=1 Then
    	      PauseUs 1500
    	    Else
    	      PauseUs 500
    	    EndIf 
    	    wb=wb>>1
    	  Next
    	  PulsOut 4, 50
    	  Pause 20			
    	Next
    
    '-----Receive-----	
    DEFINE PULSIN_MAX = 550
    	
    RcvRF:  PulsIn GPIO.1, 1, STX
            wb=0
            If STX<450 Then RcvRF
            While GPIO.1=0:Wend
            For i = 0 To 7
              PulsIn GPIO.1, 0, space
              If (space<40) Or (space>175) Then RcvRF
              If (space>75) Then
                wb.0=1				
              EndIf
              wb=wb<<1
            Next i	
            comp=wb>>4
            wb=wb & 7
            If wb + comp = 15 Then
              'wb is good data
            Else
              'wb is corrupt
            EndIf
    If I were to run your code to test it would I code data0=0000001, data1=00000001, data2=00000101, data3=00001101 and then code data0=001000001, data1=00100001, data3=00100101, data3=00101101? Also in the for c=1 to Copies, what is Copies supposed to mean?Also, I discover that when I use my old code and send it through once and view the digital output of the receiver and transmitter input the on the oscilloscope the sequence appears but it does not get picked up by the microcontroller.
    Last edited by jyi1; - 25th April 2007 at 22:26.

  16. #16
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by jyi1 View Post
    If I were to run your code to test it would I code data0=0000001, data1=00000001, data2=00000101, data3=00001101 and then code data0=001000001, data1=00100001, data3=00100101, data3=00101101? Also in the for c=1 to Copies, what is Copies supposed to mean?Also, I discover that when I use my old code and send it through once and view the digital output of the receiver and transmitter input the on the oscilloscope the sequence appears but it does not get picked up by the microcontroller.
    Call me crazy...but I think between this thread and the other one, you're making the program/process entirely much harder than it needs to be...

  17. #17
    Join Date
    Dec 2005
    Posts
    1,073


    Did you find this post helpful? Yes | No

    Default

    data0-data7 represents the 8 bits of the single byte being transmitted.
    Code:
            data.bit0 = 1
            data.bit1 = 0
            data.bit2 = 1
            data.bit3 = 1
            data.bit4 = 0
            data.bit5 = 1
            data.bit6 = 0
            data.bit7 = 0
    Copies means the number of times the transmission is repeated. You will need to experiment. If you always have a strong signal you might get by with a single copy; a weaker signal will require additional copies to set the receiver AGC and threshold. Most X-10 RF transmitters send 5 copies.

    What I usually do on the receiving end is report the first valid code and then only report subsequent codes if they differ - with a time limit based on the time required to send the five (or whatever) copies.

  18. #18
    Join Date
    Dec 2005
    Posts
    1,073


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by jyi1 View Post
    If I were to run your code to test it would I code data0=0000001, data1=00000001, data2=00000101, data3=00001101 and then code data0=001000001, data1=00100001, data3=00100101, data3=00101101?
    You said you are sending 4 bits of data. My example was intended to show you how to send the 4 bits twice in two different ways. One way is "as is" in the lower 4 bits of wb; the other way is as the bitwise complement of the 4 data bits in the upper 4 bits of wb. Sending it in two forms allows us to check for errors on the receiving end.

    Assuming you want to send %1101...
    Code:
    data=%1101
    wb=data
    wb=~wb
    wb=wb<<4        'bitwise complement %0010 in upper 4 bits 
    wb=wb+data      'data "as is" in lower 4 bits
    The attached GIF shows the waveform for data=%1101.
    Attached Images Attached Images  
    Last edited by dhouston; - 26th April 2007 at 13:18. Reason: Replaced the GIF - original had bit order reversed

Similar Threads

  1. Wireless Tachometer - Design Help
    By DanPBP in forum Off Topic
    Replies: 2
    Last Post: - 3rd May 2009, 09:06
  2. RS485 Vs Wireless (TWS-434A)
    By koossa in forum Off Topic
    Replies: 3
    Last Post: - 11th April 2009, 12:40
  3. Serial Wireless
    By mackrackit in forum mel PIC BASIC Pro
    Replies: 4
    Last Post: - 29th May 2007, 16:06
  4. Serial comm - are 2 wires for TX only enough?
    By flotulopex in forum mel PIC BASIC Pro
    Replies: 9
    Last Post: - 30th August 2006, 03:23
  5. RS 485 wireless communication
    By Armadus in forum mel PIC BASIC Pro
    Replies: 22
    Last Post: - 26th January 2006, 19:30

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