pic16f877 adc drive a 7 segment LED display

Thread Starter

kennyburns

Joined Mar 7, 2008
6
hi yall. Im new on electronics and i'm doing a project. About getting a signal through a potentiometer puting it through pic16f877 and then depending on what results i get from the adc display a number from 0-6 on the 7segment led display.

Now i have as much as the 6 diferent voltages that i will receive from the potentiometer which are:

no== voltage
--------------------------------
1 == 0.06v
2 == 0.08v
3 == 0.10v
4 == 0.13v
5 == 0.16v
6 == 0.17v
0 == 4.97v

I have general idea about what the circuit will look like. i will post it as soon as i have it finished
Now my big problem is about the adc i think that if i use 8 bit convertion i will get resolution 0-255
with that i will have problem on assigning the 5th and the 6th number because they both fall in number 8.
also if anyone knows of a similar project please give me some help.
i will use mplab ccs compiler for the programming.
thnx in advance for any help.
 

beenthere

Joined Apr 20, 2004
15,819
It's a lot like using a yardstick to measure thousandths of an inch - the scale is too coarse to make the measurement. Your best resolution is 19.5 millivolts.

If the range between 170 mv and 5 volts is in the who cares region, add an amplifier to make the last and largest significant voltage equal to 4.99 volts.
 

Thread Starter

kennyburns

Joined Mar 7, 2008
6
It's a lot like using a yardstick to measure thousandths of an inch - the scale is too coarse to make the measurement. Your best resolution is 19.5 millivolts.

If the range between 170 mv and 5 volts is in the who cares region, add an amplifier to make the last and largest significant voltage equal to 4.99 volts.
could you explain a bit more how these would help as i am a begginer in this:)
by increasing the last significant voltage to 4.99 it will increase my rsolution?
 

beenthere

Joined Apr 20, 2004
15,819
The resolution of the ADC is fixed, and can't be increased. The only way to make it possible to resolve small differences in the pot's output is to amplify the signal.

As a for instance, making the gain of an op amp between the wiper of the pot and the ADC input = 2, then a previously invisible 10 mv change becomes 20 mv, and can be detected.

This link goes to our Ebook and illustrates an op amp follower-with-gain, which just happens to equal 2 - http://www.allaboutcircuits.com/vol_3/chpt_8/6.html. If you only need to operate up to that last 170 mv level, make the gain = 10 and have even less uncertainty about the actual analog voltage.
 

Thread Starter

kennyburns

Joined Mar 7, 2008
6
The resolution of the ADC is fixed, and can't be increased. The only way to make it possible to resolve small differences in the pot's output is to amplify the signal.

As a for instance, making the gain of an op amp between the wiper of the pot and the ADC input = 2, then a previously invisible 10 mv change becomes 20 mv, and can be detected.

This link goes to our Ebook and illustrates an op amp follower-with-gain, which just happens to equal 2 - http://www.allaboutcircuits.com/vol_3/chpt_8/6.html. If you only need to operate up to that last 170 mv level, make the gain = 10 and have even less uncertainty about the actual analog voltage.
look the pot is actually a gear postition indicator
i understand what you are saying but when i will put on neutral and the 4.97v signall becomes double wouldn that fry my pic?
i went through the data of the pic16f877 and i found something about resolution of adc being 10 bits is that so?
 

Thread Starter

kennyburns

Joined Mar 7, 2008
6
what type of pot are you using? by chance is it logarithmic?
im afraid i dont kno my friend the pot is fixed on the engine of the bike its got three wires coming out of it one is 5 volts the other one is ground and the other one gave me those results that i have posted for each diferent gear

btw i'm sure that it's 10 bit for adc so the problem i solved now as i have 0-1023 resolution now i have to start climbing the big mountain of c programming:confused:

so now i have :
no== voltage== no adc
--------------------------------
1 == 0.06v== 12.288
2 == 0.08v== 16.384
3 == 0.10v== 20.480
4 == 0.13v== 26.624
5 == 0.16v== 32.768
6 == 0.17v== 34.816
0 == 4.97v== 1017.856

how am i going to make a round up of these numbers in programming?
 

Reshma

Joined Mar 11, 2007
54
Your program is intended to read an external input and display it via the output ports. Make use of 2 output ports. Connect 8 LEDs to one Port to display the digital value of the result of the A/D conversion. Use another Port to connect your 7-segment display (Segments a, b, c, d,..etc). The value of the voltage drop over the Potentiometer is read using the ADC and this value should be displayed as a digit between 0 to F on the 7-Segment.
Hint: Can you make use of a lookup table?
 

Thread Starter

kennyburns

Joined Mar 7, 2008
6
How are you getting fractional results out of an ADC? They have integer outputs.

For a better understanding of the A to D conversion process, take a look at this section - http://www.allaboutcircuits.com/vol_4/chpt_13/10.html - of our Ebook.
]
thnk you very much my friend ...
i think i got it now:p

ive got 0-5 volts and 1023 steps
so its 0.4887585533mv per step

so the program would have to group the gears like this:
no== voltage== no adc=======binary
--------------------------------------------------------------
1 == 0.06v== >=13--------------------------- >= 0000001101
2 == 0.08v== 14=< >=17-------0000001110 =< >= 0000010001
3 == 0.10v== 18=< >=21-------0000010010 =< >= 0000010101
4 == 0.13v== 22=< >=27-------0000010110 =< >= 0000011011
5 == 0.16v== 28=< >=33-------0000011100 =< >= 0000100001
6 == 0.17v== 34=< >=36-------0000100010 =< >= 0000100100
0 == 4.97v== 37=<-------------0000100101 =<
 
Top