CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

Multiple transmitters and ONE receiver
Goto page 1, 2  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
matheuslps



Joined: 29 Sep 2010
Posts: 73
Location: Brazil

View user's profile Send private message MSN Messenger

Multiple transmitters and ONE receiver
PostPosted: Mon May 30, 2011 8:06 pm     Reply with quote

Hello people.

I am developing a project that I need to send a ID to another PIC via wireless.

This part is easy and it is working. I found one code here on the forum and modified to my needs.

So, I need some ideas how can I face one problem:

In this project I need to send a maximum of 100 diferents IDs with 100 diferents transmitters to one single receiver. Each transmitter has only one ID on a total of 100 transmitters. I did not decide the PIC I will use, but a small one. Now, I am doing tests with the 16F877A.

So, for now I configured only 3 PIC transmitters. Every 5 seconds they transmits their IDs and the receiver collect it. It is working.

BUT, if 2 or more transmitters send on the same time, the receive will collect wrong ID values.

How can I face this incovenient?

This project is to put the transmitters on some animals and monitore their positions ON a field. The goal is if the animals (cows) get near the receiver, it will get the cow ID and keep on a database made on a PC that is already done. I use the USB comunication with C# and 18F4550 and it is working very fine.

The other incovenient is that the wireless chip that I am using can send the IDs over 100m on a open field. This distance is too far. The field is not so big and I need to reduce the operation of the transmitters. I am using the cheap 433Mhz pair modules that are available all over the world.

PIC1------>MASTER RECEIVER
PIC2------>MASTER RECEIVER
PIC3------>MASTER RECEIVER
PIC3------>MASTER RECEIVER

And so on....

Thanks and sorry for my english mistakes.

PS: If someone is interested on my USB link using the C#, take a look at the video below (IT is not a CDC conection):

http://www.youtube.com/watch?v=GjACB0RiuBQ

Matheus Lopes
From Brazil
John P



Joined: 17 Sep 2003
Posts: 331

View user's profile Send private message

PostPosted: Mon May 30, 2011 9:24 pm     Reply with quote

What might make this work would be to have each unit transmit very briefly and at long intervals. Then the chances of interference would be reduced--but then would the system be useful? You will need to do some mathematics to calculate how often a clear transmission from each unit is likely to get through. It will be a statistical question.

A way to deal with it might be to use a dual oscillator, with a 32KHz crystal attached to each processor. Some PICs can accept this to operate Timer 1--I know the PIC16F877A can. This would give you much better timing accuracy than the regular crystal. Maybe that would let you synchronize the processors so they would each transmit at separate times, but again it would depend on how long the transmissions are, and how often they need to occur. And obviously, after some period you would need to round up the herd and re-synchronize the processors.

If you had 2-way radio then you could call for a transmission from each unit in turn. It might the only way to do it.
matheuslps



Joined: 29 Sep 2010
Posts: 73
Location: Brazil

View user's profile Send private message MSN Messenger

PostPosted: Mon May 30, 2011 9:52 pm     Reply with quote

Thanks for the reply.

I agree the use a 32Khz crystal. This will consume less power.

The idea you gave to use a 2-way radio is very good. In this way I can make the MASTER receiver call each of the transmitter in turn like you said. BUT, then all the transmitters will operate from batteries because it will be on the cows. Only the receiver can operate from a power supply because it will be near a computer to link with the USB.

Yes, I can make the intervals long enough but with 100 transmitters, some time they will send data together and that is where my problem begins.

bye
temtronic



Joined: 01 Jul 2010
Posts: 9226
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Tue May 31, 2011 5:38 am     Reply with quote

It'd be a lot easier to 'reverse' the overall design.
The 'master' would be the unit connected to the PC, the 'slaves' the units on the cows.
The master would have a database of cow-ids and poll each one in sequence,either getting the data or timing out(loss of signal,try again).
I know this will work for 24 head of cattle,did it a few years back.

By doing it this way there is no problem of multiple transmitters corrupting data.
gpsmikey



Joined: 16 Nov 2010
Posts: 588
Location: Kirkland, WA

View user's profile Send private message

PostPosted: Tue May 31, 2011 8:06 am     Reply with quote

You might want to take a read through the TCP/IP information on how they handle collision avoidance and detection. While you don't want a receiver added to the cows, one of the tricks you could use to help keep the collisions under control (sort of) is to use a time delay between transmissions that is a function of the ID of the transmitter - this will mean each one uses a different delay so you don't end up with them getting in sync and continuously stomping on each other. Also, send a checksum/CRC/whatever on each packet - if the checksum doesn't match, discard the packet as corrupted. Without a receiver on the cow side, it is tough to blindly send data and hope it gets received correct (how about a methane powered fuel cell for the receiver/transmitter on the cow - just run a hose from the cow to the fuel cell :-) )

mikey
_________________
mikey
-- you can't have too many gadgets or too much disk space !
old engineering saying: 1+1 = 3 for sufficiently large values of 1 or small values of 3
John P



Joined: 17 Sep 2003
Posts: 331

View user's profile Send private message

PostPosted: Tue May 31, 2011 8:12 am     Reply with quote

What I meant about the 32KHz crystal was that it runs the processor's Timer 1, not the entire processor. But I believe that timer would then be super-accurate, to the standard of a digital watch. That would keep all your transmitters in sync, at least for a while.

And regarding the concept of brief, occasional transmissions, suppose each one broadcasts 1% of the time, but you need to keep them separated so that the interval before and after the transmission window is also clear. In other words, if a transmitter broadcasts for 1msec 10 times a second, you'd require a 3msec window for a good reception. Then the chance of getting a good signal would be .97^99, or .049. A chance in 20 of getting a good result--that probably won't work. So what if the units brodcast for 1msec once a second? Then you'd be calculating .997^99, which is .74 . Maybe that's good enough? Of course then you need to calculate the chances of 2 or 3 or some-number of bad transmissions in succession.

If part of the design involves a range beyond which you don't want to receive your radio signals, maybe you could use an ultrasonic beeper at the master unit. Every slave within range would hear this and would respond with a radio packet (spaced in time, of course) but otherwise they wouldn't broadcast. I think a sound-based system would give you better control of range than radio, but perhaps I'm wrong about that.
SherpaDoug



Joined: 07 Sep 2003
Posts: 1640
Location: Cape Cod Mass USA

View user's profile Send private message

PostPosted: Tue May 31, 2011 6:32 pm     Reply with quote

I think keeping 100 transmitters all synchronized is going to be impossible.

Instead of a 32kHz crystal I would use a 32kHz RC oscillator to time between transmissions. The oscillators will drift in random directions at random rates so no two will consistently interfere. Use a checksum so you can discard corrupted packets, but also try to keep the packets short. Transmit often enough so that you can lose a few packets without harm, but not so often that there is little space between them.

The exact timing will depend on the behavior of your radio circuits. Work on the range problem first by reducing the antenna size or starving the transmitter of power. Then see what your message timing will be.

John P's idea for an ultrasonic interrogator is also a good idea if the cows can carry the equipment.
_________________
The search for better is endless. Instead simply find very good and get the job done.
matheuslps



Joined: 29 Sep 2010
Posts: 73
Location: Brazil

View user's profile Send private message MSN Messenger

PostPosted: Tue May 31, 2011 7:27 pm     Reply with quote

Thanks all of you with the ideas.

Fow now, I will try the simply one. The checksum.

Like, imagine I send the ID 123456, my checksum will be the sum of the algarisms....

So on the receiver I just do:
Code:

If ((fata == 123456) and (check == 21))
{
        data_valid=1;
}

If this can keep the received signal without error.. good.

bye
arunb



Joined: 08 Sep 2003
Posts: 492
Location: India

View user's profile Send private message Send e-mail

RE:
PostPosted: Tue May 31, 2011 10:30 pm     Reply with quote

A token ring like topology could work here, the transmitters can pass a 'token' to each other, the transmitter that has the token would have the permission to communicate with the receiver.

thanks
a
SherpaDoug



Joined: 07 Sep 2003
Posts: 1640
Location: Cape Cod Mass USA

View user's profile Send private message

PostPosted: Wed Jun 01, 2011 5:33 am     Reply with quote

The token ring idea would be good except now each cow has to carry a receiver as well as a transmitter. Due to being ON all the time, receivers usually require more batteries than transmitters. Is there any way you could harvest energy from a cow?
_________________
The search for better is endless. Instead simply find very good and get the job done.
dorinm



Joined: 07 Jan 2006
Posts: 38

View user's profile Send private message

PostPosted: Wed Jun 01, 2011 8:03 am     Reply with quote

simply, there's no solution to this problem Smile ...sooner or later (most probably sooner ;) ) there will be for sure at least 2 transmitters overlapping and as far as you're using a single radio frequency the receiver would never receive a valid block of data , even a simple serialnumber.
So you might consider the receiver-trans. pair, I think this time is the only reliable way.
gpsmikey



Joined: 16 Nov 2010
Posts: 588
Location: Kirkland, WA

View user's profile Send private message

PostPosted: Wed Jun 01, 2011 6:16 pm     Reply with quote

I don't think it has to receive the data each time, just most of the time since you want to know if they are in the area (and they typically don't move around that fast). So the occasional collision should not be an issue (especially if you use the idea of each transmitter using a slightly different delay between transmissions (based on the ID for example) to keep them from repeatedly colliding). As for the possibility of having a receiver, I still like my idea of a methane powered fuel cell with a hose plugged into the cow :-)

If you decide you really need a receiver, another approach would be to have the transmitter and receiver power up, send the data burst and listen for an ACK from the main unit. If it gets the ACK, it goes back to sleep (both trans and receiver). If not, it sends again - repeat up to 3 times possibly ? That would minimize the power required for the receiver although I still think getting the data most of the time should be sufficient (and the shorter the receiver range on the master, the less collisions you should be getting although the "area of interest" is smaller)

mikey
_________________
mikey
-- you can't have too many gadgets or too much disk space !
old engineering saying: 1+1 = 3 for sufficiently large values of 1 or small values of 3
mutthunaveen



Joined: 08 Apr 2009
Posts: 100
Location: Chennai, India

View user's profile Send private message

better don't change your design use just use a RTC
PostPosted: Wed Jun 01, 2011 11:32 pm     Reply with quote

Hi your project is very interesting.

My suggestion may help you... just add a RTC to your transmitting kits. Schedule the perfect timing for each kit and you can receive without any collision.

%of drift for a RTC is very low and no more collisions.
Give appropriate intervals .... (drifts may not exceed some +-10 seconds per year) use timeouts for the availability of cow.

I hope this will the best solution for your problem if you don't want to add some more rx to your circuits..... hope it helps.
ckielstra



Joined: 18 Mar 2004
Posts: 3680
Location: The Netherlands

View user's profile Send private message

Re: better don't change your design use just use a RTC
PostPosted: Thu Jun 02, 2011 6:03 am     Reply with quote

mutthunaveen wrote:
%of drift for a RTC is very low and no more collisions.
Give appropriate intervals .... (drifts may not exceed some +-10 seconds per year) use timeouts for the availability of cow.
You already say yourself why this is not going to work. Let's assume the very good 10 sec/year drift. This could be either way, so to prevent collisions all transmitters should be 20 seconds apart (neglecting time for the actual transmission). With the specified 100 transmitters this means 1 transmission every 2000 seconds, i.e. once every half hour. And a compulsory calibration every year.

The idea is not bad, but without some kind of automatic synchronization the accuracy of the RTC is going to be a problem. Which brings me to IEEE802.15.4, the low power digital radio standard which for example Zigbee is based on.

The 802.15.4 standard uses a combination of transmitter and receiver where the power consumption of the receiver is limited by switching the receiver on only at very short specified intervals. This mechanism works because the receiver is synchronized with the transmitter at regular intervals, so the before mentioned drift problems are compensated.

I don't say you should use zigbee as this is a complicated protocol with license fee to be paid. The IEEE802.15.4 hardware chips however are cheap and not difficult to design your own protocol upon or search for other people to have developed such a free to use protocol.

As general background information on problems with transmission collisions I recommend you to read the article on Carrier Sense Multiple Access with Collission Avoidance (CSMA/CA) on Wikipedia.
matheuslps



Joined: 29 Sep 2010
Posts: 73
Location: Brazil

View user's profile Send private message MSN Messenger

PostPosted: Thu Jun 02, 2011 9:04 am     Reply with quote

Quote:
As general background information on problems with transmission collisions I recommend you to read the article on Carrier Sense Multiple Access with Collission Avoidance (CSMA/CA) on Wikipedia.


Reading now......

Thanks all of you!!!

All the replys was very great...

Now, time to study the possibilities......

bye
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group