SparkFun Forums 

Where electronics enthusiasts find answers.

Have questions about a SparkFun product or board? This is the place to be.
By CMS
#107520
Hopefully someone can get me pointed in the right direction for this project. I've been reading so much my mind is spinning!

What I want to build is a 3 digit (7 sement) digit LCD display for a 0-5v input signal scaled from 0% to 100%.
It's an automotive application where I want to have a universal box that I can connect to a throttle position sensor output (0-5v) and be able to use a switch to set 0% at one voltage and then use another switch to to set 100% at a different voltage. Once set, the box would display 0-100% of the throttle position depending on the voltage.

It's a linear a/x+b scaling on one analog input driving a display with user set offsets.

If this were your project where would you start? Any tips/pointers would be much appreciated.

Thanks!
By bill190
#107527
If you are not familiar with programming microcontrollers, the easiest to start with is the Parallax Basic Stamp. They sell those here. EZ, excellent documentation, and support.

Their forum at the following link has excellent advice and even an electrical engineer who answers questions. Post on the Basic Stamp forum (same question)...
(Click on forums...)
http://www.parallax.com
By 60amp_relay
#107529
The Parallax Basic Stamp is an easy way to get started with microcontrollers (which is eventually what you want here) The trouble is I don't know of a direct way to read an analog voltage using the Stamp. I suppose you could use a discrete ADC, like an ADC0831CCN or something similar, but in that case you might be better off jumping in with both feet and using a PIC or AVR that has a built-in ADC.

Are you new to electronics? I couldn't tell from your post if you're just getting started, or an old hand, so the following may not be applicable, but it might help to start off with a proof-of-concept design. Just an idea for the sake of design simplicity, you could build a 5-LED bar graph from a single quad voltage comparator (like an LM339N) and a handful of resistors. Two green LEDs, one yellow LED, and one red LED connected to the 4 outputs of a quad comparator through 1K resistors would make up your display. The inverting (-) inputs of the comparator could be connected to a voltage divider at +1, +2, +3, and +4 volts, or so. Potentiometers at both ends of the divider would allow you to adjust the scale. All four non-inverting (+) inputs of the comparator would be connected to the throttle position sensor. The 5th (bottom) green LED would always be lit.
By esklar81
#107537
CMS,
I suggest you have a look at Arduino. Although I haven't tried the Parallax Basic Stamp, it's hard to believe it would be significantly easier to use than the Arduino (both in terms of hardware and the development environment). Furthermore, Arduino gives you on-board analog-to-digital conversion (ADC).

It would be relatively easy to set it up so that you have a pushbutton to set each end of the range and a software mapping of the measured voltage to 0 - 100% of the difference between the setpoints. With a bit more work, you could have it display actual voltage until/unless the setpoints were entered.

The only concern I have is: It's not obvious to me how (without external, durable memory) you could have the device remember the setpoints when it's powered down. Of course, if you're willing to re-set the setpoints about as frequently as you need to re-set the clock in the vehicle, you could just wire this to have power from the car battery at all times.

Good Luck,
Eric
By JonChandler
#107540
This would be a simple project using either the free Amicus Compiler for a PIC18F25k20 or using free Swordfish Special Edition with a PIC18F2520 or similar chip with on-board EEPROM to store set points. Amicus and Swordfish are Basic compilers that are simple to use.

Either of these would be a great combination with the low-cost TAP-28 PIC application board. It's set up with dedicated connectors for real-world functions like reading analog sensors and sensors and connecting to display boards. The TAP-28 supports many PIC18F-series 28 pin parts.

Amicus: http://www.myamicus.co.uk/

Swordfish: http://www.sfcompiler.co.uk/swordfish/

TAP-28: http://www.clever4hire.com/throwawaypic/

Also, a lot of good references to using any of the above is:

http://digital-diy.com/
User avatar
By thebecwar
#107541
I'd also go to the SAE's electronics page and buy the OBD-II specification document. TPS is a code you can pull from the ECM, plus you don't have to tune the min/max values for each vehicle you want to use it on.
By bill190
#107543
thebecwar wrote:I'd also go to the SAE's electronics page and buy the OBD-II specification document. TPS is a code you can pull from the ECM, plus you don't have to tune the min/max values for each vehicle you want to use it on.
That sounds like the most "fun" to me, but I am quite the programmer/geek type!

FYI - OBD II is on vehicles 1996 and later. Vehicles prior to that would not have this. Also I've read there is an OBD III coming out?

Is your device for just one vehicle? Or for any fuel injected vehicle new/old?

If you do want to go the OBD route, Microchip which makes Pic microcontrollers has a "CAN" topic on their forums. (CAN is an automotive networking protocol as well as others.) And they have certain microcontrollers with CAN functionality built in. If you have never programmed a microcontroller before, I would suggest getting your "feet wet" with something more simple first though.

Here is the Microchip forum...
(Scroll down to CAN about 1/3 of the way down)
http://www.microchip.com/forums/default.aspx

About CAN...
http://en.wikipedia.org/wiki/Controller_area_network

FYI GM uses CAN and GMLAN...
http://en.wikipedia.org/wiki/GMLAN
User avatar
By thebecwar
#107544
bill190 wrote:
thebecwar wrote:I'd also go to the SAE's electronics page and buy the OBD-II specification document. TPS is a code you can pull from the ECM, plus you don't have to tune the min/max values for each vehicle you want to use it on.
That sounds like the most "fun" to me, but I am quite the programmer/geek type!

FYI - OBD II is on vehicles 1996 and later. Vehicles prior to that would not have this. Also I've read there is an OBD III coming out?

Is your device for just one vehicle? Or for any fuel injected vehicle new/old?

If you do want to go the OBD route, Microchip which makes Pic microcontrollers has a "CAN" topic on their forums. (CAN is an automotive networking protocol as well as others.) And they have certain microcontrollers with CAN functionality built in. If you have never programmed a microcontroller before, I would suggest getting your "feet wet" with something more simple first though.
[...snip...]
You might consider the ELM327 instead, since different manufacturers/models use differing standards. The ELM chip supports AT commands, and all of the major bus topologies for OBD-II (J1939 PWM & VPW, CAN, ISO, J1850) and converts the data to RS-232 for your use. It internally handles the protocol, and allows you to send messages using ASCII characters (much easier to troubleshoot). This is the cheapest/easiest solution I've found so far for interfacing with a wide variety of vehicles, without having to figure out the bus topology manually, and manually pack data behind the connection specific headers.
By CMS
#107551
Now that's a support community! Thanks everyone! :D

I'll start researching some of the chips and solutions that you've all given me, and come back with some questions when I get myself a little deeper into this project. In the mean time, Let's see if I can fill in some blanks for some of the responses here:
60amp_relay wrote:Are you new to electronics? I couldn't tell from your post if you're just getting started, or an old hand,
Quite familiar with electronics, but just getting started with designing my own devices. But I like the idea of the bar graph proof of concept, that sounds like a good starting point.
esklar81 wrote:I suggest you have a look at Arduino
I have an Arduino dev kit on the bench, and it seemed to be "overkill" for the application to me. I was going to start there, but if there was a simpler approach then I would take a look at that.
esklar81 wrote:The only concern I have is: It's not obvious to me how (without external, durable memory) you could have the device remember the setpoints when it's powered down. Of course, if you're willing to re-set the setpoints about as frequently as you need to re-set the clock in the vehicle, you could just wire this to have power from the car battery at all times.
Good point, I'm not sure if that would make it a pain or not, but I would think I could solve this with a lithium backup battery on the board and some memory. It's something I need to look into as most of the newer "drive by wire" vehicles won't go to 100% until the ECU decides that's OK, so setting the high point can't happen in the driveway.
JonChandler wrote:This would be a simple project using either the free Amicus Compiler for a PIC18F25k20 or using free Swordfish Special Edition with a PIC18F2520 or similar chip with on-board EEPROM to store set points. Amicus and Swordfish are Basic compilers that are simple to use.

Either of these would be a great combination with the low-cost TAP-28 PIC application board. It's set up with dedicated connectors for real-world functions like reading analog sensors and sensors and connecting to display boards. The TAP-28 supports many PIC18F-series 28 pin parts.
Jon, thanks for these suggestions, I didn't have this route on my radar, until now...

thebecwar wrote:I'd also go to the SAE's electronics page and buy the OBD-II specification document. TPS is a code you can pull from the ECM, plus you don't have to tune the min/max values for each vehicle you want to use it on.
I started to wanter down the OBDII path, but there's a few challenges with it that make reading the raw voltage a better solution. Plus the response time of OBD can be an issue.
bill190 wrote:If you do want to go the OBD route, Microchip which makes Pic microcontrollers has a "CAN" topic on their forums
I'm very familiar CAN, use it almost everyday. The challenge here would be getting the CAN address for throttle position for each and every ECU out there. Not to mention that most of the manufacturers use 29bit CAN address format, which would take forever to crack. The OBD-CAN protocol that has become more common now, but it's not on motorcyles yet.
By coyote20000
#107559
I personally would use an arduino.
Feed the signal to the ADC. Throttle low, press a 'Min' button, store Min value into EEPROM. Throttle High, press a 'Max' button, store Max value in EEPROM.
((Throttle value - Min)*100)/(Max - Min) = %Throttle (If my math is correct.. lol)

Convert %Throttle to a string and send it to a serial display.

Dave
User avatar
By thebecwar
#107569
CMS wrote: I'm very familiar CAN, use it almost everyday. The challenge here would be getting the CAN address for throttle position for each and every ECU out there. Not to mention that most of the manufacturers use 29bit CAN address format, which would take forever to crack. The OBD-CAN protocol that has become more common now, but it's not on motorcyles yet.
As far as CAN address of the sensor, you don't need to know it to read the TPS. You request it by sending the OBD-II request at mode 0x01 for PID 0x11. It's defined by the standard as one of the required mode 1 sensors. The request returns only 1 byte (which on some implementations returns 8 bytes anyway) so it's actually farily fast to send, even at the 10400 baud of some of the ISO connections.

But like you said, OBD is not on motorcycles, and if that's your target application, you probably have no choice but to tap the sensor directly. Of course this adds in overhead for different designs of TPS, if you want to make the part removable. Another question, is the voltage change across the sweep of the sensor linear, or logarithmic?
By anhingus
#107996
what's with the arduino stuff?

you can get an intersil ICL7106, ICL7107, ICL 7135 [my choice] for $3 and no code.

7-segment drivers and displays and you are in business.

just enter the chip number as a web search for application data.