i am only getting first digit of analog voltage like 40.00v

Post your requests and ideas on the future development of mikroC PRO for FT90x.
Post Reply
Author
Message
lalit11123
Posts: 1
Joined: 07 Jan 2016 07:36

i am only getting first digit of analog voltage like 40.00v

#1 Post by lalit11123 » 07 Jan 2016 08:46

/* my code is here ,i am new in this field... if voltage is 37.25 then it shows only 30.00 v*/



#include<pic.h>

#define _XTAL_FREQ 4000000
#define rs RB4
#define rw RB5
#define en RB6
#define lcdport PORTC



void delay(int d)
{
int i;
while(d)
{
i = 100;
while(i)
{
i--;
}
d--;
}
}

void adc_initial()
{
CHS0=0;
CHS1=0;
CHS2=0;
CHS3=1;

ADCON0=0b01000100;
ADCON1=0b00000000;
VCFG0=0;
ADFM=1;
ADON=1;
}

void lcd_command(unsigned char cmdout)
{
lcdport=cmdout;
rs=0;
en=1;
delay(20);
en=0;
}

void lcd_initial()
{
lcd_command(0x38);
lcd_command(0X0c);
lcd_command(0x01);
lcd_command(0x06);
lcd_command(0x80);
}



int read_adc()
{
unsigned int adc_output=0;
float temp1=0;
GODONE=1;
while(GODONE);
adc_output=(ADRESH<<8)+ADRESL;

temp1=(adc_output*5)/1024;
return temp1;
}


ch_print(unsigned char a)
{
rs=1;
lcdport=a;
en=1;
delay(1);
en=0;
}

void lcd_write(unsigned char *a)
{
while(*a!='\0')
{
rs=1;
lcdport=*a;

en=1;
delay(1);
en=0;
a++;
}
}

void main()
{
float num1;


TRISA1=00000010;
TRISC=0X00;
TRISB=0x00;
PORTC=0X00;
ANSEL=0b00000010;
ANSELH=0X00;



adc_initial();
lcd_initial();
while(1)
{

unsigned int num=0;
unsigned short x=0;
unsigned short y=0,z=0,t=0;
num1=read_adc();

num=num1*1000;
t=(num%10);
z=(num/10)%10;
y=(num/100)%10;
x=(num/1000)%10;
lcd_command(0x01);
lcd_command(0x81);

lcd_write("RITIKA SYSTEMS");
delay(2000);
lcd_command(0x01);
lcd_command(0x80);
lcd_write("BATTERY VOLTAGE");

lcd_command(0xC5);

ch_print(48+x);
ch_print(48+y);
lcd_write(".");
ch_print(48+z);
ch_print(48+t);

lcd_write("V");
delay(2000);
lcd_command(0x01);
lcd_command(0x80);
lcd_write("TEMPERATURE");
delay(2000);
}
}

Post Reply

Return to “mikroC PRO for FT90x Wish List”