PDA

View Full Version : Multiple analog inputs ?



rngd
- 25th February 2008, 07:19
Hi,

Im using a PIC 16F877A. I want to read multiple analog inputs at the same time and then compare their values. I have read somewhere that after the first ADCIN, I have to delay a few miliseconds before doing ADCIN again.

Can someone explain this please ? How long should I have to delay and where should I delay ? Anyone have an example code ?

Also, what else should I know about taking in multiple analog inputs, as in potential problems, etc ? I've read a bit about noise problems but there wasnt much explanation .. Any links will be very helpful. Thanks everyone.

edit: Ive looked at the datasheet but couldnt find any useful info.

mackrackit
- 25th February 2008, 07:24
Go here for example code and it may also answer your question.
http://www.rentron.com/PicBasic1.htm
Then scroll to:


A/D & Using The 8-Pin PIC™ Series
bullet

Click HERE for: How to build a 4-channel A/D converter using the PIC12C671.
bullet

Click HERE for: Using the 8-Pin PIC12C671 A/D Converter.
bullet

Click HERE for: Using the 8-Pin PIC12C671 with PicBasic.
bullet

Click HERE for: Using the PIC16F877 A/D Converter. This example displays 3-channels of analog input on an LCD display.

Never had any problems with more than one myself.

nomad
- 25th February 2008, 07:36
you can also see http://www.picbasic.co.uk/forum/showthread.php?t=1659 or search the forums, there's lots of good info here.

rngd
- 25th February 2008, 07:55
Go here for example code and it may also answer your question.
http://www.rentron.com/PicBasic1.htm
Then scroll to:


Never had any problems with more than one myself.

Do you have any examples which use ADCIN and put the input directly into the variable (see below) ? T


you can also see http://www.picbasic.co.uk/forum/showthread.php?t=1659 or search the forums, there's lots of good info here.

Thanks ! Just to clarify, so my code below can work without problems ?


define adc_bits 10 'define number of bits in result
define adc_clock 3 'clock source3=RC
define adc_sampleus 50 'set sampling time in microsec

adcvar1 var word
adcvar2 var word
diff var byte



start:
adcin 0, adcvar1 'read channel 0 to adcvar1
adcin 1, adcvar2 'read channel 1 to adcvar2

diff = adcvar1-adcvar2

select case diff
...


Thanks guys. Any other links will be very helpful.

Acetronics2
- 25th February 2008, 08:20
Hi,

IF you want "real same time" measurements ... simply use :

1) slow variatons : RC Low pass on ADC inputs to filter and "damp" a bit

2) quick variations : External LF398 ( i.e.) Sample and Hold circuits ...

3) Use two external ADCs

4) Use a differential OPA ...


And then use the ADC ... or read the ext ADCs.

remember The Pic can do ONE THING ONLY at a time .... but can drive many peripherals at the same time ....

Alain

rngd
- 25th February 2008, 15:13
Hi,

IF you want "real same time" measurements ... simply use :

1) slow variatons : RC Low pass on ADC inputs to filter and "damp" a bit

2) quick variations : External LF398 ( i.e.) Sample and Hold circuits ...

3) Use two external ADCs

4) Use a differential OPA ...


And then use the ADC ... or read the ext ADCs.

remember The Pic can do ONE THING ONLY at a time .... but can drive many peripherals at the same time ....

Alain

Thanks Alain, but I dont think I need 'same time' measurements.

OK, so I have read the links. If my code is like this


pair1:

adcin 0, adc1 'read channel 0 to adc1
adcin 1, adc2 'read channel 1 to adc2
diff = abs(adc1-adc2)
if diff>tolerance then
' run servo1 for x seconds
goto pair1 'recheck values
else
return
endif

meaning I repeatedly check the analog input until 'diff' is less than 'tolerance', there will be no problems as I have

DEFINE ADC_SAMPLEUS 50

at the top, and this will add the delay between each ADCIN automatically. Am I correct ? Just want to confirm.

ps. I also read that sampling at 8 bits instead of 10 will improve the speed and stability when using multiple analog inputs. Will reducing to 8 bits help a lot, or can it work just fine with 10 bits ?