Skocz do zawartości
mateusz45412

Problem z programem (Bascom) do serwomechanizmu

Pomocna odpowiedź

Po wgraniu tego programu do mikrokontrolera servo nie obraca się ale słychać że coś działa. Po rozebraniu serva widać że silnik minimalnie się obracają.

Co mam dopisać do tego programu aby servo się poruszyło ?

$regfile = "m8def.dat" 
$crystal = 12000000 
Config Servos = 1 , Servo1 = Portd.1 , Reload = 10 
Config Portd = Output 
Enable Interrupts 
Dim Zmienna As Integer 
Zmienna = 150 
Do 
  Servo(1) = Zmienna 
  Waitms 1000 
Loop 
End 

Najpierw próbuje uruchomić servo1 na porcie PD1

To schemat który zaprojektoałem

Udostępnij ten post


Link to post
Share on other sites

Czytałeś ten temat? Czym to zasilasz?

Udostępnij ten post


Link to post
Share on other sites

aixI, tu nie chodzi o zasilanie. Na schemacie nie ma rezonatora, za to w programie jest zdefiniowany 12MHz i stawiałbym na to, że tu jest pies pogrzebany. Dodatkowo z tego co kojarzę to wartość zmiennej przekazywanej na serwo powinna być w zakresie od 0 do 100 a nie 150 jak u kolegi.

Udostępnij ten post


Link to post
Share on other sites

A widzisz, nie zauważyłem tego, że nie ma zewnętrznego rezonatora - możliwe, że problem leży tutaj, choć może być to inna przyczyna.

Udostępnij ten post


Link to post
Share on other sites

To znaczy że program jest dobry?

W którym miejscu na schemacie powinienem umieścić rezonator?

[ Dodano: 09-02-2015, 14:55 ]

Tym zasilam

Udostępnij ten post


Link to post
Share on other sites

Zobacz w dokumentacji (rezonator).

Ps. Podciągnij reset do vcc przez r 10k. I dodaj filtrację zasilania przy uC.

Udostępnij ten post


Link to post
Share on other sites

mateusz45412 coś widzę, że nie wiesz, co i jak. Więc wyjaśnię:

Ty w sowim(?) kodzie podałeś wartość swojego zewnętrznego rezonatora "$crystal = 12000000", czyli 12MHz i zadeklarowałeś swój uC "$regfile = "m8def.dat"", czyli ATmega8. Jeżeli nie masz zewnętrznego rezonatora (czyli masz domyślnie ustawiony wewnętrzny zegar na 1MHz w ATmedze8), to nie musisz używać kwarcu i możesz wtedy zmienić 12000000 na 1000000 (z 12MHz na 1MHz). Tak jak kolega wyżej mówił, warto dodać parę kondensatorów filtrujących zasilanie do nóżek VCC uC + podciągnięcie resetu rezystorem 4,7k - 10k do VCC.

Udostępnij ten post


Link to post
Share on other sites

Zmienilem 12000000 na 1000000 ale nadal nie działa tak jak chce 😕

$regfile = "m8def.dat"
$crystal = 1000000
Config Servos = 1 , Servo1 = Portd.1 , Reload = 10
Config Portd = Output
Enable Interrupts
Dim Zmienna As Integer
Zmienna = 150
Do
  Servo(1) = Zmienna
  Waitms 1000
Loop
End

Tutaj jest link jak to wygląda

Udostępnij ten post


Link to post
Share on other sites

mateusz45412, czy zajrzałeś chociaż do helpa Bascoma? Mam wrażenie, że nie czytasz tego co przynajmniej ja napisałem.

Udostępnij ten post


Link to post
Share on other sites

Teraz też dopiero zauważyłem, że na twoim schemacie podłączyłeś piny odpowiedzialne za przetwornik analogowo-cyfrowy (ADC) swojego uC do +5V, to nie dobrze. Zajrzyj pod ten link: http://mirekk36.blogspot.com/2012/04/mikrokontroler-prawidowe-zasilanie.html

Zauważyłem, że masz już jakąś polutowaną płytkę, czy to co jest na twoim schemacie (ten z pierwszego postu) jest w rzeczywistości? Czyli na tej polutowanej płytce?

Udostępnij ten post


Link to post
Share on other sites
Teraz też dopiero zauważyłem, że na twoim schemacie podłączyłeś piny odpowiedzialne za przetwornik analogowo-cyfrowy (ADC) swojego uC do +5V, to nie dobrze.

Akurat to nie ma wpływu na działanie serwa i prawdę mówiąc sam wielokrotnie tak robiłem i nie jest to jakimś błędem. Po prostu robiąc tak trzeba się liczyć z tym, że na linii zasilania może pojawić się jakiś syf, który będzie wpływał na błędy pomiaru.

Udostępnij ten post


Link to post
Share on other sites

Tak, wiem, że to mogło nie mieć wpływu na to czy serwo działa czy nie. Chodziło mi głównie o to, aby kolega mateusz45412 wiedział jak zrobić, aby było dobrze 🙂

PS: Sabre, w swoim poście zacytowałeś to, co ja pisałem, a napisałeś "mateusz45412 napisał/a:" 😋

Udostępnij ten post


Link to post
Share on other sites

aixI, to nie ja napisałem, to był cytat, który najwidoczniej źle zadziałał. Autor cytatu sam się podstawia.

Udostępnij ten post


Link to post
Share on other sites

Płytkę projektowałem w programie Egle i została ona wytrawiona zgodnie ze schematem ( ma tylko jeszcze więcej wyprowadzeń)

Na tej stronie

https://www.forbot.pl/forum/topics7/inny-prototyp-robota-edukacyjnego-vt2157.htm

został zamieszczony opis, schemat i program do robota. W programie zmieniłem w nim tylko PORTD.6 na PORTD.1 i PORTD.7 na PORTD.2, wgrałem i servo 1 zaczeło się z małymi problemami obracać.

Po zmianie $crystal = 4000000 na $crystal = 1000000 ( Tak jak mi pisaliście) obracało się prawidłowo.

Metodą prób i błędów przerobiłem program i aktualnie obracają mi się trzy serva 🙂 .

Program po przerobieniu wygląda tak:

$regfile = "m8def.dat"
$crystal = 1000000

'Robot edukacyjny
'PD5 - lewa dioda | PD4 - śr. dioda | PD3 - prawa dioda
'PD6 - prawe serwo | PD7 - lewe serwo
'PD0 - czujnik prawy | PB0 - czujnik lewy

'Deklaracja zmiennych:
Dim I As Integer
Dim Pomocnicza As Integer

'Konfiguracja portów:
Config Portd.3 = Output
Config Portd.6 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.2 = Output
Config Portd.1 = Output
Config Portd.0 = Input
Config Portb.0 = Input

'Ustawienia początkowe stanów na portach:
Reset Portd.3
Reset Portd.4
Reset Portd.5
Reset Portd.6
Reset Portd.7

'Główny program:
Do

If Pind.0 = 1 And Pinb.0 = 0 Then                           'Jeśli wciśnięty czujnik prawy:
  Gosub Cofnij
  Gosub Obrot_w_prawo
Else                                                        'Jeśli wciśnięte oba czujniki:
  Gosub Cofnij
  Gosub Obrot_w_prawo
  Gosub Obrot_w_prawo
End If

Loop
End

'Poszczególne funkcje

Cofnij:
For I = 1 To 15
Pulseout Portd , 4 , 200
Pulseout Portd , 2 , 200
Pulseout Portd , 1 , 200
Pulseout Portd , 3 , 200
Waitms 20
Next
Return

Obrot_w_prawo:
Set Portd.6                                                 'Zapala diodę prawą
For I = 1 To 15
Pulseout Portd , 4 , 360
Pulseout Portd , 2 , 360
Pulseout Portd , 1 , 360
Pulseout Portd , 3 , 360
Waitms 20
Next                                                        
Return

Na pewno ulegnie on jeszcze zmianie.

Dziękuje wam za pomoc 😉

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...