Whats going wrong?

H

hobby_85

Guest
Aš nusipirkau RF KIT, siųstuvas ir imtuvas, ir panašaus produkto svetainė yra žemiau.Dabar im bando parašyti kodą, tiesiog įsitikinkite, kad jį dirba.

http://www.sparkfun.com/commerce/product_info.php?products_id=8950

Im naudojant IPS 16f688 ir jei LED įsižiebia teisingas modelis, žinau kodas veikia.Tačiau taip nėra.

Čia yra TX kodas:

# include <16F688.h>
//------------------------------------------------ -------------------------------
# define WireTX PIN_C4 / /
# define WireRX PIN_C5
//------------------------------------------------ -------------------------------
# saugikliai XT NOWDT, NOPROTECT, NOBROWNOUT, Put
# naudoti nedelsiant (laikrodis = 4000000)
# USE RS232 (Baud = 2400, xmit = WireTX, VB = WireRX, Stream = COM_A)

void main () (

for (;

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Mirkčiojimai" border="0" />

(

if (input (PIN_C2) == 0) / / if mygtuką nuspaustą
(

output_high (PIN_A1) / / išvesties aukštos Led
delay_ms (20) / / 20ms vėlavimą
fputc ( "T", COM_A) / / Siųsti duomenis
delay_ms (20);
delay_ms (1000); / / delsimas kai kurios VN
output_low (PIN_A1) / / išvesties mažai buvo
)

output_high (PIN_A1) / / jei mygtukas nespaustos tai tik ne buvo dėl PIN D1

delay_ms (50);
output_low (PIN_A1);
delay_ms (50);

)
)

Taigi, jei paspausite mygtuką, raidė T reiškia būti siunčiami per ir LED turėtų come on, tada išjungti tada ilgiau.

Čia yra atitinkami Gavėjo kodas:

# include <16F688.h>
# saugikliai XT NOWDT, NOPROTECT, Sumažinti apšvietimui, Put
# naudoti nedelsiant (laikrodis = 4000000)
//------------------------------
# define WireTX PIN_C4
# define WireRX PIN_C5
//------------------------------
# USE RS232 (Baud = 2400, xmit = WireTX, VB = WireRX, Stream = COM_A)
unsigned int8 duomenis;
int1 flag = 0;

# int_rda
void rd_isr (void) (
disable_interrupts (INT_RDA) / / Disable Serijos Gauti Nutraukti
disable_interrupts (global) / / Disable Global Interrupts

Duomenų = fgetc (COM_A);
if (duomenų == 'T') (
flag = 1;
)

enable_interrupts (Global);
enable_interrupts (INT_RDA);

)

void main () (

enable_interrupts (pasaulinis)
enable_interrupts (int_rda);

for (;

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Mirkčiojimai" 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);
)
)

Taigi, jeigu pranešimas yra gautas, LED turėtų būti įjungti / išjungti 1 sek intervalais.Jei ne, tai tiesiog reikia Flash ir išjungti.

Turiu osciloskopu, todėl galiu pažvelgti į signalus, siunčiamus.Čia yra problemos:

1) jungiklis - Kai aš patikrinti RF signalo siunčiamos kai mygtukas buvo stumti, aš mačiau ant osciloskopu žingsnis.Pranešimas bus išsiųstas visiems laikams ir vadovauja tai šviesa, kaip koduoti.
Todėl žinau, ką buvo išsiųstas per.Tačiau po poros sekundžių, net tada, kai jungiklis buvo išjungtas, pranešimas buvo išsiųstas automatiškai.
Aš prijungtas 220K varža nuo MC išėjimo į LED, o tada GND.

2) Gavėjas - buvo paeiliui on / off, tartum jis didnt gauti viską.Tačiau, kai aš susijęs OSC į imtuvas / RX ir MC, I can see in signalą šuolis, atitinkančių signalas siunčiamas TX.So why isnt LED apšvietimas, kaip tikimasi?

Any ideas?

Ačiū

 
Jei kabliukas jūsų osciloskopu duomenų išvesties modulio Manau matysite whats happening.Modulis AM ir beveik neabejotinai turi duomenų peilis viduje.Tai bus stebėti vidutinis duomenų apsaugos lygį (atkreipkite dėmesį, kad tai nėra toks pat kaip vidutiniškai radijo signalo lygis).Ji bus pritaikyti prie signalo nebuvimas (logika 0 vyksta į siųstuvą) ir pritaikyti savo peilis su triukšmo grindų lygio.Jūs tikriausiai pastebėsite, kad atsitiktiniai duomenys palieka modulio, nes jūs tik ieško vienas atitikimo baitas, tai kartais pasitaiko atsitiktinai.

Yra daug būdų, kaip išspręsti problemą.Deja, šis modulis nėra signalo galia kontroliuoti, kitaip galite tiesiog ignoruoti viską, kas išėjo, kai nieko buvo gauta, kad esate priversti programinės įrangos.

Paprasčiausias būdas yra bandyti perduoti keliais nuliais (0x00, o ne "0"), prieš savo duomenis, kad būtų galima prisitaikyti prie imtuvo, tada naudoti daugiau nei vieną baitą vykdyti savo žinutę.Atminkite, kad kiekvienas papildomas baitas suteikia jums 255 kartų mažesnė tikimybė, kad modelis yra neteisingai.Visų mano projektų Aš paprastai turi siųsti visas eilutes rašmenų, kad aš rezervas ascii "STX" pobūdžio kaip "aiškiai gavimo buferis ir pasirengti priimti duomenis" signalą.Siųsti kelis STX simbolių, mano pranešimą ir tada CRC vertė patvirtinti visi išgyveno.

Jūs sužinoti Hard Way kad RF duomenų perdavimo nėra taip paprasta, kaip atrodo.Cierpliwi nors, kai jūs suprantate, kad nebuvo ir dizainas defensively gausite gerų rezultatų priežastis.

Brian.

 
Ei, Brian,

Ačiū už atsakymą.Tai buvo tikrai labai informatyvus.Tai pirmoji laiko aš žaisti su RF, kad jūsų teisė, jos šiek tiek varginantis.Bet esu siekia gauti šį darbą ir būtinai pažvelgti į tai, ką jūs sakėte.Taip pat buvo klausimų pora, ir būtų labai dėkingi, jei galėtumėte man gidas.

Prieš man į klausimus, Id, kaip paaiškinti mano prašymą trumpai.Turiu 5 siųstuvas / imtuvas porų.1 Magistro ir 4 vergai.Atsiprašau, jei aš turiu / gauti terminologija neteisinga.Anyway, kiekvienas iš 4 vergų turės būti identifikuojamas pagal unikalų adresą.Nes dabar, leidžia skambinti tik juos vergais 1, vergais 2 ir pan.

Pirma, Meistras Tx turi kreiptis Slave1.Slave 1 gauna atsitiktinai ne svarbi žinia ir siunčia ACK atgal.Kai Meistras Rx gauna šią ACK, ji turi susisiekti Pagalbiniai 2 ir pan.Jei tai nepadės gauti ACK po tam tikro laiko iš bet vergų, jis automatiškai Kontaktai kitą vergas.Taigi jūsų teisė, turiu įsitikinti, kad signalai yra koduoti teisingai, su kontrolinės ir visi, kad aš žinau, kuri vergais siuntimas ACK atgal.

Minėjote, kad aš tikriausiai Pridėti 0 poros perspėti imtuvas, kad pranešimas yra neišvengiamas.Tai turi būti HEX kaip jūs paminėjote.Gerai, tarkim siųsti trijų 0's prieš kiekvieną žinutę.Dabar, Meistras turi kreiptis į vergų 1.Kadangi visi kiti vergai yra toje pačioje patalpoje, kiekvienas vergas bus išeiti už tam tikrą "kodas", kad įsitikinti, kad pranešimas yra skirtas jiems.tai bus jų vergais ID.Taigi antrinių 1, leidžia padaryti 001.2 bus 010 ir pan.

Taigi, dabar žinutė 000-001 (už slave1).Dabar man reikia Pridėti į kontrolinę pasakyti imtuvas, kad visa prane ¹ im ± gavo.Tai kur jiems gauti supainioti.Kas turėtų būti?Dar trys 0's?Su mssage Žymėti su Z papasakoti imtuvą, kad visi atvyko.Hows 000-001100-Z kapitonas vergais 1, 000-010010-Z kapitonas vergais 2 ir 000-011110-Z kapitonas slave3?

Dabar tarkim mes šiuo surūšiuoti.Vergas turi siųsti savo unikalų ACK į meistras.Tai greičiausiai bus 000-ACK-Z.Be to, B ACK bus 000-Bck-Z.

I am going į linkme čia?arba I got it completly negerai?

Thanks mate.

Apie pusė Pastaba Brian, Youve buvo atsakyti į mano kiti postų apie sąsajų RF moduliai IO kaiščių.TX / RX kaiščių IPS yra naudojamos RS232 pasikalbėti su kompiuteriu, todėl reikia išmokti valdyti RF modulius IO kaiščių.Manau, tai vadinama programinė įranga UART.Ar tai teisinga?Net neįsivaizduoju, kaip kontroliuoti RF naudojant IPS, nekalbant kontroliuoti, IO Pins UART.Bet aš esu pasirengęs padėti pasivyti ir išmokti, tad jei galite padėkite man, kad būtų puikus.

Ačiū

 
Hi Hobby_85.

Jūsų sistema yra labai panaši į vieną iš mano.Turiu meistras valdymo blokas viduje ir 5 vergai kontroliuoja jį.Kapitonas turi radijo ryšys, ryšys su PC ir skystųjų kristalų monitorius, klaviatūra ir keletas įspėjamosios lemputės / Buzzery.Slug daryti įvairius dalykus monitoringo RFID kontroliuoti siurbimo įranga.

Pirma, master / slave yra geras būdas iš jos surašomos, tai reiškia, kad vienas bosas ir kiti turėtų paklusti jį!

Aš apibūdinti pranešimai Mano sistema Nors jūs, žinoma, nemokamai susikurti savo, nėra jokių taisyklių, tik pavyzdžiai.Norėčiau pabrėžti, kad aš adresavimo FM moduliai, o ne AM tuos, kuriuos naudoja, bet principas yra tas pats.

Papildomų simbolių siunčiate iki realaus žinutę vadinama "preambulėje" ir jų tikslas yra dvejopas: Jos suteikia imtuvas laiko prisitaikyti prie signalo stiprumo ir jie suteikia UART kažką graužti dėl to get it sinchronizuoti.Beveik visų radijo moduliai AGC (automatinis stiprinimo reguliavimas), kuris padėtų susidoroti su imtuvu silpnas ir stiprus signalus, taip pat gerai.Jei jie vyko ne visiškai jautrumą, kad jie galėtų girdėti silpnus signalus jie tikriausiai perkrovų su viena stipri.Panašiai, jei pelnas yra nustatytas žemas, kad imtuvas neturi perkrovos, ji bus "kurčias", kad silpnus signalus.AGC sumažina kaip signalo padidėjimas pasireiškia stipresnis, bet reikia laiko reaguoti, jeigu jūsų duomenys prasideda iš karto pirmą bitai gali būti sugadintas.Throwing kelias "Ignoruoti mane 'baitų iš pirmosios bus įsitikinkite, kad ji yra pasirengusi nekilnojamojo stuff.

Nuo šio Jūs galite pamatyti, kad preambulėje turėtų būti siunčiami prieš kiekvieną perdavimo blyksnio, nesvarbu, kurioje modulis siunčia jį.

Jūs turėsite padaryti tarp to, kas yra duomenys, ir kas negalima.Pavyzdžiui, jei jūs naudojate 0x00 kaip preambulė, jūs negalite taip pat naudoti ją savo duomenis.Būtų sunku dirbti, kas yra tikra pranešimas ir kokie turėtų būti ignoruojamas.Kas man yra siųsti visus duomenis kaip tekstą, o tik ASCII simbolių 0x20 iki 0x7F yra naudojami atlikti informaciją.Tai palieka kontrolės dalis ASCII lentelės turi būti naudojami kontrolės tikslais.Aš naudoju STX (0x02) už savo pirminę paskirtį, kuri yra "Perdavimo pradžia", pvz.Jei norite siųsti 0x1234 jūs iš tiesų Siųsti 0x31, 0x32, 0x33, 0x34, ASCII kodus atskirų skaitmenų.

Taigi tipiškas pranešimą mano sistema gali būti:
0x00, 0x00, 0x00, STX, 'H', 'e', 'L', 'L', '0 ', CR, [CRC]

kai Cr vežimo grąža (0x0D) ir [CRC] yra baitas skaičiuojama nuo visko, nuo STX ir CR.

Tai šiek tiek sudėtingiau, mano sistema, nes turiu apkrova maršruto adresus į modulius, taip pat duomenų ir naudoti kažką panašaus į Mančesterio kodavimas, siekiant pagerinti duomenų integralumą, bet pamatysite bendrą idėją.

Jei sekti mano ASCII Pavyzdžiui, galėtumėte atsakyti į žinutę su:
0x00, 0x00, 0x00, ACK, CR, [CRC], arba jeigu jis neįvykdė, NAK vietoj ACK.

Jūs esate teisus apie programinės UART, tai iš esmės wiggling drožlių kaiščių tinkamu laiku, kad ji atrodo realus UART tai daro.

Brian.

 
Taip, visa tai turi prasmę dabar.Paskutinis kelis klausimus maniau išjungti.Mano sistema, kaip minėjau, per msg savaime nėra svarbus duomenų.Tiesą sakant, visi msg bus pateikta tai, kuri iš jo vergais.

Tad ar tai reiškia, kad siųstuvo pusės, aš tikrai sunku kodas msg in Kaip pasakyti kode, kuri siunčia į raidę "T", noriu ją pakeisti ....

delay_ms (20) / / 20ms vėlavimą
fputc ('0 x00, 0x00, 0x00, STX, '', '', '', CR, C3 ", COM_A) / / siųsti duomenis iš kapitonas slave 1
delay_ms (20);

I apskaičiuojama CRC būti C3 pridėdami = 0xC3.

Man atrodo aš nepriežiūros kablelius rašant kodą?

Kada rašyti imtuvas kodas, tai kažkas panašaus.Netinkamas tiesiog parašyti psedo kodas;

while (1) / / Ar begalinis ciklas
(
LC preambulė;
LC DATA1;
LC data2;
LC data3;
LC CR;
LC CRC;

PREAMBULĖ = fgetc (COM_A);
jei (preambulė == 0x00) (
PREAMBULĖ = 0;
preambulėje = fgetc (COM_A); / / don't vėl gauti kitą preambulėje.
/ / tikriname, ar šalia 2 preambulėse yra 0, HEX.Įsitikinkite, kad preambulėje yra patikrinamas prieš jį gauna kitą pobūdį;
/ / gauti duomenis tik viena raide ne kartą ir saugoti į DATA1, data2, data3.
/ / Next vertė turėtų būti AP, jei ne jo klaida
/ / get CRC vertė ir saugoti į LC CRC
/ / rašyti if pridėti DATA1 data2 data3 į HEX ir pamatyti, jei reikšmė yra CRC.Jei ne, tai klaida, jei taip, šviesos diodų ar kažką
)

Kaip aš iki šiol Brian?Tai atrodo juokingai įdomus taip blogai jums žinoti, kaip ji važiuoja, kai bandymas jį šiandien.Ar ką nors reikia keisti į vidutinį laiką?

Im bando išsiaiškinti, RF (gerai pagrindai atlease) iki savaitgalio.Netinkamas turi Hit jus apie tai, kaip padaryti IO Pins veikti kaip RX / TX tam tikru metu per daug.

Ir ačiū už ilgą ir labai naudinga atsakymus.Jie yra puikus.Taip pat, TX, ne kablelių teisė? ... Im just neramu, kad kai transliuoja siunčia visą partiją kartu, kaip tai RX ketinate atskirti ir laikyti namuose?nebent įdėti vėlavimas tarp kiekvienos viena ... bet, kad pralaimėjimus iš preambulės ir visas šiam tikslui pasiekti.

Ačiū

 
Beveik teisingai!

Jūs turite prisiminti, kad preambulėje yra tam, kad "Clear kelias" už likusius duomenis ir gali pati negali įveikti, nes AGC problema.Dėl šios priežasties, geriausia susitelkti ieškant STX, o ne 0x00.

Jūs esate teisus apie kablelius, jie egzistuoja tik kaip dalis programos sintaksę, bet aš šiek tiek neramu, kad jūsų fputc () funkcija yra tvarkyti tiek daug parametrų.Pasitarkite su savo kompiliatorių dokumentus, bet paprastai ji priima tik vieną simbolį vienu metu.

Tai dalis mano gaunamą kodą, parodyti kaip tai padaryti:
Kodastuščia GotByte ()

(InByte = WaitRx ();if (InByte == STX) / / STX pradeda perdavimas

(

InPtr = 0;

* InBuffer = 0;

LocalCRC = 0;

return;

)if ((InByte == CR) | | (InByte == ETX)) / / PG ar ETX nutraukti perdavimo

(

ParseInBuffer () / / procesą buferio turinį

return;

)/ / Jei dar vietos InBuffer ir pobūdis yra raidinis, pridėkite jį į InBuffer

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

(

if (InPtr <0x0E) LocalCRC = InByte;

InBuffer [InPtr ] = InByte;

InBuffer [InPtr] = 0;

)

)

 
Gerai kabliuko,

todėl tai, ką jiems ketiname keisti:

1) dont paieška preambulėje.(nuliais).Ieškoti STX
2) naudoti fgets (), kad laikyti simbolių eilutės
3) Search for CR
3) procesą, reikšmių seka ir įsitikinti, ar ASCII to atitinka localcrc.
4) klaida CRC dont rungtynės, bet jei jis, thats žinutę.

Got you mate.Ačiū už pagalbą.Kai aš gausiu tai vyksta, ill let you know.

Im naudojant RX / TX Pins metu tik bandymas jį.

Im tik siunčiant duomenis į kompiuterį, negauna jokios.Ir aš galbūt galėtų prisijungti RF imtuvą RX PIN, TX su RS232 tada ligoniams reikia tik žaisti su 1 IO PIN ir kad jis veikia kaip antra TX ..

PS.Jūsų teisė Apie fputc.i didnt manau, kad per.blogai patikrinti kompiliatorių vadovą ir rūšiuoti, kad out.

Ačiū krūvos.

 
Absoliučiai dėmė!

Let me know, kaip jums toliau.
Aš šiuo metu dirba su 2 UARTs ir truputį banging taip pat todėl galite įsivaizduoti, ką tai panašu projektą!Tai naudojant keletą 18F46J11 lustai, važiuojant 40.6MHz ir 1MB RAM kabinti prie to taip pat.

Kur pasaulyje tu esi?Būtų malonu, jei nariai turėjo vietą, bent jau jų šalyje jų profilius, kad jis davė mintį, kurios laiko juostos jie in Turėjau ką nors kaltinti aš lėtas atsakyti (nors ji yra visiškai savanoriškas), kai jis 3 čia.

Brian.

 
Kokia jūsų daro daro mano projektas atrodo kaip vaikų žaidimas.Tačiau visos sistemos ko jiems iš tiesų stengiamės kambarys lygio Vieta sekimo prietaisas, prasminis žodis bando.Nežinau, kiek blogai gauti, tačiau jos visada verta kulka manau.

Im naudojant ultragarsinį ir RF gauti signalus TDOA ir atsižvelgiant į tai aš žinau, patalpos aukštis, garso ir šviesos greičiu, aš galėtų rasti vietą remiantis trianguliacija.Na, tai šiek tiek paaiškina tai manau.

Im Sidnėjuje tuo metu, mano paskutinės sesijos elektrotechnika.Bet man buvo iškeltas UK.Mano pagrindinės yra valdžioje, todėl jiems labai daug žaisti pasivyti su telefoninio ryšio.Bet jo def įdomu.

How about you?pramonėje ar uni?
(* kryžių savo rankų ir tikisi, you dont say 'HighSchool "*) cha cha

 
HighSchool!!

Noriu!

Kairės 40 metų.I'm now doing elektronikos pirmiausia kaip hobis, bet aš praleido daug metų, telekomunikacijų ir bandymo įrangos pramonėje JAV ir Europoje.

Brian.

 
betwixt rašė:

HighSchool!!Noriu!Kairės 40 metų.
I'm now doing elektronikos pirmiausia kaip hobis, bet aš praleido daug metų, telekomunikacijų ir bandymo įrangos pramonėje JAV ir Europoje.Brian.
 
Dėl tam tikrų priežasčių, Jūsų paskutinis atsakymas dingo eisiu komentarą apie tai, ką aš atsimenu jį.

Jis atrodo Gerai, bet galite pabandyti keletą pakeitimų:

STX ir CR tikriausiai turėtų būti "char" vietoj "INT", tačiau geriau būtų naudoti "# Define" direktyvą, siekdama nustatyti jų.Aš naudoju mažas failas, kaip parodyta žemiau, vadinama "ascii.h" ir # include jį mano programos viršuje.
Kodas/ / ASCII valdymo simbolių apibrėžimai# 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 LST 0x08

# define HT 0x09

# define LF 0x0A

# define VT 0x0B

# define FS 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 GALIMA 0x18

# define EM 0x19

# define SUB 0x1A

# define ESRK 0x1B

# define FS 0x1C

# define GS 0x1D

# define RS 0x1E

# define JAV 0x1F

# define DEL 0x7F

 
Ok got you.ill get it sorted out by Tomo.Ačiū visiems padėti Brian.

blogai stenkitės ir programinės įrangos UART vyksta taip pat, kad aš išmokti prieš publikavimą.

Sėkmės su Jūsų projektu taip pat.

 
Brian,

Aš išbandyti su mano kodas ... ir ne sėkmė.Im pradeda jaustis kalti, kad Im klausia, tiek už pagalbą nustatant kažkas paprastų iki.

Siųstuvas atrodo darbo_OSC rodo duomenys bus siunčiami.Tačiau duomenys vis dar siunčiami, jei jungiklis forget presuoti.Man reikia nutraukti šį projektą, nes mano sukasi aplink ji yra tiksli.I cant let it šaudyti prie duomenų, jei jos per daug reiškia.

TX kodas yra toks.Im todėl paprasta dabar siuntimo bitas metu.

Kodas# include <16F688.h>

# include <ascii.h>//------------------------------------------------ -------------------------------

# define WireTX PIN_C4 / /

# define WireRX PIN_C5

//------------------------------------------------ -------------------------------

# saugikliai XT NOWDT, NOPROTECT, NOBROWNOUT, Put

# naudoti nedelsiant (laikrodis = 4000000)

# USE RS232 (Baud = 2400, xmit = WireTX, VB = WireRX, Stream = COM_A)LC CRC = 85 / / VTK nustatytą kodas bandymų tikslaisvoid main ()

(setup_adc_ports (NO_ANALOGS) / / Nustatykite visas sąnaudas prie skaitmeniniouž (;;){if (input (PIN_C2) == 0) / / if mygtuką nuspaustą

(output_high (PIN_A1) / / išvesties aukštos Led

delay_ms (20);fputc (NUL, COM_A) / / siųsti srautas AAA

fputc (NUL, COM_A);

fputc (NUL, COM_A);

fputc (STX, COM_A);

fputc ( '', COM_A);

fputc ( '', COM_A);

fputc ( '', COM_A);

fputc (CRC, COM_A) / / siunčia kontrolinės iš 85

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

delay_ms (1000); / / delsimas kai kurios VN

output_low (PIN_A1) / / išvesties mažai buvo

delay_ms (1000);

)else (output_high (PIN_A1);

delay_ms (50);

output_low (PIN_A1);

delay_ms (50);

)

)

)
 
Jis atrodo struktūriškai Gerai, bet aš turiu keletą pastabų ir klausimų.Nežinau, kuris "C" sudarytojas naudojate todėl prašome atidžiai patikrinkite, ką manau, ji negali būti taikoma tai sintaksė.

Perduoti:
1.Manau pareiškimai patinka (PIN_C2) yra nuoroda į uostą C šiek tiek 2.Ar įrašas "įvestis (PIN_C2)" automatiškai atlikti uosto bitų įvedimo?Kitaip tariant, taip pat jį skaityti, tai nustatyti TRIS bitai, kad PIN kodas turi būti įvedimo?
Ar ji turi pull-up resistor, kad jis didelis, kol vietoje jo?

2.Ar "fputc" komandą eilėje duomenys (buferinės ji)?Jums gali būti jėga šerti jį visi bytes kol jie turėjo laiko pereiti per UART.

Priimančios:
1.Padarykite savo duomenis [] array bent vienas baitas didesnis už dabar visada galite sumažinti jos dydį vėliau.Jūs neturite nustatymo žinutę ilgis metu taip, "fgets" tikriausiai surinkimo viskas iki AP ir nutekamieji masyvo.

2.Nesate tikri dėl savo keista trijų "" simbolių yra teisingi.Kaip jums anding iš simbolių logika kartu, gali būti ir kitų derinių, kad egzaminą.Išbandykite šią vietoj:
if ((duomenys [0] == '') & & (duomenys [1] == '') & & (duomenys [2] == '')) (

Išbandykite šiuos pokyčius ir duok man žinoti, kaip jums toliau.
Brian.

 
Brian,

Perduoti:

Ši dalis yra surūšiuoti.Aš įsikūręs mažai problemų pereiti Aš naudoju ir RF perduoda puikiai, kaip norėjo.Ačiū už pagalbą.

Im naudojant CCS kompiliatorių, taip taip, (PIN_C2) yra uostas C šiek tiek 2.Įvedimo C2 skaito įvesties nesvarbu kaip tris nustatyta.Taigi ji automatiškai.

Taigi, TX is fine.

Gavėjas:

Pasikeitė buferio dydis ir duomenis, patikrinkite, ar ataskaitoje, kaip jums siūloma.Aš taip pat pateikė lemputės kiekviename etape.Tai aš susiduriama.

1) LED kai STX pasitaiko įsižiebia, bet tik vieną kartą ... nepriklausomai nuo to, kiek kartų pranešimas yra išsiųstas.Jis tik būna pirmą kartą per daug, ir tik tada, kai aš įjungti galios lenta.

2) I dont think užrašyta 85, mano kontrolinę.Buvo šiame etape doesnt įsižiebti, bet kuriame etape.Ir Žinoma, buvo pranešimų, gautų doesnt įsižiebti arba.

Im nežinote, kodėl STX yra gauta tik vieną kartą, nors.atleast kad turėtų dirbti visą.

kai aš susijęs OSC su RX ir TX kaiščių RF modulis, matau, kad imtuvas picking it up.kad kiek nors.vietoj įlaipinami puikus stačiakampės bangos signalo tipas buvo išsiųsti, tai rodo, trikampio versijos ... bet po TX.Taigi lustas dirba.I hope this makes sense.

Any thoughts?Patikrintas Circuit 10 kartų ir skaičiavimas.

Ačiū

 
Įtariu jūsų diagnozė CRC jei yra teisingi, tačiau galbūt dėl tos priežasties, manote.

Kas sako fgets () funkciją nutraukti?

Spėju, kad CRC jau gavo fgets () ir saugomas matricoje (jei ji nebuvo krantų), todėl ieško tai po to negali išeiti į darbą.

Ar galite pabandyti pašalinti fgets () ir pakeičiant ją fgetc () kilpos, kad patikrinimai kiekviena savo ruožtu, ir jį saugo požymį, kaip aš padariau mano pavyzdys.Tokiu būdu Jūs galite rasti AP ir "CRC", kur jis yra pranešimas.

Spėjame vėl - priežasties ji dirbo tik vieną kartą, kad matrica krantų ir sugadintas bet kintamasis yra saugomas po jo.Atminkite, kad "C" neatlieka ribų tikrinimas.Jei CCS kompiliatorius sukuria failą, kuriame adresų skirti kintamieji, pažiūrėkite kokia yra po duomenų masyvas, tai tikriausiai turite perrašyti.

Brian.

 
Aš mažas pasiūlymas (dar žinant tai visų pirma, vystymosi aplinka - įrangos, taip pat PIC Kompiliatorius / libraries).Pabandykite nustatyti kompiliatorių optimizavimą NĖRA (lengviau derinti) ir įsitikinkite, kad adresai nustatytus įranga turi "laki" klasifikacija.
Sėkmės.

 
Hey, vis dar dirba tuo metu, imtuvas, ir jums pasakys, kaip jis.

Bandžiau sutrumpinimo kodas izoliuoti problemą, pavyzdžiui, kad kai jis gauna STX, itll įsižiebti LED.Tai nenutrūkstamo perdavimo per kelias sekundes.No luck.

Vis dar bando.Thanks for the help so far.Skelbimas po 3 valandų 39 minučių:Hey Brian,

i havent galėjo sutaisyti mano imtuvas kodą, tačiau pavyko rasti internete kodus C, kuris rodo, kaip siųsti radijo signalus, per IO Pins, o ne TX / RX vieni pic.

http://www.electro-tech-online.com/micro-controllers/92375-manchester-routines-c-pic.htmlRadau jį į kitą forumą.Just scroll down till you come 2 priedus.Kai vaikinas Posted jį kartu su pdf dokumentą, kuriame išaiškinamas procesas.

Aš išbandyti jį pernelyg.Na, tiek.Aš jį ant savo PIC ir pavyko užfiksuoti perduodami ir gavo signalą osciloskopu.I dont know jei imtuvas užėmė teisingą pranešimą, tačiau blogai tai LED testas Tomo patikrinti.

Kaip mano imtuvo, jiems vis dar bando išsiaiškinti, kur im going wrong.Aš taip pat įdomu, jei man reikėtų naudoti HT-12 encoder ir dekoderis.Gal, kad galėtų padėti?

Thanks mate.Tikimės, kad projektas yra dar kartu geriau nei mano.

 
Atsiprašome už ne reaguoti greičiau, aš jau kiti užsakymai padaryti šiandien.

Galbūt norite ieškoti šios diskusijų lentos į temą "Problema su bevielio serijos transliavimo" (atkreipkite dėmesį į rašybos klaidą!), Kurie eina į karštų diskusijų dėl duomenų kodavimo metodus perdavimui.

Galite naudoti HT-12, tačiau jis turėtų pridėti sąskaita.Norėčiau atkakliai programinės įrangos iki išleisti pinigus.Gaunu 100% rezultatus 19.200 bauds ilgais atstumais paprastų modulių, kad ji gali būti padaryta.Taip pat verta paminėti, kad HT-12 ir programinės įrangos generuojami Mančesterio kodai yra tik naudinga, jei jūs naudojate FM modulius, bet tavo yra PM.Jis dar veiks jei jūs naudojate Mančesterio kodavimo, bet bus mažesnis, nes papildomų bitų pralaidumas turi būti siunčiami.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