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



Teraz jest 29 mar 2024, o 02:42


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 25 cze 2022, o 10:50 
Offline
Użytkownik

Dołączył(a): 09 sty 2021
Posty: 66
Pomógł: 0

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 cze 2022, o 10:58 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2561
Pomógł: 126

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



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

Dołączył(a): 09 sty 2021
Posty: 66
Pomógł: 0

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 cze 2022, o 12:48 
Offline
Moderator
Avatar użytkownika

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

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 ?

_________________
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: 25 cze 2022, o 23:09 
Offline
Użytkownik

Dołączył(a): 09 sty 2021
Posty: 66
Pomógł: 0

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 cze 2022, o 06:12 
Offline
Moderator
Avatar użytkownika

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

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 ?

_________________
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: 26 cze 2022, o 09:20 
Offline
Użytkownik

Dołączył(a): 09 sty 2021
Posty: 66
Pomógł: 0

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 cze 2022, o 23:05 
Offline
Moderator
Avatar użytkownika

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

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.

_________________
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: 28 cze 2022, o 07:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 sty 2014
Posty: 178
Pomógł: 24

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.



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

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