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



Teraz jest 29 sty 2026, o 20:25


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 24 mar 2013, o 00:43 
Offline
Nowy

Dołączył(a): 16 lut 2013
Posty: 11
Pomógł: 0

Witam serdecznie , zakupiłem atmege 1284p która posiada dwa USART-y, potrzebuje na jednym USARTcie komunikować sie z komputerem a na drugim z innym uC.
Niestety napotkałem problem z którym nie potrafię sobie poradzić stąd moja prośbą o pomoc.
Na samym początku zabawy odpaliłem notę pdf odnośnie uC i skonfigurowałem USART-y(jak narazie nie bazując na przerwaniach)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

oraz przeszedłem do pliku main.c i ostawiłem potrzebne rzeczy:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

przy takiej konfiguracji uC się blokuje, i to w momencie jak wpisuje wartość rx_usart1 = usart1_recive(); wystarczy że wezmę ją w komentarz i wszystko rusza. Nie bardzo wiem jak sobie z tym poradzić ponieważ nie mam dużego doświadczenia w zabawie z dwoma USART-ami. Może powinienem jednak pobawić się z przerwaniami i problem by zniknął, na razie proszę was o pomoc. Może też ktoś podpowiedziałby jak poprawnie skonfigurować uC z dwoma USART-ami?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 15:00 
Offline
Nowy

Dołączył(a): 16 lut 2013
Posty: 11
Pomógł: 0

Dzięki za szybką odpowiedz, będę się zabierał za przerwania, mogę liczyć na jakąś podpowiedz jak się do tego zabrać?
Z tego co wiem to powinienem zacząć od:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i tu się zatrzymałem. Jakaś podpowiedź?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 16:30 
Offline
Użytkownik

Dołączył(a): 17 mar 2012
Posty: 74
Lokalizacja: Okolice Gdańska
Pomógł: 3

W skrócie:
robisz w bibliotece kopię wszystkiego z uarta 0 dla uarta 1 - czyli kopię zmiennych, funkcji, deklaracji itp.

Następnie dobrze jest stworzyć funkcję uart_avaible() i sprawdzać w niej czy coś przyszło, jeżeli tak to wykonuje się odpowiednie działania (uart_getc, przekazywanie do bufora, parsowanie odebranych danych itp.)

Wygodnie jest też przepisać bibliotekę w stylu uart_puts(uint8_t _uartNo, char *_string);



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 20:27 
Offline
Nowy

Dołączył(a): 16 lut 2013
Posty: 11
Pomógł: 0

Próbowałem zastosować się do zaleceń i skorzystałem z biblioteki mirka, poproszę o zerknięcie i poradę co dalej.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Teraz nie bardzo wiem jak mam przekazywać wartość do zmiennej aby sprawdzać czy odebrana wartość to np "1", wczesniej miałem
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i teraz po kompilacji też nic nie działa

------------------------ [ Dodano po: 33 minutach ]

Oczywiście sei(); włączone.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2013, o 22:12 
Offline
Użytkownik

Dołączył(a): 17 mar 2012
Posty: 74
Lokalizacja: Okolice Gdańska
Pomógł: 3

Np można zrobić tak:

- stwórz nowy bufor przeznaczony do tego celu (odbieranie i parsowanie danych),
- napisz funkcje która będzie Tobie zwracała aktualną ilość znaków odebraną w buforze UART'a,
- w pętli głównej sprawdzaj za pomocą prędzej stworzonej funkcji (uart_available) czy jest coś odebranego,
- jeżeli tak to odbierz to i wrzuć do bufora
- a następnie sprawdzaj warunek - np czy został odebrany konkretny znak a jeżeli tak to porównaj ciąg ze wzorcem.

- pamiętaj o czyszczeniu bufora i o zabezpieczeniu się przed jego przepełnieniem.

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


PS. co to jest STOP? ;)



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: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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