View Single Post
  #6   Spotlight this post!  
Unread 11-02-2008, 01:33
Danny Diaz's Avatar
Danny Diaz Danny Diaz is offline
Smooth Operator
AKA: FrankenMentor
None #0418
Team Role: Alumni
 
Join Date: Apr 2005
Rookie Year: 2003
Location: Manchester, NH
Posts: 545
Danny Diaz has a reputation beyond reputeDanny Diaz has a reputation beyond reputeDanny Diaz has a reputation beyond reputeDanny Diaz has a reputation beyond reputeDanny Diaz has a reputation beyond reputeDanny Diaz has a reputation beyond reputeDanny Diaz has a reputation beyond reputeDanny Diaz has a reputation beyond reputeDanny Diaz has a reputation beyond reputeDanny Diaz has a reputation beyond reputeDanny Diaz has a reputation beyond repute
Send a message via AIM to Danny Diaz
Re: Aquiring Sensor Data

Quote:
Originally Posted by Tanner View Post
Hm. Interesting. So if I had some data stored in variable X, and I wanted to pass it to user byte 1, then:
UserByte1 = X;

Correct?
Yes, that's correct! Now, something very important to keep in mind about user variables - user variables are only 8 bits wide (one byte, range 0-255). If you pull in an analog sensor value, they are 10 bits wide (more than one byte, range 0-1023). If you want to preserve all 10 bits, you need to store the values in 2 user bytes - 8 bits in one, and 2 bits in the other. If you have multiples, you can "bundle" the 2 bits from 4 user bytes together (to send 4 analog values at once), but if you have just 1 then grabbing 2 8-bit chunks is easy enough. Here's how you do it:

Code:
unsigned int analogValue = GetAnalogValue( rc_ana_in01 ); // analog input port 1
UserByte3 = (char)analogValue;  // Pulls low 8 bits
UserByte4 = (char)(analogValue >> 8); // Grabs high 8 bits
and attached is what the LabVIEW code would look like on the other end to put it back together (remember, the values you pull out of the user byte are 32 bit representations, you have to cast each to 8 bits for the "Join Numbers" primitive to join them into a 16-bit value correctly). I have attached both an image of the code AND I attached the VI.

Quote:
Originally Posted by Abrakadabra View Post
If you run out of User bytes, another trick you can use is to stuff your sensor data into unused PWM data slots (i.e. make sure there is nothing connected to those PWM ports!). Then your dashboard can read the PWM data slots and make the conversion to sensor data.
Yes! This is a useful little trick, especially for dedicating slots for data that changes rapidly (like gyro data). If you multiplex data using user bytes you really need to have some kind of key to let you know what data you're seeing on the LabVIEW side - if you can dedicate unused PWM values that takes a burden off of the "cleverness" of your code. However, my team has found that we rarely have leftover PWM slots, though this year may be different since we're using pneumatics and relays instead of PWM and motors for a lot of things.

-Danny
Attached Thumbnails
Click image for larger version

Name:	AnalogRecombination.JPG
Views:	100
Size:	70.1 KB
ID:	6249  
Attached Files
File Type: vi SampleDashboard.vi (28.3 KB, 87 views)
__________________
Danny Diaz
Former Lead Technical Mentor, FRC 418
Reply With Quote