/Designs/Measuring_instruments/AWS01A/SW/SHT.c
1,8 → 1,8
///////////////////////////////////////////////////////////////////////////////
// //
// Driver file for SHT75 Temperature & Humidity Sensor //
// Driver file for SHT1x Temperature & Humidity Sensor //
// //
// ***** To initialise SHT75 sensor upon power up ***** //
// ***** To initialise SHT1x sensor upon power up ***** //
// //
// Function : sht_init() //
// Return : none //
20,8 → 20,13
 
 
//***** Function to alert SHT75 *****
// generates a transmission start
// _____ ________
// DATA: |_______|
// ___ ___
// SCK : ___| |___| |______
 
void comstart (void)
void sht_comstart (void)
{
output_float(sht_data_pin); //data high
output_low(sht_clk_pin); //clk low
42,7 → 47,7
 
//***** Function to write data to SHT75 *****
 
int1 comwrite (int8 iobyte)
int1 sht_comwrite (int8 iobyte)
{
int8 i, mask = 0x80;
int1 ack;
73,7 → 78,7
 
//***** Function to read data from SHT75 *****
 
int16 comread (void)
int16 sht_comread (void)
{
int8 i;
int16 iobyte = 0;
126,7 → 131,7
 
//***** Function to wait for SHT75 reading *****
 
void comwait (void)
void sht_comwait (void)
{
int16 sht_delay;
 
133,17 → 138,21
output_float(sht_data_pin); //data high
output_low(sht_clk_pin); //clk low
delay_us(2);
for(sht_delay=0; sht_delay<30000; sht_delay++) // wait for max 300ms
for(sht_delay=0; sht_delay<350; sht_delay++) // wait for max 350ms (for 14bit measurement)
{
if (!input(sht_data_pin)) break; //if sht_data_pin low, SHT75 ready
delay_us(10);
delay_ms(1);
}
}
 
 
//***** Function to reset SHT75 communication *****
 
void comreset (void)
// communication reset: DATA-line=1 and at least 9 SCK cycles followed by transstart
// _____________________________________________________ ________
// DATA: |_______|
// _ _ _ _ _ _ _ _ _ ___ ___
// SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______| |___| |______
void sht_comreset (void)
{
int8 i;
 
157,7 → 166,7
output_low(sht_clk_pin);
delay_us(5);
}
comstart();
sht_comstart();
}
 
 
165,8 → 174,8
 
void sht_soft_reset (void)
{
comreset(); //SHT75 communication reset
comwrite(0x1e); //send SHT75 reset command
sht_comreset(); //SHT75 communication reset
sht_comwrite(0x1e); //send SHT75 reset command
delay_ms(15); //pause 15 ms
}
 
173,16 → 182,16
 
//***** Function to measure SHT75 temperature *****
 
int16 measuretemp (void)
int16 sht_measuretemp (void)
{
int1 ack;
int16 iobyte;
 
comstart(); //alert SHT75
ack = comwrite(0x03); //send measure temp command and read ack status
sht_comstart(); //alert SHT75
ack = sht_comwrite(0x03); //send measure temp command and read ack status
if(ack == 1) return;
comwait(); //wait for SHT75 measurement to complete
iobyte = comread(); //read SHT75 temp data
sht_comwait(); //wait for SHT75 measurement to complete
iobyte = sht_comread(); //read SHT75 temp data
return(iobyte);
}
 
189,16 → 198,16
 
//***** Function to measure SHT75 RH *****
 
int16 measurehumid (void)
int16 sht_measurehumid (void)
{
int1 ack;
int16 iobyte;
 
comstart(); //alert SHT75
ack = comwrite(0x05); //send measure RH command and read ack status
sht_comstart(); //alert SHT75
ack = sht_comwrite(0x05); //send measure RH command and read ack status
if(ack == 1) return;
comwait(); //wait for SHT75 measurement to complete
iobyte = comread(); //read SHT75 temp data
sht_comwait(); //wait for SHT75 measurement to complete
iobyte = sht_comread(); //read SHT75 temp data
return(iobyte);
}
 
207,7 → 216,7
 
void calculate_data (int16 temp, int16 humid, float & tc, float & rhlin, float & rhtrue)
{
float truehumid1, rh;
float rh;
 
//calculate temperature reading
tc = ((float) temp * 0.01) - 40.0;
230,8 → 239,8
float realhumid;
restemp = 0; truehumid = 0;
 
restemp = measuretemp(); //measure temp
reshumid = measurehumid(); //measure RH
restemp = sht_measuretemp(); //measure temp
reshumid = sht_measurehumid(); //measure RH
calculate_data (restemp, reshumid, temp, realhumid, truehumid); //calculate temp & RH
}
 
240,6 → 249,6
 
void sht_init (void)
{
comreset(); //reset SHT75
sht_comreset(); //reset SHT75
delay_ms(20); //delay for power-up
}
/Designs/Measuring_instruments/AWS01A/SW/ds1820.c
35,7 → 35,7
 
float ds1820_read()
{
unsigned int1 busy=0;
unsigned int1 ready=0;
int8 SN[10];
unsigned int8 n;
float result;
44,7 → 44,12
onewire_write(0xCC);
onewire_write(0x44);
 
while (busy == 0) busy = onewire_read();
for(n=0;n<200;n++) // wait until sensor is busy or timeout will be over
{
ready = onewire_read();
if(ready == TRUE) break;
delay_ms(1);
}
 
onewire_reset();
onewire_write(0xCC);
58,7 → 63,7
}
else
{
result=-273.15;
result=-27315;
}
return(result);
}