Cat despre manipularea erorilor eu zic ca nu te complici cu coduri corectoare de erori, pt o radiocomanda nu isi au rostul din moment ce transmiti date mereu, ce este gresiti ignori, oricum va veni iar o informatie noua.
Corectia de erori (coduri hoffman, convolutionale (de la GSM), Reed-Solomon, sau daca esti debil Coduri Turbo (alea de la Nasa care merg pe Marte :) )) se foloseste cand nu se transmit date continuu sau largimea de banda nu eprea mare sa-ti permiti un trafic mare si deci o redundantza mare.
In concluzie concentrezate pe CRC ca e super bun!!!
Uite eu mereu folosesc polinomul generator: X^15+X^13+1 care si-a demonstrat fiabilitatea. E foarte folosit in protocoalele indistriale, iti dai seama ca e de incredere.
Uite sa te ajut iti postez si rutina scrisa in assembler pt uC-uri ATMEL AVR. Vei chema aceasta rutina oride cate ori trimiti un caracter (la emisie) si ori de cate ori primesti un caracter (la receptie) Registii CRCLO si CRCHI vor avea valoare $ff la inceputul fiecarei secvente de date (asta e valoarea lor initiala) , iar pe masura ce transmiti aceasta valoare se va modifica. In registrul CCP vei introduce valoarea transmisa sau receptionata.
Pt verificarea corectitudinii vei verifica daca CRC-ul transmis este egal cu cel calculat la receptie:
crccalc:
;rutina de calcul a CRC-ului conform algoritmului impus
eor crclo,ccp
ldi aux,8
mov crcc,aux
crcloop:
lsr crchi
ror crclo
brcc ncrcloop
ldi aux, 0b10100000
eor crchi,aux
ldi aux, 0b00000001
eor crclo,aux
ncrcloop:
dec crcc
clr aux
cp crcc,aux
brne crcloop
ret ;se iese de aici
Succes!!!
Aceasta postare a fost editata de MrSpace: 03 January 2005 - 12:29 AM