H
hobby_85
Guest
Jeg kjøpte en RF-kit, sender og mottaker, og på nettstedet til et lignende produkt er under.Now, im prøver å skrive kode for det, bare for å kontrollere at den fungerer.
http://www.sparkfun.com/commerce/product_info.php?products_id=8950
Im benytter en PIC 16f688 og hvis LED lyser opp til et korrekt mønster, jeg vet koden fungerer.Det er imidlertid ikke.
Her er TX-kode:
# include <16F688.h>
//------------------------------------------------ -------------------------------
# define WireTX PIN_C4 / /
# define WireRX PIN_C5
//------------------------------------------------ -------------------------------
# sikringer XT, NOWDT, NOPROTECT, NOBROWNOUT, PUT
# bruke forsinkelse (klokke = 4000000)
# bruke RS232 (baud = 2400, xmit = WireTX, RCV = WireRX, STREAM = COM_A)
void main () (
for (;
<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />
(
if (input (PIN_C2) == 0) / / hvis knappen trykkes
(
output_high (PIN_A1); / / output høy Led
delay_ms (20); / / forsinkelse 20ms
fputc ( 'T', COM_A); / / send data
delay_ms (20);
delay_ms (1000); / / forsinkelse noen ms
output_low (PIN_A1); / / output lav ledede
)
output_high (PIN_A1) / / hvis knappen ikke trykkes så bare på off ledet på pinne D1
delay_ms (50);
output_low (PIN_A1);
delay_ms (50);
)
)
Så hvis du trykker på knappen, er bokstaven T ment å bli sendt over, og LED skulle komme på, så av og på lengre tid.
Her er det tilsvarende Receiver kode:
# include <16F688.h>
# sikringer XT, NOWDT, NOPROTECT, BROWNOUT, PUT
# bruke forsinkelse (klokke = 4000000)
//------------------------------
# define WireTX PIN_C4
# define WireRX PIN_C5
//------------------------------
# bruke RS232 (baud = 2400, xmit = WireTX, RCV = WireRX, STREAM = COM_A)
unsigned int8 data;
int1 flag = 0;
# int_rda
void rd_isr (void) (
disable_interrupts (INT_RDA); / / Disable Serial Motta Interrupt
disable_interrupts (GLOBAL); / / Disable Global Interrupts
data = fgetc (COM_A);
if (data == 'T') (
flag = 1;
)
enable_interrupts (GLOBAL);
enable_interrupts (INT_RDA);
)
void main () (
enable_interrupts (global);
enable_interrupts (int_rda);
for (;
<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />
(
if (flag == 1) (
output_high (PIN_A1);
delay_ms (1000);
output_low (PIN_A1);
flag = 0;
)
output_high (PIN_A1);
delay_ms (50);
output_low (PIN_A1);
delay_ms (50);
)
)
Så hvis meldingen er mottatt, skal LED come on / off 1 sek mellomrom.Hvis ikke, skulle det bare glimtet av og på.
Jeg har et oscilloskop, så jeg kan se på signalene overføres.Her er problemene:
1) Bryteren - Når jeg sjekket RF-signal som sendes når knappen ble presset, så jeg et skritt på oscilloskop.Meldingen skulle sendes alltid, og ledet ville lyset som kodet.
Så jeg vet noe ble sendt over.Men selv når bryteren ble slått av, etter et par sekunder, meldingen ble sendt automatisk.
Jeg koblet 220k resister fra produksjon av MC til LED, og deretter til GND.
2) Mottakeren - Det førte slår på / av, som om det gjorde ikke mottar noe.Men når jeg koblet osc til mottakeren / RX av MC, kan jeg se et hopp i signalet, matchende signalet sendt av tx.Så hvorfor isnt den LED-belysning som forventet?
Any ideas?
Takk
http://www.sparkfun.com/commerce/product_info.php?products_id=8950
Im benytter en PIC 16f688 og hvis LED lyser opp til et korrekt mønster, jeg vet koden fungerer.Det er imidlertid ikke.
Her er TX-kode:
# include <16F688.h>
//------------------------------------------------ -------------------------------
# define WireTX PIN_C4 / /
# define WireRX PIN_C5
//------------------------------------------------ -------------------------------
# sikringer XT, NOWDT, NOPROTECT, NOBROWNOUT, PUT
# bruke forsinkelse (klokke = 4000000)
# bruke RS232 (baud = 2400, xmit = WireTX, RCV = WireRX, STREAM = COM_A)
void main () (
for (;
<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />
(
if (input (PIN_C2) == 0) / / hvis knappen trykkes
(
output_high (PIN_A1); / / output høy Led
delay_ms (20); / / forsinkelse 20ms
fputc ( 'T', COM_A); / / send data
delay_ms (20);
delay_ms (1000); / / forsinkelse noen ms
output_low (PIN_A1); / / output lav ledede
)
output_high (PIN_A1) / / hvis knappen ikke trykkes så bare på off ledet på pinne D1
delay_ms (50);
output_low (PIN_A1);
delay_ms (50);
)
)
Så hvis du trykker på knappen, er bokstaven T ment å bli sendt over, og LED skulle komme på, så av og på lengre tid.
Her er det tilsvarende Receiver kode:
# include <16F688.h>
# sikringer XT, NOWDT, NOPROTECT, BROWNOUT, PUT
# bruke forsinkelse (klokke = 4000000)
//------------------------------
# define WireTX PIN_C4
# define WireRX PIN_C5
//------------------------------
# bruke RS232 (baud = 2400, xmit = WireTX, RCV = WireRX, STREAM = COM_A)
unsigned int8 data;
int1 flag = 0;
# int_rda
void rd_isr (void) (
disable_interrupts (INT_RDA); / / Disable Serial Motta Interrupt
disable_interrupts (GLOBAL); / / Disable Global Interrupts
data = fgetc (COM_A);
if (data == 'T') (
flag = 1;
)
enable_interrupts (GLOBAL);
enable_interrupts (INT_RDA);
)
void main () (
enable_interrupts (global);
enable_interrupts (int_rda);
for (;
<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />
(
if (flag == 1) (
output_high (PIN_A1);
delay_ms (1000);
output_low (PIN_A1);
flag = 0;
)
output_high (PIN_A1);
delay_ms (50);
output_low (PIN_A1);
delay_ms (50);
)
)
Så hvis meldingen er mottatt, skal LED come on / off 1 sek mellomrom.Hvis ikke, skulle det bare glimtet av og på.
Jeg har et oscilloskop, så jeg kan se på signalene overføres.Her er problemene:
1) Bryteren - Når jeg sjekket RF-signal som sendes når knappen ble presset, så jeg et skritt på oscilloskop.Meldingen skulle sendes alltid, og ledet ville lyset som kodet.
Så jeg vet noe ble sendt over.Men selv når bryteren ble slått av, etter et par sekunder, meldingen ble sendt automatisk.
Jeg koblet 220k resister fra produksjon av MC til LED, og deretter til GND.
2) Mottakeren - Det førte slår på / av, som om det gjorde ikke mottar noe.Men når jeg koblet osc til mottakeren / RX av MC, kan jeg se et hopp i signalet, matchende signalet sendt av tx.Så hvorfor isnt den LED-belysning som forventet?
Any ideas?
Takk