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



Teraz jest 28 sty 2026, o 14:11


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
 Tytuł: UART
PostNapisane: 16 cze 2015, o 15:43 
Offline
Użytkownik

Dołączył(a): 14 mar 2015
Posty: 25
Pomógł: 0

Witam,
W moim programie chciałbym wysyłać przez terminal z komputera na początek jakiś znak i w zależności od wysłanego znaku
chciałbym, aby po odebraniu go wykonywał się inny ciąg instrukcji- z atmegi wysyłany byłby jakiś tekst na terminal.
Wzorując się BB i biblioteką UART wszystko działa tak jak trzeba, jeśli w pętli while(1) warunki są na if'ach. Chciałbym jednak zrobić te
warunki jako pętle i tutaj występuje problem, ponieważ zamiast pętla wykonywać się cały czas, wykonuje się tylko raz.
Dołączam kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Czy mógłby ktoś pomóc/nakierować co tu jest nie tak?
Pozdrawiam,
Daniel



Ostatnio edytowano 16 cze 2015, o 17:36 przez DanielM, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: UART
PostNapisane: 16 cze 2015, o 15:55 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3230
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 91

topic7402.html

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: UART
PostNapisane: 16 cze 2015, o 16:12 
Offline
Użytkownik

Dołączył(a): 25 lut 2015
Posty: 252
Lokalizacja: Lublin
Pomógł: 23

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


Zamiast niego przenieś z początku pętli:

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


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

i poczytaj o instrukcji break :)

Poza tym nie rozumiem co ma robić ta pętla dla A?
Mogły by być dwa analogiczne warunki jak dla B...



Ostatnio edytowano 16 cze 2015, o 16:17 przez jerrylu, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: UART
PostNapisane: 16 cze 2015, o 16:14 
Offline
Moderator
Avatar użytkownika

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

DanielM napisał(a):
Czy mógłby ktoś pomóc/nakierować co tu jest nie tak?

Popraw kod jak pisze wyżej Jaglarz

a w odpowiedzi na pytanie - ja też zadam pytanie ... czy możesz doczytać książkę do końca ? bo się widzę zatrzymałeś i masz problem a w dalszych rozdziałach masz właśnie podpowiedzi w tym zakresie i przykłady na DVD .... czemu się więc zatrzymujesz ?

Przeczytaj w książce rozdział "Wstęp do systemów czasu rzeczywistego" i popatrz tam na przykłady tego co chcesz zrobić


Autor postu otrzymał pochwałę

_________________
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  
 Tytuł: Re: UART
PostNapisane: 17 cze 2015, o 09:16 
Offline
Użytkownik

Dołączył(a): 14 mar 2015
Posty: 25
Pomógł: 0

1. Kod poprawiony
2. Trochę poczytałem, ale widzę, że w "projekcie wielozadaniowym" dot. właśnie rozdziału systemów czasu rzeczywistego, odbiór przez UART, czyli użycie funkcji uart_getc() jest też zrobione jako warunek na if'ie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

To co "próbowałem zrobić" wyżej na if'ach działało, ale jak wstawiam taki sam warunek w pętlę to wykonuje się ona tylko raz. Stąd moje pytanie, jak zrobić żeby wykonywała się cały czas i w zależności od innego odebranego znaku nastąpiło przerwanie wykonywania pętli?

3. Mam kolejny problem z odbieraniem stringów. Z poradnika Antystatycznego mam taką funkcję do odbioru stringów:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


W main'ie wywołuje ją w taki sposób:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


I wszystko śmiga, tylko jeżeli teraz chciałbym w if'ie w zależności od odebranego stringa coś robić, to jak należy taki warunek skonstruować?
Próbowałem chyba na wszystkie możliwe sposoby:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

jak już program wejdzie w ten warunek if(buf[0]=='A') to jeżeli dam w tym warunku uart_puts(buf[0]) to nic nie wyświetla na terminalu.
Z kolei if(buf[1]=='B') działa, jeżeli wysyłam B w 3 znaku. Nic z tego nie rozumiem :P Mógłby ktoś mi to jakoś rozjaśnić?

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



Ostatnio edytowano 17 cze 2015, o 09:32 przez DanielM, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: UART
PostNapisane: 17 cze 2015, o 09:28 
Offline
Moderator
Avatar użytkownika

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

niestety (nie obraź się) ale te twoje próby to na razie herezje w języku C

1. if(buf=="AA")
2. if(buf=='AA')
3. if(buf[0]=='A' && buf[1]=='A')

ad.1 to nie jest Bascom i nie ma takiego sprawdzania stringa typu str1==str1
ad.2 to samo co wyżej PLUS .... panie kochany musisz zrozumieć co oznacza w C apostrof a co cudzysłów i masz to DOKŁADNIE w Bluebooku opisane zajrzyj proszę ok?
ad.3 no to może nie jest już herezja w C bo tak można byłoby sprawdzać ale wyobrażasz sobie za każdym różnym stringiem tak to rozpisywać ?

zainteresuj się takimi funkcjami wbudowanymi jak strstr() czy np memcpy() .... one służą do porównywania stringów czy tablic czy zawartości pamięci ...

A jeśli interesuje cię wygodny odbiór i parsowanie stringów, obsługa tego w zdarzeniach - to polecam jednak Greenbooka i jeden z ostatnich w nim rozdziałów gdzie od A do Z jest to opisane, a ćwiczenia praktyczne do tego masz np w poradnikach wideo n/t ATNEL-WIFI232-T

_________________
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  
 Tytuł: Re: UART
PostNapisane: 17 cze 2015, o 09:37 
Offline
Użytkownik

Dołączył(a): 14 mar 2015
Posty: 25
Pomógł: 0

Dobrze wiem o tym, że to herezje, ale już na wszystkie możliwe sposoby próbowałem stąd takie coś powstało.
Był mały edit jak Pan odpowiedał na post.
Chciałbym wysyłać z aplikacji napisanej w C# do uC jakieś instrukcje i tam wysyłam to jako string czyli "" z '0' na końcu tak jak to jest w stringach i porównywać to w ifie.
Mógłby Pan jeszcze raz spojrzeć na kod i odpisać czemu takie cuda z próbą wyświetlania buf[0] i buf[1] powstają?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: UART
PostNapisane: 17 cze 2015, o 09:43 
Offline
Moderator
Avatar użytkownika

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

Cytuj:
Z kolei if(buf[1]=='B') działa, jeżeli wysyłam B w 3 znaku. Nic z tego nie rozumiem Mógłby ktoś mi to jakoś rozjaśnić?

No nie rozumiesz tego, że pętla while działa setki tysięcy razy na sekundę ... więc polecenie uart_gets() w tej pętli nie ma kompletnie sensu, spróbuj sobie przeanalizować jak to będzie działać na wysyłanie co jakiś czas danych z kompa ... jak dobrze przeanalizujesz to stwierdzisz - że to co wyżej opisałeś to właśnie tak ma działać ;) czyli cuda wianki ;)

ZANIM odbierzesz string NAJPIERW trzeba się upewnić, że taki string dotarł w pełni do bufora cyklicznego ... no ale .... jeszcze raz się powtórzę - specjalnie tego nie opisywałem w Bluebooku (tu chciałem żeby czytelnik najpierw dobrze zapoznał się z samym buforowaniem cyklicznym i wysyłaniem) Resztę opisałem w Greenbooku. Ale spokojnie próbuj - zrobienie nawet prostszej metody odbioru stringów niż na z GB też jest możliwe a na tym forum temat był już ze 100 razy poruszany i sporo osób sobie z tym poradziło - prezentując tu zresztą swoje kody.


Autor postu otrzymał pochwałę

_________________
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  
 Tytuł: Re: UART
PostNapisane: 17 cze 2015, o 09:47 
Offline
Użytkownik

Dołączył(a): 14 mar 2015
Posty: 25
Pomógł: 0

Ok to ruszam do czytania GB :P dobrze przewidziałem, żeby ją od razu z BB zamówić ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: UART
PostNapisane: 17 cze 2015, o 09:48 
Offline
Moderator
Avatar użytkownika

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

DanielM napisał(a):
Ok to ruszam do czytania GB :P dobrze przewidziałem, żeby ją od razu z BB zamówić ;)

Łeee no to panie ... normalnie teraz to linijką po łapkach! To ty masz pod ręką GB ... i nie zajrzałeś jeszcze ? ;)

_________________
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  
 Tytuł: Re: UART
PostNapisane: 17 cze 2015, o 17:43 
Offline
Użytkownik

Dołączył(a): 14 mar 2015
Posty: 25
Pomógł: 0

EDIT: problem wyjaśniony



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

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