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



Teraz jest 31 sty 2025, o 15:44


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 
Autor Wiadomość
PostNapisane: 16 sie 2012, o 21:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 cze 2012
Posty: 171
Pomógł: 5

Witam,
mam dość nietypowy problem. Mianowicie muszę zdekodować sygnał wysyłany z pewnego urządzenia. Podejrzałem sobie co i jak na oscyloskopie i po analizie wiem już który fragment przebiegu mnie interesuje.
Wygląda to mniej więcej tak, że ramka wysyłana jest co ok 56ms, informacja która mnie interesuje znajduje się na początku każdej ramki i wygląda mniej więcej tak jak na załączonym zdjęciu (sorki za odręczny rys.). Jest tam 6 przypadków które występują i ja muszę odczytać który jest który. Teraz szukam pomysłu jak najprościej zdekodować taki przebieg. Może któryś z szanownych kolegów ma jakiś pomysł. Nigdy się czymś takim nie zajmowałem i jakoś nie ma pomysłu jak to ugryźć, tzn. mam kilka pomysłów ale wydają mi się trochę za skomplikowane.


Obrazek

Pozdrawiam i z góry dziękuję za pomoc.
R.L.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sie 2012, o 08:00 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Jest to ramka jak w RS232, a dokładnie 2 takie ramki. Masz bit startu 0, 8 bitów danych, bit parzystości (do liczby nieparzystej - ODDPARITY) i 1 bit stopu. Prędkość 10kbit/s. Wystarczy użyć USART mikrokontrolera.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sie 2012, o 08:07 
Offline
Moderator
Avatar użytkownika

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

Mi wczoraj jakoś umknęło to pytanie ;) ale też w pierwszej chwili gdy rzuciłem okiem pachniało mi to zwykłą ramką RS232 , a tu kolega Krauser nawet ją dokładnie rozpracował ;)

Więc tak jak radzi kolega wyżej, nic nie trzeba dekodować, tylko podłączyć to na wejście UART procka i pięknie odbierać gotowe bajty z gotowymi wartościami ;)

_________________
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: 17 sie 2012, o 12:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 cze 2012
Posty: 171
Pomógł: 5

Witam,
na początku bardzo dziękuję za odpowiedz. Tylko jest małe ale, to co przedstawiłem to początek ramki który zawiera interesującą mnie daną. Natomiast cała ramka wygląda następująco:

Cała ramka przypadku (-2, pierwszy od góry)
Obrazek

Cała ramka dla przypadku trzeciego od góry (0)
Obrazek

I teraz nie wiem czy dale można to podłączyć do uarat oczywiście zmieniając poziomy logiczne ?? Czy może będą jakieś śmieci ?

Pozdrawiam
R.L.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sie 2012, o 14:22 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Coś tam widać np. 28Vpp. Możesz to pokazać ze składową stałą i kursorami (jeden na 0V, a drugi na maksimum)? To mógłby być RS232 ale jest odwrócony, bo 1 to -15...-3V jest w standardzie a tu zaczyna się od dodatniego napięcia. Chyba, że sam to odwróciłeś. Jeśli jest tak jak przypuszczam to możesz to podpiąć do komputera przez przejściówkę USB-RS232. Sprawdź dokładnie prędkość. Czy to rzeczywiście 10kbps czy standardowa 9600. Dowolne prędkości możesz sobie ustawiać w programie BrayTerminal https://sites.google.com/site/terminalbpp/ ale po co ktoś miałby taką dawać.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sie 2012, o 14:30 

Pomógł: 0

W tym temacie http://www.edaboard.com/thread83747.html jest mniej więcej pokazane jak obliczyć timingi w RS232, można po przekształceniu znaleźć przynajmniej zbliżoną wartość baudrate :).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sie 2012, o 15:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 cze 2012
Posty: 171
Pomógł: 5

Witam,
Jakoś tak niefortunnie pokazałem ten przebieg. Sygnał jest w postaci 0, 24Vdc. Układ nadawczy wygląda następująco: tranzystor zwiera pull up do masy. Czyli stanem aktywnym jest 0V, natomiast przez resztę czasu magistrala pozostaje w stanie wysokim (24V).

Pozdrawiam
R. L.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sie 2012, o 16:43 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Po obniżeniu napięcia możesz to dołączyć, albo do mikrokontrolera, albo do przejściówki RS232-RS232TTL (USB-RS232TTL). Ta druga opcja pozwoli ci jednak sprawdzić od razu czy to ramka UART. Do obniżenia napięcia proponuję transoptor, gdzie diodę z rezystorem wpinasz równolegle do rezystora podciągającego.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sie 2012, o 19:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 cze 2012
Posty: 171
Pomógł: 5

Witam,
spróbuję jak kolega radzi. Jeszcze tak tylko się zastanawiam czy sygnał przypadkiem nie powinienem odwrócić sygnału ??
Poniżej przedstawiam poglądowy schemacik połączenia.
Obrazek

tak jest ok ??

Pozdrawiam
R.L.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sie 2012, o 19:30 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Nie powinien odwrócić. Jak na wyjściu jest 0V to dioda świeci i tranzystor jest nasycony - kluczuje do masy - 0V.
Masa tranzystora (w transoptorze) na pewno nie do masy urządzenia. Raz że to bez sensu po przeczy separacji elektrycznej obwodów, a dwa, że musisz podłączyć masę przejściówki.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sie 2012, o 20:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 cze 2012
Posty: 171
Pomógł: 5

Witam,
Dzięki za pomoc popróbuję i dam znać czy zadziałało. Z tymi masami to przez analogię do układu docelowego który będzie zasilany z tego samego źródła i separacja niepotrzebna.

Pozdrawiam
R.L.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2012, o 15:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 cze 2012
Posty: 171
Pomógł: 5

Witam,
jestem już po testach i okazało się, że kolega Krauser miał rację :). Zwykły UART odbiera dane :).
Teraz tak rozszyfrowałem dane odbierane, czyli co oznacza dany bajt. W sumie jest ich 6 w jednej ramce. Np:
36 05 00 33 20 20
36 04 00 32 20 20
32 03 00 31 20 20
32 02 00 30 20 20
3d 01 00 31 2d 20

7c 01 41 31 2d 20
73 02 41 30 20 20
73 03 41 31 20 20
77 04 41 32 20 20

itp.

Teraz tak się zastanawiam, jak zorganizować odbieranie takich ramek, ponieważ nie mamy jednoznacznego początku ani końca ramki.
Może ktoś ma jakiś pomysł jak się za to zabrać ???

Pozdrawiam
R.L.


Poniżej przykładowy zrzut z terminala:
Składnia: [ Pobierz ] [ Ukryj ]
język perl
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Ostatnio edytowano 20 sie 2012, o 19:39 przez Lemosek, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2012, o 16:09 
Offline
Moderator
Avatar użytkownika

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

Wprowadzić timeout i zliczać odebrane bajty w ramce, bo pewnie pomiędzy ramkami masz jakieś przerwy czasowe ?


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  
PostNapisane: 20 sie 2012, o 16:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 cze 2012
Posty: 171
Pomógł: 5

Witam,
dziękuję bardzo za odpowiedź. Właśnie też o czymś takim myślę :).
Mój pomysł jest taki :
timer z przerwaniem co 10ms,
odbiór danych z UART w przerwaniu + bufor,
w przerwaniu od uart ustawiam zmienna globalna np. timeout=2; start=1;
w pętli głównej event wykonywany co 10ms.
w event:
if(timeout&&start){
timeout--}
else{
odczyt bufora i obrobienie danych
start=0
}

Jeśli nie ma nadlatujących danych w czasie dłuższym niż 20ms to odczytujemy bufor i analizujemy dane. Ustawiamy flagę, że dokonano odczytu i czekamy na kolejne dane.

Jak myślicie koledzy ma coś takiego szansę powodzenia ??

Pozdrawiam
R.L.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2012, o 17:41 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Dobry pomysł.
PS.
Używaj syntax do pokazywania kodów programów. A te dane z terminala też mogłeś umieścić w syntax Pearl, bo palec boli od przewijania bezsensownych danych :x ( modyfikowno przez mirekk36 ;) )

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2012, o 19:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 cze 2012
Posty: 171
Pomógł: 5

Witam,
post już poprawiłem :) nawet nie wiedziałem, że tak działa syntax :D.

Jeżeli chodzi o 20 na końcu to niestety nie można bo nieraz jest jedna a nieraz są dwie :(.

Pomysł z timeout na "biurku" działa, programik i układzik testowy zrobiony - jutro testy.
Zobaczymy czy w rzeczywistym układzie też będzie.

Pozdrawiam i dziękuję wszystkim za pomoc.
R.L.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2012, o 20:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

A mnie sie wydaje ze to nie jest 6 ramek, ale jedna z szecioma wartosciami. Bo kazdaz ramka byla by zakonczona 2d 20, natomiast poszczegole wartosci rozdzielone sa 20 20.
Jakos tak rzuca mi sie w oczy taki uklad :-)



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

Dołączył(a): 21 cze 2012
Posty: 171
Pomógł: 5

Witam, zgadza się każda ramka składa się z 6 bajtów danych. Tak jak pisałem wcześniej :)
Każda ramka nadawania jest co 56ms.

Pozdrawiam
R.L.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2012, o 21:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

No to w czym problem ;) laduj całą ramkę do bufora odbirczego , a następnie poddaj ją parsowaniu funkcjami do stringów. A jeżeli długość ramki jest stałą to można jeszcze prościej np poprzez funkcję (o ile dobrze pamietam) scanf :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2012, o 22:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 21 cze 2012
Posty: 171
Pomógł: 5

Witam,
Już nie ma problemu :). Tak jak kolega proponuje nie zabardzo można, ponieważ włączając układ w dowolnej chwi układ musi się zsynchronizować. Muszę znać początek każdej ramki.

Pozdrawiam
R.L.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO