Skocz do zawartości

problem z serwem TowerPro (program)


Pomocna odpowiedź

Napisano

Witajcie. To mój pierwszy post na tym forum. W najbliższym czasie chcę zbudować robota dwunożnego na kształt maszyn z gry mechwarrior. Trochę materiałów zebrałem, dziś kupiłem serwa no i chciałem je sprawdzić. Mam uC Atmega8. Podłączyłem jedno serwo, napisałem w bascomie skromny program, ale serwo nie działa. Zasilam je z osobnego zasilacza 4,5V. Serwo ma moment 1,6kg (9g wagi). Oto program.

$regfile = "m8def.dat"
$crystal = 8000000
Config Pinb.3 = Output
Config Servos = 1 , Servo1 = Portb.3 , Reload = 10
'Enable Interrupts
Dim Zmienna As Integer
Zmienna = 100
Cls
Do
Servo(1) = Zmienna
Waitms 1000
Zmienna = Zmienna + 10
If Zmienna = 300 Then Zmienna = 100
Cls
Lcd Servo(1);

Loop
End

Czy widzicie tu jakiś błąd? serwo wogóle nie reaguje.

W najbliższym czasie chcę zbudować robota dwunożnego na kształt maszyn z gry mechwarrior.

Jeżeli ma być sterowane krzesłem, to już jest tutaj taki jeden 😃, co to miał w zamyśle ... A wracając do tematu zmieniłeś fuse bity? Bo jeżeli nie ... to fusy okazały się jak zwykle nieocenionym narzędziem diagnostycznym.

krzesłem....ha:)

Fusebity zmienione bo mikroprocek działa. Tylko z tymi serwami mam problem. Według kolegi program jest dobry? Czy pin sterujący serwem musi być jakiś konkretny?

Problem tkwi najprawdopodobniej tu:

'Enable Interrupts 

Dałeś " ' ", więc odblokowanie przerwań się nie skompilowało i nie działa. Daj tak:

Enable Interrupts
Problem tkwi najprawdopodobniej tu:
'Enable Interrupts 

Dałeś " ' ", więc odblokowanie przerwań się nie skompilowało i nie działa. Daj tak:

Enable Interrupts

A co przerwania mają wspólnego z tym kodem, skoro on nie korzysta z timerów.

Korzysta, to jest Config Servos.

Wiem bo kiedyś tak samo zrobiłem, zapomniałem napisać i bez odblokowania przerwań nie działa.

Ogólnie to wszystko fajnie, ale ... z tego co pamiętam to lepiej mieć 10MHz, bo poniżej są jakieś problemy i ogólnie to średnio działa.

$regfile = "m8def.dat"
$crystal = 10000000
$baud = 9600

Config portc.5 = Output
Config SERVOS = 1 , Servo1 = Portc.5 , Reload = 10
Config Int0 = FALLING
Config Rc5 = Pind.2 , timer = 2

On Int0 Przerwanie

Enable Interrupts
Enable Int0

Dim Address As Byte
Dim Command As Byte
Dim serwo1 As Byte

serwo1 = 100

Print "Start programu"

Do
  Servo(1) = serwo1
Loop

Przerwanie:
  Disable Int0
  Enable Interrupts
  Getrc5(address , Command)
  If Address <> 255 Then
     Command = Command And &B01111111

     if Command = 32 then
        serwo1 = serwo1 + 5
     end if
     if Command = 33 then
        serwo1 = serwo1 - 5
     end if

     Print Address ; "  " ; Command ; " " ; serwo1
  End If
  Enable Int0
Return

Kiedyś sobie naskrobałem takie coś do testowania serwa, działało 🙂, więc się możesz zasugerować i z Integer zmienić na Byte, ogólnie to wtedy nawet przykład z helpa działał 😋. W każdym bądź razie za ten kod nie ręczę, ale raczej działał.

KD93, całkiem możliwe że masz racje 🙂

Korzysta, to jest Config Servos.

Wiem bo kiedyś tak samo zrobiłem, zapomniałem napisać i bez odblokowania przerwań nie działa.

Mea culpa 🙂, zasugerowałem się zmiennymi, masz rację, przerwania powinny być włączone, ja mam kiepskie doświadczenia z poleceniem config serwos, ale niektórzy piszą, że lepiej używać wyższych kwarców przy tym sposobie sterowania serwami, mi przy 16MHz dopiero działało.

przerwania włączyłem ale nadal nic. Ten program u kolegi Luko - w poleceniach servo1 nie ma nawiasów. U mnie bez nawiasów wyskakuje błąd. Czy pin sterujący musi być podłączony pod jakiś konkretny pin mikroprocesora? Zauważyłem takie coś - gdy wyłącze przerwania to czas generowany przez kwarc jest dobry - to znaczy na wyświetlaczu lcd wartości zwiększają się o 10 (według programu) co 1 sekunde. A gdy włącze przerwania to ten czas jest dłuższy...

Jest tylko jedno polecenie Servo(1) pomiędzy DO i LOOP, reszta to jest zmienna korygowana o konkretną wartość, bądź jak widać na początku przypisanie wartości ... coś pomieszałeś chyba 😋

beowolf, a na LCD wyświetla się prawidłowo? Zakres 100-300 to dużo za dużo, ale skoro ci wogóle nie reaguje to problem gdzie indziej jest rzeczywiście.

To który program w końcu wałkujemy, Twój czy Luko?

mój ale wcześniej była mowa o Luco. Wiem, że za dużo, ale do wartości 200 serwo powinno wogóle reagować. A ono nic nie robi. Nawet jak wywale z programu LCD i inne komendy z nim związane to i tak serwo nie reaguje

Jedyne co mi do łba przychodzi to to taktowanie, być może razem z niskim napięciem zasilania powoduje to nieprawidłowość. Jesteś pewny na 100%, że masz ustawione 8MHz? Masz może w domu jakiś rezonator 10MHz lub więcej? Bo powinien być użyty co najmniej 10MHz, ale matrix chyba kiedyś robił na 8 i mu działało podobno.

mam 16 mhz ale nie wiem czy dobry. Podłączyłem go, ale znowu nie wiem czy dobrze ustawiłem fusebity bo nic nie działało. Nawet czas zliczał źle. Jeśli kolega wie jakie mają mieć wartości hfuse i Lfuse to jeszcze raz przelutuje

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...