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

UART problem z odbieraniem całego stringa.
https://forum.atnel.pl/topic24261.html
Strona 1 z 1

Autor:  antosV10 [ 25 cze 2022, o 10:50 ]
Tytuł:  UART problem z odbieraniem całego stringa.

Nie mogę odebrać całego stringa. Stworzyłem funkcje która ma zwrócić wskaźnik do początku tablicy a następnie ten wskaźnik przekazywany jest do funkcji wysyłającej cały string do komputera. Używam do tego 2 atmeg328P jedna wysyła string "hello\n\r" a druga go odbiera i przesyła do komputera. Na terminalu znaki wyświetlą się czasami poprawnie a czasami występuje np. podwojona litear 'l' albo 'o', innym razem string jest cały pocięty i do komputera dochodzą pierwsze 3 litery. Gdzie mam błąd mojej tej funkcji, bo funkcje nadającą string i odbierającą jeden znak brałem z blue booka.

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


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


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

Autor:  micky [ 25 cze 2022, o 10:58 ]
Tytuł:  Re: UART problem z odbieraniem całego stringa.

Jakie taktowanie i czym, jaka prędkość transmisji?

Autor:  antosV10 [ 25 cze 2022, o 12:11 ]
Tytuł:  Re: UART problem z odbieraniem całego stringa.

micky napisał(a):
Jakie taktowanie i czym, jaka prędkość transmisji?

16MHz zewnętrzny kwarc, prędkość 9600, ale tutaj raczej wszystko mam dobrze bo odbieranie i nadawanie pojedynczych znaków i nadawanie stringów działa idealnie.

Autor:  mirekk36 [ 25 cze 2022, o 12:48 ]
Tytuł:  Re: UART problem z odbieraniem całego stringa.

skoro masz w funkcji

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


to jak myślisz co się stanie po ponownym wejściu do funkcji ? i znowu będzie =0

więc co ci da w pętli while()

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


że zwiększysz zmienną i ?

Autor:  antosV10 [ 25 cze 2022, o 23:09 ]
Tytuł:  Re: UART problem z odbieraniem całego stringa.

mirekk36 napisał(a):
że zwiększysz zmienną i ?


Mi właśnie o to chodzi, że jak wyjdę z funkcji to zmienna i = 0 tak że za każdym jej wywołaniem nie trzeba jej resetować. Operacja i++ ma zapisywać kolejny odebrany znak do tablicy result pod odpowiednim indeksem. Na końcu ta tablica ma być zwrócona.

Autor:  mirekk36 [ 26 cze 2022, o 06:12 ]
Tytuł:  Re: UART problem z odbieraniem całego stringa.

dobrze, sorki nie zauważyłem tego uart_getc(); w pętli

------------------------ [ Dodano po: 1 minucie ]

a sprawdzałeś co zwraca uart_getc(); ? czy tam nie ma tak że jeśli nie dotrze żaden znak to zwraca zero ?

Autor:  antosV10 [ 26 cze 2022, o 09:20 ]
Tytuł:  Re: UART problem z odbieraniem całego stringa.

mirekk36 napisał(a):
dobrze, sorki nie zauważyłem tego uart_getc(); w pętli

------------------------ [ Dodano po: 1 minucie ]

a sprawdzałeś co zwraca uart_getc(); ? czy tam nie ma tak że jeśli nie dotrze żaden znak to zwraca zero ?


Faktycznie nie zwróciłem uwagi. Kod lekko zmodyfikowałem i teraz działa prawie dobrze tylko program gubi mi pierwszą literkę. Co mogę z tym zrobić?

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

Autor:  mirekk36 [ 26 cze 2022, o 23:05 ]
Tytuł:  Re: UART problem z odbieraniem całego stringa.

antosV10 napisał(a):
_delay_ms(1000);

Nie ma co się dziwić że coś gubi skoro używasz TAK PASKUDNEGO DELAYA, wywal go w diabły.

Autor:  Kuźnia [ 28 cze 2022, o 07:23 ]
Tytuł:  Re: UART problem z odbieraniem całego stringa.

Sprawdź czy po tej modyfikacji przy każdym wywołaniu funkcjia uart_get_string nie zwraca '\r'. Może wtedy dochodzić do nadpisywania wcześniej odebranych i wyświetlonych danych w terminalu.

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