UART i Atemega32, odczyt bitu parzystości

Tutaj mozesz poruszać tematy ogólne powiązane z elektroniką, np. dyskusje na temat podzespołów, układów, zasad ich działania. Czyli można pisać o wszystkim czego nie da się przyporządkować do innych działów.
ODPOWIEDZ
Awatar użytkownika
siekierzyński
Użytkownik
Posty: 482
Rejestracja: 01 cze 2010, 23:12
Lokalizacja: Nareszcie Polska

UART i Atemega32, odczyt bitu parzystości

Post autor: siekierzyński » 18 mar 2014, 9:11

Witam,

Potrzebuje rozszerzyć swoją transmisję z 8 bitów do 9. Póki co to zbieram informacje.
W internecie przeczytałem gdzieś, że można te rozszerzenie zrobić za pomocą bitu parzystości. I teraz szukam w jaki sposób np. w Atemega32 odczytać ten bit parzystości. Czy on przypadkiem nie trafia do RXB8?

Awatar użytkownika
kayron
Użytkownik
Posty: 2088
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Post autor: kayron » 18 mar 2014, 22:51

Bit parzystości jest generowany sprzętowo, więc zapomnij o jego wykorzystaniu. Natomiast nie rozumiem twojego ciągłego dążenia do komplikowania sobie życia. Owszem można wysłać przez UART 9-bitów, tylko po co ci to ?
- transmisja wiele szybsza przez to nie będzie, więc nie upchniesz sensownie więcej informacji w czasie w ten sposób.
- trzeba pisać algorytm kodowania (kompresji), dekodowania, choć jest dziecinnie prosty, to jak już miałbym coś kompresować, to bym się zainteresował algorytmem LZW, przynajmniej zapewni to realny wzrost przepustowości od 2 do ok 4 razy.

9-bitowa transmisja przez USART, to taka pozostałość dawnych czasów, kiedy nie każdy układ miał kontroler parzystości w sobie, wtedy programowo, ten 9-bit wykorzystywało sie do realizacji tej funkcji.
Nie zwiekszy ci też sensownie szybkości transmisji, bo ta jest stala ustalona w rejestrach USART, jak sobie ustawisz 19200bod, to USART nie wysle ci więcej niż 19200 bitów/sek, niezależnie od tego czy ramka danych będzie 8 czy 9 bit. Choć takie jest wrażenie, bo teoretycznie jest w tym samym czasie mniej bitów START/STOP w transmisji, ale w praktyce różnice nie są warte bawienia się w to.
Ramka 8 bit, plus START i STOP to masz 10 bitów do wysłania więc:
19200/10 = 1920Bajtów/ sek transmisja ok 2KB/Sek
Ramka 9bit plus Start i STOP = 11 bit.
19200 ~= 1745,45 sek, ale ponieważ w 9 bicie kodujesz Bajto to z 8 transmisji masz 9 Bitów to daje 1963Bajty/sek.
Teraz odpowiedz sobie czy warto sie chlastać o te 43 Bajty/sek więcej ?
Przy 115Kbod masz stosunek
15 709 Bajtów/sek dla 9 bitów
do
15 360 Bajtów/sek dla 8 bit.
czyli 349 bajtów różnicy na sek.
Jeżeli to cię ratuje to spoko, ale lepsze wyniki dadzą algorytmy kompresji danych.
PS. Mnie sie udało na PC uciągnac maksymalnie 256Kbod, potem są już problemy, pewnie trzeba by mieć odpowiednio skonstruowany kabel.

ODPOWIEDZ