ATmega8 i rs232

May 26, 2005 10 Replies

Witam



Mam pytanie czy na Atmega komunikacja przez rs232 mo¿e dobrze dzia³aæ z wewnêtrznym oscylatorem 8MHz?? Robie uk³ad sterownika serwomechanizmów modelarskich, ma byæ to sterowane przez rs232. Zastosowa³em sprawdzony schemat(dzia³a³ mi na at90s2313) i tu pojawi³y siê problemy...program napisa³em w bascomie i sprawdza³em na ró¿nych terminalach i prêdko¶ciach transmisji... i za ka¿dym razem to samo, zamiast okre¶lonego tekstu odbierana s± losowe serie ró¿nych znaków Co mo¿e byæ przyczyn±?? Po³±czenie z pc jest napewno dobre, podk³ada³em 2 uk³ady max232, wymieni³em kondensatory... Poprostu brak ju¿ mi pomys³ów co nie tak jest. Jedyne co odkry³em ze jak zmieni³em Baud na 10300 zamiast 9600 to na terminalu z ustawionym 9600 czasem za³apa³ co¶, to samo przy obni¿eniu napiêcia zasilania(idzie przez



7805) wy¶wietli prawid³owo ten tekst terminal... Co mo¿e byæ nie tak??

Użytkownik Marcin napisał:

Przy 8MHz ma być właśnie 9600, daje to ok 0.5% błędu w transmisji. Ale szczeliny czasowe są na tyle szerokie, że działa jak należy. Może ten wewnętrzny oscylator nie działa na 8MHz? Nie możesz podpiąć zewnętrznego?

Mi na atmega8 działa bez problemu.

Sprawdź też czy masz ustawione 8N1, bo bascom chyba tylko w tej konfiguracji działał (może się mylę).

m.

w tym widze szanse, ¿e w³a¶nie przyczyna mo¿e le¿ec w tym ze pracuje na wewnêtrznym. Mo¿e ma³a dok³adno¶æ lub uart dziwnie z nim dzia³a. Na 90s2312 nigdy nie mia³em takich problemów,nawet na ma³o pasuj±cych warto¶ciach kwarców

sprzêtowy chyba standardowo tak, bo programowy mo¿na ustawiaæ parametry,no ale tu tez próbowa³em wszelkie kombinacje ustawieñ bitów, parzysto¶ci, b. stopu i nic. Wiêc mo¿e szansa w rezonatorze

Tak ale musisz skalibrowaæ wewnêtrzny oscylator i zapewniæ stabilne napiêcie zasilania.

Pawe³

zasilanie jest stabilizowane i dobrze odfiltrowane W³a¶nie przestawi³em na 4Mhz i teraz dzia³a. Na 3 serwomechanizmy powinno starczyæ ale przy wiêkszej liczbie to zbyt ma³e taktowanie no ale wtedy pozostanie zewnêtrzny 16Mhz uruchomiæ. Co do kalibracji to jeszcze nie próbowa³em...poczytam i zobaczê co to da;)

Pozdrawiam

E, bez przesady, 4MHz to nie tak mało do sterowania byle silniczkami ;) Swoją drogą naprawdę polecam podpiąć zewnętrzny kwarc. To tylko 2 zł, a satyfakcja gwarantowana.

m.

Niestety zauwa¿y³em ¿e przy wiêkszej ilo¶ci serw to ju¿ jest problem. Serwonapêdy modelarskie to specyficzne "silniczki":) problem polega na wytworzeniu impulsów o zmiennym wype³nieniu(z du¿± rozdzielczo¶ci± i niezale¿nie na ró¿nych wyj¶ciach) co elektronika serwa przek³ada na k±tow± pozycje osi. Im szybsze taktowanie tym czê¶ciej mo¿e byæ wywo³ywane przerwanie timera i mo¿na uzyskaæ wiêksz± rozdzielczo¶æ pozycjonowania. Kwarc mam kupiony pad k±tem tego uk³adu(16MHz) tylko nie przewidzia³em ¿e tak siê bêdzie zachowywa³ dziwnie na wewnêtrznym taktowaniu i nie uwzglêdni³em na p³ytce miejsca:) najwy¿ej pozostanie "paj±k":)

Witam.

4 MHz to rzeczywiście za mało, żeby kodować PWM/PPM dla serw modelarskich. Czas trwania pojedynczego impulsu sygnałowego w tym kodowaniu trwa od 1 do 2ms. Jeśli założymy, że w skrajnych wychyleniach każdy impuls będzie trwał 1ms, to przy rozdzielczości 8-bitowej, będziemy musieli dostarczać dane na RS232 z prędkością min. 8000b/s. Moim zdaniem receptą na te 4 MHz byłoby postawienie za mikrokontrolerem jakiegoś rejestru/bufora (analogowego lub cyfrowego), który przechowywałby ostatnio ustawione przez ATmegę osiem wartości, z których następnie sczytywałby układ kodujący PWM/PPM. W nowej EP 5/2005 jest opisany 8 kanałowy przetwornik C/A z interfejsem RS232. Zastosowano tam 8-kanałowy przetwornik TLV5608, który mógłby stanowić bufor analogowy (Jeśli rzeczywiście przechowuje wartości stanów

- jestem nowy w tej materii). Rozumiem że Twój układ kodujący otrzymuje już wartości analogowe dla poszczególnych kanałów z jakiegoś przetwornika C/A. Czy w swoim rozwiązaniu bazujesz może na układzie z

formatting link
?

Sam jestem zainteresowany zaprojektowaniem takiego układu kodującego PWM/PPM do sterowania serwami za pomocą komputera, lecz na razie jeszcze bez mikrokontrolera - ot takie wyzwanie. Planuję taki schemat: MAX232 -> (Rejestr przesuwny 8-bit, Licznik i jakiś generator impulsów synchronizujących z RS232(kwarc?)) -> (Przetwornik C/A z buforem i być może multiplekser) I dalej już układ z wyżej wspomnianej strony.

Oczywiście dla 8 kanałów (serw) i rozdzielczości 8 bitów na jeden kanał.

mój sterownik dzia³a na tej zasadzie ze przez rs232 s± wysy³ane komendy na zasadzie: numer serwa;pozycja i tyle reszt± ju¿ zajmuje siê Atmega wiêc prêdko¶æ transmisji te¿ ma mniejsze znaczenie bo niê bêdzie potrzeby zmiany po³o¿enia 9600razy na sekunde:) korzystam z gotowych procedur bascoma które opieraj± siê o timer(nie pamiêtam ju¿ który) i tu w³a¶nie oto chodzi o czym pisa³e¶ ¿e ten przedzia³ od 1-2 ms powiniem móc byæ zmieniany jak najmniejszymi krokami a to mo¿na uzyskac czêsto¶cia timera którego maximum zale¿y od taktowania.. Sterownik dzia³a, wykonywa³em go na zamówienie, dzia³a na 3 serwach(tyle chcieli) wiêc narazie nie bêde siê nad nim rozczula³ by dopracowywaæ bo wszystko jest ok :)

Eeee... bez przesady Na ATtiny15 popędzanym wewnętrznym oscylatorem 1,6MHz spokojnie steruję pięcioma serwami z rozdzielczością impulsu = 10us i procek moim skromnym zdaniem obija się przy tej robocie.

Czas trwania pojedynczego impulsu sygnałowego w tym

Ale serwa modelarskie nie muszą dostawać impuslu aż tak często.

20ms odstępu między impulsami spokojnie im wystarcza. Zmniejsza się tylko czas reakcji serwa na zadany kąt ustawienia oeczyka, ale nie ma wielkiego wpływu na dokładność.

Pozdrawiam Grzegorz Kurczyk

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required