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



Teraz jest 24 sty 2025, o 13:56


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 31 sie 2016, o 11:26 
Offline
Nowy

Dołączył(a): 03 wrz 2014
Posty: 15
Pomógł: 0

Hej.

Chcę wykorzystać w atmedze128A dwa uarty ale natknąłem się na problem. Jeśli napiszę coś takiego :

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

to dostaję jakieś śmieci albo ucięte słowa. Jeśli użyję
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to wszystko fajnie śmiga. I tu pojawia się pytanie. Czy zawsze trzeba odczekać jakiś czas po nadaniu wiadomości, żeby użyć drugiego uarta, czy to jakiś błąd np. na płytce i zakłócenia?

Używam bibliotek Mirka. Myślałem, że sprawę załatwi dodanie
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

w przerwaniu

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


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

i o czywiście odpowiednio dla drugiego uarta. Ale to niewiele pomogło. Myślałem, że to zablokuje możliwość nadawania uart0 dopóki nie skończy nadawać uart1 i odwrotnie. Czy jedynym wyjściem jest wstrzymywanie uarta na jakiś czas po nadaniu?



Ostatnio edytowano 31 sie 2016, o 11:35 przez drezzill, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2016, o 11:31 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27351
Lokalizacja: Szczecin
Pomógł: 1042

drezzill napisał(a):
Czy jedynym wyjściem jest wstrzymywanie uarta na jakiś czas po nadaniu?

Gdyby to miało być wyjście to w zasadzie takie rozwiązanie nadawałoby się tylko do kosza :( to byłaby jakaś tragedia ;) .... nie po to są sprzętowe moduły .... Coś źle przerobiłeś po prostu.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2016, o 11:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

A przypadkiem nie używasz tych samych buforów / zmiennych do obsługi obu UARTów?

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2016, o 11:56 
Offline
Nowy

Dołączył(a): 03 wrz 2014
Posty: 15
Pomógł: 0

tak wygląda plik mkuart1.h

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


a tak plik mkuart0.c

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


Bufory i wszystkie inne zmienne są w oddzielnych plikach.

Zauważyłem, e jak zmniejszę czas pomiędzy nadaniami, to "zjada" końcówkę, np. wysyła tylko "hell"



Ostatnio edytowano 31 sie 2016, o 12:21 przez drezzill, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2016, o 12:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 cze 2014
Posty: 76
Pomógł: 10

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

W obu plikach występuje ta linijka. Nie powinno być w mkuart1.c UDR1?

_________________
:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2016, o 12:18 
Offline
Nowy

Dołączył(a): 03 wrz 2014
Posty: 15
Pomógł: 0

Powinno być:) Poprawiłem, ale to i tak jest w przerwaniu odbiorczym i jeszcze go nie użyłem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2016, o 12:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 cze 2014
Posty: 76
Pomógł: 10

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

Nie powinno być USCR1C ?

_________________
:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2016, o 12:32 
Offline
Nowy

Dołączył(a): 03 wrz 2014
Posty: 15
Pomógł: 0

Przejrzałem wszystkie takie błędy po twoim pierwszym poście i już je poprawiłem. Niepotrzebnie jeszcze raz zmieniałem bibliotekę przed wrzuceniem jej tutaj. Myślałem, że będzie "czysta" bez moich ingerencji, a przeoczyłem te dwie rzeczy. Już podmieniłem kod na taki, który mam uruchomiony i nie działa :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2016, o 12:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

ShutDownSystem napisał(a):
Nie powinno być USCR1C ?

Powinno, ale to nie ma w tym wypadku znaczenie, bo i tak używa domyślnych wartości konfiguracji portu :)

A wszystko masz w porządku w mkuart1.h i mkuart0.h?

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2016, o 12:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 cze 2014
Posty: 76
Pomógł: 10

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

Dlaczego w jednym pliku zmienna jest 2 bajtowa, a w drugim 1 bajtowa?

_________________
:)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sie 2016, o 12:51 
Offline
Nowy

Dołączył(a): 03 wrz 2014
Posty: 15
Pomógł: 0

mkuart0.h

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


mkuart1.h

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



Rozmiar zmiennej zmieniłem, żeby przetestować ogromne bufory i taka została.

edit:

Może ktoś ma gotową bibliotekę do Atmegi 128? Albo Atmegę i sprawdziłby tą bibliotekę, może to wina hardwarowa?

Na stronie 253 dokumentacji atmegi128A jest napisane " When the function writes to the
UCSRC Register, the URSEL bit (MSB) must be set due to the sharing of I/O location by UBRRH and
UCSRC ". Czy powinienem ustawić najwyższy bit w UCSRmC przy zapisie? w opisie rejestru UCSRmC nie ma nic o URSEL, a najwyższy bit jest na szaro. W podanym przez nich sposobie inicjalizacji na stronie 253-254 także nie ustawiają tego bitu.

edit2:

Użyłem biblioteki od Peter Fleury i działa, więc coś źle robię z inicjalizacją. Muszę przepisać tak jak jest u Petera :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 wrz 2016, o 17:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Twój problem nie ma nic wspólnego z inicjalizacją / obsługą UARTów. Jest to przyczyna o której napisałem na samym początku:
rskup napisał(a):
A przypadkiem nie używasz tych samych buforów / zmiennych do obsługi obu UARTów?

Dla obu UARTów używasz globalnych zmiennych dla Head-a i Tail-a o tej samej nazwie. Albo zmień UART_RxHead, UART_RxTail, UART_TxHead, UART_TxTail na nazwy zawierające numer portu (dodaj 1 jak dla innych elementów dotyczących UART1) albo zadeklaruje je jako static.

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 wrz 2016, o 19:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 cze 2016
Posty: 247
Lokalizacja: Rybnik
Pomógł: 13

A czekasz na ustawienie znacznika txc? a jak tak to czy zerujesz go wpisując mu jeden?

_________________
Situs != Situs



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 wrz 2016, o 08:00 
Offline
Nowy

Dołączył(a): 03 wrz 2014
Posty: 15
Pomógł: 0

rskup a czy nie jest tak, że jeśli te zmienne są w różnych plikach i nie są extern to wtedy to są zupełnie różne zmienne?

Situs nie czekam na flagę TX comlete tylko UDRE i wtedy wysyłam kolejny znak. jak skończą się znaki, to nie obsługuję już przerwania UDRE. Wyłączam to w tym miejscu

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 wrz 2016, o 08:10 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27351
Lokalizacja: Szczecin
Pomógł: 1042

drezzill napisał(a):
a czy nie jest tak, że jeśli te zmienne są w różnych plikach i nie są extern to wtedy to są zupełnie różne zmienne?

A skąd takie pomysły w ogóle ?

Gdybyś dał specyfikator static każdej takiej zmiennej to wtedy nie będą sobie przeszkadzać nawzajem ... pomimo to nie jest w ogóle dobrym pomysłem dublowanie nazw zmiennych i to jeszcze globalnych dla pliku w różnych plikach. Sam widzisz że im więcej takich pomysłów tym więcej problemów.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



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

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO