H
hobby_85
Guest
हाय, मैं सही समय अंतर यह मेरी तस्वीर 16F690 पर दो पिनों के लिए ले जाने के लिए उच्च उपाय की आवश्यकता है.असल में मैं क्या करने का इरादा है समय के अंतर का उपयोग करने के दो अंक के बीच की दूरी को मापने.एक स्रोत एक आरएफ बाहर भेजता है और एक ही समय में एक अल्ट्रासोनिक नाड़ी, और क्योंकि अमेरिका के संकेत थोड़ा द्वारा आरएफ संकेत धीरे चलना, मैं एक बार फर्क मिलना चाहिए.
वैसे भी, मैं कोड लिखा है, लेकिन समस्या मैंने मैंने एक दूरी के लिए मूल्यों के दो सेट रख रही है.तो चलो IM 1.2m दूर कहा, मैं 11.6m या 19.05m.जब IM 2.4m, मैं 12.8m या 20.2m.मूल रूप से कोई दूर दूर के लिए, मैं दो जवाब हो रही रखो.अगर मैं सिर्फ एक ही है, मैं शायद एक 'ज में () सी.के.' मेरे कोड को जोड़ने के लिए इसे ठीक कर सकती है, लेकिन जब से IM दो जवाब हो, मैं नहीं जानता कि क्या करना है.मैं अपनी सटीक नहीं पता है, नहीं सटीक के पास वैसे भी, लेकिन सिर्फ अभी के लिए 2 जवाब समस्या को हल करने की कोशिश कर रहा IM.
ive जुड़ी मेरी कोड.कृपया, कृपया, कृपया कोई मदद / सुझाव / सलाह महान होगा.धन्यवाद सभी
कोड:# शामिल <16F690.h>
# INTRC, NOWDT, NOPROTECT, BROWNOUT, रखो, एच एस फ़्यूज़
देरी का उपयोग करें (= 4,000,000 घड़ी #)
rs232 का उपयोग करें # बॉड (19,200 =, xmit = PIN_B7, rcv = PIN_B5)int16 सीटीआर;
int फिसल गया;
int tripped1;
लंबे मूल्य;
int काउंटर;
दूरी फ्लोट;
int16 ctr1;int_CCP1 #
शून्य CCP1_isr शून्य ()
(
मूल्य CCP_1 =;
मूल्य मूल्य = (काउंटर * 65536);
= 1 फिसल गया;
disable_interrupts (INT_CCP1);
)int_TIMER1 #
शून्य TIMER1_isr शून्य ()
(
काउंटर काउंटर = 1 ;
)शून्य मुख्य ()
(setup_adc_ports (NO_ANALOGS | VSS_VDD);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);
enable_interrupts (अंतर्राष्ट्रीय);
setup_ccp1 (CCP_CAPTURE_RE);(;{ के लिएcontact_slave3 (); / / इस के बाद, PINC1 उच्च जाओ, PINC5 द्वारा बारीकी से पालन होना चाहिए(सीटीआर = 0; सीटीआर <65,535; सीटीआर ) (PINC1 के लिए / रुको / के लिए उच्च मध्यांतर तक जाने के लिए
अगर (इनपुट (PIN_C1)) (
set_timer1 (0); / / 0 से टाइमर मूल्य निर्धारित करते हैं, गिनती शुरू
enable_interrupts (INT_TIMER1);
काउंटर = 0;
= 1 सीटीआर; / / PINC1 उच्च गया था, सीटीआर सेट = 0, तोड़
तोड़;
)
)(सीटीआर == 1) (/ तो / इस बिंदु पर, सी 1, उच्च शुरू टाइमर गया और C5 के लिए प्रतीक्षा को उच्च जानाenable_interrupts (INT_CCP1); / / मध्यांतर तक pinC5 की बढ़ती किनारे का इंतज़ार
(ctr1 = 0; ctr1 <10000; ctr1 ) के लिए (अगर (गच्चा) (delay_ms (200);
printf TDOA ( "है:% लू हमें \ r \ n" मूल्य,);
दूरी = (मूल्य) * 0.000008 () * 348.4 ();
printf दूरी ( "है:% च मीटर \ r \ n", दूरी);
= 0 फिसल गया;
= 0 दूरी;
0 = मूल्य;
tripped1 = 1;
तोड़;
)
)अगर (tripped1 == 0) (
printf ( "\ r \ nNO अमेरिका का पता \ r \ n");
tripped1 = 0)
और (/ / PINC1, उच्च त्रुटि नहीं किया
printf ( "\ पाया r \ नहीं nSlave नोड 3 आरएफ हस्ताक्षर \ r \ n")delay_ms (1000);
= 0 फिसल गया;
tripped1 = 0;
काउंटर = 0)
वैसे भी, मैं कोड लिखा है, लेकिन समस्या मैंने मैंने एक दूरी के लिए मूल्यों के दो सेट रख रही है.तो चलो IM 1.2m दूर कहा, मैं 11.6m या 19.05m.जब IM 2.4m, मैं 12.8m या 20.2m.मूल रूप से कोई दूर दूर के लिए, मैं दो जवाब हो रही रखो.अगर मैं सिर्फ एक ही है, मैं शायद एक 'ज में () सी.के.' मेरे कोड को जोड़ने के लिए इसे ठीक कर सकती है, लेकिन जब से IM दो जवाब हो, मैं नहीं जानता कि क्या करना है.मैं अपनी सटीक नहीं पता है, नहीं सटीक के पास वैसे भी, लेकिन सिर्फ अभी के लिए 2 जवाब समस्या को हल करने की कोशिश कर रहा IM.
ive जुड़ी मेरी कोड.कृपया, कृपया, कृपया कोई मदद / सुझाव / सलाह महान होगा.धन्यवाद सभी
कोड:# शामिल <16F690.h>
# INTRC, NOWDT, NOPROTECT, BROWNOUT, रखो, एच एस फ़्यूज़
देरी का उपयोग करें (= 4,000,000 घड़ी #)
rs232 का उपयोग करें # बॉड (19,200 =, xmit = PIN_B7, rcv = PIN_B5)int16 सीटीआर;
int फिसल गया;
int tripped1;
लंबे मूल्य;
int काउंटर;
दूरी फ्लोट;
int16 ctr1;int_CCP1 #
शून्य CCP1_isr शून्य ()
(
मूल्य CCP_1 =;
मूल्य मूल्य = (काउंटर * 65536);
= 1 फिसल गया;
disable_interrupts (INT_CCP1);
)int_TIMER1 #
शून्य TIMER1_isr शून्य ()
(
काउंटर काउंटर = 1 ;
)शून्य मुख्य ()
(setup_adc_ports (NO_ANALOGS | VSS_VDD);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);
enable_interrupts (अंतर्राष्ट्रीय);
setup_ccp1 (CCP_CAPTURE_RE);(;{ के लिएcontact_slave3 (); / / इस के बाद, PINC1 उच्च जाओ, PINC5 द्वारा बारीकी से पालन होना चाहिए(सीटीआर = 0; सीटीआर <65,535; सीटीआर ) (PINC1 के लिए / रुको / के लिए उच्च मध्यांतर तक जाने के लिए
अगर (इनपुट (PIN_C1)) (
set_timer1 (0); / / 0 से टाइमर मूल्य निर्धारित करते हैं, गिनती शुरू
enable_interrupts (INT_TIMER1);
काउंटर = 0;
= 1 सीटीआर; / / PINC1 उच्च गया था, सीटीआर सेट = 0, तोड़
तोड़;
)
)(सीटीआर == 1) (/ तो / इस बिंदु पर, सी 1, उच्च शुरू टाइमर गया और C5 के लिए प्रतीक्षा को उच्च जानाenable_interrupts (INT_CCP1); / / मध्यांतर तक pinC5 की बढ़ती किनारे का इंतज़ार
(ctr1 = 0; ctr1 <10000; ctr1 ) के लिए (अगर (गच्चा) (delay_ms (200);
printf TDOA ( "है:% लू हमें \ r \ n" मूल्य,);
दूरी = (मूल्य) * 0.000008 () * 348.4 ();
printf दूरी ( "है:% च मीटर \ r \ n", दूरी);
= 0 फिसल गया;
= 0 दूरी;
0 = मूल्य;
tripped1 = 1;
तोड़;
)
)अगर (tripped1 == 0) (
printf ( "\ r \ nNO अमेरिका का पता \ r \ n");
tripped1 = 0)
और (/ / PINC1, उच्च त्रुटि नहीं किया
printf ( "\ पाया r \ नहीं nSlave नोड 3 आरएफ हस्ताक्षर \ r \ n")delay_ms (1000);
= 0 फिसल गया;
tripped1 = 0;
काउंटर = 0)