ano pagpunta mali?

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

 
Kung kayo ay isabit ang iyong osiloskoup sa data output ng module na tingin ko ay makakakita ka ng ano mangyari.Ang module ay AM at halos tiyak na may isang slicer na data sa loob nito.Ito ay subaybayan ang average na antas ng data (tandaan na ito ay hindi katulad ng average na antas ng senyas ng radyo).Ito ay iaangkop sa kawalan ng signal (isang lohika 0 pagpunta sa tagapaghatid) at ayusin ang kanyang slicer sa level ng palapag ng ingay.Ikaw ay malamang na ang mga random na data ay umalis sa module at dahil lamang sa ikaw ay naghahanap para sa isang solong byte matching, ang nangyayari paminsan-minsan sa pamamagitan ng pagkakataon.

Mayroong maraming mga paraan upang ayusin ang problema.Sa kasamaang palad, ang module ay hindi magkaroon ng isang output signal level sa monitor, sa kabilang banda ay maaari mo lamang na huwag pansinin ang anumang bagay na dumating sa labas kapag wala ay natanggap na kaya kayo ay sapilitang sa isang solusyon ng software.

Ang pinakasimpleng paraan upang subukan ay upang maghatid ng ilang zeroes (0x00, hindi '0 ') bago ang iyong data upang payagan ang receiver na iaangkop, pagkatapos gamitin ng higit sa isang byte upang madala ang iyong mensahe.Tandaan na ang bawat dagdag na byte nagbibigay sa iyo ng 255 beses na mas posibilidad na ang pattern na misinterpreted.Sa aking mga proyekto ko sa pangkalahatan ay may magpadala ng buong string ng mga character kaya hinahawakan ko ang mga ascii 'karakter STX' bilang isang 'malinaw na makatanggap ng buffer at maghanda na tumanggap ng data' signal.Magpapadala ako ng ilang mga karakter STX, ang aking mensahe at pagkatapos ng isang CRC halaga upang kumpirmahin ang lahat ng bagay sa pamamagitan ng got.

Ikaw ay paghahanap ng ang matigas na paraan ng komunikasyon RF ang data ay hindi kasing-dali ng hitsura nito.Pagtiyagaan bagaman, kapag nauunawaan ninyo ang mga dahilan para sa kabiguan at disenyo defensively makakakuha ka ng magandang resulta.

Brian.

 
Hey Brian,

Salamat sa sagot.Na iyon ay tunay na nagbibigay-kabatiran.Ito ay ang kamao oras na ako sa paglalaro ng RF, sa gayon ang iyong mga karapatan, ang isang maliit na nakakabigo.Subalit ako ay nasasabik sa kumuha ito sa pagtratrabaho at ito ay tiyak na tumingin sa kung ano ang sinabi mo.Ako din ay nagkaroon ng isang pares ng mga katanungan, at magiging tunay pahalagahan kung ka could gabay sa akin.

Bago na nakukuha ko sa mga katanungan, Id nais na ipaliwanag ang aking aplikasyon madaling sabi.Mayroon akong 5 transmiter / receiver pares.1 Master at 4 na alipin.Paumanhin kung ako got / makuha ang terminolohiya ng mali.Anyway, ang bawat isa sa 4 na alipin ay magkakaroon na kinilala sa pamamagitan ng isang kakaibang address.Sa ngayon, ay nagbibigay-daan lamang ang tawag sa kanila alipin 1, alipin 2 at iba pa.

Una, ang Master TX ay makipag-ugnayan sa Slave1.Slave 1 na natatanggap ng isang random na hindi pang-importanteng mensahe at nagpapadala ng isang ACK likod.Kapag Master Rx na natatanggap ng ACK na ito, ito ay makipag-ugnayan sa Slave 2 at iba pa.Kung doesn't ito kumuha ACK matapos ang isang tiyak na oras mula sa alinman sa mga alipin, ito ay awtomatikong contact sa susunod na alipin.Kaya sa inyong karapatan, kailangan ko upang tiyakin na ang mga senyas ay naka-code ng maayos, may checksums at ang lahat, kaya na alam ko na kung saan ay alipin sa pagpapadala ng ACK likod.

Ikaw ay nabanggit na ang dapat kong malamang magdagdag ng isang pares ng mga 0 upang balaan ang receiver na ang isang mensahe ay nalalapit.Ito ay dapat sa kulam na gusto mo nabanggit.Ok, kaya nagbibigay-daan sa sinasabi ko magpadala ng tatlong 0 bago ang bawat mensahe.Ngayon, Master ay makipag-ugnayan sa alipin 1.Dahil ang lahat ng ibang mga alipin ay sa loob ng parehong silid, alipin ang bawat isa ay tumingin sa labas para sa isang tiyak na 'code' para masiguro na ang mensahe ay inilaan para sa kanila.ito ay ang kanilang mga alipin ID.Kaya para sa mga alipin 1, nagbibigay-daan sa gumawa ito ng 001.2 ay 010 at iba pa.

Kaya, ngayon ay ang mensahe ay 000-001 (para sa slave1).Ngayon ay kailangan ko upang magdagdag ng isang checksum sabihin sa receiver na ang buong mensahe ay natanggap.Ito ay kung saan im getting confused.Ano ang dapat na ito ay?Isa pang tatlong 0's?Ang kabaligtaran ng mssage sa isang Z sabihin sa receiver na ang lahat ng dumating.Hows 000-001100-Z para sa panginoon sa alipin 1, 000-010010-Z para sa panginoon sa alipin 2 at 000-011110-Z para sa master sa slave3?

Ngayon ay nagbibigay-daan sa sinasabi namin kumuha ito nakaayos.Ang alipin ay upang magpadala ng kanyang sariling natatanging ACK sa master.Ito ay marahil ay 000-ACK-z.Gayundin, B ACK's ay 000-BCK-z.

Ako ba ay pupunta sa kanang subaybayan dito?o magkaroon ako got ito completly mali?

Salamat kaibigan.

Sa isang bahagi brian tandaan, youve ay ang pagsagot sa aking ibang posts tungkol sa interfacing RF module na may Pins Io.Ang TX / RX Pins ng PIC ginagamit ng rs232 na makipag-usap sa PC, kaya ako na kailangan upang malaman kung paano kontrolin ang RF module ng paggamit ng Pins Io.Naniniwala ako na ito ay tinatawag na software UART.Ay na tama?Wala akong ideya kung paano kontrolin ang RF gamit ang uart ng pic, sabihin nag-iisa control ito sa Pins Io.Subalit ako ay handang maglaro kunin at matuto, kaya kung ka could help me out, na magiging mahusay na mahusay.

Salamat

 
Hi Hobby_85.

Ang iyong sistema ay halos katulad sa isa sa mga minahan.Mayroon akong isang master control yunit sa loob ng bahay at 5 mga alipin mula sa kinokontrol na ito.Ang panginoon ay ang radio link, isang link sa isang PC, at LCD display, keypad at ilang babala ang mga ilaw / buzzers.Ang do alipin iba't ibang mga bagay-bagay mula sa pagmamanman RFID tags sa pagkontrol ng pumping kagamitan.

Una, ang master / alipin ay isang magandang paraan ng pagbibigay ng pangalan sa kanila, ito ay nagpapahiwatig na ang isa ay hepe at ang iba ay dapat sundin ito!

Ako ay naglalarawan sa messaging sa aking sistema bagaman ikaw ay kurso ng libre upang lumikha ng iyong sariling, walang mga patakaran, mga halimbawa lamang.Ang dapat kong ituro na ako addressable FM modules sa halip na ang mga AM ikaw ay gumagamit ngunit ang mga prinsipyo ay pareho.

Ang dagdag na character na magpadala sa iyo bago ang tunay na mensahe ay tinatawag na 'paunang salita' at ang kanilang layunin ay ang dalawang tiklop: Nagbibigay ang mga ito ang receiver na oras upang ayusin sa lakas ng signal at bigyan sila ng isang bagay UART ang ngumunguya sa kumuha ito synchronize.Halos lahat ng mga radio module may AGC (automatic makakuha ng control) na kung saan ay para matulungan ang receiver makaya may mahina at malakas na signal pare-pareho rin.Kung sila ay tumakbo sa buong sensitivity kaya hindi na nila marinig mahina signal sila marahil sobrang karga na may isang malakas na isa.Katulad din, kung makakuha ang mga naka-set kaya mababa ang receiver ay hindi labis na karga, ito ay 'bingi' upang mahina signal.Ang AGC binabawasan ang makakuha ng signal ay makakakuha ng mas malakas na ngunit ito ay tumatagal ng oras upang umepekto kaya kung ang iyong data ay nagsisimula kaagad ang unang bits ay maaaring masira.Pagkahagis ng ilang 'pansinin mo ako' bytes out muna ay tiyakin na ito ay handa na para sa mga tunay na mga bagay-bagay.

Mula ito makikita mo na ang paunang salita ang dapat ipadala bago sa bawat pagputok ng paghahatid, kahit na module ay ang pagpapadala ng ito.

Kailangan mong gumawa ng isang pagkakaiba sa pagitan ng kung ano ang data at kung ano ang hindi.Halimbawa, kung ikaw ay gumagamit ng 0x00 bilang panimula, hindi rin ninyo magagamit ang mga ito sa iyong data.Gusto Ito ay mahirap na trabaho kung ano ang isang tunay na mensahe at kung ano ang dapat ay hindi papansinin.Ano ang gagawin ko ay ipadala ang lahat ng data bilang teksto sa gayon lamang ascii character sa pamamagitan ng 0x20 na 0x7F ay ginagamit upang dalhin impormasyon.Ito dahon ang control bahagi ng ascii table na gagamitin para sa mga layuning control.Gamitin ko STX (0x02) para sa kanyang orihinal na layunin na kung saan ay "Start ng Pagkakahawa" para sa halimbawa.Kung nais na magpadala ng 0x1234 nais mong magpadala ng mga tunay na 0x31, 0x32, 0x33, 0x34, ang ascii codes para sa mga indibidwal na numero.

Kaya ang isang tipikal na mensahe sa aking sistema ay maaaring:
0x00, 0x00, 0x00, STX, 'H', 'E', 'L', 'L', '0 ', CR, [CRC]

na kung saan ang CR ay isang carriage return (0x0D) at ang [CRC] ay isang byte kinakalkula mula sa lahat ng bagay sa pagitan ng STX at CR.

Ito ay isang maliit na mas masalimuot sa aking sistema dahil mayroon akong i-load ang routing address sa module pati na rin ang mga data at gamitin ko ng damit katulad ng sa Manchester encoding upang mapabuti ang integridad ng data ngunit makikita mo ang pangkalahatang ideya.

Kung kayo ay sundin ang aking mga ascii Halimbawa, nais mong sumagot sa isang mensahe sa:
0x00, 0x00, 0x00, ACK, CR, [CRC] o kung ito ay nabigo, NAK sa halip ng ACK.

Ikaw ay may karapatan tungkol sa software UART, karaniwang ito ay wiggling ang Pins chips sa tamang panahon kaya tila isang tunay na UART ay ginagawa ito.

Brian.

 
Yep, ang lahat ng ito ang akma ngayon.Huling ilang mga katanungan Akala ko off.Sa aking sistema, tulad ng nabanggit ko, ang data sa loob ng msg sa sarili ay hindi mahalaga.Katotohanan Sa, ang lahat ng msg ay naglalaman ng kung saan ay alipin sa kanyang pagdating mula sa.

Kaya ang ibig sabihin nito para sa mga side transmiter, ako talagang mahirap ang code msg ka Tulad ng sinasabi para sa code sa itaas na nagpapadala sa titik na 'T', ako ay palitan ng ....

delay_ms (20); / / 20ms delay
fputc ('0 x00, 0x00, 0x00, STX, 'A', 'A', 'A', CR, C3 ', COM_A); / / magpadala ng data mula sa mga MASTER SA alipin 1
delay_ms (20);

ako kinakalkula ang CRC na C3 sa pamamagitan ng pagdagdag A A A = 0xC3.

-Akala ko ako kapabayaan ng kuwit kapag pagsulat ng code?

Kapag ang isulat ang receiver code, ito ay isang bagay na tulad nito.Masama lang magsulat sa psedo code;

habang (1) / / Huwag isang loop walang katapusan
(
int paunang salita;
int data1;
int data2;
int data3;
int cr;
int crc;

paunang salita = fgetc (COM_A);
kung (panimula == 0x00) (
paunang salita = 0;
paunang salita = fgetc (COM_A); / / gawin muli upang makuha ang susunod na paunang salita.
/ / suriin upang makita kung ang mga susunod na 2 preambles ay 0 sa kulam.Siguraduhin na ang panimula ay bago nabura ang natatanggap nito sa susunod na karakter;
/ / kumuha ng data sa isang titik sa isang panahon, at tindahan sa data1, data2, data3.
/ / susunod na halaga ay dapat cr, kung hindi, ang isang error
/ / makakuha ng crc halaga at tindahan sa int crc
/ / magsulat ng kung pahayag, magdagdag ng data1 data2 data3 sa hex at makita kung ang halaga ay crc.kung hindi, error, kung oo, liwanag ng LED o ng isang bagay
)

Paano ako pupunta so far Brian?Ito asta ridiculously masaya kaya masama malaman mo kung paano ito goes kapag test ito ngayon.Mayroon bang anumang bagay na dapat kong baguhin ang ibig sabihin ng panahon?

Im trying sa tayahin RF (mabuti ang mga pangunahing kaalaman sa atlease) sa pamamagitan ng weekend.Walang may tamaan kayo sa kung paano gumawa ng Io sa Pins na kumilos bilang RX / TX sa ilang yugto masyadong.

At salamat sa inyong mahaba at lubhang kapaki-pakinabang na mga sagot.Sila ay napakatalino.Dagdag dito, para sa TX, walang kuwit right? ... Im just nag-aalala na kapag ang TX ipapadala ang buong pulutong magkasama, kung paano ang RX pagpunta sa hiwalay na sila at tindahan ng em?maliban na lamang kung ako ilagay sa isang pagka-antala sa pagitan ng bawat isa ... pero defeats na ang layunin ng isang panimula at lahat na.

Salamat

 
Halos karapatan!

Ikaw ay tandaan na ang paunang salita ay doon sa 'malinaw na ang landas na' para sa natitirang mga data at hindi mismo maaaring makuha sa pamamagitan ng dahil sa AGC problema.para na dahilan, ito ay pinakamahusay na magsama-sama sa paghahanap ng STX sa halip na sa 0x00.

Ikaw ay may karapatan tungkol sa mga kuwit, sila ay may lamang bilang bahagi ng programa ng syntax ngunit ako ay medyo nag-aalala na ang iyong fputc () function ay paghawak ng maraming parameter.Tiyakin sa iyong mga dokumento compiler ngunit kadalasan ito ay tumatanggap lamang ng isang karakter sa isang panahon.

Ito ay bahagi ng aking makatanggap ng code para ipakita kung paano ko ito:
Code:magpawalang-bisa GotByte ()

(InByte = WaitRx ();kung (InByte == STX) / / STX ay nagpasimula ng isang paghahatid

(

InPtr = 0;

* * * InBuffer = 0;

LocalCRC = 0;

bumalik;

)kung ((InByte == CR) | | (InByte == ETX)) / / CR o ETX tapusin ang isang paghahatid

(

ParseInBuffer (); / / proseso ang mga nilalaman ng buffer

bumalik;

)/ / Kung pa rin ng puwang sa InBuffer at karakter ay alphanumeric, ikakabit ito sa InBuffer

kung ((InPtr <0x10) & & (InByte> 0x1F) & & (InByte <0x7F))

(

kung (InPtr <0x0E) LocalCRC = InByte;

InBuffer [InPtr ] = InByte;

InBuffer [InPtr] = 0;

)

)

 
ok gotcha,

kaya ito ay kung ano ang im pagpunta sa pagbabago:

1) Paghahanap dont para sa paunang salita.(ang zeroes).Search para sa STX
2) gumamit fgets () para sa mga character na tindahan sa isang string
3) sa paghahanap para sa cr
3) halaga ng proseso ang string upang matiyak na ang ascii karagdagan tumutugma sa localcrc.
4) Error ay CRC dont tugma, ngunit kung ito ay, atipan ng pawid ang mensahe.

May asawa mo.Salamat para sa lahat ng tulong.Kapag na nakukuha ko na ito ng pagpunta, may sakit ipagbigay-alam sa iyo.

Im gamit ang RX / TX Pins sa sandali lamang na subukan ito.

Im lamang ang pagpapadala ng data papunta sa PC, hindi nakakatanggap ng anumang.Kaya ako could marahil ikonekta ang RF receiver sa pin RX, ang TX sa rs232 at pagkatapos ay may-sakit lang na maglaro sa 1 Io-ipit at gumawa ng mga ito ay kumikilos tulad ng isang ikalawang TX ..

PS.iyong mga karapatan tungkol sa fputc.i didn't isipin na sa pamamagitan ng.masamang-check ang compiler manual at na-uri-uriin out.

Salamat tambak.

 
Ganap na spot on!

Ipagbigay-alam sa akin kung paano makakuha ka ng on.
Kasalukuyan akong nagtatrabaho sa isang proyekto na may 2 UARTS at bit banging pati na rin upang maaari mong isipin kung ano na gusto!Ito ay gumagamit ng ilang mga chips 18F46J11, pagtakbo sa 40.6MHz at may 1MB ng isagasa pabitin off din ito.

Saan sa mundo ay sa iyo?Gusto Ito ay nice kung ang mga kasapi ay sa lugar ng hindi bababa sa kanilang bansa sa kanilang mga profile sa gayon ito ay nagbigay ng ideya ng kung anong time zone na sila in ko na ang isang tao ay magreklamo ako ng mabagal na pagtugon (kahit na ito ay lubos na kusang-loob) kapag ito ay 3 dito.

Brian.

 
Ano ang iyong ginagawa ay gumagawa ng aking mga proyekto hitsura play anak.Ngunit sa buong pamamaraan ng mga bagay-bagay, im talagang nagsisikap upang makagawa ng isang silid-level na lokasyon sa pagsubaybay ng aparato, ang susi salita ay sinusubukan.Dont malaman paano sa malayong masama kumuha, ngunit ang kanyang laging nagkakahalaga ng isang shot ako sa tingin.

Im gamit ultratunog at RF para makuha ang TDOA ng signal at bibigyan ako malaman ang taas ng room, ang bilis ng tunog at ilaw, ako ay dapat na kakayahang makahanap ng isang lugar batay sa triangulation.Balon, na tila ito ay nagpapaliwanag ako kunwari.

Im sa Sydney sa kasalukuyan, sa aking huling sesyon ng electrical engineering.Subalit ako ay nakataas sa UK.Aking mga malalaking ay nasa kapangyarihan, kaya im pretty much naglalaro catch up sa Telecommunications.Subalit nito def interesting.

Paano ang tungkol sa inyo?sa industriya o uni?
(* tumawid sa kanyang mga daliri at pag-asa ka pa sabihin '* highschool') haha

 
HIGHSCHOOL!

Gusto ko!

Kaliwa may 40 taon na ang nakaraan.Ngayon ako ng paggawa ng elektronika lalo na bilang isang libangan ngunit ko na ginastos sa maraming mga taon sa Telecoms sa pagsubok at mga kagamitan sa industriya sa Estados Unidos at Europa.

Brian.

 
betwixt wrote:

HIGHSCHOOL!Gusto ko!Kaliwa may 40 taon na ang nakaraan.
Ngayon ako ng paggawa ng elektronika lalo na bilang isang libangan ngunit ko na ginastos sa maraming mga taon sa Telecoms sa pagsubok at mga kagamitan sa industriya sa Estados Unidos at Europa.Brian.
 
Para sa ilang mga dahilan, ang iyong huling reply ay may vanished kaya kukunin ko na comment sa kung ano ang maari kong tandaan ng mga ito.

Mukhang OK ngunit maaari mong subukan ang ilang mga pagbabago:

Ang STX CR at marahil ay dapat na 'char' sa halip ng 'int' ngunit magiging mas mahusay na gamitin ang '# tukuyin' direktiba upang itakda ang mga ito.Gumamit ako ng isang maliit na file, na ipinapakita sa ibaba, na tinatawag na 'ascii.h' at # maisama ito sa itaas ng aking mga programa.
Code:/ / Ascii Control pagbibigay-kahulugan ng Karakter# define NUL 0x00

# define SOH 0x01

# define STX 0x02

# define ETX 0x03

# define EOT 0x04

# define ENQ 0x05

# define ACK 0x06

# define Bel 0x07

# define BS 0x08

# define HT 0x09

# define LF 0x0A

# define VT 0x0B

# define FF 0x0C

# define CR 0x0D

# define SOH 0x0E

# define SI 0x0F

# define DLE 0x10

# define XON 0x11

# define DC2 0x12

# define XOFF 0x13

# define DC4 0x14

# define NAK 0x15

# define SYN 0x16

# define ETB 0x17

# define MAAARI 0x18

# define em 0x19

# define sub 0x1A

# define ESC 0x1B

# define FS 0x1C

# define GS 0x1D

# define PHP 0x1E

# define sa amin 0x1F

# define DEL 0x7F

 
ok nakuha mo.masama kumuha ito nakaayos sa pamamagitan ng tomo.thanks sa lahat ng brian ng tulong.

masamang subukan at makakuha ng isang software uart pagpunta din, kaya ako malaman bago i-post.

good luck sa inyong proyekto masyadong.

 
Brian,

Sinubok ko ang aking code ... at hindi kapalaran.Im simula sa pakiramdam nagkasala na Im asking para kaya marami sa tulong sa pagtatakda ng mga simpleng bagay up.

Ang mga transmiter tila gumagana.Osc ay nagpapakita ng data na ipinadala out.Gayunman, ang data ay pa rin ipinapadala kung lumipat isn't pipi.Kailangan kong itigil na ito dahil sa aking mga proyekto revolves sa paligid nito na tiyak.Cant ko ipaalam ito kunan ng larawan off data maliban kung ang ibig sabihin nito masyado.

Ang TX code ay ang mga sumusunod.Im paggawa ng ito simple para sa ngayon, ang pagpapadala ng isa kaunti sa isang pagkakataon.

Code:# include <16F688.h>

# isama <ascii.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)CRC int = 85; / / CRC-set sa code para sa mga layunin ng pagsubokmagpawalang-bisa pangunahing ()

(setup_adc_ports (NO_ANALOGS); / / set lahat ng mga inputs sa mga digital napara sa (;;){kung (input (PIN_C2) == 0) / / kapag pinindot na button

(output_high (PIN_A1); / / output mataas na LED

delay_ms (20);fputc (NUL, COM_A); / / magpadala ng stream ng AAA

fputc (NUL, COM_A);

fputc (NUL, COM_A);

fputc (STX, COM_A);

fputc ( 'A', COM_A);

fputc ( 'A', COM_A);

fputc ( 'A', COM_A);

fputc (CRC, COM_A); / / magpadala ang checksum ng 85

fputc (CR, COM_A);delay_ms (20);

delay_ms (1000); / / pagkaantala ng ilang ms

output_low (PIN_A1); / / output mababa na humantong

delay_ms (1000);

)sino pa ang paririto (output_high (PIN_A1);

delay_ms (50);

output_low (PIN_A1);

delay_ms (50);

)

)

)
 
Tila structurally OK na ngunit ako ng ilang mga komento at katanungan.Hindi ako sigurado kung saan ang 'C compiler' ang iyong ginagamit kaya maaring i-double check kung ano ang makita ko, ito ay maaaring hindi applicable sa ito ay syntax.

Ipinapadala:
1.Akala ko gusto ang mga pahayag (PIN_C2) ay tumutukoy sa Port C, kaunti 2.Ba sa pahayag na "input (PIN_C2)" kaagad na gawin ang mga bit port ng input?sa ibang salita, pati na rin ang pagbabasa nito, ito ay itakda ang TRIS bit para sa pin na maging isang input?
Ba ito ng isang pull-up risistor upang gawin itong mataas na hanggang sa lupa ito?

2.Ba ang "fputc" command pila ang data (buffer ito)?Maaari kang maging lakas pagpapakain ito sa lahat ng mga bytes bago sila ay nagkaroon ng panahon na ipasa sa pamamagitan ng UART.

Ang pagtanggap:
1.Gawin ang iyong data ng [] array hindi bababa sa isang byte mas malaki para sa ngayon, maaari mong laging mabawasan ang sukat nito mamaya.Ikaw ay walang paraan ng pagtatakda ng haba ng mensahe sa sandaling ito ang "fgets" ay malamang na makuha ang lahat ng bagay hanggang sa CR at bumaha sa array.

2.Hindi sigurado ang tungkol sa iyong tseke para sa tatlong 'A' na character ay tama.Habang ikaw ay ANDing ang lohika ng mga character na sama-sama, maaaring may iba pang mga kumbinasyon na pumasa sa pagsusulit.Subukan ito sa halip na:
kung ((data [0] == 'A') & & (data [1] == 'A') & & (data [2] == 'A')) (

Subukan ang mga pagbabago at ipaalam sa akin kung paano makakuha ka ng on.
Brian.

 
Brian,

Ipinapadala:

Bahagi na ito ay nakaayos.Ko matatagpuan ang isang maliit na problema sa ako lumipat ay ang paggamit, at ang RF sa mga nagpapadala ng ganap na ganap na pinaghahanap.Salamat sa tulong.

Im gamit ang ccs compiler, kaya oo, (PIN_C2) ay Port C, kaunti 2.Magpasok ng C2 Binabasa ang input alintana kung paano tris ay itinakda.Kaya ito ay hindi ito awtomatikong.

Kaya TX ay pagmultahin.

Receiver:

Nabago ang buffer laki at ang data na pahayag check gusto mo iminungkahi.Ko ring maglagay LEDs sa bawat yugto.Ito ay kung ano ang nakasalamuha ko.

1) LED kapag ang STX ay nakatagpo ng mga ilaw up, pero isang beses lang ... alintana kung gaano karaming beses ang mensahe ay ipinadala na.Ito lamang ang mangyayari sa unang pagkakataon masyadong, at lamang kapag i turn on ang kapangyarihan sa board.

2) dont sa tingin ko ito makakabasa ng 85, ang aking checksum.Ang namuno sa liwanag yugto doesn't up, sa anumang yugto.At ofcourse, ang namuno para sa mensahe na natanggap doesn't liwanag up ng alinman.

Im hindi sigurado kung bakit STX lamang ang natanggap na kahit isang beses.atleast na dapat gawain sa lahat ng dako.

kapag ako konektado sa osc sa rx at TX Pins ng RF module, ako maaari makita na receiver ay ang pagpili ng mga ito.sa isang lawak though.sa halip ng pagpili ng up ang perpektong parisukat alon uri ng senyas ng pagiging ipadala, ito ay nagpapakita ng tatsulok na bersyon ... pero ang mga sumusunod na TX.Kaya maliit na tilad ay gumagana.Umaasa ako na ito ang akma.

Anumang mga saloobin?Ang mga sinuring circuit 10 na beses at nadaragdagan pa.

Salamat

 
Pinaghihinalaan ko ang iyong diyagnosis ng CRC kung hindi ay tama, ngunit hindi para sa mga marahil ang dahilan kung bakit sa tingin mo.

Ano ang Sinasabi ng fgets () function upang wakasan?

Aking hulaan na ang CRC ang nai natanggap ng fgets () at naka-imbak sa array (kung hindi ito ay may overflowed) kaya naghahanap afterward ito ay hindi pagpunta sa trabaho.

Maaari mong subukan ang pag-alis ng fgets () at palitan ito ng isang fgetc () loop na tseke sa bawat karakter sa turn at mga tindahan na ito, gusto ko sa aking halimbawa.Paraan na maaari mong mahanap ang CR at CRC kung saan ito ay sa mensahe.

Guessing muli - ang dahilan nito ay nagtrabaho nang isang beses lamang ay ang dami ng overflowed at masira kahit anong variable na ito ay naka-imbak na ito pagkatapos na ito.Alalahanin na ang 'C' ay hindi gawin ang hanggahan ng paglagay ng tsek.Kung ang CCS compiler lumilikha ng isang file na nagpapakita ng mga address ilalaan sa mga variable, tumingin sa anuman ay matapos na ang dami ng data, ito marahil got mapapatungan.

Brian.

 
Mayroon akong isang maliit na suggestion (hindi alam na ito partikular na kapaligiran sa pag-unlad - hardware pati na PIC compiler / aklatan).Subukan ang set compiler optimization sa Wala (para mas madali debugging) at siguraduhin na ang address ng mga Peripheral hardware na may "sumpungin" qualifier.
Good luck.

 
hey, nagtatrabaho pa rin sa receiver sa ngayon, at malaman mo kung paano ito goes.

i tried mantika ang code na ihiwalay ang problema, tulad na kapag ito na natatanggap ng STX, itll liwanag ang mga inakay.Ito ay may isang tuloy-tuloy na paghahatid ng bawat ilang segundo.Walang luck.

Still trying.Salamat sa tulong so far.Added pagkatapos ng 3 oras 39 minuto:hey brian,

i havent been able upang ayusin ang aking receiver code, ngunit pinamamahalaang upang mahanap ang mga code C online na nagpapakita sa iyo kung paano magpadala ng RF signal sa ibabaw ng Io Pins sa halip na sa TX / RX iyan ng PIC.

http://www.electro-tech-online.com/micro-controllers/92375-manchester-routines-c-pic.htmlNatagpuan ko ito sa isa pang forum.Basta mag-scroll pababa hanggang sa dumating ka sa 2 na mga kalakip.Guy ilang mga naka-post na ito kasama ang isang pdf dokumento na nagpapaliwanag ng proseso.

Nasubukan ko ito masyadong.Balon, sa isang lawak.Ako magse-set up na ito sa aking mga PIC at pinamamahalaang upang makuha ang paghahatid at natanggap na signal sa osiloskoup.Dont ko malalaman kung ang receiver nakuha ang tamang mensahe, ngunit ang masamang gawin ang mga LED tomo pagsubok upang mapatunayan.

Bilang para sa aking receiver, im pa rin sinusubukan na malaman kung saan pupunta im wrong.Din ako ay nagtataka kung ako ay dapat na gamit ang isang HT-12 encoder at decoder.Gusto na ng tulong?

Salamat kaibigan.Hope ang inyong proyekto ay darating kasama ng mas mahusay kaysa sa akin.

 
Paumanhin sa hindi pagtugon maaga, ako ay nagkaroon ng iba pang mga trabaho na ko ngayon.

Baka gusto mong paghahanap na ito board para sa paksang "Problem with wireless serial transmisson" (tandaan ang mga pagkakamali sa pagbaybay!) Na kung saan ang papunta sa pinainit mga talakayan sa data encoding para sa mga pamamaraan ng paghahatid.

Maaari mong gamitin ang HT-12 ngunit ito would magdagdag ng gastos.Gusto ko magtiyaga sa isang software solusyon bago sa paggastos ng pera.Makuha ko ang resulta ng 100% sa 19,200 bauds sa paglipas ng matagal na distances na may simpleng modules upang ito ay tapos na.Ito din ay nagkakahalaga ng pagpuna na HT-12 at software ay nakabuo ng mga code ng Manchester ay kapaki-pakinabang lamang kung ikaw ay gumagamit ng FM modules ngunit sa iyo ay AM.

It will still work if you use Manchester coding but there will be less throughput because extra bits have to be sent.

PM me with the latest code you are working with so I can look at it again. Brian.

 

Welcome to EDABoard.com

Sponsor

Back
Top