Pic16f88 SHT75 = ERROR!

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
)

 
16F88 yang hanya memiliki I2C Slave hardware, Anda harus memilih sebuah PIC dengan MSSP modul.Anda akan mempunyai untuk menulis sedikit tertutup I2C rutin.
Juga silakan gunakan kode tag ketika posting kode.

 
Hai,

1.The 'Utama' fungsi yang tidak ditentukan.

2.Sht dengan perintah kode ini tidak diberikan.

3.Dalam COMWAIT fungsi, TRISA1 tidak set ke 1.

Salam,
Laktronics

 
Thanks you very much!

<img src="http://www.edaboard.com/images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />
 

Welcome to EDABoard.com

Sponsor

Back
Top