ATNEL tech-forum
https://forum.atnel.pl/

UART + dodatkowy bit - problem
https://forum.atnel.pl/topic20859.html
Strona 1 z 1

Autor:  marcin-9999 [ 10 cze 2018, o 21:38 ]
Tytuł:  UART + dodatkowy bit - problem

Witam, ramka którą muszę wysłać składa się standardowo( jeden bit startu, następnie 8 bitów danych, bit-x, i jeden bit stopu). Jak widać bit który mnie interesuje (bit x)jest w miejscu bitu parzystości jednak w ramce którą muszę nadać z Atmega32 do urządzenia odbiorczego musi on zawsze posiadać wartość zero. Więc nie jest to 9 bitów danych bo ten bit jest niezmienny. Czy podpowie ktoś jak zmodyfikować bibliotekę np. MKUART z niebieskiej książki z której korzystam aby móc wysłać taką ramkę po UARCie ?

Autor:  krish [ 10 cze 2018, o 22:38 ]
Tytuł:  Re: UART + dodatkowy bit - problem

W DS od Atmegi 328P rozdział:
20.6.2 Sending Frames with 9 Data Bit
plus przykładowy kod w asm i w C.

Autor:  xentis [ 10 cze 2018, o 22:38 ]
Tytuł:  Re: UART + dodatkowy bit - problem

A cóż za problem ustawić UARTa na format 1 bit startu, 9 bitów danych i 1 bit stopu bez parzystości? Wówczas ten 9 bit doklejasz do standardowo wysyłanych ośmiu bitów jako zero i masz 8 bitów z dodatkowym zerem.
Dodatkowy 9 bit masz w rejestrze UCSRB. Ten bit musi zawsze być zapisany/odczytany jako pierwszy przed operacją na rejestrze UDR.
W nocie PDF od atmegi32 masz nawet przykład kodu w C i ASM właśnie dla nadawania 9 bitów.
http://ww1.microchip.com/downloads/en/DeviceDoc/doc2503.pdf strona 148.

Autor:  marcin-9999 [ 10 cze 2018, o 23:09 ]
Tytuł:  Re: UART + dodatkowy bit - problem

Wiem jak ustawić ramkę na 9 bitów ale nie do końca rozumiem jak dokleić ten 1 bit jako zero do całości. Kod w C z pdf widziałem.

Autor:  JarekB [ 11 cze 2018, o 05:25 ]
Tytuł:  Re: UART + dodatkowy bit - problem

Nie doklejasz dziewiątego bitu do ramki
Tym zajmuje się sprzęt.
Możesz ustawić wartość tego bitu jako 1 lub 0 komendami:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Później wkładasz do rejestru dane
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A sprzęt grzecznie dokleja bit TXB8 do ramki i wypycha do portu.

Autor:  marcin-9999 [ 11 cze 2018, o 17:06 ]
Tytuł:  Re: UART + dodatkowy bit - problem

tak wygląda funkcja moja:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i bit w funkcji Init ustawiony:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

a znak wysyłam nową funkcją w pętli while w programie głónym:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


znak jest wysyłany jednak ostatni (9 bit ma stan wysoki zamiast 0) :!: :?: :oops:

Autor:  krish [ 11 cze 2018, o 17:46 ]
Tytuł:  Re: UART + dodatkowy bit - problem

Poszukaj gdzie są bity: UCSZ0, UCSZ1, UCSZ2 w ATmedze32.

Autor:  marcin-9999 [ 11 cze 2018, o 17:52 ]
Tytuł:  Re: UART + dodatkowy bit - problem

one są do ustawiania ilości bitów danych. UCSRB zamiast UCSRC?? :roll:

Autor:  krish [ 11 cze 2018, o 18:25 ]
Tytuł:  Re: UART + dodatkowy bit - problem

A co mówi datasheet?

Autor:  xentis [ 11 cze 2018, o 18:50 ]
Tytuł:  Re: UART + dodatkowy bit - problem

marcin-9999 napisał(a):
i bit w funkcji Init ustawiony:
Składnia: [ Pobierz ] [ Ukryj ]
język c

UCSRC = (1<<URSEL)|(7<<UCSZ0);

GeSHi

Bit UCSZ2 znajduje się w rejestrze UCSRB więc twoje UCSRC = (1<<URSEL)|(7<<UCSZ0); nie wybiera 9 - bitowej transmisji tylko 8 - bitową i dwa bity stopu (bo ustawiasz tylko UCSZ0 i UCSZ1 oraz bit USBS)

Autor:  krish [ 11 cze 2018, o 18:59 ]
Tytuł:  Re: UART + dodatkowy bit - problem

@Xentis- nie dajesz koledze satysfakcji samodzielnego dojścia do rozwiązania problemu, tylko tak "kawa na ławę"

Autor:  xentis [ 11 cze 2018, o 19:19 ]
Tytuł:  Re: UART + dodatkowy bit - problem

Ależ przecież wczoraj celowo nie podałem rozwiązania na tacy tylko dokładne miejsce gdzie ma szukać z przykładowym kodem jak na dłoni... Kolega sobie nie poradził więc myślę że konkretne wskazanie błędów "zdrowsze" będzie niż wyrwane wszystkie włosy z głowy.
Jeśli chce się czegoś nauczyć to przeanalizuje i zapamięta, jeśli potrzebuje tylko żeby działało to i tak prowadzenie za rączkę na nic się zda...

Autor:  marcin-9999 [ 11 cze 2018, o 22:14 ]
Tytuł:  Re: UART + dodatkowy bit - problem

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


hmm czy tak? w tej chwili nie mam możliwości przetestowania.
ps. oczywiście, że chce się nauczyć, ale mam małe doświadczenie i noty stanowią póki co problem, dlatego bardzo dziękuje za każdą pomoc.

Autor:  xentis [ 12 cze 2018, o 11:18 ]
Tytuł:  Re: UART + dodatkowy bit - problem

Przepraszam ale wprowadziłem Ciebie w błąd tym sposobem zapisu do rejestru UCSRC.
Tak jak pisze kolega krish, URSEL musi jednak być w jednej linii razem z danymi do zapisu w rejestrze...

Autor:  krish [ 12 cze 2018, o 15:03 ]
Tytuł:  Re: UART + dodatkowy bit - problem

Niestety nie.
1. wpisujesz '1' pod bit URSEL ( co powoduje wybranie i zapis do rejestru UCSRC).
2. w następnej operacji chcesz ustawić UCSZ0 i UCSZ1, ale wpisujesz je już do rejestru UBBRH ( a dlaczego? -opisuje DS).
3. tu jest OK.

ps. bez czytania i zrozumienia DS daleko nie zajedziesz.
podpowiedź: połącz punkt 1 i 2 w jedną całość.

Autor:  marcin-9999 [ 12 cze 2018, o 18:32 ]
Tytuł:  Re: UART + dodatkowy bit - problem

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

no to tak by to wyglądało, taka opcja działa. :D dzięki za pomoc !!

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/