ADC problem 16f873A 5V

Status
Not open for further replies.

MARWEN007

Junior Member level 2
Joined
Apr 16, 2011
Messages
24
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Visit site
Activity points
1,481
hi to all I have to calculate numerical analog conversion with 16f873A entry A0 and A1 from 0 to 5v my program has a problem when 0 to 1V it gives false value of the ADC. there's there anyone who can help me? Fos=20
Code:
 sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;

sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit;


char txt[] = "lecture tension";

char chVAL[16];
float val=0;

 unsigned int adcvalue,U;

void main(){
ADCON1 = 0x82;
  Lcd_Init();                  // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);         // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);    // Cursor off
  Lcd_Out(1,1,txt);                             // Write text in first row
  Delay_ms(700);
  Lcd_Cmd(_LCD_CLEAR);         // Clear display

  Lcd_Out(1,1,"U1=");                                          // Write text in first row
  Lcd_Out(2,1,"U2=");
   do
 {

     VAL=Adc_Read(0);
     floattostr(VAL*0.00489,chVAL);
     Lcd_Out(1,13,chVAL);
     VAL=Adc_Read(1);
     floattostr(VAL*0.00489,chVAL);
     Lcd_Out(2,13,chVAL);
      Delay_ms(200);
 }   while(1);
}
 

Are you setting those pins to inputs? We can't tell, because you're using library functions not included in your code. It would be best to set those two pins as inputs at the beginning of main().

Also, you're not setting ADCON0. Is the default value appropriate? Your program doesn't have the clock speed value so we can't tell.
 

this is my configuration to read 5v from adc
the conversion go fault betwen 0 and 1 volt ???!!!

Code:
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;

sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit;

  //pic 16f873a fosc  20 M
char text[] = "lecture tension";

char chVAL[16];

float val=0;

  
 unsigned int   adcvalue,U;


void main(){

TRISB=0x00;
TRISA=0xFF;
PORTA=0x00;
 ADCON1.ADFM=1;
 ADCON1.ADCS2=0;
 ADCON1.PCFG0=0;
 ADCON1.PCFG1=0;
 ADCON1.PCFG2=0;
 ADCON1.PCFG3=0;

ADCON0=0b10000001                       ;     // fclok =f/32
  Lcd_Init();                  // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);         // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);    // Cursor off
  Lcd_Out(1,1,text);                             // Write text in first row
  Delay_ms(700);
  Lcd_Cmd(_LCD_CLEAR);         // Clear display
  Lcd_Out(1,1,"U1=");                                          // Write text in first row
Lcd_Out(2,1,"U2=");
 //
  
   do
 {

 //
     VAL=Adc_Read(0);
     floattostr(VAL*0.00489,chVAL);
     Lcd_Out(1,13,chVAL);
       Delay_ms(20);
     VAL=Adc_Read(1);
     floattostr(VAL*0.00489,chVAL);
     Lcd_Out(2,13,chVAL);
      Delay_ms(200);     //
 }   while(1);
}
 

hello,

did you get warnings or errors during compiling ?

because you wrote :
VAL=Adc_Read(0);

and declaration is :
float val;
compiler must be case sensitif to avoid mistake !

and it's better to write
val=(float) Adc_Read(0);
 
Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…