H
hobby_85
Guest
Salut, j'ai besoin de mesurer avec précision la différence de temps qu'il faut pour que deux broches sur mon 16F690 PIC pour aller haut.Fondamentalement, ce que j'ai l'intention de faire est d'utiliser la différence de temps de mesurer la distance entre deux points.Une source envoie un RF et une impulsion ultrasonique dans le même temps, et parce que les signaux des États-Unis décalage des signaux RF par un peu, je devrais obtenir une différence de temps.
de toute façon, j'ai écrit le code, mais le problème que j'ai est que je reçois deux ensembles de valeurs pour chaque distance.Donc disons que 1,2 im loin, je reçois ou 11,6 millions de 19.05m.où 2,4 millions de GI, j'obtiens 12,8 M 20,2 M ou.Fondamentalement pour n'importe quelle distance, je reçois deux réponses.si je suis seul, je pourrais ajouter un "h (at) ck 'à mon code pour le corriger, mais depuis im obtenir deux réponses, je ne sais pas quoi faire.Je sais que ce n'est pas précis, pas de toute façon précise, même à proximité, mais im seulement essayer de résoudre le problème 2 réponses pour le moment.
ive-joint mon code.S'il vous plaît s'il vous plaît s'il vous plaît, toute aide / suggestions / conseils serait formidable.Merci tous
Code:# Include <16F690.h>
# Fusibles INTRC, NOWDT, NOPROTECT, une baisse de tension, PUT, HS
retarder la consommation de # (horloge = 4000000)
# Utiliser rs232 (baud = 19200, xmit = PIN_B7, AN = PIN_B5)int16 CTR;
déclenché int;
int tripped1;
valeur à long;
int compteur;
flotteur à distance;
int16 ctr1;# Int_CCP1
void CCP1_isr (void)
(
= valeur CCP_1;
Valeur = valeur (* contre 65536);
déclenché = 1;
disable_interrupts (INT_CCP1);
)# Int_TIMER1
void TIMER1_isr (void)
(
compteur = compteur 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);pour (;
{contact_slave3 (); / / Après cela, PINC1 devrait aller élevé, suivie de près par PINC5for (ctr = 0; CTR <65535; ctr ) (/ / Attendre PINC1 d'aller jusqu'au haut de délai d'attente
if (entrée (PIN_C1)) (
set_timer1 (0); / / valeur de la minuterie à 0, commencez à compter
enable_interrupts (INT_TIMER1);
compteur = 0;
ctr = 1; / / PINC1 a élevé, mis en ctr = 0, pause
break;
)
)if (CTR == 1) (/ / À ce stade, C1 a élevé, début de la minuterie et attendre C5-vous à atteindreenable_interrupts (INT_CCP1); / / attendre front montant de pinC5 jusqu'au timeout
pour (ctr1 = 0; ctr1 <10000; ctr1 ) (if (déclenché) (delay_ms (200);
printf ("TDOA est:% Lu nous \ n \ r", valeur);
= distance (valeur) * (0,000008) * (348,4);
printf ("La distance est:% f \ m« r \ n, la distance);
déclenché = 0;
distance = 0;
value = 0;
tripped1 = 1;
break;
)
)if (tripped1 == 0) (
printf ("\ r nNO \ américaines ont détecté \ r \ n");
tripped1 = 0
)
else (/ / PINC1 ne va pas de haut, l'erreur
printf ("\ r \ nSlave Node 3 RF signature not found \ r \ n")
delay_ms (1000);
déclenché = 0;
tripped1 = 0;
compteur = 0
)
de toute façon, j'ai écrit le code, mais le problème que j'ai est que je reçois deux ensembles de valeurs pour chaque distance.Donc disons que 1,2 im loin, je reçois ou 11,6 millions de 19.05m.où 2,4 millions de GI, j'obtiens 12,8 M 20,2 M ou.Fondamentalement pour n'importe quelle distance, je reçois deux réponses.si je suis seul, je pourrais ajouter un "h (at) ck 'à mon code pour le corriger, mais depuis im obtenir deux réponses, je ne sais pas quoi faire.Je sais que ce n'est pas précis, pas de toute façon précise, même à proximité, mais im seulement essayer de résoudre le problème 2 réponses pour le moment.
ive-joint mon code.S'il vous plaît s'il vous plaît s'il vous plaît, toute aide / suggestions / conseils serait formidable.Merci tous
Code:# Include <16F690.h>
# Fusibles INTRC, NOWDT, NOPROTECT, une baisse de tension, PUT, HS
retarder la consommation de # (horloge = 4000000)
# Utiliser rs232 (baud = 19200, xmit = PIN_B7, AN = PIN_B5)int16 CTR;
déclenché int;
int tripped1;
valeur à long;
int compteur;
flotteur à distance;
int16 ctr1;# Int_CCP1
void CCP1_isr (void)
(
= valeur CCP_1;
Valeur = valeur (* contre 65536);
déclenché = 1;
disable_interrupts (INT_CCP1);
)# Int_TIMER1
void TIMER1_isr (void)
(
compteur = compteur 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);pour (;
if (entrée (PIN_C1)) (
set_timer1 (0); / / valeur de la minuterie à 0, commencez à compter
enable_interrupts (INT_TIMER1);
compteur = 0;
ctr = 1; / / PINC1 a élevé, mis en ctr = 0, pause
break;
)
)if (CTR == 1) (/ / À ce stade, C1 a élevé, début de la minuterie et attendre C5-vous à atteindreenable_interrupts (INT_CCP1); / / attendre front montant de pinC5 jusqu'au timeout
pour (ctr1 = 0; ctr1 <10000; ctr1 ) (if (déclenché) (delay_ms (200);
printf ("TDOA est:% Lu nous \ n \ r", valeur);
= distance (valeur) * (0,000008) * (348,4);
printf ("La distance est:% f \ m« r \ n, la distance);
déclenché = 0;
distance = 0;
value = 0;
tripped1 = 1;
break;
)
)if (tripped1 == 0) (
printf ("\ r nNO \ américaines ont détecté \ r \ n");
tripped1 = 0
else (/ / PINC1 ne va pas de haut, l'erreur
printf ("\ r \ nSlave Node 3 RF signature not found \ r \ n")
déclenché = 0;
tripped1 = 0;
compteur = 0