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



Teraz jest 30 mar 2026, o 12:14


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 3 lis 2015, o 23:59 
Offline
Nowy

Dołączył(a): 03 lis 2015
Posty: 3
Pomógł: 0

Dzień dobry,

Mógłby mi ktoś po krótce opisać jak obsłużyć odczyt danych w pętli głównej programu z bufora w którym zapisują się dane otrzymane po RS232? Korzystam z programu bufora cyklicznego opisanego w niebieskiej książce mirka.

Dane wysyłam z LabView za pomocą modułu szeregowego. Buforem z LabView wysyłam "różowy" pakiet danych - w LabView jest to string. Dane odbieram w uC Atmega8 przez UART (wiadomo) z wykorzystaniem bufora cyklicznego wspomnianego wcześniej.

Gdy wysyłałem dane z LabView i odczytywałem jeden odebrany bajt (bez żadnego bufora) odczytywało mi zawsze ostatnią liczbę wpisaną w buforze w LabView (po wystawieniu flagi w przerwaniu ISR(USART_RXC_vect) w pętli głównej odczytywało mi mniej znaczący bajt odebrany jako pierwszy, czy dobrze rozumiem?).

Chodzi mi o to by wysłać teraz liczbę z LabView np. 542 - oczywiście nadal stringiem różowym - odczytać ją za pomocą bufora cyklicznego. Wyłuskać z każdego bajtu liczbę oraz skleić ją w int którego będę mógł przekazać do funkcji jako licznik.

Nie do końca rozumiem jak mam użyć funkcji
Składnia: [ Pobierz ] [ Ukryj ]
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

w głównym programie i jak obsłużyć sklejenie tych danych w liczbę int mogącą być wykorzystaną jako licznik do funkcji.

Chyba że ktoś ma prostszy pomysł na odebranie takiego ciągu znaków z LabView (maksymalnie 3 cyfry)?
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2015, o 00:28 
Offline
Moderator
Avatar użytkownika

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

Cytuj:
Chyba że ktoś ma prostszy pomysł na odebranie takiego ciągu znaków z LabView (maksymalnie 3 cyfry)?

dowolny ciąg - dowolne rzeczy można odbierać i dowolnej długości a nawet mieszane dane czyli liczby z tekstami itp itd ;)

zajrzyj do Greenbooka do jednego z ostatnich rozdziałów na temat obsługi odbierania i parsowania danych przychodzących w oparciu o zdarzenia (EVENT's) i Callbacki w C ... jak to się robi i jak się do tego podchodzi

W Bluebooku opisałem tylko niejako pierwszą część czyli o co chodzi z buforowaniem cyklicznym, jego obsługą na przerwaniach, wysyłaniem danych .... Odbieranie zostawiłem na kolejną książkę gdy już porządnie udało mi się wytłumaczyć wszystkie inne ciut bardziej skomplikowane zagadnienia jak właśnie timery programowe czy też zdarzenia i callbacki ... dopiero wtedy praca z RS232 nabiera sensu

_________________
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: 4 lis 2015, o 09:23 
Offline
Nowy

Dołączył(a): 03 lis 2015
Posty: 3
Pomógł: 0

Mirku, tylko jest problem ze nie mam zielonej książki, posiadam tylko niebieską.

Załóżmy że zaimplementowałem sobie bufor cykliczny opisany w niebieskiej książce, tylko jak z niego teraz wydobywać odebrane informację?

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2015, o 10:15 
Offline
Moderator
Avatar użytkownika

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

trzeba sobie przede wszystkim napisać funkcje wyższego rzędu do odbioru stringów, warto sygnalizować odbiór znaków końca linii już na poziomie przerwania itp itd ...

da się to napisać nawet bez zielonej książki, wiele osób nawet tu na forum podejmowało takie próby i to z powodzeniem ... nie działa to może tak wygodnie jak ja to opisuję ale warto sobie porobić takie wprawki w programowaniu

_________________
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: 4 lis 2015, o 15:22 
Offline
Użytkownik

Dołączył(a): 13 lut 2015
Posty: 99
Pomógł: 6

Czy liczby zamierzasz wysyłać jako string czy binarnie ?
Wystarczy rozwiązanie blokujące czy nie może blokować ?

Stringi można wczytywać w dość prosty 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.


Jeśli chodzi o nieblokującą transmisję to pozostaje implementacja "state machine" jak np tu.

_________________
AVR-UART-lib
AVR-FAST-ENCODER
RFM7x-lib



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lis 2015, o 18:32 
Offline
Nowy

Dołączył(a): 03 lis 2015
Posty: 3
Pomógł: 0

Liczby są wysyłane w taki sposób że jeden bajt to jeden znak w formacie ASCII.

Podszedłem do tego z innej strony. Założyłem że zostaje wysłana stała ilość danych z LabView (w moim przypadku 4 bajty - znak +/- w zależności od wyniku oraz 3 liczby). W przerwaniu zapisuje do odb_x odebrany bajt oraz ustawiam flagę. Później zapisuję do tablicy odebrany bajt (wiem ile bajtów odbiorę więc wiem na które miejsce zapisać dany bajt). Licznik tablicy inkrementuje a jak jest większy od założonej ilości odebranych bajtów wtedy go zeruje i ustawiam flagę dla pętli obrabiającej otrzymane dane. Wysyłanie danych jest cykliczne - co pewien, niekrótki czas więc to że może "przylecieć" w trakcie obrabiania danych mnie zbytnio nie interesuje.

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


Wymyśliłem też sposób na obrobienie każdego bajtu z char do int oraz zlepienie trzech pojedńczych cyfr w jedną liczbę, nie wygląda ale działa. ;)

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



Proszę sobie zobaczyć jak się wkleja kody źródłowe ---- 1 poprawiłem celowo by kolega zobaczył różnicę w czytelności --SunRiver



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 lis 2015, o 20:04 
Offline
Użytkownik

Dołączył(a): 13 lut 2015
Posty: 99
Pomógł: 6

jaszczomp napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A nie prościej atoi() ?

_________________
AVR-UART-lib
AVR-FAST-ENCODER
RFM7x-lib



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Baidu [Spider] i 2 gości


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