Electronics Forum

Electronics Circuits & Projects discussion forum. Get help with electronics.


Need Help For: Humidity Sensor HSM20G to PIC18F4520

New to electronics? Don't know where to start. No problem! Post your questions here.

Moderator: pebe

Need Help For: Humidity Sensor HSM20G to PIC18F4520

Postby Ayie29 » Sat Mar 03, 2012 8:57 am

My circuit is constructed as below. I'm a new beginner in programming. Desperately need help for the programming of this system. I have modified coding from similar project, but it doesn't work. :(

Image

Code: Select all
// LCD module connections
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;

void pic_init(void);
void setup_MCU();
void display_common();
float read_voltage(unsigned short channel);
void convert_for_segments(unsigned long raw_data);
float read_humidity();
float read_temperature();
void display_data(unsigned char x, unsigned char y, float value);


void main()
{
pic_init();
setup_MCU();
display_common();
while(1)
{
display_data(1,2,read_temperature());
display_data(1,4,read_humidity());
}
}

void pic_init()
{
TRISA=0b00000011;
TRISB=0b00000000;
TRISC=0b00000000;
TRISD=0b00000000;
TRISE=0b00000000;
PORTA=0b00010000;
PORTB=0b00000000;
PORTC=0b00000000;
PORTD=0b00000000;
PORTE=0b00000000;
}

void setup_MCU()
{
LCD_Init();
ADC_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
delay_ms(500);
}


void display_common()
{
unsigned char disp1[] = "Temperature:";
unsigned char disp2[] = "Relative Humidity:";
unsigned char disp3[] = "C";
unsigned char disp4[] = "%";
Lcd_Out(1,1,disp1);
Lcd_Out(2,7,176);
Lcd_Out(2,7,disp3);
Lcd_Out(3,1,disp2);
Lcd_Out(4,6,disp4);
}


float read_voltage(unsigned short channel)
{
register unsigned long raw_v = 0;
rx float vin = 0;
unsigned short samples = 0;

for(samples = 0; samples < 64; samples++)
{
raw_v += adc_read(channel);
}

raw_v >>= 6;
vin = (raw_v * 0.0048875);
return vin;
}


float read_humidity()
{
register float HSM_20G = 0;
register float v = 0;
v = read_voltage(0);
HSM_20G = ((3.71 * v * v * v) - (20.65 * v * v) + (64.81 * v) - 27.44);
return HSM_20G;
}


float read_temperature()
{
register float HSM_20G = 0;
register float v = 0;
v = read_voltage(1);
HSM_20G = ((5.26 * v * v * v) - (27.34 * v * v) + (68.87 * v) - 17.81);
return HSM_20G;
}


void display_data(unsigned char x, unsigned char y, float value)
{
unsigned char c = 0;
register unsigned long conv = 0;
conv = (value * 100.0);
c = (conv * 0.001);
Lcd_Chr(y, x, 48 + c);
c = ((conv / 100) % 10);
Lcd_Chr_CP(48 + c);
Lcd_Chr_CP('.');
c = ((conv / 10) % 10);
Lcd_Chr_CP(48 + c);
c = (conv % 10);
Lcd_Chr_CP(48 + c);
delay_ms(100);
}
Ayie29
 
Posts: 1
Joined: Sat Mar 03, 2012 8:51 am

Return to Electronics newbies



Who is online

Users browsing this forum: No registered users and 5 guests



cron