Best practice in transmitting sensor analog signal over longer distances (approx. 100') -- in cost sensitive products for microcontrollers

"Best practice" and "inexpensive" are both subject to opinion.

In all cases, I'd put a really inexpensive little processor at the sensor, and have it talk digital. The 1950-1975 way to do it would be 4-40mA, or have the remote send a PWM or frequency-modulated signal.

  • Up to six feet or so, power the remote sensor from +5V (or +3.3V) and run ground-referenced asynchronous serial (UART pins) straight from the sensor to the "main" processor.
  • Up to sixty feet or so, power the remote sensor from whatever, and regenerate it at the remote. I'd probably give it +12V for overhead, and use a switching regulator "down there", but you can use a linear regulator. Use RS-422 with the remote set to just send, or use RS-485 in half-duplex, with some sort of a protocol so that remotes only speak when spoken to.

The other solution can be I2C — there are extenders, allowing to create buses up to 100m (300ft). One of them is NXP P82B96. It is very useful in amateur constructions, because it is not expensive and exists in an easy-to-mount DIP-8 case too. Additionally it allows to translate logic levels to higher voltages (for example 12V). You can find some application notes on NXP pages, for example:

There is also a possibility to build an opto-isolated bus using P82B96:

Another possibility is P82B715, but it is probably less useful because the maximum bus length is about 50m (150ft) and there are some other limitations. There is this appnote:

Using I2C is a very effective solution, because there are many cheap interface chips on the market (ADC, DAC, IO, temperature sensors etc.) so, from the sensor side of view, there is no need to use an MCU (and to create dedicated software for this MCU).

Personally, I built my home automation system using this solution (P82B96 with opto-isolation) and I can confirm that it works very well and is stable and reliable.

I've had excellent results transmitting sensor data using the Controller Area Network (CAN). I have a 16-bit microcontroller with a built-in CAN that interfaces through SPI to a 24-bit A/D converter. This microcontroller samples every 20 ms and sends the data out through CAN to another microcontroller (32-bit) located 50 meters away. CAN has some advanced error-checking that older systems may not. It uses a differential pair so it's pretty well immune to noise. Microchip makes the MCP2515 which will interface CAN through SPI.