05. april 2008 - 16:28Der er
2 kommentarer og 1 løsning
Send / modtag data, 8 bit
Hej allesammen,
Jeg leger lidt med en PIC18 hvor jeg har et analogt input som conventeres til digital, samt 2 knapper.
Disse skal gerne pakkes ned i en pakke og sendes serielt til en anden PIC18. Til dette bruger jeg arrays. Hvordan vil jeg kunne pakke dem ud på den anden side igen? Med en en while loop som lytter efter startbittet og stopbittet?
Koden på sendersiden ser således ud: Er det mon helt ved siden af?
while(1) { // Recive data from ADC // ADCdata = read_adc();
Du skal bruge en struct - det er meget mere enkelt end et array. derefter skal du blot lave en funktion der lytter efter start flaget hvorefter at du læser hvad der svarer til størrelsen af din struct (sizeof(struct my_package_t)) Det er klart den enkleste måde at sende data over en seriel forbindelse.
Det kan sagtens lade sig gøre, jeg havde bare ikke så meget tid til at give et ordentligt svar - sorry. Her følger en lidt bedre uddybelse..
Først og fremmest vil jeg lade en seperat funktion lade scanne efter start flaget og her vil jeg stærkt anbefale at du bruger mere end en enkelt byte til at indikere starten på en pakke (ellers skal du til at bruge bit-stuffing hvilket bare øger kompleksiteten) Dernæst kan du lave en struct med en union region så den kan håndtere flere pakketyper:
Så er metoden for transmission. 1. Fyld alle relevante data i strukturen: (husk at sætte type for at fortælle om det er en digital pakke el. analog) 2. Sæt checksums feltet til 0; 3. Udregn crc (eller hvad du nu finder på af checksums funktion) for hele strukturen. 4. sæt checksummen ind i checksums feltet. 5. Send startflag 6. Send pakke.
På modtagelsen: 1. lyt på seriel porten og vent indtil at et start flag bliver modtaget. 2. indlæs sizeof(struct my_package_t) bytes ind i et hukommelsesområde. 3. Typecast dette område til struct my_package_t *; struct my_package_t *package = (struct my_package_t *)pointer; 4. kopier checksums feltet ind i en lokal variabel. 5. sæt checksums feltet til 0 6. udfør checksums beregning på hele pakken 7. sammenlign med den beregnede checksum med værdien fra step 4.
Det skulle gerne være opskriften... held og lykke.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.