|
|
View previous topic :: View next topic |
Author |
Message |
pom
Joined: 25 Nov 2004 Posts: 30 Location: Germany
|
Output on Port A? |
Posted: Tue Aug 16, 2005 5:05 am |
|
|
Hello,
I am using the 18F258 and I want to measure voltage and use some pins of port A as outputs.
I know how to measure the voltages. I want to use no reference but the normal levels.
How to setup the pins? I could use
setup_adc_ports( AN0_AN1_AN2_AN4_VSS_VREF);
but I do not have a reference, so the line is not correct. I don't know what to write for VREF so that there is used the normal voltage level. VSS or VPP don't work.
Another way is using
setup_adc_ports(ALL_ANALOG);
but then I can't use some of the pins as outputs, can I?
I am looking forward for your help and I would be very thankful for it.
Bye, pom |
|
|
MikeValencia
Joined: 04 Aug 2004 Posts: 238 Location: Chicago
|
|
Posted: Tue Aug 16, 2005 8:14 am |
|
|
Code: |
setup_adc_ports(RA0_RA1_RA3_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
|
This code uses 5V as the reference.
In my case, i only use RA0 & RA1 as analog inputs. RA3 is unfortunately a wasted pin which i tie to either the vdd or vss just to terminate it.
You say you want to use some RA pins as i/o. You can either use RA0 only, RA0,1,3 as a/d while the rest are io, etc. It's in the datasheet. In summary, you do not have the liberty to arbritrarily choose which pins you want as io and which ones as a/d pins. If that was otherwise the case, then i would choose not to waste the RA3 pin as in my code example above. |
|
|
pom
Joined: 25 Nov 2004 Posts: 30 Location: Germany
|
|
Posted: Wed Aug 17, 2005 1:34 am |
|
|
I see the problem.
Now I was successful in measuring the voltages at pins A0, A1, A2. Unfortunately I didn't know, that there would be a problem with choosing these three for measuring and pin A3 as output. I can't change the circuit, because ist is etched (correct word?).
But as I said, I was successful in measuring the three voltages. I just used
Code: |
set_adc_ports(all_analog);
|
But nevertheless the orders
Code: |
output_low/output_high(PIN_A3);
|
seem to work correct. Will there be a problem I don't see at the moment or is it ok to work with it?
Have a nice day, pom |
|
|
Ttelmah Guest
|
|
Posted: Wed Aug 17, 2005 2:36 am |
|
|
It should work OK. However you slightly increase the potential 'noise' sources on your analog measurements. basically to be used as an analog pin, three things have to happen:
1) The pin has to be selected as an analog input in the setup.
2) The pin has to be selected to be read using the analog multiplexor.
3) To make any sense, the pin has to be set as an input, since otherwise the drive transistors turn on and drive the pin.
Now you can therefore use a pin that is set by number '1' to be 'analog' as an output, by just changing TRIS (which is what you are doing by outputing data on the pin), and enabling the drive transistors. The 'downside' is that the digital signal will still be routed a little further into the analog circuitry than would otherwise happen, being fed through the first selector, into the analog multiplexor. This makes it more likely to introduce noise into the analog circuitry. So long as you are careful, that the line is not connecting to a noisy signal, and do not change the line yourself when taking a reading (the less the processor is doing when taking an analog reading the better - this applies always for good accuracy), everything should be OK.
Best Wishes |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|