разликата във времето между две игли ще висока

H

hobby_85

Guest
Здравейте, аз нужда към точно измерване на разликата във времето отнема за два пина на PIC 16F690 ми да отида високи.Основно това, което смятам да направя е да използвате разлика във времето за измерване на разстоянието между две точки.А източник изпраща един RF и ултразвуков импулс в същото време, тъй като САЩ и сигнали закъснение RF сигналите от малко, аз трябва да получат разлика във времето.

Както и да е, аз имам писмено код, но проблемът е, че аз имам Получавам два комплекта от стойностите за всяко разстояние.така позволява кажа IM х 1,2 метра, аз добивам 11,6 метра или 19,05 метра.когато IM 2.4 метра, аз добивам 12,8 м или 20,2 метра.Основно за всяко по-далеч, аз държа получаване два отговора.ако аз имам само един, и би могъл да добави "H (в) CK", за да ми код, за да го поправим, но тъй като IM получаване два отговора, Не знам какво да правя.Знам, че не си точен, не все пак близо до точен дори, но IM само се опитва да реши проблема 2 отговора за сега.

Ive приложен си код.моля, моля, моля, никаква помощ / предложения / съвети ще бъде страхотно.благодаря на всички

Код:# включват <16F690.h>

# предпазители INTRC, NOWDT, NOPROTECT, BROWNOUT, пригодени, HS

# употреба забавяне (часовник = 4000000)

# употреба RS232 (Baud = 19200, xmit = PIN_B7, rcv = PIN_B5)int16 CTR;

Int спънал;

Int tripped1;

дълго стойност;

Int брояч;

поплавък разстояние;

int16 ctr1;# int_CCP1

нищожен CCP1_isr (Void)

(

стойност = CCP_1;

стойност = стойност (брояч * 65536);

Спънах = 1;

disable_interrupts (INT_CCP1);

)# int_TIMER1

нищожен TIMER1_isr (Void)

(

брояч брояч = 1;

)нищожен основни ()

(setup_adc_ports (NO_ANALOGS | VSS_VDD);

setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);

enable_interrupts (Global);

setup_ccp1 (CCP_CAPTURE_RE);за (;;){contact_slave3 (); / / След това, трябва да върви PINC1 висока, следвана плътно от PINC5за (CTR = 0; CTR <65535; CTR ) (/ / Изчакайте PINC1 да отида до високо изчакване

IF (вход (PIN_C1)) (

set_timer1 (0); / / задаване на таймера стойност на 0, започнем да броим

enable_interrupts (INT_TIMER1);

брояч = 0;

CTR = 1; / / PINC1 отиде висока, определени CTR = 0, почивка

прекъсване;

)

)ако (CTR == 1) (/ / в този момент, C1 отиде висока, започнете таймер и изчакайте C5 да отида високоenable_interrupts (INT_CCP1); / / чакам за нарастващия фронт на pinC5 до изчакване

за (ctr1 = 0; ctr1 <10000; ctr1 ) (IF (спънал) (delay_ms (200);

printf ( "TDOA е:% Лу нас \ R \ N", стойност);

разстояние = (стойност) * (0,000008) * (348,4);

printf ( "Разстояние е:% е м \ R \ N", разстояние);

Спънах = 0;

разстояние = 0;

стойност = 0;

tripped1 = 1;

прекъсване;

)

)IF (tripped1 == 0) (

printf ( "\ R \ nНяма САЩ открити \ R \ N");

tripped1 = 0;))

иначе (/ / PINC1 не отиде високо, грешка

printf ( "\ R \ nSlave Възел 3 RF подпис не е намерен \ R \ N");)delay_ms (1000);

Спънах = 0;

tripped1 = 0;

брояч = 0;))

 

Welcome to EDABoard.com

Sponsor

Back
Top