idzik15 Napisano Kwiecień 9, 2016 Udostępnij Napisano Kwiecień 9, 2016 Witam, Tworzę prosty nadajnik i odbiornik do sterowania wykorzystujący do tego dwie Atmegi8. W nadajniku mam potencjometry. Sygnal jest konwertowany przez ADC i nastepnie wysylany do odbiornika, gdzie generowany jest sygnal PWM do serwomechanizmów. Problem polega na tym żeby odbiornik rozróżniał, z którego potencjometry wysyłana jest wartość i żeby odpowiedni serwomechanizm tą wartość otrzymał. Myślałem nad jakimś sposobem adresowania każdego potencjometru i póki co najbliżej działający pomysł wygląda tak: while(1) //petla glowna { if ( (PINC & 1<<PC3) ) { USART_transmit(0b11111111); //wartosc "adresu" USART_transmit(pwm1); //pwm1 - to wartosc z ADC } if ( (PINC & 1<<PC2) ) { USART_transmit(0b10000001); USART_transmit(pwm2); } //kawalek funkcji odbierajacej while (! (UCSRA & (1 << RXC)) ); { receiveData = UDR; if (receiveData == 0b11111111) { pwm1 = UDR; } if (receiveData == 0b10000001) { pwm2 = UDR; } Generalnie pomysł polega na tym, że idzie 1 bajt "adres", następnie 1 bajt "dana". I tak w kółko. Tylko mam problem z zaimplementowaniem tego. Sam ADC, PWM, UART itd działają OK kiedy przesyłam jedną wartość ( to jest tylko z jednego potencjometru, drugi mam zakomentowany). Kiedy mam oba to też działa ale ewidentnie sypią się błędy bo jednym potencjometrem czasami steruję jednym serwem a czasami dwoma. Za wszelką pomoc i sugestie dzięki 🙂 Link do komentarza Share on other sites More sharing options...
bart266 Kwiecień 14, 2016 Udostępnij Kwiecień 14, 2016 sugeruję ci żebyś zrobił na swoje potrzeby własny protokół transmisji. Zacznij od określenia początku transmisji, może to być np. wysłanie pod rząd 4 bajtów 0xff, wtedy odbiornik będzie wiedział że na pewno jest w dobrym miejscy transmisji. Następnie zaczynasz wysyłać dane z potencjometrów,(adresy już nie są potrzebne) i na końcu wysyłasz np 0x00, żeby zakończyć transmisję. W takim sposobie realizacji będziesz miał kontrolę nad poprawnością odbieranych danych. Wszystkie ramki które nie spełniają kryterium -> 0xff - 0xff - 0xff - 0xff - data - 0x00. Przy takim założeniu potencjometr nie mógłby mieć wartości 0x00 i 0xff. Jeśli jest lepszy sposób na to chętnie poznam 🙂 Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »