M
member_tdh
Guest
Hai!
I'm PIC16F88 untuk menggunakan antarmuka dengan SHT75, namun kode tidak bekerja.
Could anybody help me?!
void comstart (void)
(
trisa1 = 0; / / DATA-baris dalam output
ra0 = 0;
ra1 = 1;
# # nop ASM endasm
ra0 = 1;
# # nop ASM endasm
ra1 = 0;
# # nop ASM endasm
ra0 = 0;
# # nop ASM endasm
ra0 = 1;
# # nop ASM endasm
ra1 = 1;
# # nop ASM endasm
ra0 = 0;
)
void comreset (void)
(
unsigned char i;
trisa1 = 0; / / DATA-baris dalam output
ra1 = 1;
ra0 = 0;
for (i = 0; i <9; i ) / / 9 jam siklus
(
ra0 = 1;
# # nop ASM endasm
ra0 = 0;
)
comstart (); / / transmisi mulai
HumiError = FALSE;
)
void sht_soft_reset (void)
(
comreset (); / / SHT75 komunikasi ulang
comwrite (RESET); / / SHT71 mengirim ulang perintah
)
void sht_init (void)
(
sht_soft_reset (); / / ulang SHT71
/ / Comreset (); / / SHT71 komunikasi ulang
delay_ms (15); / / kuasa untuk menunda-up
)
void comwait (void)
(
unsigned int16 sht_delay;
ra1 = 1;
ra0 = 0;
for (sht_delay = 0; sht_delay <30000; sht_delay )
(
if (! ra1)
(
/ / printf ( "\ n \ r-> SHT71 comwait kesalahan \ n \ r");
break;
)
delay_us (10);
)
)
void comwrite (unsigned char ddata)
(
unsigned char i;
trisa1 = 0; / / DATA-baris dalam output
for (i = 0; i <8; i )
(
ra0 = 0;
if (ddata & 0x80) ra1 = 1;
lain ra1 = 0;
ra0 = 1;
ddata <<= 1;
# # nop ASM endasm
)
ra1 = 1; / / lepaskan DATA-baris (sua mereka)
trisa1 = 1; / / DATA-line di input
# # nop ASM endasm
ra1 = 0; / / (kode lama)
ra0 = 0; / / (kode lama)
ra0 = 1; / / ACK untuk jam 9.
# # nop ASM endasm
if (input (PIN_A1))
(
HumiError = TRUE; / / periksa ACK (DATA akan diambil oleh SHT11 bawah)
sementara (HumiError)
(
rb3 = 1;
printf ( "\ n \ r-> SHT71 writed kesalahan ... ACK \ n \ r");
)
)
ra0 = 0;
)
unsigned int comread (unsigned char back)
(
unsigned char i;
unsigned int bbyte = 0;
trisa1 = 1; / / DATA-line di input
for (i = 0; i <8; i )
(
bbyte <<= 1;
ra0 = 1;
bbyte | = input (PIN_A1);
ra0 = 0;
# # nop ASM endasm
)
/ / Ra1 =! Kembali; / / "ACK == 1" menurunkan DATA-Line
trisa1 = 0; / / DATA-baris dalam output
ra1 =! kembali; / / "ACK == 1" menurunkan DATA-Line
ra0 = 1;
# # nop ASM endasm
ra0 = 0;
# # nop ASM endasm
trisa1 = 1; / / DATA-line di input
ra1 = 1;
kembali bbyte;
)
unsigned int s_measure (unsigned char mode)
(
unsigned char MSB = 0, lsb = 0, CRC;
sht_soft_reset ();
comstart ();
switch (mode)
(
kasus Temp:
comwrite (MEASURE_TEMP);
break;
kasus HUMI:
comwrite (MEASURE_HUMI);
break;
default:
break;
)
trisa1 = 1; / / DATA-line di input
comwait (); / / menunggu untuk menyelesaikan pengukuran
MSB = comread (ACK); / / membaca byte pertama (MSB)
lsb = comread (ACK); / / membaca kedua byte (LSB)
CRC = comread (noACK); / / membaca checksum
kembali (MSB lsb * 256 );
)
void HumidityGet (float * p_humidity, float * p_temperature)
(
unsigned int = 0 kelembaban, suhu = 0;
kelembaban = s_measure (HUMI); / / mengukur kelembaban
DoAm = kelembaban;
suhu = s_measure (Temp); / / mengukur suhu
NhietDo = suhu;
if (HumiError == TRUE) comreset (); / / jika terjadi kesalahan: RESET
lain
(
* p_humidity = (float) kelembaban; / / mengkonversi ke integer float
* p_temperature = (float) suhu; / / mengkonversi ke integer float
calc_sth11 (p_humidity, p_temperature); / / menghitung kelembaban, temperatur
)
)
//------------------------------------------------ ----------------------------------------
/ / Menghitung suhu [° C] dan kelembaban [% RH]
/ / Input: humi [ticks] (12 bit)
/ / Temp [ticks] (14 bit)
/ / Output: humi [% RH]
/ / Temp [° C]
//------------------------------------------------ ----------------------------------------
void calc_sth11 (float * p_humidity, float * p_temperature)
(
float rh_lin; / / rh_lin: Kelembaban linear
float rh_true; / / rh_true: Suhu kompensasi kelembaban
float t_C; / / t_C: Temperatur [° C]
t_C = D1 D2 * (* p_temperature);
if (t_C> 100) t_C = 100;
if (t_C <1) t_C = 1;
rh_lin = C3 * (* p_humidity) * (* p_humidity) C2 * (* p_humidity) C1;
rh_true = (t_C-25) * (T1 T2 * (* p_humidity)) rh_lin;
if (rh_true> 100) rh_true = 100;
if (rh_true <0,1) rh_true = 0.1;
* p_temperature = t_C;
* p_humidity = rh_true;
)
void s_write_statusreg (unsigned char nilai)
(
comstart ();
comwrite (STATUS_REG_W); / / perintah untuk mengirim Sensor
comwrite (nilai); / / mengirimkan nilai status register
)
unsigned char s_read_statusreg (nilai unsigned char, unsigned char checksum)
(
comstart ();
comwrite (STATUS_REG_R);
nilai = comread (ACK); / / membaca status register (8-bit)
checksum = comread (noACK); / / membaca checksum (8-bit)
return value; / / error = 1 jika tidak ada tanggapan dari membentuk Sensor
)
I'm PIC16F88 untuk menggunakan antarmuka dengan SHT75, namun kode tidak bekerja.
Could anybody help me?!
void comstart (void)
(
trisa1 = 0; / / DATA-baris dalam output
ra0 = 0;
ra1 = 1;
# # nop ASM endasm
ra0 = 1;
# # nop ASM endasm
ra1 = 0;
# # nop ASM endasm
ra0 = 0;
# # nop ASM endasm
ra0 = 1;
# # nop ASM endasm
ra1 = 1;
# # nop ASM endasm
ra0 = 0;
)
void comreset (void)
(
unsigned char i;
trisa1 = 0; / / DATA-baris dalam output
ra1 = 1;
ra0 = 0;
for (i = 0; i <9; i ) / / 9 jam siklus
(
ra0 = 1;
# # nop ASM endasm
ra0 = 0;
)
comstart (); / / transmisi mulai
HumiError = FALSE;
)
void sht_soft_reset (void)
(
comreset (); / / SHT75 komunikasi ulang
comwrite (RESET); / / SHT71 mengirim ulang perintah
)
void sht_init (void)
(
sht_soft_reset (); / / ulang SHT71
/ / Comreset (); / / SHT71 komunikasi ulang
delay_ms (15); / / kuasa untuk menunda-up
)
void comwait (void)
(
unsigned int16 sht_delay;
ra1 = 1;
ra0 = 0;
for (sht_delay = 0; sht_delay <30000; sht_delay )
(
if (! ra1)
(
/ / printf ( "\ n \ r-> SHT71 comwait kesalahan \ n \ r");
break;
)
delay_us (10);
)
)
void comwrite (unsigned char ddata)
(
unsigned char i;
trisa1 = 0; / / DATA-baris dalam output
for (i = 0; i <8; i )
(
ra0 = 0;
if (ddata & 0x80) ra1 = 1;
lain ra1 = 0;
ra0 = 1;
ddata <<= 1;
# # nop ASM endasm
)
ra1 = 1; / / lepaskan DATA-baris (sua mereka)
trisa1 = 1; / / DATA-line di input
# # nop ASM endasm
ra1 = 0; / / (kode lama)
ra0 = 0; / / (kode lama)
ra0 = 1; / / ACK untuk jam 9.
# # nop ASM endasm
if (input (PIN_A1))
(
HumiError = TRUE; / / periksa ACK (DATA akan diambil oleh SHT11 bawah)
sementara (HumiError)
(
rb3 = 1;
printf ( "\ n \ r-> SHT71 writed kesalahan ... ACK \ n \ r");
)
)
ra0 = 0;
)
unsigned int comread (unsigned char back)
(
unsigned char i;
unsigned int bbyte = 0;
trisa1 = 1; / / DATA-line di input
for (i = 0; i <8; i )
(
bbyte <<= 1;
ra0 = 1;
bbyte | = input (PIN_A1);
ra0 = 0;
# # nop ASM endasm
)
/ / Ra1 =! Kembali; / / "ACK == 1" menurunkan DATA-Line
trisa1 = 0; / / DATA-baris dalam output
ra1 =! kembali; / / "ACK == 1" menurunkan DATA-Line
ra0 = 1;
# # nop ASM endasm
ra0 = 0;
# # nop ASM endasm
trisa1 = 1; / / DATA-line di input
ra1 = 1;
kembali bbyte;
)
unsigned int s_measure (unsigned char mode)
(
unsigned char MSB = 0, lsb = 0, CRC;
sht_soft_reset ();
comstart ();
switch (mode)
(
kasus Temp:
comwrite (MEASURE_TEMP);
break;
kasus HUMI:
comwrite (MEASURE_HUMI);
break;
default:
break;
)
trisa1 = 1; / / DATA-line di input
comwait (); / / menunggu untuk menyelesaikan pengukuran
MSB = comread (ACK); / / membaca byte pertama (MSB)
lsb = comread (ACK); / / membaca kedua byte (LSB)
CRC = comread (noACK); / / membaca checksum
kembali (MSB lsb * 256 );
)
void HumidityGet (float * p_humidity, float * p_temperature)
(
unsigned int = 0 kelembaban, suhu = 0;
kelembaban = s_measure (HUMI); / / mengukur kelembaban
DoAm = kelembaban;
suhu = s_measure (Temp); / / mengukur suhu
NhietDo = suhu;
if (HumiError == TRUE) comreset (); / / jika terjadi kesalahan: RESET
lain
(
* p_humidity = (float) kelembaban; / / mengkonversi ke integer float
* p_temperature = (float) suhu; / / mengkonversi ke integer float
calc_sth11 (p_humidity, p_temperature); / / menghitung kelembaban, temperatur
)
)
//------------------------------------------------ ----------------------------------------
/ / Menghitung suhu [° C] dan kelembaban [% RH]
/ / Input: humi [ticks] (12 bit)
/ / Temp [ticks] (14 bit)
/ / Output: humi [% RH]
/ / Temp [° C]
//------------------------------------------------ ----------------------------------------
void calc_sth11 (float * p_humidity, float * p_temperature)
(
float rh_lin; / / rh_lin: Kelembaban linear
float rh_true; / / rh_true: Suhu kompensasi kelembaban
float t_C; / / t_C: Temperatur [° C]
t_C = D1 D2 * (* p_temperature);
if (t_C> 100) t_C = 100;
if (t_C <1) t_C = 1;
rh_lin = C3 * (* p_humidity) * (* p_humidity) C2 * (* p_humidity) C1;
rh_true = (t_C-25) * (T1 T2 * (* p_humidity)) rh_lin;
if (rh_true> 100) rh_true = 100;
if (rh_true <0,1) rh_true = 0.1;
* p_temperature = t_C;
* p_humidity = rh_true;
)
void s_write_statusreg (unsigned char nilai)
(
comstart ();
comwrite (STATUS_REG_W); / / perintah untuk mengirim Sensor
comwrite (nilai); / / mengirimkan nilai status register
)
unsigned char s_read_statusreg (nilai unsigned char, unsigned char checksum)
(
comstart ();
comwrite (STATUS_REG_R);
nilai = comread (ACK); / / membaca status register (8-bit)
checksum = comread (noACK); / / membaca checksum (8-bit)
return value; / / error = 1 jika tidak ada tanggapan dari membentuk Sensor
)