H
hobby_85
Guest
Binili ko ng RF kit, transmiter at tagatanggap, at ang website ng isang katulad na produkto ay sa ibaba.Ngayon, im sinusubukang isulat ang code para sa mga ito, para lamang tiyakin na ito ay gumagana.
http://www.sparkfun.com/commerce/product_info.php?products_id=8950
Im gamit ang isang PIC 16f688 at kung ang mga LED lights up sa isang tamang pattern, ako malaman ang mga code ay gumagana.Gayunman, ito ay hindi.
Narito ang TX code:
# include <16F688.h>
//------------------------------------------------ -------------------------------
# define WireTX PIN_C4 / /
# define WireRX PIN_C5
//------------------------------------------------ -------------------------------
# piyus XT, NOWDT, NOPROTECT, NOBROWNOUT, maglagay
# gamitin ang pagka-antala (orasan = 4000000)
# gamitin ang rs232 (baud = 2,400, xmit = WireTX, rcv = WireRX, stream = COM_A)
magpawalang-bisa pangunahing () (
para sa (;
<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />
(
kung (input (PIN_C2) == 0) / / kapag pinindot na button
(
output_high (PIN_A1); / / output mataas na LED
delay_ms (20); / / 20ms delay
fputc ( 'T', COM_A); / / magpadala ng data sa
delay_ms (20);
delay_ms (1000); / / pagkaantala ng ilang ms
output_low (PIN_A1); / / output mababa na humantong
)
output_high (PIN_A1); / / kung ang pindutan ay hindi pipi pagkatapos lamang sa off na humantong sa pin D1
delay_ms (50);
output_low (PIN_A1);
delay_ms (50);
)
)
Kaya kung ang pindutan ay pipi, ang mga sulat na T ay sinadya upang maipadala sa kabuuan, at ang LED ay dapat na lumapit sa, pagkatapos ay bumaba at pagkatapos ay sa isang mas mahabang panahon.
Narito ang mga kaukulang code receiver:
# include <16F688.h>
# piyus XT, NOWDT, NOPROTECT, BROWNOUT, maglagay
# gamitin ang pagka-antala (orasan = 4000000)
//------------------------------
# define WireTX PIN_C4
tukuyin # WireRX PIN_C5
//------------------------------
# gamitin ang rs232 (baud = 2,400, xmit = WireTX, rcv = WireRX, stream = COM_A)
hindi linagdaan int8 ng data;
int1 flag = 0;
# int_rda
magpawalang-bisa rd_isr (walang laman) (
disable_interrupts (INT_RDA); / / I-disable Serial Tumanggap ng makisabad
disable_interrupts (GLOBAL); / / I-disable Global Interrupts
data = fgetc (COM_A);
kung (data == 'T') (
bandila = 1;
)
enable_interrupts (GLOBAL);
enable_interrupts (INT_RDA);
)
magpawalang-bisa pangunahing () (
enable_interrupts (global);
enable_interrupts (int_rda);
para sa (;
<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />
(
kung (bandila == 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);
)
)
Kaya kung ang mensahe ay natanggap, ang LED dapat come on / off sa 1 sec pagitan.Kung hindi, ito ay dapat lamang sa flash at off.
Mayroon akong isang osiloskoup, kaya ako ay maaaring tingnan ang mga senyas na nakukuha.Narito ang mga problema:
1) Ang lumipat - Kapag i-tsek ang RF signal ipinapadala kapag button ay hunhon, ako nakita ko isang hakbang sa osiloskoup.Ang mensahe ay nagpadala ng walang hanggan at ang mga inakay ay liwanag bilang naka-code.
Kaya ako alam sa isang bagay ay ipinadala sa kabuuan.Subalit, pagkatapos ng ilang segundo, kahit na kapag lumipat ay bumaba, ang mensahe ay ipinadala awtomatikong.
Ako konektado 220k resister mula sa output ng MC sa LED, at pagkatapos sa GND.
2) Ang mga receiver - Ang mga inakay ay lumiliko sa / mula rito, na parang didn't ito makatanggap ng kahit ano.Subalit, kapag ako konektado sa osc sa receiver / RX ng MC, ako maaari makita ang isang tumalon sa senyas, na tumutugma sa signal na ipinadala sa pamamagitan ng TX.Kaya bakit isn't ang namuno sa pag-iilaw bilang inaasahan?
Anumang mga ideya?
Salamat
http://www.sparkfun.com/commerce/product_info.php?products_id=8950
Im gamit ang isang PIC 16f688 at kung ang mga LED lights up sa isang tamang pattern, ako malaman ang mga code ay gumagana.Gayunman, ito ay hindi.
Narito ang TX code:
# include <16F688.h>
//------------------------------------------------ -------------------------------
# define WireTX PIN_C4 / /
# define WireRX PIN_C5
//------------------------------------------------ -------------------------------
# piyus XT, NOWDT, NOPROTECT, NOBROWNOUT, maglagay
# gamitin ang pagka-antala (orasan = 4000000)
# gamitin ang rs232 (baud = 2,400, xmit = WireTX, rcv = WireRX, stream = COM_A)
magpawalang-bisa pangunahing () (
para sa (;
<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />
(
kung (input (PIN_C2) == 0) / / kapag pinindot na button
(
output_high (PIN_A1); / / output mataas na LED
delay_ms (20); / / 20ms delay
fputc ( 'T', COM_A); / / magpadala ng data sa
delay_ms (20);
delay_ms (1000); / / pagkaantala ng ilang ms
output_low (PIN_A1); / / output mababa na humantong
)
output_high (PIN_A1); / / kung ang pindutan ay hindi pipi pagkatapos lamang sa off na humantong sa pin D1
delay_ms (50);
output_low (PIN_A1);
delay_ms (50);
)
)
Kaya kung ang pindutan ay pipi, ang mga sulat na T ay sinadya upang maipadala sa kabuuan, at ang LED ay dapat na lumapit sa, pagkatapos ay bumaba at pagkatapos ay sa isang mas mahabang panahon.
Narito ang mga kaukulang code receiver:
# include <16F688.h>
# piyus XT, NOWDT, NOPROTECT, BROWNOUT, maglagay
# gamitin ang pagka-antala (orasan = 4000000)
//------------------------------
# define WireTX PIN_C4
tukuyin # WireRX PIN_C5
//------------------------------
# gamitin ang rs232 (baud = 2,400, xmit = WireTX, rcv = WireRX, stream = COM_A)
hindi linagdaan int8 ng data;
int1 flag = 0;
# int_rda
magpawalang-bisa rd_isr (walang laman) (
disable_interrupts (INT_RDA); / / I-disable Serial Tumanggap ng makisabad
disable_interrupts (GLOBAL); / / I-disable Global Interrupts
data = fgetc (COM_A);
kung (data == 'T') (
bandila = 1;
)
enable_interrupts (GLOBAL);
enable_interrupts (INT_RDA);
)
magpawalang-bisa pangunahing () (
enable_interrupts (global);
enable_interrupts (int_rda);
para sa (;
<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Wink" border="0" />
(
kung (bandila == 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);
)
)
Kaya kung ang mensahe ay natanggap, ang LED dapat come on / off sa 1 sec pagitan.Kung hindi, ito ay dapat lamang sa flash at off.
Mayroon akong isang osiloskoup, kaya ako ay maaaring tingnan ang mga senyas na nakukuha.Narito ang mga problema:
1) Ang lumipat - Kapag i-tsek ang RF signal ipinapadala kapag button ay hunhon, ako nakita ko isang hakbang sa osiloskoup.Ang mensahe ay nagpadala ng walang hanggan at ang mga inakay ay liwanag bilang naka-code.
Kaya ako alam sa isang bagay ay ipinadala sa kabuuan.Subalit, pagkatapos ng ilang segundo, kahit na kapag lumipat ay bumaba, ang mensahe ay ipinadala awtomatikong.
Ako konektado 220k resister mula sa output ng MC sa LED, at pagkatapos sa GND.
2) Ang mga receiver - Ang mga inakay ay lumiliko sa / mula rito, na parang didn't ito makatanggap ng kahit ano.Subalit, kapag ako konektado sa osc sa receiver / RX ng MC, ako maaari makita ang isang tumalon sa senyas, na tumutugma sa signal na ipinadala sa pamamagitan ng TX.Kaya bakit isn't ang namuno sa pag-iilaw bilang inaasahan?
Anumang mga ideya?
Salamat