Pic16f88 SHT75 = Pogreška!

M

member_tdh

Guest
Bok!

Im 'koristeći PIC16F88 do sučelja sa SHT75, ali kod neće raditi.
Mogao bilo tko pomoć mene?!

poniłtava comstart (void)
(
trisa1 = 0; / / DATA u output-line
ra0 = 0;
ra1 = 1;
# asm nop # endasm
ra0 = 1;
# asm nop # endasm
ra1 = 0;
# asm nop # endasm
ra0 = 0;
# asm nop # endasm
ra0 = 1;
# asm nop # endasm
ra1 = 1;
# asm nop # endasm
ra0 = 0;
)

poniłtava comreset (void)
(
nepotpisani pougljiti I;

trisa1 = 0; / / DATA u output-line
ra1 = 1;
ra0 = 0;
for (i = 0; i <9; i ) / / 9 clock cycles
(
ra0 = 1;
# asm nop # endasm
ra0 = 0;
)
comstart (); / / prijenos start
HumiError = false;
)

poniłtava sht_soft_reset (void)
(
comreset (); / / SHT75 komunikacija reset
comwrite (RESET); / / SHT71 poslati naredba reset
)

poniłtava sht_init (void)
(
sht_soft_reset (); / / reset SHT71
/ / Comreset (); / / SHT71 komunikacija reset
delay_ms (15); / / kašnjenje za vlast-up
)

poniłtava comwait (void)
(
nepotpisani int16 sht_delay;

ra1 = 1;
ra0 = 0;
for (sht_delay = 0; sht_delay <30000; sht_delay )
(
if (! ra1)
(
/ / printf ( "\ n \ r-> SHT71 comwait pogreška! \ n \ r");
break;
)
delay_us (10);
)
)

poniłtava comwrite (nepotpisano pougljiti ddata)
(
nepotpisani pougljiti I;

trisa1 = 0; / / DATA u output-line
for (i = 0; i <8; i )
(
ra0 = 0;
if (ddata & 0x80) ra1 = 1;
else ra1 = 0;
ra0 = 1;
ddata <<= 1;
# asm nop # endasm
)
ra1 = 1; / / release DATA-line (SUA njih)
trisa1 = 1; / / DATA-line in ulaz
# asm nop # endasm
ra1 = 0; / / (stari broj)
ra0 = 0; / / (stari broj)
ra0 = 1; / / sat za
9. ack
# asm nop # endasm
if (input (PIN_A1))
(
HumiError = true; / / check ack (Podaci će biti srušen po SHT11)
dok (HumiError)
(
rb3 = 1;
printf ( "\ n \ r-> SHT71 writed error ... ack! \ n \ r");
)
)
ra0 = 0;
)

nepotpisani int comread (nepotpisano pougljiti nazad)
(
nepotpisani pougljiti I;
nepotpisani bbyte int = 0;

trisa1 = 1; / / DATA-line in ulaz
for (i = 0; i <8; i )
(
bbyte <<= 1;
ra0 = 1;
bbyte | = input (PIN_A1);
ra0 = 0;
# asm nop # endasm
)
/ / Ra1 =! Leđa; / / "ack == 1" Srušit DATA-Line
trisa1 = 0; / / DATA u output-line
ra1 =! leđa; / / "ack == 1" Srušit DATA-Line
ra0 = 1;
# asm nop # endasm
ra0 = 0;
# asm nop # endasm
trisa1 = 1; / / DATA-line in ulaz
ra1 = 1;
povratak bbyte;
)

nepotpisani int s_measure (nepotpisano pougljiti mod)
(
nepotpisani pougljiti msb = 0, lsb = 0, CRC;

sht_soft_reset ();
comstart ();
preklopnik (mod)
(
slučaju Temp:
comwrite (MEASURE_TEMP);
break;

slučaju HUMI:
comwrite (MEASURE_HUMI);
break;

Zadano:
break;
)

trisa1 = 1; / / DATA-line in ulaz
comwait (); / / čekati za mjerenje za dovršetak
msb = comread (ack); / / pročitati prvi bajt (MSB)
lsb = comread (ack); / / read drugi bajt (LSB)
CRC = comread (noACK); / / read provjerava
povratak (msb * 256 lsb);
)

poniłtava HumidityGet (* p_humidity plutaju, plutaju p_temperature *)
(
nepotpisani int = 0 vlaga, temperatura = 0;

vlaga = s_measure (HUMI); / / mjera vlažnosti
DoAm = vlaga;
temperatura = s_measure (temp); / / izmjeriti temperaturu
NhietDo = temperatura;

if (HumiError == istinit) comreset (); / / u slučaju pogrešci: Reset
drugi
(
* p_humidity = (splav) vlažnost; / / pretvara cijeli broj u splavariti
* p_temperature = (splav) temperatura; / / pretvara cijeli broj u splavariti
calc_sth11 (p_humidity, p_temperature); / / izračunavanje vlažnosti, temperature
)
)

//------------------------------------------------ ----------------------------------------
/ / Izračunava temperatura [° C] i vlažnost [% RH]
/ / Ulaz: humi [krpelja] (12 bit)
/ / Temp [krpelja] (14 bit)
/ / Izlaz: humi [% RH]
/ / Temp [° C]
//------------------------------------------------ ----------------------------------------
poniłtava calc_sth11 (* p_humidity plutaju, plutaju p_temperature *)
(
splavariti rh_lin; / / rh_lin: linearni Vlaga
splavariti rh_true; / / rh_true: temperaturno kompenzirani vlažnosti
splavariti t_C; / / t_C: Temperatura [° 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;
)

poniłtava s_write_statusreg (nepotpisano pougljiti vrijednost)
(
comstart ();
comwrite (STATUS_REG_W); / / poslati naredbu senzor
comwrite (vrijednost); / / pošalji vrijednost status register
)

nepotpisani pougljiti s_read_statusreg (nepotpisano pougljiti vrijednosti, provjerava pougljiti nepotpisan)
(
comstart ();
comwrite (STATUS_REG_R);
value = comread (ack); / / read stanja (8-bitni)
ispitni zbroj = comread (noACK); / / read provjerava (8-bitni)
vratiti vrijednost; / / error = 1, u slučaju bez odgovora obrazac senzor
)

 
The 16F88 ima samo rob I2C hardver, trebali ste izabrali PIC s MSSP modul.Ti
si idući u morati napisati nešto zalupila I2C rutinu.
Također molimo koristite kod oznake prilikom objavljivanja kod.

 
Bok,

1.Na 'Main' funkcija nije naveden.

2.U naredbeni Sht kodovi nisu dodijeljeni.

3.U COMWAIT funkciju, TRISA1 nije postavljen na 1.

Pozdravi,
Laktronics

 
Thanks you very much!

<img src="images/smiles/icon_biggrin.gif" alt="Very Happy" border="0" />
 

Welcome to EDABoard.com

Sponsor

Back
Top