Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Komunikacja przez uart problem

wacha
-
-
Posty: 95
Rejestracja: 22 lis 2009, o 21:19
Lokalizacja: biele

Re: Komunikacja przez uart problem

Postautor: wacha » 6 sty 2012, o 11:41

Widze że brak odpowiedzi więc może pytanie z innej beczki mam tak skonfigurowane spi w masterze

Kod: Zaznacz cały

Config Spi = Soft , Din = Pinc.3 , Dout = Pinc.0 , Ss = None , Clock = Pinc.1
master jest źrudłem zygnału zegarowego tak?
Więc jak skonfigurować spi programowe w slaverze?

Awatar użytkownika
Łukasz Krysiewicz
-
-
Posty: 143
Rejestracja: 8 cze 2011, o 20:03

Re: Komunikacja przez uart problem

Postautor: Łukasz Krysiewicz » 7 sty 2012, o 23:55

master jest źródłem sygnału zegarowego tak?
tak
Więc jak skonfigurować spi programowe w slavie?
w momencie zmiany zbocza sygnału zegarowego taktującego
transmisję (z wysokiego na niski bądź z niskiego na wysoki)
wysyłasz bądź odbierasz bit danych

poczytaj o fazie oraz polaryzacji transmisji SPI,

wacha
-
-
Posty: 95
Rejestracja: 22 lis 2009, o 21:19
Lokalizacja: biele

Re: Komunikacja przez uart problem

Postautor: wacha » 9 sty 2012, o 20:00

A gdzie takich informacji szukać prosił bym o jakiś link jak można bo nie mam za bardzo żadnej literatury na temat spi.

Awatar użytkownika
Łukasz Krysiewicz
-
-
Posty: 143
Rejestracja: 8 cze 2011, o 20:03

Re: Komunikacja przez uart problem

Postautor: Łukasz Krysiewicz » 11 sty 2012, o 20:22


Polaryzacja sygnału zegarowego jest określona przez wartość logiczną sygnału zegara w
stanie spoczynkowym (poza czasem transmisji):
CPOL=0 – sygnał zegara w stanie spoczynku jest w stanie niskim „Lo”,
CPOL=1 – sygnał zegara w stanie spoczynku jest w stanie wysokim „Hi”.
Faza sygnału zegarowego definiuje zależność pomiędzy zboczami sygnału zegarowego, a
momentami próbkowania danych wejściowych; przesuwania zawartości rejestru (wysłania
danych wyjściowych):
CPHA=0 – pierwsze zbocze sygnału zegarowego próbkuje dane wejściowe, drugie
zbocze przesuwa dane w rejestrze – wyprowadza je z rejestru (dane są próbkowane, a
następnie przesuwane i wysyłane),
CPHA=1 – pierwsze zbocze sygnału zegarowego przesuwa dane w rejestrze –
wyprowadza je z rejestru, drugie zbocze próbkuje dane wejściowe (dane są przesuwane i
wysyłane, a następnie próbkowane i wpisywane do rejestru).

Stąd można wyróżnić cztery warianty pracy interfejsu SPI (strobowania/przesuwania
informacji): (1): CPHA=0 i CPOL=0, (2): CPHA=0 i CPOL=1, (3): CPHA=1 i CPOL=0,
(4): CPHA=1 i CPOL=1. Najczęściej spotyka się pierwszy wariant, lecz pozostałe również są
stosowane, dlatego we współczesnych mk istnieje możliwość programowego ustawienia
polaryzacji i fazy sygnału zegarowego.
spi.jpg
* źródło http://www.ee.pw.edu.pl/eaz/_pdf/wykl_cz1.pdf
P.S.
w msp430 jest troszkę inaczej, :)

wacha
-
-
Posty: 95
Rejestracja: 22 lis 2009, o 21:19
Lokalizacja: biele

Re: Komunikacja przez uart problem

Postautor: wacha » 7 lut 2012, o 17:08

Mam pytanie czy w ciągu 2ms zdąrzę odebrać dane 10bytów sprzętowym uartem.
Prędkość transmisji mam ustawione na 28000 , a kwarc 8MHz.
Pytam bo wykorzystuje polecenie waitms 2 do multipleksowania wyswietlacza led i podczas odbierania danych czasem wyswietlacz zatrzymuje się na ułamek sekundy , a w gorszym wypadku procesor zawiesza się.
Dodam że urzywam byfora wejściowego i polecenia ischwaiting.

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty: 2650
Rejestracja: 24 sty 2005, o 00:39
Lokalizacja: Winny gród

Re: Komunikacja przez uart problem

Postautor: pajaczek » 7 lut 2012, o 19:47

28000 to nie jest typowa wartość (co najwyżej 28800), ale załóżmy że się nie pomyliłeś, i rzeczywiście z taką prędkością odbierasz.

28000 bitów na sekundę daje nam 2800 bajtów (przy założeniu transmisji 8n1 - czyli bit startu, 8 bitów danych i 1 bit stop, bez kontroli parzystości). Czyli... transmisja 1 bajtu danych (użyteczniej paczki 8 bitów) trwa 1/2800 sek, czyli ~0,357 ms. Stąd już wniosek że dla 10 bajtów potrzeba min 10 razy tyle czasu, a więc ~3.57 ms. Oczywiście przy założeniu że nic nie blokuje, czyli albo masz DMA (czego w AVR nie ma), albo nadążasz z odebraniem znaku w czasie <0,35 ms (znak możesz odczytać w czasie gdy napływają następne dane, ale zanim całe zostaną odebrane), najłatwiej / najbezpieczniej zrobić to w przerwaniu.

I nie ma tu znaczenia czy jest to usart sprzętowy czy programowy (no może poza uwagami o DMA czy przerwaniach). Dla kwarcu 8MHz możesz mieć nawet 2.1% współczynnik błędu dla prędkości 28k8

Zadanie domowe dla Ciebie, przeliczyć czas dla zapewne faktycznej prędkości, czyli 28800, już nie będę Cię męczył obliczaniem jaka jest najbardziej zbliżona prędkość uart z zerowym współczynnikiem błędu dla tego kwarca.

Ps. uprzejmie proszę, nie po raz pierwszy, o korzystanie ze słownika ortograficznego.

wacha
-
-
Posty: 95
Rejestracja: 22 lis 2009, o 21:19
Lokalizacja: biele

Re: Komunikacja przez uart problem

Postautor: wacha » 8 lut 2012, o 19:02

Tak myślałem że to się liczy jle tych danych mogę przesłać ale wolałem się upewnić.
No na raporcie z kompilacji dla kwarcu 8MHz i prędkości 28000 to wychodzi błąd 0,78% więc to prawdopodobnie jest najmniesza wartość błędu.
A czy przeszkadza coś że mam nietypową wartość prędkości.
A i jesli korystam z przerwania przy odbieraniu znaków z uarta to czy można urzyć bufora wejściowego i instrukcji sprawdzania czy jest znak w buforze(ischwaiting)?

Awatar użytkownika
Jacek Bogusz
-
-
Posty: 470
Rejestracja: 12 maja 2010, o 17:37
Lokalizacja: Poznań
Kontaktowanie:

Re: Komunikacja przez uart problem

Postautor: Jacek Bogusz » 8 lut 2012, o 19:12

A czy przeszkadza coś że mam nietypową wartość prędkości.
Bardzo przeszkadza, ponieważ jeśli będziesz chciał przesyłać dane do PC, to może okazać się niemożliwe. To jest transmisja asynchroniczna co oznacza, że sygnał zegarowy odbiornika powstaje w odbiorniku przy założeniu, że nadajnik poprawnie przesyła dane korzystając z tej samej lub bardzo zbliżonej częstotliwości sygnału taktującego wysyłanie bitów (lub odbieranie w odbiorniku). Odbiornik nie generuje sygnału zegarowego na podstawie sygnału z nadajnika (chociaż są takie algorytmy), ale korzysta z własnego źródła i dlatego dla UART stosuje się generatory kwarcowe zapewniające stabilność częstotliwości taktującej pracą UART (prawie RS232) oraz to, że prędkość transmisji=prędkość nadawania.

wacha
-
-
Posty: 95
Rejestracja: 22 lis 2009, o 21:19
Lokalizacja: biele

Re: Komunikacja przez uart problem

Postautor: wacha » 9 lut 2012, o 20:39

Acha ale u mnie to procesory komunikują się ze sobą i to z tymi prędkościami to ładnie śmiga. :D

wacha
-
-
Posty: 95
Rejestracja: 22 lis 2009, o 21:19
Lokalizacja: biele

Re: Komunikacja przez uart problem

Postautor: wacha » 23 gru 2012, o 14:30

Witam ponownie powracam do tematu o komunjkacji po spi.
Siedziałem nad tym i ciągle to nie działa problem jest w tym że dane są wysyłane ale nie mogę ich odebrać.
Master wykorzystuje spi programowe jak pisałem wcześniej i jest skonfigurowane tak:

Kod: Zaznacz cały

Config Spi = Soft , Din = Pinc.3 , Dout = Pinc.0 , Ss = None , Clock = Pinc.1
zaś slave to ATMEGA162 ze sprzętowym SPI skonfigurowane tak:

Kod: Zaznacz cały

CONFIG SPI = HARD, INTERRUPT=OFF, DATA ORDER = MSB , MASTER = NO , POLARITY = LOW , PHASE = 0, CLOCKRATE = 4 , NOSS=1
dane chcę odebrać w pętli do loop ale odbieram ciągle wartość 255 czyli wygląda na to że nic nie jest odbierane nie mam pojęcia dlaczego tak się dzieje czy ktoś wie jak zrobić tą komunikację?

Wróć do „AVR/AVR32”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 23 gości