Mittaus Pulse Width

P

Peten

Guest
Hei,
Tässä on ohjelma mitata kaksi pulssia, joka erotetaan 500usec.
Kunkin sarjan pulsseja, se alkaa otsikko pulssin 2.4ms leveys seuraa joko 0.6ms edustavat "0" tai 1.2ms edustavat "1".Aikaväli tahansa pulssi 500usec.
Kun oikea yhdistelmä on saatu, PIC se palaa LED.Input yleensä korkea, ei signaalia.Kaksi pulssia on tarkistettava todenperäisyyttä lähetyksen lähteestä.Minun ongelmani on, se ei ole käynnissä, eli vastaava LED ei pala.Mitään ongelmia tämän ohjelman ja kommentteja arvostetaan.Kiitos.

# include <16f628a.h>
# sulakkeet NOMCLR, INTRC, NOWDT, NOLVP, NOBROWNOUT, PUT, NOPROTECT
# käytön viive (kello = 4000000)
# tavu CMCON = 0x1F
# tavu VRCON = 0x9F
# define CMCON 7
# define VRCON 0
# tavu PORTB = 0x06
# tavu porta = 0x05int loop = 0, abyte [4] = (1,1,1,1), abyte1 [4] = (0,0,0,0), tila [4] = (0,0,0,0),
long C;
void täällä (pitkä);
void decode (void);
void getpulsewidth (void);
void analysoida (void);
delay_ms (10), / / vakauttaa on virta

# INT_EXT
void getpulsewidth (void)
(
setup_timer_1 (T1_DISABLED);
set_timer1 (0);
while (! input (PIN_B0));
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
while (input (PIN_B0));
setup_timer_1 (T1_DISABLED);
C = get_timer1 ();
)

main ()
(

while (true)
(

set_tris_a (0b11110000);
port_b_pullups (TRUE);
set_tris_b (0b11111101);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_1);
ext_int_edge (H_TO_L);
enable_interrupts (INT_EXT);
enable_interrupts (GLOBAL);
tässä (c);
decode ();
analysoida ();
)
)

void täällä (long c)
(
if (c <200 | | c == 0)
(
bit_clear (Porta, 0);
bit_clear (Porta, 1);
bit_clear (Porta, 2);
)
)

void decode (void)
(
int i;
for (i = 0, i <= 3, i )
(
getpulsewidth ();
tila = c;
)
for (i = 0, i <= 3, i )
(
if (status <100)
abyte = 0;
muuten
abyte = 1;
)

loop = silmukka 1;
)

analysoida ()
(
jos (loop> 1)
(
if ((abyte [0] == abyte1 [0 ])&&( abyte [1] == abyte1 [1 ])&&( abyte [2] == abyte1 [2]) & &
(abyte [3] == abyte1 [3]))
(
if (! abyte [0] & & abyte [1] & & abyte [2] & & abyte [3])
output_high (PIN_A0);
else if (abyte [0] & &! abyte [1] & &! abyte [2] & &! abyte [3])
output_low (PIN_A0);
else if (abyte [0] & &! abyte [1] & & abyte [2] & & abyte [3])
output_high (PIN_A1);
else if (! abyte [0] & & abyte [1] & &! abyte [2] & &! abyte [3])
output_low (PIN_A1);
else if (abyte [0] & & abyte [1] & &! abyte [2] & & abyte [3])
output_high (PIN_A2);
else if (! abyte [0] & &! abyte [1] & & abyte [2] & &! abyte [3])
output_low (PIN_A2);

)
)
muuten
(
int i;
for (i = 0, i <= 3, i )
abyte1 = abyte ;
decode ();
)
)

 
Hei Pete!
Olen kopioinut koodin ja aion ehdottomasti tutkia sitä ja yrittää ratkaista ongelman.Näyttää siltä, että olet dekoodaus pulssien alkaen TV / VCR kaukosäätimen.Yksi neuvoja on, että aina tarkistaa koodin vaiheittain koskaan odottavat kaiken on heti ensimmäisellä kerralla.Olen tehnyt someting samanlainen erään projektini, mutta mitä olen tehnyt on, että

1.Olen trgger ulkoinen keskeyttää noususta reuna.

2.Kun ulkoinen keskeytys laukeaa teen seuraavat kaksi asiaa
ulkoinen keskeyttää palvelun rutiini

i.Määritä timer1 varten 100usec keskeyttää.
II.Määritä ulkoinen keskeytys laskevasta reunasta ja poistu keskeyttää.

3.Koska timer1 keskeytys tapahtuu joka 100usec.Kunkin timer1 keskeyttää
kasvu muuttujan keskeyttää serivice rutiinia timer1 ja odota
ulkoinen keskeyttää.

4.Kun ulkoinen keskeytys tapahtuu (tällä kertaa laskeva reuna) tehdä seuraavat
kaksi asiaa

i.Stop timer1.
II.Jälleen kerran määrittää ulkoisen keskeyttää satu nouseva reuna.

Muuttuja, että olit kasvaminen on timer1 keskeytys rutiini saat pulssin leveys esim. jos se lasketaan 6 timer1 keskeyttää se tarkoittaa, että pulssin leveys oli 600usec (0.6msec) ja jos se on laskenut 12 niin se tarkoittaa, että pulssin leveys oli 1200usec (1.2msec).
Jos se kuulostaa monimutkaiselta sitten kysy Yritän koodin sitä sinulle.
Terveisin.

 
Kiitos nopeasta vastauksesta.En Tutkimme neuvoja.Voin tehdä sen helposti käyttämällä pulssi komentoa PicBasic Pro_Olen vielä uusi CCSC .. Wil antaa palautetta siitä.

Peten

 
Hi Waseem:

Can't Get Over saat neuvoja koodit.Voitko lähettää sen tällä foorumilla?Please on se kaksi versiota, joista ensimmäisessä käytetään keskeyttää ja muut eivät käytä keskeyttää, jotta voisin vertailla eroa.Olen dekoodaus 2 sarjaa pulssia, jokaisen pulssin kanssa 2.4ms otsikon jälkeen 4 pulssin joko 0.6ms ja lo-tai 1.2ms HI.Aikaväli kaikki pulsseja on 500usec.
Thanks and regards ..

Peten

 

Welcome to EDABoard.com

Sponsor

Back
Top