sshahryiar
 
 
  Joined: 05 May 2010 Posts: 94 Location: Dhaka, Bangladesh 
			
			 
			 
			 
			 
			
			
			
			
			
  
		  | 
		
			
				| HSM-20S Relative Humidity Temperature Sensor Demo | 
			 
			
				 Posted: Sun Nov 23, 2014 10:10 am     | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Code: | 	 		  
 
#include <16F877A.h>
 
 
               
 
#device *= 16
 
#device ADC = 10
 
 
 
#fuses NOWDT, PROTECT, CPD, NOLVP, HS
 
#fuses NOBROWNOUT, NODEBUG, NOWRT, PUT 
 
 
                                                                                                     
 
#use delay (clock = 10MHz) 
 
 
 
#include "lcd.c"  
 
 
 
const unsigned char symbol[8] = {0x00 ,0x0E, 0x0A ,0x0E, 0x00, 0x00, 0x00, 0x00};
 
 
              
 
void setup(); 
 
void lcd_symbols();
 
void get_parameters(float *relative_humidity, float *temperature);
 
       
 
 
void main()  
 
{                                                   
 
   float t = 0;
 
   float rh = 0;
 
   
 
   setup();
 
                                                                          
 
                                                            
 
   while(TRUE)           
 
   {                        
 
      get_parameters(&rh, &t);   
 
      lcd_gotoxy(9, 1);
 
      printf(lcd_putc, "%3.2g  ", rh);   
 
      lcd_gotoxy(9, 2);
 
      printf(lcd_putc, "%3.2g  ", t); 
 
   };                       
 
}  
 
 
 
void setup()
 
{                                                                                               
 
   disable_interrupts(global);              
 
   setup_timer_0(T0_internal); 
 
   setup_timer_1(T1_disabled);
 
   setup_timer_2(T2_disabled, 255, 1);
 
   set_timer0(0);
 
   set_timer1(0); 
 
   set_timer2(0);                                                           
 
   setup_CCP1(CCP_off);
 
   setup_CCP2(CCP_off);
 
   setup_psp(PSP_disabled);                                
 
   setup_comparator(NC_NC_NC_NC); 
 
   setup_SPI(SPI_disabled);                   
 
   port_B_pullups(FALSE);  
 
   setup_ADC(ADC_clock_internal);
 
   set_analog_pins(AN0_AN1_AN3);  
 
   lcd_init();
 
   lcd_symbols(); 
 
   lcd_putc("\f");      
 
   lcd_gotoxy(3, 1);         
 
   lcd_putc("RH/%:"); 
 
   lcd_gotoxy(3, 2);  
 
   lcd_putc("T/ C:");  
 
   lcd_gotoxy(5, 2);
 
   lcd_putc(0);
 
} 
 
 
 
void lcd_symbols() 
 
{
 
   unsigned char s = 0;
 
   
 
   lcd_send_byte(0, 0x40); 
 
   for(s = 0; s < 8; s++)        
 
   {                           
 
        lcd_send_byte(1, symbol[s]);          
 
   }
 
   lcd_send_byte(0, 0x80);
 
}   
 
            
 
                           
 
void get_parameters(float *relative_humidity, float *temperature)  
 
{
 
   unsigned long samples = 256;    
 
   
 
   register unsigned long long avg_rh = 0; 
 
   register unsigned long long avg_t = 0;                    
 
   
 
   while(samples > 0)
 
   {                          
 
      set_ADC_channel(0);          
 
      delay_ms(1);     
 
      read_adc(adc_start_only);                                                                    
 
      while(adc_done() == 0);                
 
      avg_rh += read_adc(adc_read_only);                                      
 
      
 
      set_ADC_channel(1);
 
      delay_ms(1);     
 
      read_adc(adc_start_only);                     
 
      while(adc_done() == 0);                
 
      avg_t += read_adc(adc_read_only); 
 
      
 
      samples--;                         
 
   }; 
 
   
 
   avg_rh >>= 8; 
 
   avg_t >>= 8; 
 
   
 
   *relative_humidity = ((0.1507 * avg_rh) - 11.4378);
 
   *temperature = ((-0.0002 * avg_t * avg_t) + (avg_t * 0.2268) - 11.4945);
 
}   
 
 | 	 
  _________________ https://www.facebook.com/MicroArena
 
 
SShahryiar | 
			 
		  |