Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 17 sie 2018, o 13:43


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 
Autor Wiadomość
PostNapisane: 10 cze 2018, o 21:38 
Offline
Nowy

Dołączył(a): 27 sie 2015
Posty: 7
Pomógł: 0

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 ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 cze 2018, o 22:38 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 291
Lokalizacja: Szczecin
Pomógł: 45

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 cze 2018, o 22:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 702
Lokalizacja: Trójmiasto
Pomógł: 128

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 cze 2018, o 23:09 
Offline
Nowy

Dołączył(a): 27 sie 2015
Posty: 7
Pomógł: 0

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 cze 2018, o 05:25 
Offline
Użytkownik

Dołączył(a): 29 paź 2017
Posty: 54
Pomógł: 5

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 cze 2018, o 17:06 
Offline
Nowy

Dołączył(a): 27 sie 2015
Posty: 7
Pomógł: 0

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:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 cze 2018, o 17:46 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 291
Lokalizacja: Szczecin
Pomógł: 45

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 cze 2018, o 17:52 
Offline
Nowy

Dołączył(a): 27 sie 2015
Posty: 7
Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 cze 2018, o 18:25 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 291
Lokalizacja: Szczecin
Pomógł: 45

A co mówi datasheet?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 cze 2018, o 18:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 702
Lokalizacja: Trójmiasto
Pomógł: 128

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)



Ostatnio edytowano 12 cze 2018, o 17:41 przez xentis, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 cze 2018, o 18:59 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 291
Lokalizacja: Szczecin
Pomógł: 45

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 cze 2018, o 19:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 702
Lokalizacja: Trójmiasto
Pomógł: 128

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...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 cze 2018, o 22:14 
Offline
Nowy

Dołączył(a): 27 sie 2015
Posty: 7
Pomógł: 0

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 cze 2018, o 11:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 702
Lokalizacja: Trójmiasto
Pomógł: 128

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 postu otrzymał pochwałę


Ostatnio edytowano 12 cze 2018, o 17:45 przez xentis, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 cze 2018, o 15:03 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 291
Lokalizacja: Szczecin
Pomógł: 45

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 postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 cze 2018, o 18:32 
Offline
Nowy

Dołączył(a): 27 sie 2015
Posty: 7
Pomógł: 0

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 !!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO