RTV forum PL | NewsGroups PL

przesył danych po rs'ie

NOWY TEMAT

elektroda.net NewsGroups Forum Index - Elektronika Polska - przesył danych po rs'ie

Goju
Guest

Tue Mar 01, 2005 7:57 pm   



Witam.

Zrobiłem urządzonko na Atmedze8535 do którego parametry pracy przesyłam za
pomocą rs'a. Danych tych jest ok 20 bajtów.
Stąd moje pytanie w jak kontrolować poprawny przesył danych?

Po przyjściu pierwszej danej zapisywana jest w pamięci i inkrementowany jest
rejestr pełniący funkcje licznika.
Gdy przyjdą wszystkie dane to licznik ten jest zerowany, dodatkowo po
przyjściu 1 danej włączam timer,
gdy przepełni się i nie przyjdzie następna dana to cały pakiet danych jest
pomijany. to od strony uC.

Natomiast program komputerowy po każdym wysłanym bajcie czeka na dane
zwrotne wysłane przez uC jeśli
zgadzają się to wysyłany jest następny bajt, jeśli natomiast nie to
transmisja jest przerywana.

Ja to rozwiązałem tak i nie wiem czy jest to poprawne, a zależy mi na
poprawnej transmisji.

Proszę o pomoc i pozdrawiam.
Goju.

Krzysztof Rudnik
Guest

Tue Mar 01, 2005 8:19 pm   



Goju wrote:

Quote:
Witam.

Zrobiłem urządzonko na Atmedze8535 do którego parametry pracy przesyłam za
pomocą rs'a. Danych tych jest ok 20 bajtów.
Stąd moje pytanie w jak kontrolować poprawny przesył danych?

Najlepiej zobaczyc jak to sie robi np. w ZModemie itp.

Quote:

Po przyjściu pierwszej danej zapisywana jest w pamięci i inkrementowany
jest rejestr pełniący funkcje licznika.

Skad wiesz ktora dana jest pierwsza? Musisz rozpatrzec jak
pracuje urzadzenie po kilku godzinach pracy, a nie czy przesle
pierwszy rozkaz.

Proponuje timeout (solidny) - brak danych np. minute - co by nie
przyszlo traktowane jest jako poczatek.

Quote:
Gdy przyjdą wszystkie dane to licznik ten jest zerowany, dodatkowo po
przyjściu 1 danej włączam timer,
gdy przepełni się i nie przyjdzie następna dana to cały pakiet danych jest
pomijany. to od strony uC.

Widze ze masz timeout - ok - pomijajac pakiet wyzeruj licznik bajtow.


Quote:

Natomiast program komputerowy po każdym wysłanym bajcie czeka na dane
zwrotne wysłane przez uC jeśli
zgadzają się to wysyłany jest następny bajt, jeśli natomiast nie to
transmisja jest przerywana.

Wysylanie echa to nie najlepszy pomysl. Nie bardzo kontrolujesz
co jest grane jesli w przesylanych danych bedzie kilka razy ten sam bajt.
Lepiej odsylac np. licznik. No i co to znaczy transmisja jest przerywana?
Przeciez pewnie chcialbys by po bledzie trznsmisja mogla byc
wznowiona bez resetowania.
Jak bardzo ci zalezy na pewnosci dodaj do kazdego pakietu sume kontrolna
(prosciutkie - to tylko 20 bajtow danych), i wysylaj potwierdzenie
(ACK lub NAK) po kazdym pakiecie. No i oczywiscie timeout od
strony PC tez by sie przydal.
No i numerowanie pakietow i potwierdzen - wystarczy '1-bitowy
licznik', o ile nie zakladasz kolejkowania pakietow gdzies
'w sieci' (np. w modemach).

Dobrze jest tez jakos zakodowac dane, tak by poczatek pakietu mozna
bylo znalezc w dowolnym ciagu przesylanych bajtow.

Krzysiek Rudnik

Pablo C
Guest

Wed Mar 02, 2005 7:45 am   



Ja zrobiłem coś a'la uproszczony modbus. Ramka wyglada tak:

:X dd dd dd dd CC

: - start transmisji
X - komenda
dd dd dd dd - 4 bajty danych hex
CC - suma kontrolna poprzednich znaków

Proste i skuteczne. Pewnie, że są lepsze sposoby ale ten mi działa
znakomicie.

Pozdrawiam
PC

Sebastian Bialy
Guest

Wed Mar 02, 2005 8:30 am   



Pablo C wrote:
Quote:
:X dd dd dd dd CC

Ja również stosuje takie sztuczki. Grunt w transmisji strumieniowej
(jaką jest RS232) jest znak odddzialający i mówiący "tu zaczyna się
ramka danych". Problem z timeoutami jest dośc trudny w rozwiązaniu na
zwykłym PC i nie polecam - 100x lepiej jest przy tak małej ilości danych
(20 bajtów to jest nic) na poświęcenie troche czasu i wysłanie ramki w
hex'ach albo innym pomyśle kodowania bajt->2bajty. No i CRC to podstawa
dyskusji o kontroli błędów. Projektuje własnie protokół i rozwiązuje na
bierząco takie sprawy. Transmisja "2-bajtowa" okazała się jedynym
sensownym sposobem do realizacji w sposób szybki i wygodny bez timeoutów.

--
Sebastian Bialy - heby_at_poczta.onet.pl

elektroda.net NewsGroups Forum Index - Elektronika Polska - przesył danych po rs'ie

NOWY TEMAT

RTV map News map