Hva kan gå galt?

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

 
Smartfon, pendrive lub laptop odmówił posłuszeństwa? Straciłeś ważne dane, kontakty, filmy, zdjęcia? Jest sposób, by łatwo je odzyskać. Wystarczy jeden sprytny gadżet lub szybka i profesjonalna pomoc.

Read more...
 
Hvis du kobler din oscilloskop til dataene produksjon av modulen Jeg tror du vil se hva som skjer.Modulen er AM og nesten helt sikkert har en data slicer inni den.Dette vil spore gjennomsnittsdata nivå (merk at dette ikke er det samme som gjennomsnittet radiosignal nivå).Det vil tilpasse seg fravær av signal (en logikk 0 gå inn i senderen) og justere slicer til nivået på støynivå.Du vil sannsynligvis finne at tilfeldige data forlater modulen og fordi du er bare ute etter én samsvarende byte, hender det av og til ved en tilfeldighet.

Det er mange måter å løse problemet.Dessverre virker modulen ikke er et signal nivå utdata til skjermen, ellers kan du bare ignorere alt som kom ut da ingenting ble mottatt slik at du er tvunget inn i en programvareløsning.

Den enkleste måten å prøve å overføre flere nullpunkter (0x00, ikke '0 ') før dataene slik at mottakeren til å tilpasse seg, og bruke mer enn én byte til å bære budskapet.Husk at hver ekstra byte gir deg 255 ganger mindre sannsynlighet for at mønsteret blir mistolket.I mine prosjekter generelt har jeg å sende hele tegnstrenger så jeg forbeholder ASCII 'STX' karakter som en "clear motta buffer og forberede seg til å motta data 'signal.Jeg sender flere STX tegn, mitt budskap og deretter en CRC-verdi for å bekrefte at alt kom gjennom.

Du finner ut på den harde måten at RF datakommunikasjon er ikke så lett som det ser ut.Utholdende selv, når du forstår årsaken til feilen og design defensivt du vil få gode resultater.

Brian.

 
Hei Brian,

Takk for svar.Det var virkelig informativt.Dette er knyttneven gang jeg spiller med RF, slik at din rett, det litt frustrerende.Men jeg er opptatt av å få dette arbeidet og vil definitivt se nærmere på hva du sa.Jeg hadde også et par spørsmål, og ville virkelig satt pris på om du kunne guide meg.

Før jeg kommer inn på spørsmålene, Jeg ønsker å forklare søknaden kort.Jeg har 5 sender / mottaker-par.1 Master og 4 slaver.Beklager hvis jeg fikk / får terminologien galt.Allikevel, vil hver av de 4 slaver må identifiseres med en unik adresse.For nå, kan bare kalle dem slave 1, slave 2 og så videre.

Først har Master Tx å kontakte Slave1.Slave 1 mottar et tilfeldig ikke-viktig budskap og sender en ACK tilbake.Når Master Rx mottar denne ACK, har det å kontakte Slave 2 og så videre.Hvis den ikke får ACK etter en viss tid fra noen av slavene, den automatisk kontakter neste slave.Så din rett, må jeg sørge for at signalene er kodet på riktig måte, med kontrollsummer og alle, slik at jeg vet hvilke slave sender ACK tilbake.

Du nevnte at jeg burde nok legge til et par av 0 er å advare mottakeren at en melding er nært forestående.Dette må i HEX som du nevnte.Ok, la så sier jeg sender tre 0's før hver melding.Nå har Master kontakt slave 1.Siden alle de andre slavene er i samme rom, vil hver slave utkikk etter en viss "kode" for å sikre at meldingen er ment for dem.Dette blir deres slave ID.Så for slave 1, kan gjøre det 001.2 vil bli 010 og så videre.

Så nå blir meldingen 000-001 (for slave1).Nå Jeg trenger å legge til en checksum for å fortelle mottakeren at hele meldingen er mottatt.Det er der im bli forvirret.Hva skal dette bli?Ytterligere tre 0's?Den inverse av mssage med Z for å fortelle mottakeren at alle har kommet.Hows 000-001100-Z for master til slave 1, 000-010010-Z for master til slave 2 og 000-011110-Z for master til slave3?

Nå kan si vi får denne sorteres.Slaven har til å sende egne unike ACK til master.Dette vil trolig bli 000-ACK-z.Likeledes ville Bs ACK være 000-BCK-z.

Skal jeg på rett spor her?eller har jeg fått det completly galt?

Takk kompis.

På en side note brian, vært youve svare på mine andre innlegg om tilkopling RF-moduler med IO-pinner.TX / RX-pins av PIC blir brukt av RS232 å snakke til PC, så jeg trenger å lære å kontrollere RF-moduler ved hjelp av IO-pinner.Jeg tror dette kalles programvare UART.Er det riktig?Jeg har ingen anelse om hvordan du kontrollerer RF hjelp av UART av pic, og enda mindre kontroll med IO-pinner.Men jeg er villig til å spille fange opp og lære, så hvis du kunne hjelpe meg ut, ville det være utmerket.

Takk

 
Hei Hobby_85.

Ditt system er svært lik en av mine.Jeg har en master styringsenheten innendørs og 5 slaver styres fra det.Hovedsoverommet har radiolinken, en kobling til en PC og LCD-skjerm, tastatur og et par varsellys / Buzzers.Slavene gjøre forskjellige ting fra overvåking av RFID-brikker til å kontrollere pumping utstyr.

For det første er master / slave en god måte å navngi dem, innebærer det at man er sjef og de andre bør følge den!

Jeg vil beskrive meldinger i systemet mitt selv om du er selvfølgelig fritt til å lage dine egne, er det ingen regler, bare eksempler.Jeg må påpeke at jeg er adresserbare FM-moduler i stedet for AM de du bruker men prinsippet er det samme.

Den ekstra tegnene du sender før den virkelige meldingen kalles "formålsparagraf", og deres formål er to fold: De gir mottakeren tid til å tilpasse seg signalstyrken og gi de UART noe tygge på for å få det synkronisert.Nesten alle radio moduler har AGC (Automatic Gain Control) som er å hjelpe mottakeren takle svake og sterke signaler like godt.Hvis de kjørte på full følsomhet, slik at de kunne høre svake signaler de ville trolig overbelastning med en sterk en.Tilsvarende, hvis gevinsten er satt lavt, slik at mottakeren ikke overbelastning, vil det være "døv" til svake signaler.The AGC reduserer gevinsten som signalet blir sterkere, men det tar tid å reagere så hvis dataene starter straks de første bitene kan være skadet.Throwing noen "ignore me" byte ut først vil gjøre at den er klar for den virkelige ting.

Fra denne kan du se at innledningen skal sendes før hver utbrudd av smitte, uansett hvilken modulen sender den.

Du må skille mellom hva som er data og hva som ikke.For eksempel, hvis du bruker 0x00 som formålsparagraf, kan du ikke også bruke den i din data.Det ville være vanskelig å finne ut hva som er en ekte melding og hva bør ignoreres.Hva jeg gjør er å sende alle data som tekst slik at bare ASCII tegn 0x20 gjennom å 0x7F brukes til å bære informasjon.Dette gjør at kontrollen delen av ASCII-tabellen som skal brukes til kontroll formål.Jeg bruker STX (0x02) til sitt opprinnelige formål som er "Start of Transmission" for eksempel.Dersom du ønsket å sende 0x1234 du ville egentlig sende 0x31, 0x32, 0x33, 0x34, ASCII-koder for enkelte siffer.

Så en typisk melding i systemet mitt kan være:
0x00, 0x00, 0x00, STX, 'H', 'E', 'L', 'L', '0 ', CR, [CRC]

der CR er et linjeskift (0x0d) og [CRC] er en byte beregnes ut fra alt mellom Aker Yards og CR.

Det er litt mer komplisert i systemet mitt, fordi jeg må laste ruting adresser i moduler, samt data og bruker jeg noe lignende til Manchester koding for å bedre dataintegritet, men ser du den generelle ideen.

Hvis du følger mitt ASCII eksempel, ville du svare på en melding med:
0x00, 0x00, 0x00, ACK, CR, [CRC] eller hvis det mislykkes, NAK stedet for ACK.

Du er rett om programvaren UART, er det i utgangspunktet wiggling sjetongene pinnene til rett tid slik at det ser ut som en ekte UART gjør det.

Brian.

 
Jepp, gjør det hele mening nå.Siste par spørsmål jeg tenkte på.I mitt system, som jeg nevnte, data innenfor msg seg selv er ikke viktig.Faktisk vil alle msg inneholde er som slaven sin kommer fra.

Så betyr dette for senderen siden jeg faktisk hardt kode msg i. Like si koden ovenfor som sender på bokstaven "T", ville jeg erstatte den med ....

delay_ms (20); / / forsinkelse 20ms
fputc ('0 x00, 0x00, 0x00, STX, 'A', 'A', 'A', CR, C3 ', COM_A); / / sende data fra mester til SLAVE 1
delay_ms (20);

jeg beregnet at Barnekonvensjonen skal C3 ved å legge A A A = 0xC3.

Jeg antar jeg forsømme komma når du skriver koden?

Da skriver mottakeren koden, ville det noe som dette.Ill bare skrive i psedo kode;

while (1) / / Do en uendelig løkke
(
int formålsparagraf;
int Data1;
int Data2;
int data3;
int cr;
int CRC;

preamble = fgetc (COM_A);
if (preamble == 0x00) (
preamble = 0;
preamble = fgetc (COM_A); / / do igjen for å få neste formålsparagraf.
/ / sjekk for å se om neste 2 preambles er 0 i hex.Kontroller at innledningen er fjernet før det får neste tegn;
/ / hente ut data én bokstav om gangen, og lagre til Data1, Data2, data3.
/ / neste verdi skal cr, hvis ikke, dens en feil
/ / get CRC-verdi, og lagre til int CRC
/ / skrive om setningen, legger Data1 Data2 data3 i hex og se om verdien er CRC.hvis ikke, feil, hvis ja, en LED-lys eller noe
)

Hvordan kan jeg så langt Brian?Dette ser latterlig morsomt så ille fortelle deg hvordan det går når teste den ut i dag.Er det noe jeg bør endre i mellomtiden?

Im prøver å finne ut RF (vel det grunnleggende atlease) av helgen.Ill nødt til å slå deg opp på hvordan du kan gjøre IO pins til å fungere som RX / TX på et tidspunkt også.

Og takk for lang og svært nyttige svar.De er geniale.Også for TX, ingen komma sant? ... Im bare bekymret for at når TX sender masse sammen, hvordan er RX skal skille dem og lagre dem?hvis ikke jeg sette en forsinkelse i mellom hver ... men at nederlagene formålet av en formålsparagraf og alt det der.

Takk

 
Nesten rett!

Du må huske at innledningen er der for å "tømme banen" for de resterende data og selv kan ikke komme gjennom på grunn av AGC problemet.av den grunn, til det beste konsentrere seg om å finne den STX stedet for 0x00.

Du er rett om komma, er bare det at de som en del av programmet syntaksen men jeg er litt bekymret for at din fputc () funksjon er å håndtere så mange parametere.Sjekk med kompilatoren dokumentene men vanligvis er det bare aksepterer ett tegn av gangen.

Dette er en del av min motta kode for å vise hvordan jeg gjør det:
Code:void GotByte ()

(InByte = WaitRx ();if (InByte == STX) / / STX starter en overføring

(

InPtr = 0;

* InBuffer = 0;

LocalCRC = 0;

return;

)if ((InByte == CR) | | (InByte == ETX)) / / CR eller ETX avslutte en overføring

(

ParseInBuffer (); / / behandle buffer innholdet

return;

)/ / Om fortsatt plass i InBuffer og karakter er alfanumerisk, føyer det til InBuffer

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

(

if (InPtr <0x0E) LocalCRC = InByte;

InBuffer [InPtr ] = InByte;

InBuffer [InPtr] = 0;

)

)

 
ok Gotcha,

så dette er hva im skal endres:

1) dont søke etter innledningen.(den nuller).Søk etter STX
2) Bruk fgets () til å lagre tegnene i en streng
3) søk etter cr
3) prosess verdier i strengen for å sikre at ascii tillegg svarer til localcrc.
4) Feil CRC dont match, men hvis den gjør det, dvs meldingen.

Got you make.Takk for all hjelp.Når jeg får dette går, Ill fortelle deg.

Im benytter RX / TX pins i øyeblikket bare å teste det ut.

Im kun sender data til PC, ikke mottar noen.Så jeg kunne nok koble RF mottakeren til RX pin, TX til RS232 og deretter Ill trenger bare å spille med 1 IO-pinner og gjøre det fungere som et sekund tx ..

ps.høyre om fputc.jeg gjorde ikke tror at gjennom.ill. sjekk kompilatoren manuelle og sortere det ut.

Takk bunke.

 
Absolutely spot on!

La meg vite hvordan du kommer på.
Jeg jobber for tiden med et prosjekt med 2 UARTs og bit banging i tillegg slik at du kan forestille deg hva som vil!Det er ved hjelp av flere 18F46J11 chips, kjører på 40.6MHz og har 1Mb RAM henge ut det også.

Hvor i verden er du?Det ville være fint om medlemmene måtte plassere minst deres land i profilene sine, slik at den ga et inntrykk av hvilken tidssone de er i. Jeg har hatt noen klager jeg er treg å svare (selv om det er helt frivillig) når det er 3am her.

Brian.

 
Hva du gjør som gjør prosjektet mitt ser ut som barns lek.Men i hele ordningen ting, im faktisk prøver å lage et rom-nivå location tracking-enhet, er nøkkelordet prøver.Dont vite hvor langt syke får, men alltid verdt et skudd tror jeg.

Im benytter ultralyd og RF å få TDOA av signaler og får jeg vite høyden på rommet, hastigheten på lyd og lys, jeg burde kunne finne en plassering basert på triangulering.Vel, at noe forklarer det jeg anta.

Im i Sydney for øyeblikket i mitt siste økt i elektroteknikk.Men jeg var oppvokst i Storbritannia.Min store er i kraft, så im ganske mye å spille fange opp med telekommunikasjon.Men dens def interessant.

Hva med deg?i industri eller uni?
(* krysser fingrene og håper du ikke sier 'skole' *) haha

 
Gymnas!!

Jeg ønsker!

Venstre er det 40 år siden.Jeg nå gjør elektronikk hovedsakelig som en hobby, men jeg tilbrakte mange år i telekom-og prøveutstyr industrien i USA og Europa.

Brian.

 
betwixt skrev:

Gymnas!!Jeg ønsker!Venstre er det 40 år siden.
Jeg nå gjør elektronikk hovedsakelig som en hobby, men jeg tilbrakte mange år i telekom-og prøveutstyr industrien i USA og Europa.Brian.
 
Av en eller annen grunn har den siste svaret forsvant så jeg skal kommentere på det jeg husker av det.

Det ser OK ut, men du kan prøve noen endringer:

Den STX og CR burde være "røye i stedet for int ', men det ville være bedre å bruke" # define' direktivet for å stille dem.Jeg bruker en liten fil, som vises nedenfor, kalt 'ascii.h' og # inkludere den på toppen av mine programmer.
Code:/ / ASCII Control Character definisjoner# 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 CAN 0x18

# define EM 0x19

# define SUB 0x1a

# define ESC 0x1B

# define FS 0x1C

# define GS 0x1D

# define RS 0x1E

# define US 0x1F

# define DEL 0x7F

 
ok got you.ill få det sortert ut av tomo.takk for all hjelp brian.

ill. prøve og bli en programvare UART går også, så jeg vite før jeg legger.

lykke til med prosjektet også.

 
Brian,

Jeg testet ut koden min ... og nei lykken.Im begynner å føle skyld at Im be om så mye hjelp i å sette noe enkelt opp.

Senderen synes fungerer.Den osc viser data blir sendt ut.Imidlertid er dataene fortsatt blir sendt ut om bryteren isnt trykket.Jeg trenger å stoppe denne fordi min prosjektet dreier seg om det å være presis.I cant la det skyte av data med mindre det betydde også.

TX-koden er som følger.Im gjør det enkelt for nå, å sende én bit av gangen.

Code:# include <16F688.h>

# include <ascii.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)int CRC = 85; / CRC angitt i koden for testformålvoid main ()

(setup_adc_ports (NO_ANALOGS); / / sette alle innganger til digitalefor (;;){if (input (PIN_C2) == 0) / / hvis knappen trykkes

(output_high (PIN_A1); / / output høy Led

delay_ms (20);fputc (NUL, COM_A); / / sender ut strøm 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); / / sende ut sjekksummen av 85

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

delay_ms (1000); / / forsinkelse noen ms

output_low (PIN_A1); / / output lav ledede

delay_ms (1000);

)else (output_high (PIN_A1);

delay_ms (50);

output_low (PIN_A1);

delay_ms (50);

)

)

)
 
Det ser strukturelt OK, men jeg har noen kommentarer og spørsmål.Jeg er ikke sikker på hvilken 'C' kompilatoren du bruker så kan du dobbeltsjekke hva jeg finner, kan det ikke være aktuelt for det syntaks.

Sende:
1.Jeg antar utsagn som (PIN_C2) henviser til Port C, bit 2.Does the statement "input (PIN_C2)" automatisk gjør porten bit en inngang?med andre ord, samt å lese den, vil det sette Tris bit for at pin å være et innspill?
Har den en pull-up motstander å gjøre det høyt til du grunnen det?

2.Har "fputc" kommandere kø dataene (buffer det)?Du kan tvinge mate den med alle bytes før de har hatt tid til å passere gjennom UART.

Motta:
1.Lag dine data [] array minst én byte større nå, kan du redusere størrelsen senere.Du har ingen måte å sette meldingen lengde i øyeblikket så "fgets" vil trolig ta alt opp til CR og overflyt matrisen.

2.Ikke sikker på om sjekk for tre 'A' tegn er korrekt.Når du Anding logikken i figurene sammen, kan det være andre kombinasjoner som passerer testen.Prøv dette i stedet:
if ((data [0] == 'A') & & (data [1] == 'A') & & (data [2] == 'A')) (

Prøv disse endringene, og la meg vite hvordan du kommer på.
Brian.

 
Brian,

Sende:

Denne delen er sortert.Jeg ligger litt problem i bryteren var jeg bruker, og RF sender helt som ønsket.Takk for hjelpen.

Im bruke CCS kompilator, så ja, (PIN_C2) er Port C, bit 2.Input C2 leser input uavhengig av hvordan Tris er satt.Så det gjør det automatisk.

Så TX er fin.

Mottaker:

Endret bufferstørrelsen og dataene sjekk setningen som du foreslo.Jeg har også satt lysdioder på hvert trinn.Dette er hva jeg fant.

1) Ledet når STX er oppstått tennes, men bare én gang ... uansett hvor mange ganger meldingen sendes.Det skjer bare første gang også, og bare når jeg slår på strømmen til styret.

2) JEG dont overveie det står 85, min kontrollsum.De ledet på dette stadiet doesnt lyse opp, på ethvert stadium.Og selvsagt, det førte til melding mottatt doesnt lyse opp heller.

Im ikke sikker hvorfor STX er bare fått én gang skjønt.atleast som skal jobbe hele.

når jeg koblet osc til RX og TX nåler av RF-modul, kan jeg se at mottakeren er å plukke den opp.i et omfang skjønt.i stedet for å plukke opp den perfekte firkantbølge typen signal å sende, viser det trekantede versjoner ... men etter tx.Så chip fungerer.Jeg håper dette er fornuftig.

Noen tanker?Checked krets 10 ganger og telling.

Takk

 
Jeg mistenker at din diagnose av CRC sviktende er riktig, men kanskje ikke av den grunn du tror.

Hva forteller fgets ()-funksjonen til å si?

Min gjetning er at CRC har allerede mottatt av fgets () og lagret i matrisen (hvis det ikke har rent over) så ser for det etterpå kommer ikke til å fungere.

Kan du prøve å fjerne fgets () og erstatte den med en fgetc () loop som kontrollerer hvert tegn i tur og lagrer det, slik jeg gjorde i mitt eksempel.På den måten kan du finne CR og CRC hvor det i meldingen.

Gjetter igjen - grunnen til at det fungerte bare en gang er at matrisen fløt og ødelagt alt variabel lagres etter den.Husk at 'C' ikke utfører grensekontroll.Hvis CCS kompilatoren oppretter en fil som viser adressene tildelt variabler, se på alt som er etter at dataene array, det sannsynligvis har overskrevet.

Brian.

 
Jeg har et lite forslag (ikke vite dette utviklingsmiljø - maskinvare samt PIC kompilator / biblioteker).Prøv å sette kompilatoren optimering til INGEN (for enklere feilsøking) og sørg for at adressene til maskinvare enheter har "volatile" kvalifiseringskamp.
Lykke til.

 
hei, fremdeles arbeider på mottakeren i øyeblikket, og vil fortelle deg hvordan det går.

Jeg prøvde forkortelse koden for å isolere problemet, slik at når den mottar STX, itll lyse opp ledet.Dette er et kontinuerlig overføring med noen sekunders mellomrom.Uten hell.

Fremdeles prøver.Takk for hjelpen så langt.Lagt etter 39 3 timer minutter:hei brian,

jeg har ikke vært i stand til å feste mottakeren kode, men klarte å finne C koder på nettet som viser hvordan du skal sende RF-signaler over IO-pinner i stedet for TX / RX seg av PIC.

http://www.electro-tech-online.com/micro-controllers/92375-manchester-routines-c-pic.htmlJeg fant det på et annet forum.Bare bla nedover til du kommer til 2 vedlegg.Noen fyr postet det sammen med et PDF-dokument som forklarer prosessen.

Jeg testet den også.Vel, til en grad.Jeg satte den opp på PIC min og klarte å fange overført og mottatt signal på oscilloskopet.JEG dont vite hvis mottakeren tatt riktig budskap, men syk gjøre LED testen tomo å bekrefte.

Som for receiveren min, im fremdeles prøver å finne ut hvor im går galt.Jeg ble også lurer på om jeg bør bruke en HT-12 koder og dekoder.Ville det hjelpe?

Takk kompis.Håper prosjektet kommer sammen bedre enn mine.

 
Sorry for ikke å reagere før, jeg har fått andre jobber å gjøre i dag.

Du ønsker kanskje å søke dette forumet for emnet "Problem med trådløst føljetong transmisson" (merk stavefeil!) Som går inn i oppvarmet diskusjoner om data koding metoder for overføring.

Du kan bruke HT-12, men det ville legge regning.Jeg ville holde ut med en programvareløsning før lommepenger.Jeg får 100% resultater på 19200 bauds over lange avstander med enkle moduler, slik at det kan gjøres.Det er også verdt å merke seg at HT-12 og programvare generert Manchester kodene er bare gunstig hvis du bruker FM-moduler men din er AM.Det vil fortsatt fungere hvis du bruker Manchester koding, men det vil bli mindre gjennomstrømming fordi ekstra biter må sendes.

PM meg med den nyeste koden du arbeider med slik at jeg kan se på den igjen.

Brian.

 

Welcome to EDABoard.com

Sponsor

Back
Top