Reply To: adc not working on hardware but works on proteus

Home Forums Microcontrollers PIC Microcontroller adc not working on hardware but works on proteus Reply To: adc not working on hardware but works on proteus

#15900

Omeken
Participant

I am with lm35, LCD 16*2, and pic16f877a. I want to use different value (read temperature and reference temperature) of the temperature to on or off the two LED. The code is only controlling one LED RD0.// LCD module connections

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;

// End LCD module connections

 

unsigned int read_value=0, ref_value;

unsigned int value=0;

unsigned int temp;

char aux[7];

 

void main()

{

RD0_bit = 0;

RD1_bit =0;

 

ADCON1 = 0x00; // All channels are config as analog I/p.

 

ADC_Init();

Lcd_Init(); // Initialize LCD

Lcd_cmd(_lcd_clear);

Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off

Lcd_out(1,3,”Temperature:”);

LCD_Out(2,1,”Eff:    Ref:”);

 

while(1)

{

read_value = Adc_Get_Sample(2)>>2;

ref_value  = ADC_Get_Sample(4)>>2;

 

if (read_value < ref_value)

{PORTD.RD0 = 1;

if (read_value > ref_value)

PORTD.RD1 = 1;

else

PORTD.RD1 =  0;

 

PORTD.RD0 = 0;

}

 

value = (unsigned int) read_value * (500./255); // Resolution for 5 volts, 8 bits

ByteToStr(value,Ltrim(aux));

LCD_Out(2,5, aux); //shows reading temperature

 

value = (unsigned int) ref_value * (500./255);

ByteToStr(value,Ltrim(aux));

LCD_Out(2,13, aux); //shows reference temperature

 

delay_ms(50);

}

}http://ken

Attachments:
You must be logged in to view attached files.