Frequently Asked Questions (FAQ)


RoBIOS versions

  • There are currently 3 versions of each RoBIOS release (e.g. rob51q.hex, rob51e.hex, rob51f.hex).
  • All RoBIOS versions are supplied as ASCII files (.hex) and as binary files (.hx)
  • The RoBIOS version you install on an EyeBot controller has to match the camera connected:
  • rob51q.hex    for QuickCam grayscale (no longer produced), about 20 frames per second (fps)

  •                       for QuickCam color V2 (no longer produced), about 5 fps
  • rob51e.hex    for EyeCam C1 (no longer produced), about 3 fps
  • rob51f.hex    requires FIFO extension on controller: for EyeCam C1, about 10 fps

  •                      requires FIFO extension on controller: for EyeCam C2, about 3 fps

    Host systems

    Please note that BDM (Background debugger module) only runs on PC/DOS.
    The BDM is required only for assembly-level debugging or restoring a corrupted Flash-ROM

    Global variables

  • Try to avoid using global variables alltogether
  • Do not initialize global varibles upon declaration, i.e.:

  • int i=7;
    This instruction will not be executed if the same program is run a second time. Better use:
    int i;
    int main()
    { i=7; ... }
  • Do not use "start" as a global variable name. This is reserved for the system.
  • EyeSim: global variables can lead to problems in EyeSim, since they are visible to all robots because of the use of threads


    Reading of Multiple Analog Inputs

    Switching reading between different analog signals seems to give different readings, depending on the time interval between two reads (e.g. OSWait() ).
    Solution: The internal resistance of the measured analog signal should be max. 5KOhm, ideally however much less. If this value cannot be achieved,
    call OSGetAD() twice whenever changing the analog input channel.
    Example solution:
    int OSSetADChannel(int channel)
        int dummy = OSGetAD(GlobalChannel=Channel);

    int OSReadAD()
        return OsGetAD(GlobalChannel);

    Radio Communication

    The radio communication needs to be initialized with a software key before it can run.
    Press: <I> / REG sor setting or checking the registration code.

    Finding out the programmed configuration of an EyeBot

    Press Hrd/HDT you can see all peripherals that have been entered in the hardware description table. If there are 12 servos entered, so you can simply connect up to 12 servos to the connectors on the EyeBot's back. If you want to change the servo characteristics, then edit, compile (gcchdt) and download the "hdt" file.
    More info on this can be found at


    Accidentally erasing the EyeBot's Flash-ROM

  • The RoBiOS (Robot Basic Input/Output system) on the EyeBot is stored in flash memory and can therefore be upgraded using software. The hardware description table (HDT) is also stored in the same flash memory. RoBiOS  makes it possible to download new HDTs and even a new versions of RoBiOS, just like you download a user program, over a serial cable.

  • In the rare case that RoBiOS  gets corrupt, for example if a corrupt version of RoBiOS is downloaded, the controller cannot boot, so you cannot fix it by just download a new working version of RoBiOS.
  • In this case, you have to use the Background Debugger Module (BDM). A socket on the Eyebot marked "BDM" needs to be connected with the supplied cable to the parallel port of a PC. Besides re-writing the Flash-ROM, this connection can be used to debug/single-step a program on the Eyebot from a PC.

  • Please note: the supplied cable (MK3 and later) does not contain circuitry like the "standard Motorola BDM cable". This is not needed, since the circuitry is already included on the EyeBot controller itself.
  • Running the BDM under DOS is explained in the EyeBot online documentation. Use a fairly new BDM version (e.g. 1.22) and the FLASH.* plug-ins provided on our web site. BDM can be configured by editing BD32.CFG. In this file you should remember to set a number depending on the speed of the PC. The program is old - and the number should be very high on an average PC from our time. A table of values is found in the documentation included in the distribution. Another problem is that the program/connection seems to be very sensitive towards interrupts. Thus, running in plain DOS real-mode is recommended.

  • Re-installing RoBiOS using the BDM also wipes out any installed radio license code. If this happens to you, you need to email your distributor with the controller's serial number to obtaina new radio key. This can be installed by pressing <I> / REG.


    EyeBot does not boot at power on or reset.

    EyeBot serial connection to PC does not work.

    Transhex (Windows) or dl (Unix) does not detect the controller. If problem persists, try using a different host PC.

    EyeBot BDM-connection to PC does not work.

    EyeBot wireless communication demo does not work.

    EyeBot LCD has poor visibility.

    Sound recording demo has low volume.

    I need to drive servos which together use more than 3A

    The camera image seems to flicker

    Servos torque and jitter

    When a large number of servos is connected to the EyeBot and they are under constant load, you may see some servo-"jitter".
    This problem is due to very high power consumption by the servos' motors and can be solved:
    1. Use seperate batteries or power supplies for controller (7.2V) and servos (4.8V or 6.0V)
    2. Provide seperate power switches for controller and servos, so the controller can be switched on before the servos.
    3. If all servos are initialized at the same time, then they will periodically draw power at the same time (every 20 ms).
        To avoid this, insert small delays (about 1ms) between calls of SERVOInit for each individual servo. This will generally increase servo torque.
    4. Insert similar small delays (about 1ms) between calls of SERVORelease for individual servos to avoid weird servo behavior when
       they are all switched off at the same time.

    Can an EyeBot drive more than 12 servos?

    You can connect a total of 16 servos to the EyeBot, but then you'd lose some other functionality like timer and sound, so 14 servos is a reasonable maximum. There are 12 connectors for servos to plug in directly (TPU channels 2..13), and you can use the 2 motor connectors (motor A, motor B) to connect two additional servos with an adaptor cable.
    You have ground, Vcc and one PWM signal per motor connector. Check with an oscilloscope whether Motor+ or Motor- has the desired signal before you connect one extra servo (this depends on the software HDT settings).
    PLEASE NOTE: connecting a high number of servos might result in a total current above 3A, which is the current limit for the EyeBot! If this happens, a resettable fuse will temporarily shut down the controller..
    IMPORTANT: If you need to connect a large number of high current servos, you should not use the connectors on the back of the EyeBot. Instead, run separate cables for power supply (Vcc, ground) directly from the power supply to the servos and only connect the Signal pin from the EyeBot connectors to the servos.

    Can an EyeBot drive 12 servos and 2 DC motors at once?

    This will work only if no feedback encoders are used. With the standard Faulhaber motors, the 2 DC motors with encoders use TPU0..TPU6, which overlaps with the first 4 TPU channels used for servos. So in this case it is not possible to use the servo connectors Servo1 .. Servo4.

    How to modify the EyeBot controller for dual power supply (separate power for controller and motors)

    1. Remove component R20 (ferite bead next to SW1) to seperate servo & motor power from main power.
    2. Insert pin in hole of R20 next to R3 and solder. (install pin so that it extends from the bottom of the board)
    3. Solder the pin to Positive of new battery supply. Negative to connect to negative on old battery.
    Note: A fuse or resettable fuse must be installed in circuit to protect against excessive currents or short circuits. 


    Availability of RoBIOS source code

  • We do not disclose the RoBios source code. There is actually no need to have the source code, not even if you want to write low level system routines.

  • Thomas Bräunl 2003