Skocz do zawartości

serwo - problem z rezonatorem?


Majski

Pomocna odpowiedź

Zrobiłem sobie jak sądziłem prosty układ z 1 serwomechanizmem.

Przyjąłem od razu, że potrzebuje rezonator zewnetrzny 16MHz, żeby nie mieć problemów z serwem. Napisałem prosty kod:

$regfile = "m48def.dat"
$crystal = 12000000

Config Pinb.2 = Output
Config Servos = 1 , Reload = 10 , Servo1 = Portb.2

Dim I As Byte


Enable Interrupts

I = 120
Servo(1) = I

End

i problem w tym, że serwo nie rusza się, powinno w moim mniemaniu przesunąć się do pozycji zadanej na samym starcie programu. Wczesniej jak cos probowałęm robic z programem to serwo chociaż wariowało cały czas przekręcało sie o jakieś 40 stopni w lewo a pozniej w prawo. Zastanawiam się teraz czy to wina mojego programu, czy może złego rezonatora zewnetrznego a może źle skonfigurowanych fusebitow(o ktorych wiem jedynie tyle co wyczytalem w sieci).

Wiecie może o co chodzi? bo ja juz nie mam bladego pojecia:/

Link do komentarza
Share on other sites

Na schemacie masz 16MHz, w programie zadeklarowałeś 12MHz.

Do fusebitów (i nie tylko) polecam SinaProg - większość procków ma predefiniowane listy ustawień, czyli zmiana fuse'ów ogranicza się do wybrania pozycji z listy.

Jeszcze jedno - GND i sygnał są w serwach z brzegu, w środku jest napięcie. U Ciebie na schemacie VCC i GND są zamienione miejscami w złączu serwa.

Polecam też ten artykuł:

https://www.forbot.pl/forum/topics20/jak-przerobic-serwomechanizmy-vt3902.htm

Link do komentarza
Share on other sites

sorry pomylilem sie przy wpisywaniu programu(stary program probowałem też na 12MHz zeby zobaczyc czy to nie wina mojego rezonatora). a co do schematu tez blad w rysowaniu na szybko schematu:). co do tych fusebitow wlasnie sprawdzam:)

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Majski, spróbuj na innym pinie z innego portu. Ja kilka dni temu miałem to samo z megą168, na porcie B nie działało, jak zmieniłem na pin z portu D, to ten sam kod (ze zmienionym tylko pinem) zadziałał bez problemu.

Tak swoją drogą to brakuje pętli głównej

Do

Loop

End

chociaż bez tego o dziwo kompiluje się bez problemu.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Fusy w moim podpisie.

cos mi nie chce się ładować Twoja strona. być może przez moj super szybki internet ale podejrzewam ze strona nie dziala.

Tak swoją drogą to brakuje pętli głównej

Do

Loop

End

chociaż bez tego o dziwo kompiluje się bez problemu.

okej miałem nadzieję, że pętla w tym przypadku nie będzie w ogole potrzebna więc ją wywalilem z oryginalnego kodu, jednak nie mialem racji:)

teraz rzeczywiscie program serwo się rusza i chyba zostaje w pozycji którą zadałęm ale jeszcze przeprowadze w nocy pare testow:)

Link do komentarza
Share on other sites

okej sprawdziłem czy działa i niestety coś cały czas źle robię. Sprawdzałem na paru serwach tego samego typu (TowerPro MG995) i w jednym (kupionym wczesniej od pozostałych reakcja na ten prosty progran wyglada caly czas tak samo. Zato w 2 nowych(niby ten sam model ale troszke sie rożnia nie mam pojecia dlaczego) sprawa wyglada tak ze jakbym nie ustawił pozycji początkowej serwa zawsze wraca do maksymalnego wychylenia w prawo(oczywiscie nie tak od rau, przeskakuje z dwa razy po 10-20stopni a pozniej co kolejny takt przesuwa sie prawie niezauwazalnie w prawo az do konca i slychac tylko tykanie w rownych odstepach czasu).

:/

ps fusebity ustawiałem w bascom-avr 110111 (ext. Full swing crystal; start-up time PWRDWN/RESET: 16K CK/14CK + 65 ms;[CKSEL0111;SUT:11] wiec chyba wszystko powinno byc ok:/

Link do komentarza
Share on other sites

Zajrzyj do linka, który Ci podałem - masz tam w pierwszym punkcie prosty schemat i sprawdzony kod. Jeśli to Ci nie zadziała, to najprawdopodobniej wina ustawień rezonatora.

Link do komentarza
Share on other sites

Zajrzyj do linka, który Ci podałem - masz tam w pierwszym punkcie prosty schemat i sprawdzony kod. Jeśli to Ci nie zadziała, to najprawdopodobniej wina ustawień rezonatora.

zajrzałem i napisałem przepisałem kod z poprawkami na wyjscie serwa i rezonatora i niestety to samo cały czas

$regfile = "m48def.dat"
$crystal = 16000000

Config Pind.3 = Output
Config Servos = 1 , Reload = 10 , Servo1 = Portd.3

Enable Interrupts

Dim Zmienna As Integer   'Nasze "odchylenie" serwa
Zmienna = 150            'Czas trwania impulsu będzie wynosić Zmienna*Reload=1500us (1,5ms)




Do
  Servo(1) = Zmienna
  Waitms 1000
Loop

End

mowiąc o ustawieniach rezonatora masz na mysli ustawienia fusebitow?

Link do komentarza
Share on other sites

Odpowiadając na PW - niespecjalnie mam w tygodniu czas, z resztą skoro wszystko prawidłowo podłączyłeś, to na 99% problem leży po stronie ustawień fusebit'ów.

Odpal sobie SinaProga, ustaw zgodnie z informacjami w moim arcie (najważniejsze, żeby programator rozpoznał mikrokontroler):

https://www.forbot.pl/forum/topics20/programowanie-avr-przy-pomocy-sinaprog-nakladka-na-avrdude-vt3923.htm

Wybierz oczywiście atmega48, kliknij "advanced" w sekcji "fuses", kliknij "C" w sekcji "Low Fuses", odznacz opcję "Divide by 8 clock internally...", a z listy rozwijanej wybierz ostatnią pozycję:

Ext. Crystal Osc.; Frequency 8.0-    MHz; Start-up ...

(CKSEL i SUT to same "1").

Następnie OK i kliknij na przycisk "Write". Jeśli Serwo będzie się dziwnie zachowywać, to spróbuj jeszcze zmienić wartość "Zmienna" w programie w granicach 100-200. Albo zmieniaj w programie jej wartość np. co 1 sekundę o 10 (zaczynając od 10) i obserwuj, kiedy serwo zaskoczy.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

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ę »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.