CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

using the A/D converter in the PIC16f874

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Akhila
Guest







using the A/D converter in the PIC16f874
PostPosted: Sun Apr 20, 2003 4:53 pm     Reply with quote

The value I'm getting for the read_adc() is not what it is supposed to be. The range of Voltage inputing into PIN 2(A0) is 0v--5v.
input expected output actual output
0 0 0
0.5 26 103
1 51 209
1.5 77 52
2 102 161
2.5 128 5
3 154 113
3.5 179 210
4 205 64
4.5 230 154
5 256 255

My code also includes an 8bit counter 0--255, at 1 sec delay. It is supposed to print the correct value from read_adc(). Here is my code.
/*********************************************************/
#include <16F874.h>
#use delay(CLOCK = 20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)


int P7 = 0; // output most significant bit
int P6 = 0;
int P5 = 0;
int P4 = 0;
int P3 = 0;
int P2 = 0;
int P1 = 0;
int P0 = 0; // output least significant bit
byte value;
int ScanNumber =0; // declaration for number of scan times
int counter = 0; // counter for ten-minute time delay


void nextloop(void); // declaration for the 4 least significant bits
void delay(void); // declaration for ten-minute time delay
void Scan(void); // declaration for the 4 most significant bits
void dcvol(void); // declaration for printing the dc voltage

main ()
{
setup_adc(ADC_CLOCK_INTERNAL); // set clock for PIC
set_adc_channel(0); // set analog-to-digital input to pin2
setup_adc_ports(ALL_ANALOG);

for(ScanNumber=0; ScanNumber<9; ScanNumber++)
{
Scan();
delay();

}
}
void Scan(void)
{

for (P7=0; P7<2; P7++)
{
output_low(PIN_B7);
for (P6=0; P6<2; P6++)
{
output_low(PIN_B6);
for (P5=0; P5<2; P5++)
{
output_low(PIN_B5);
for(P4=0; P4<2; P4++)
{

output_low(PIN_B4);
if (P4 == 1) { output_high(PIN_B4); }
if (P5 == 1) { output_high(PIN_B5); }
if (P6 == 1) { output_high(PIN_B6); }
if (P7 == 1) { output_high(PIN_B7); }
nextloop();
}
}
}
}
output_low(PIN_B4);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
}


void nextloop(void)
{
for (P3=0; P3<2; P3++)
{
output_low(PIN_B3);
for (P2=0; P2<2; P2++)
{
output_low(PIN_B2);
for (P1=0; P1<2; P1++)
{
output_low(PIN_B1);
for (P0=0; P0<2; P0++)
{

output_low(PIN_B0);
if (P0 == 1) { output_high(PIN_B0); }
if (P1 == 1) { output_high(PIN_B1); }
if (P2 == 1) { output_high(PIN_B2); }
if (P3 == 1) { output_high(PIN_B3); }
dcvol();
delay_ms(1000);

}
}
}
}
output_low(PIN_B0);
output_low(PIN_B1);
output_low(PIN_B2);
output_low(PIN_B3);
}

void delay(void)
{
for (counter = 0; counter < 120; counter++)
{
delay_ms(5000);
}
}
void dcvol(void)
{
value = 0;
value = Read_ADC();
printf("\%u\n\r", value);
}
___________________________
This message was ported from CCS's old forum
Original Post ID: 13841
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

Re: using the A/D converter in the PIC16f874
PostPosted: Sun Apr 20, 2003 5:36 pm     Reply with quote

:=The value I'm getting for the read_adc() is not what it is supposed to be. The range of Voltage inputing into PIN 2(A0) is 0v--5v.
<PRE>
input expected output actual output
0 0 0
0.5 26 103
1 51 209
1.5 77 52
</PRE>
------------------------------------------------------------

Based on the number series above, you're getting 4x your
expected value, and it's being truncated to the lower 8 bits.
For example, 4 x 77 = 308.
and 308 - 256 = 52.

So you need to tell the compiler to return an 8-bit value from
read_adc(), instead of a 10-bit value.
So modify your pre-processor statements like this:

#include <16F874.h>
#device adc=8 // Add this line

If that doesn't fix it, then post the version of your compiler.
___________________________
This message was ported from CCS's old forum
Original Post ID: 13846
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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