logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

PC->nadajnik RT4->odbiornik RR6->atmega8535 = probl

Mr_T_ 16 Lut 2007 01:22 1642 6
  • #1 3577455
    Mr_T_
    Poziom 15  
    Posty: 205
    Pomógł: 1
    Ocena: 23
    mam za zadanie stworzyc komunikacje jednostronna pomiedzy komputerem a procesorem. zakupilem moduly telecontrolli RT4 i RR6. wysylajac cokolwiek na RS-a dostaje jakies smieci w mikrokontrolerze. sprawdzalem sobie podajac bezposrednio z rs-a na wejscie mikrokontrolera dane i wszystko gra obojetnie z jaka predkoscia. natomiast droga radiowa nic (tzn. same smieci. wysylajac dane to tak jakby nie docieraly cale... )... czasem sie cos poprawnego pojawi na wyswietlaczu dolaczonym do mikrokontrolera przy predkosci 2400bps

    jaka predkosc ustawic do komunikacji uC z PC przez te moduly? czy co mam zrobic zeby to zadzialalo? czy wymaga to jakichs specjalnych filtrow na zasilaniu czy co?
  • #2 3577600
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    szkoda, że wcześniej nie poczytałeś na temat korzystania z tego typu modułów - ale nie ma co załamywać rąk. Aby zacząć coś nadawać i prawidłowo odbierać przez take moduliki to najlepiej byłoby stworzyć własny protokół trnasmisji, który oparty byłby o kodowanie przesyłanych danych typu Menchester (podobne jak w pilotach IR typu RC5). Wtedy powinno działać bez zarzutów. Ale z tego co się czyta można również (tak słyszałem) puszczać sygnał przez UART'a z tym, że trzeba koniecznie zrobić sowją własną kontrolę poprawności przesyłanych danych tzn: puszczasz jakąś ramkę danych, w której masz obliczoną sumę kontrolną albo i dwie a po drugiej stronie odbierasz te ramki i sprawdzasz czy sumy się zgadzają - i jeśli tak to odbierasz ramki a jeśli nie to odrzucasz. Z tym, że przy przesyłaniu danych przez UART w ten sposób nie można liczyć na jakieś zawrotne prędkości. Prawdopodobnie przy takiej kontroli prędkość 2400 może będzie szczytem osiągnięć a może będzie trzeba jeszcze o wiele wiele bardziej ją zwolnić aby uzyskać zadowalające efekty. Bo jak sam zauważyłeś, że gdy dałeś 2400 to czasem coś poprawnego się wyświetla. Spróbuj dać 1200 , 600 lub 400 albo nawet 200 i zobacz czy bez własnej kontroli danych nie uda się przy tak niskich prędkościach - a nóż coś wyjdze, że będzie częściej łapać dobre bajty?

    .... natomiast przy zastosowaniu własnego kodowania danych (bifazowego - kod Menchester) nie powinno być problemu przy uzyskiwaniu większych prędkości niż 2400 ale czy uda się osiągnąć 19600 albo więcej to nie wiem ;)

    pozdrawiam
  • #3 3577972
    Konto nie istnieje
    Konto nie istnieje  
  • #4 3578051
    Lukasz Baj
    Poziom 11  
    Posty: 11
    Ocena: 5
    Tak, zgadza sie. Problemem jest maksymalna predkosc z jaka moze nadawac RT4 i odbierac RR6. Musisz doczytac w dokumentacji (chociaz jest ona uboga). Przy 1200b/s powinnow wszystko dzialac poprawnie.
  • #5 3578335
    Mr_T_
    Poziom 15  
    Posty: 205
    Pomógł: 1
    Ocena: 23
    ja potrzebuje przesylac paczki po 2 bajty. przy predkosci 1200 przesyla mi przez radio, tylko ze czasem gubi sie ktory bajt jest pierszy i do tego jak wysylam z PC (z aplikacji) trzymajac wcisniety ciagle klawisz wysylania to widze po ulamku sekundy dopiero odpowiednie dane takie jak nadalem. teraz postaram sie zakombinowac z tym kodowaniem i zobacze jakie beda efekty.

    jak to zaprogramuje to podziele sie efektami
    pozdrawiam

    ps.predkosci nadajnika i odbiornika: RT4 4k bodow/s a RR6 2k bodow/s
  • #6 3581413
    Mr_T_
    Poziom 15  
    Posty: 205
    Pomógł: 1
    Ocena: 23
    faktycznie przez to co proponujecie to jest mniej bledow, tylko ze teraz moj protokol zamiast przesylac 3 bajtow przesyla ich 2 razy tyle:(, ale coz... jakos dziala i to jest wazne

    dzieki wielkie za pomoc!!
  • #7 3582126
    Mr_T_
    Poziom 15  
    Posty: 205
    Pomógł: 1
    Ocena: 23
    ale jednak mam teraz problem w zaprogramowaniu. koduje sobie znaki bez problemu, ale teraz nie radze sobie zbytnio z przeslaniem calej paczki. program na strone PC pisze w javie i tam sobie wysylam spokojnie 5 bajtow.

    2 pierwsze z nich to 0xFF jako bajt zaczynajacy transmisje. 4 kolejne to bajty danych.mozliwe ze zle to obmyslilem. nie wiem tez jak zaznaczyc gdzie sie zaczyna transmisja danych

    po stronie uC odbieram to w przerwaniu po jednym bajcie i obsluguje w glownej petli programu.

    
    	if(ile_bajtow == 0) {
    		pilot1 = UDR;
    		ile_bajtow++;
    	}
    	else if(ile_bajtow == 1) {
    		pilot2 = UDR;
    		ile_bajtow++;
    	}
    	else if(ile_bajtow == 2) {
    		test1 = UDR;
    		ile_bajtow++;
    	}
    	else if(ile_bajtow == 3) {
    		test2 = UDR;
    		ile_bajtow++;
    	}
    	else if(ile_bajtow == 4) {
    		test3 = UDR;
    		ile_bajtow++;
    	}
    	else if(ile_bajtow == 5) {
    		test4 = UDR;
    		ile_bajtow = 0;
    		zmiana = 1;
    	}
    

    odbieram w przerwaniu w ten sposob.
    w petli glownej zmienna "zmiana" okresla czy odebralem juz 6 bajtow czy nie. w petli glownej sprawdzam:
    
    	if((zmiana == 1) && (pilot1 = 0xFF) && (pilot2 = 0xFF)){
    		...
    	}
    

    jest to na pewno zle rozwiazanie, ale jakos nie przychodzi mi do glowy inne:( prosze o pomoc...

    ps. dane zakodowane algorytmem Menchester po stronie PC, a narazie po stronie uC jeszcze nie odkodowuje tylko odbieram wszystkie bajty. reszta pozniej sie zajme

Podsumowanie tematu

LABEL_AI_GENERATED
Problem dotyczy jednostronnej komunikacji między komputerem a mikrokontrolerem Atmega8535 za pomocą modułów radiowych Telecontrolli RT4 (nadajnik) i RR6 (odbiornik). Przy przesyłaniu danych przez RS-232 bezpośrednio do mikrokontrolera odbiór jest poprawny, natomiast transmisja radiowa generuje zakłócenia i "śmieci" w odbiorze. Maksymalna prędkość transmisji dla RT4 to około 4000 bodów/s, a dla RR6 około 2000 bodów/s, co ogranicza efektywną prędkość do około 1200 bodów/s dla stabilnej komunikacji. Zalecane jest zastosowanie własnego protokołu transmisji z kodowaniem Manchester oraz kontroli poprawności danych (np. suma kontrolna), co zmniejsza błędy, choć zwiększa ilość przesyłanych bajtów. Problemy pojawiają się także z synchronizacją i określeniem początku ramki danych, co wymaga odpowiedniego oznaczenia startu transmisji (np. bajty 0xFF) i obsługi odbioru w przerwaniu po jednym bajcie. Konieczne jest dalsze dopracowanie protokołu i kodowania, aby zapewnić stabilną i poprawną transmisję danych przez moduły RT4 i RR6 przy ograniczonej prędkości transmisji.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA