Analog to Digital Conversion Help

Well I can get the motors running and pneumatics firing, but I’d really like to be able to do the more complicated stuff and that means interfacing with some sensors that provide analog output. So I have a few questions.

  1. After I hook up my PWMs to the sensor (take your pick) and plug it into the RC’s analog input, how do I make the code know which port I’m looking at?


  1. How do I test / troubleshoot / even see the output from the sensor?
    Is there some easy way to use a “print to a .txt file” or something? (something I’d try on a PC)

Better yet, what is the BEST way to get all the information? I’m seeing outputs in some of these posts mentioning the same kind of scaling that you see when you output to one of the motors. So should I find some way to get the info back to the dashboard (which I still need to set up). Even with that, we need to integrate (for many of the sensors) and seeing the value at any one time wont tell us too much.

Hope I’m not being too redundant or posting in the wrong place. If any of my questions indicate that I’m just fundamentally wrong, point that out too, please.


Take a look at Kevin’s ADC code which can be found at! He has excellent readme files that explain what each method does and how to use them!

So, are you using printf()? printf() will let you write output to the programming port on the RC. After you download the code to your RC then the COM program will start up. Then you will see any output that you have added printf’s for.

Maybe I’m missing what you are asking.

I’m just looking for a good way to trouble shoot.

Even if I get the sensor and the RC to talk how do I see what they are saying to each other? The way I understand it, The RC is going to capture a value every so often at regular intervals which can then be used within the code to integrate (given that you know the interval…) or whatever. But I dont know how to see what that value is. Is there a way? It would be very helpful to explain whats going on to a highschooler.

That explains things a little better.

There’s nothing special about what’s going on. You are in complete control.

First, I would second, what another poster said. Check out the ADC code from Kevin Watson (I saw wish I had to time to do what he does! :slight_smile:

Analog inputs are pretty simple. Unlike digital inputs which are just on and off, analog inputs can have any value between 0-5 volts. In order to read those values, the analog reading has to be coverted to an digital value. The FRC has a 10-bit analog-to-digital converter built in. When you call Get_Analog_Value() the RC returns a 10-bit number (in an integer). That means the value will range from 0 to 1024 (2^10).

Imagine dividing a line that is 5 units long into 1024 pieces. Each value represents that length of the line. 0 is 0, 1024 is 5, 512 is 2.5, etc. In practice, you care less about what the actual value is than how the value is different from the previous or expected value your code may be looking for.

The value you want to look at when you are debugging is the result from Get_Analog_Value(). That is the reading from the ADC converter.

You will see many examples that show shifting the result to the right 2 bits:
int result = Get_Analog_Value( rc_ana_in01 ) >> 2;

This reduces the resolution from 1024 (2^10) to 256 (2^8) by removing the two least significant bits. This is often done if the reading is going to be used with other devices that only support 8-bit values. For internal lookup tables and other math, you can use the entire 10-bit value.

Hope that helps,