H
hobby_85
Guest
Labas, man reikia tiksliai išmatuoti laiko trunka dvejus Pins mano PIC 16F690 eiti aukštas.Iš esmės tai, ką ketinate daryti, tai naudoti laiko matavimo atstumu tarp dviejų taškų.Šaltinis siunčia RF ir ultragarso impulsų vienu metu, ir kadangi JAV signalus VVG RF signalų bitas, norėčiau gauti laiko skirtumas.
Anyway, parašiau kodą, bet problema turiu tai gaunu dvi vertes kiekvieno atstumo.Taigi galime pasakyti im 1.2m atstumu, man 11.6m arba 19.05m.kai jiems 2.4m, man 12.8M arba 20.2m.Iš esmės bet atokiau, gaunu du atsakymus.jei aš turiu tik vieną, aš galbūt galėtų įtraukti "h (at) CK" mano kodas, siekiant ją išspręsti, tačiau, kadangi jiems gauti du atsakymus, i dont know what to do.Aš žinau jos nėra tikslūs, o ne šiaip beveik tiksli net, bet jiems tik bando išspręsti 2 atsakymus problema dabar.
IVE pridėti mano kodas.please please please, any help / pasiūlymus / patarimus, būtų puiku.Ačiū visiems
Kodas# include <16F690.h>
# saugikliai INTRC, NOWDT, NOPROTECT, Sumažinti apšvietimui, Put SS
# naudoti nedelsiant (laikrodis = 4000000)
# USE RS232 (Baud = 19200, xmit = PIN_B7, VB = PIN_B5)int16 SR;
LC paslydau;
LC tripped1;
ilgai vertę;
int skaitiklis;
float atstumas;
int16 ctr1;# int_CCP1
tuščia CCP1_isr (tuščia)
(
vertė = CCP_1;
vertė = vertė (Skaitliukas * 65536);
paslydau = 1;
disable_interrupts (INT_CCP1);
)# int_TIMER1
tuščia TIMER1_isr (tuščia)
(
counter = counter 1;
)void main ()
(setup_adc_ports (NO_ANALOGS | VSS_VDD);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);
enable_interrupts (Global);
setup_ccp1 (CCP_CAPTURE_RE);už (;{contact_slave3 (); / / Po to, PINC1 turėtų būti didelė, atidžiai stebėjo PINC5už (SR = 0; CTR <65.535; Ctr ) (/ / Palaukite PINC1 eiti aukštas iki timeout
if (input (PIN_C1)) (
set_timer1 (0) / / set laikmatis vertė 0, pradėti skaičiuoti
enable_interrupts (INT_TIMER1);
counter = 0;
SR = 1; / / PINC1 išėjo didelis rinkinys SR = 0 break
break;
)
)jei (SR == 1) (/ / šioje vietoje, C1 išėjo didelis, pradžios laikmatis ir laukti C5 eiti aukštasenable_interrupts (INT_CCP1) / / laukti auga kraštas pinC5 iki timeout
for (ctr1 = 0; ctr1 <10000; ctr1 ) (if (paslydau) (delay_ms (200);
printf ( "TDOA yra:% lu mus \ r \ n") nustatyta vertė;
atstumas = (vertė) * (0,000008) * (348,4);
printf ( "Atstumas yra:% f metrų \ r \ n", atstumas);
paslydau = 0;
atstumas = 0;
vertė = 0;
tripped1 = 1;
break;
)
)if (tripped1 == 0) (
printf ( "\ r \ NŻadne JAV NUSTATYTų \ r \ n");
tripped1 = 0)
else (/ / PINC1 didn't go aukštas, klaida
printf ( "\ r \ nSlave Mazgas 3 RF parašas nerastas \ r \ n")delay_ms (1000);
paslydau = 0;
tripped1 = 0;
counter = 0)
Anyway, parašiau kodą, bet problema turiu tai gaunu dvi vertes kiekvieno atstumo.Taigi galime pasakyti im 1.2m atstumu, man 11.6m arba 19.05m.kai jiems 2.4m, man 12.8M arba 20.2m.Iš esmės bet atokiau, gaunu du atsakymus.jei aš turiu tik vieną, aš galbūt galėtų įtraukti "h (at) CK" mano kodas, siekiant ją išspręsti, tačiau, kadangi jiems gauti du atsakymus, i dont know what to do.Aš žinau jos nėra tikslūs, o ne šiaip beveik tiksli net, bet jiems tik bando išspręsti 2 atsakymus problema dabar.
IVE pridėti mano kodas.please please please, any help / pasiūlymus / patarimus, būtų puiku.Ačiū visiems
Kodas# include <16F690.h>
# saugikliai INTRC, NOWDT, NOPROTECT, Sumažinti apšvietimui, Put SS
# naudoti nedelsiant (laikrodis = 4000000)
# USE RS232 (Baud = 19200, xmit = PIN_B7, VB = PIN_B5)int16 SR;
LC paslydau;
LC tripped1;
ilgai vertę;
int skaitiklis;
float atstumas;
int16 ctr1;# int_CCP1
tuščia CCP1_isr (tuščia)
(
vertė = CCP_1;
vertė = vertė (Skaitliukas * 65536);
paslydau = 1;
disable_interrupts (INT_CCP1);
)# int_TIMER1
tuščia TIMER1_isr (tuščia)
(
counter = counter 1;
)void main ()
(setup_adc_ports (NO_ANALOGS | VSS_VDD);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);
enable_interrupts (Global);
setup_ccp1 (CCP_CAPTURE_RE);už (;{contact_slave3 (); / / Po to, PINC1 turėtų būti didelė, atidžiai stebėjo PINC5už (SR = 0; CTR <65.535; Ctr ) (/ / Palaukite PINC1 eiti aukštas iki timeout
if (input (PIN_C1)) (
set_timer1 (0) / / set laikmatis vertė 0, pradėti skaičiuoti
enable_interrupts (INT_TIMER1);
counter = 0;
SR = 1; / / PINC1 išėjo didelis rinkinys SR = 0 break
break;
)
)jei (SR == 1) (/ / šioje vietoje, C1 išėjo didelis, pradžios laikmatis ir laukti C5 eiti aukštasenable_interrupts (INT_CCP1) / / laukti auga kraštas pinC5 iki timeout
for (ctr1 = 0; ctr1 <10000; ctr1 ) (if (paslydau) (delay_ms (200);
printf ( "TDOA yra:% lu mus \ r \ n") nustatyta vertė;
atstumas = (vertė) * (0,000008) * (348,4);
printf ( "Atstumas yra:% f metrų \ r \ n", atstumas);
paslydau = 0;
atstumas = 0;
vertė = 0;
tripped1 = 1;
break;
)
)if (tripped1 == 0) (
printf ( "\ r \ NŻadne JAV NUSTATYTų \ r \ n");
tripped1 = 0)
else (/ / PINC1 didn't go aukštas, klaida
printf ( "\ r \ nSlave Mazgas 3 RF parašas nerastas \ r \ n")delay_ms (1000);
paslydau = 0;
tripped1 = 0;
counter = 0)