So I should basically send a couple of $55 and then just wait for $55, $aa only?
I'm thinking of coding it like: serin2 PORTB.0, 16780, [WAIT($55, $aa) ,encoded1], would this be good enough?
So I should basically send a couple of $55 and then just wait for $55, $aa only?
I'm thinking of coding it like: serin2 PORTB.0, 16780, [WAIT($55, $aa) ,encoded1], would this be good enough?
I think you got the point. Still, tell us your name. JYI1 sounds like a name from the new StarTrek series
Jerson
I have used these extensively (although I get mine direct from WenShing in Taiwan). These are superregenerative ASK receivers. They need a pronounced preamble in order to set the AGC and receive threshold. They work quite well at low data rates using a protocol like the NEC protocol (used by X10 for their wireless remotes) which I've detailed here...You might also benefit from reading this page...You need a fairly good balance between pulses and spaces (which Manchester encoding guarantees) but the fact that you need to send several copies in order to receive reliably indicates you need the initial copies to set the threshold and AGC.
Which output pin are you using? Using the linear (analog) output can complicate things. It's usually best to use the digital output. A good receiving antenna is important. An eggbeater is easy to build and matches the 50-ohm input impedance of the receiver.You can capture the output(s) from the receiver using a soundcard as I show here...which can give you an idea of the quality of the signal as received.
Bruce Reynolds sells the 433.92MHz version of this receiver. I believe he has some example projects with PBP code on his website.
BTW, the fact that your code works with a hardwired connection is another indication that your problems are related to RF signal quality.
Good luck.
Last edited by dhouston; - 24th April 2007 at 21:36.
Serial communication is a female thing, so bear in mind that preamble are needed and some of them may say the size don't make any difference
---------------------------------------------------------
Usually 3-5 $AA as preamble is enough. Machester encoding have it's own advantage if you send long data packet. A checksum is also handy.
I don't think the character pacing (pause x) is really needed if you're using a slow baudrate (2400 bauds or so)
a single SEROUT/DEBUG/SEROUT2/HSEROUT line is all you need in many case.
Always make sure your crystal are accurate.
BTW which PIC are you using?
Last edited by mister_e; - 24th April 2007 at 23:49.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
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.
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 04:46. Reason: Thought about it for a bit...
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
i had many bug with RF 433mhz
try pause 5 to pause 50
im my circuit pause 5 word perfect
without pause not work for me
my simple test
Code:... transmiter: for i = 1 to 30 serout data_out, N2400, ["<", "A", "B", ">", i] PAUSE 5 next iCode:... receive: serin data_in, N2400, "<ABDC>", TIME_OUT, I if i=1 then ......... TIME_OUT: goto receive
Last edited by mpardinho; - 24th April 2007 at 21:47.
Bookmarks