Subject:
|
Re: I2C device for the RCX
|
Newsgroups:
|
lugnet.robotics
|
Date:
|
Sat, 11 Jan 2003 18:50:53 GMT
|
Viewed:
|
768 times
|
| |
| |
"Bastiaan v.Kesteren" <b.van.kesteren53@zonnet.nl> wrote:
> But the biggest problem is that the START set-up, SCL low time and SCL high
> time can't go lower than 2ms. When I do make them lower that 2ms, the frames
> get messed up. Could it be that the pulses, generated by the RCX, are not very
> precise? I don't have the tools to figure this out myself, so I hoped anyone
> else knows this.
> Also I've heard that this could be a problem whit BrickOS, that it is the
> software which makes the pulses, and that this isn't done very precisely. I
> don't know much about the BrickOS internals, so I hope anyone whit some BrickOS
> knowledge knows a bit more about this.
In the current release of BrickOS, the motors only
get updated by the timer ISR every 2ms, so that
probably explains why trying to twiddle the bits any
faster than that causes problems. (Joseph Woolley
has modified the kernel to update the motors once
every millisecond, but I don't think this patch has
made it into distribution yet.)
Also, BrickOS currently doesn't allow the motor outputs to be
driven full ON for any length of time. When the motors are
set to full speed (i.e. 255), every 512ms the output
drops low for 2 ms. This is a byproduct of using
the Bressenham algorithm for motor control with a modulo
of 256 and limiting max speed to 255. Since the speed and
sum variables are bytes, you can't simply change
the speed to 256 to get around the problem.
One way to improve things is to reduce the modulo
to 128 and allow speed values of 0 through 128. This
necessitates a change in the motor control algorithm, however.
Here's a section of code you can copy into dmotor.c to
implement this change (replaces existing motor summing
code):
; motor A
mov.w @_dm_a,r0
add.b r0h,r0l ; add delta to sum
bpl dm0 ; sum overflow?
and #0x7f,r0l
mov.b @_dm_a+2,r6h ; -> output drive pattern
xor.b r6h,r6l
dm0:
mov.b r0l,@_dm_a+1 ; save sum
; motor B
mov.w @_dm_b,r0
add.b r0h,r0l ; add delta to sum
bpl dm1 ; sum overflow?
and #0x7f,r0l
mov.b @_dm_b+2,r6h ; -> output drive pattern
xor.b r6h,r6l
dm1:
mov.b r0l,@_dm_b+1 ; save sum
; motor C
mov.w @_dm_c,r0
add.b r0h,r0l ; add delta to sum
bpl dm2 ; sum overflow?
and #0x7f,r0l
mov.b @_dm_c+2,r6h ; -> output drive pattern
xor.b r6h,r6l
dm2:
mov.b r0l,@_dm_c+1 ; save sum
Also, dmotor.h needs this define changed:
#define MAX_SPEED 128 //!< maximum motor speed
The only problem would be for BrickOS programs that
hard code speed function calls like this:
motor_a_speed(255);
motor_a_speed(128);
instead of:
motor_a_speed(MAX_SPEED);
motor_a_speed(MAX_SPEED/2);
For most applications being able to control the motor
to 1ms (or 2ms) granularity is fine, but sometimes it's nice
to be able get in there and twiddle the bits quickly. It
would be easy to modify the motor ISR to only update
certain outputs while leaving the others under direct control
of the user application using a masking mechanism. I've
implemented this scheme for a library I've been working on
(not in BrickOS yet), so if there's interest, I could port
it.
Mark
|
|
Message has 1 Reply: | | Re: I2C device for the RCX
|
| Hum. i think my first post was not very clear( and whit some stupid mistakes) I think you now how I2C works: there are to lines, SCL and SDA. so whit this device, I got to sensor ports, one for SCL and one for SDA. making high and low signals on the (...) (22 years ago, 12-Jan-03, to lugnet.robotics)
|
Message is in Reply To:
| | I2C device for the RCX
|
| Hello, A while ago, there whas a short thread about the I2C device for the RCX from Elector Electronics magazine No. 309, APRIL 2002. The conclusion was: way to slow, 3 commands per second was the maximum possible. Ive build it anyway, just for fun (...) (22 years ago, 11-Jan-03, to lugnet.robotics)
|
24 Messages in This Thread:
- Entire Thread on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
This Message and its Replies on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
|