If I recall a pulseoout 0 still makes a pulse.
I can tell you that what you have described sounds
like a current issue, or the servos are being told
to go out of range.
Are you running your board from a good battery?
Did you try using just 1 servo?
Chris
--- In basicx@yahoogroups.com, "zack.nathan" <zack.nathan@...> wrote:
>
> Well yes, i use a RAMB II so it should be ok. But even if it were re-booting
surly the servo's shouldnt move because of the variables start of value of 0.
>
>
> --- In basicx@yahoogroups.com, "robotlogic" <chris@> wrote:
> >
> > Zack,
> >
> >
> > It sounds like your robot arm is starving for current and the BX-24
> > is rebooting.
> >
> > You need a minumum of 2amps of available current to run each hobby servo. Do
you have that? Try starting with only 1 servo connected and see what happens.
> >
> >
> > Chris
> >
> >
> >
> > --- In basicx@yahoogroups.com, "zack.nathan" <zack.nathan@> wrote:
> > >
> > > Ok so basically i have built a robotic arm and would like to control it
from the computer. I have done the application for the computer and it works. I
have also programmed the firmware for the bx-24 chip. However when i turn it on,
all the servo's move so the arm looks like it is having a spasm. I dont know why
this is. Could someone please check through it and tell me whats wrong, many
thanks, zack.
> > >
> > > CODE:
> > >
> > >
> > > Dim Data(1 To 3) As Byte ' defne variables
> > > Dim Com1_In(1 To 40) As Byte
> > > Dim Com1_Out(1 To 20) As Byte
> > > dim baseservo as single
> > > dim basejointservo as single
> > > dim middlejointservo as single
> > > dim turngripperservo as single
> > > dim tiltgripperservo as single
> > > dim gripperservo as single
> > > Sub Main()
> > > Call OpenQueue(Com1_In, 40)
> > > Call OpenQueue(Com1_Out, 20)
> > > Call OpenCom(1, 2400, Com1_In, Com1_Out)
> > > ' Set pins 5 - 20 to outputs
> > > Register.DDRA = &HFF
> > > Register.DDRC = &HFF
> > > baseservo = 0.0 ' start of with the pulses being 0, ie not
moving
> > > basejointservo = 0.0
> > > middlejointservo = 0.0
> > > turngripperservo = 0.0
> > > tiltgripperservo = 0.0
> > > gripperservo = 0.0
> > > Do
> > > call pulseout(5, baseservo, 1) ' move joints
> > > call pulseout(6, basejointservo, 1)
> > > call pulseout(7, middlejointservo, 1)
> > > call pulseout(8, turngripperservo, 1)
> > > call pulseout(9, tiltgripperservo, 1)
> > > call pulseout(10, gripperservo, 1)
> > > If StatusQueue(Com1_In) Then
> > > Call GetQueue(Com1_In, Data(1), 1)
> > > If Data(1) = 255 Then ' if data byte is found do algorithm
> > > Call GetQueue(Com1_In, Data(2), 2)
> > > Call GetQueue(Com1_In, Data(3), 3)
> > > ' Write the 2 data byte to the BX-24 pins
> > > Register.PortA = Data(2)
> > > Register.PortC = Data(3)
> > > if (Data(2) = 1) then
> > > baseservo = csng(Data(3)) * 0.00001
> > > elseif (Data(2) = 2) then
> > > basejointservo = csng(Data(3)) * 0.00001
> > > elseif (Data(2) = 3) then
> > > middlejointservo = csng(Data(3)) * 0.00001
> > > elseif (Data(2) = 4) then
> > > turngripperservo = csng(Data(3)) * 0.00001
> > > elseif (Data(2) = 5) then
> > > tiltgripperservo = csng(Data(3)) * 0.00001
> > > elseif (Data(2) = 6) then
> > > gripperservo = 0.002
> > > elseif (Data(2) = 7) then
> > > gripperservo = 0.001
> > > elseif (Data(2) = 8) then
> > > exit do
> > > end if
> > > end if
> > > End If
> > > Loop
> > >
> > > End Sub
> > >
> >
>