# Frequently Asked Questions (FAQ)

## Software

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

- Linux: full package and rpm (RedHat) supplied on ftp
- Windows 98/2000/NT/XP: full package and install-tool supplied on ftp
- Solaris: cross compiler supplied on ftp
- SGI: cross compiler supplied on ftp
- Macintosh: in principle possible, but currently no compiler on ftp
Downloading requires a Mac Din-8 to DB9 adaptor

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);`
> `OSWait(1);`
> `}```

> `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 http://robotics.ee.uwa.edu.au/eyebot/ftp/ROBIOS/docs/HDT

## Hardware

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

- Does the display show a horizontal line when pressing reset?
If so, you probably accidentally erased the RoBIOS operating system from the flash-ROM.
Look at section Debug on how to reinstall RoBIOS using the background debugger.
- Does the display not show anything at all?
In that case, you may have blown the controller's fuse, either by connecting power with wrong polarity or by a too high current (e.g. short circuit). Use a multimeter to check whether any current is flowing when you switch on the EyeBot. If current is flowing, try to re-install RoBIOS via the background debugger as discussed above. If no current is flowing, see the instructions to replace the fuse.

Please note: From hardware version 3.12 on, the fuse has been replaced by a reconstituting poly-switch (e.g. Farnell 131-724). If a too high current occurs, the switch cuts power -- after about 5 min. the switch will return to the normal state. No fuse-replacement is necessary!

#### EyeBot serial connection to PC does not work.

Transhex (Windows) or dl (Unix) does not detect the controller.

- Windows

- use tool transhx32.exe
- In PC Bios the serial port addresses may be specified as "to be automaticly assigned". Change this to stationary and standard address.

- Unix

- use script "dl"
- Protections for serial ports need to be "rw" for all. Type: chmod a+rw /dev/tty* /dev/cua*

- Set EyeBot CPU frequency to 33MHz, because this cuases the least speed discrepancy. See Baudrate-Note.
- Make sure serial cable is connected correctly on EyeBot and serial port COM1 on the PC (or any other port if you change the standard scripts).
- Make sure the Baud rate on the EyeBot and on the PC match (EyeBot standard is 115,200 Baud - some older PC cannot go that fast).
See section Download on how to change serial settings on the EyeBot.

If problem persists, try using a different host PC.

#### EyeBot BDM-connection to PC does not work.

- Make sure BDM cable is inserted correctly on EyeBot (pin 1 is marked) and on PC (in parallel port).
- Make sure PC's parallel port is set to "EPP" mode. You can change/verify the port setting by entering the system setup when booting the PC (usually by pressing the "Del" key during bootup).

#### EyeBot wireless communication demo does not work.

- Make sure the optional wireless communication module is inserted.
- Press menu item "< I >" from the main menu on the EyeBot, then press "REG".
This will display the "Register Radio" screen. You need to send (email) the serial number displayed on the LCD to your distributor, who will supply you with the security key to enter.
After this procedure, the wireless communication functions are enabled.

#### EyeBot LCD has poor visibility.

- There is a potentiometer on the underside of the LCD with which you can change the contrast of the display

#### Sound recording demo has low volume.

- This is a demo only. The microphone is intended to be used for sound detection, not for understanding speech
- If you want to make the EyeBot speak, then better record sound on a PC, then convert the sound file with the Robios sound tool on a PC and download it on the EyeBot. It will sound much better then!
- See RoBIOS sound tool: http://robotics.ee.uwa.edu.au/eyebot/ftp/ROBIOS/pc-appl/audio/ for transforming a sound from ".wav" to EyeBot binary.
- For space reasons there is only a piezo speaker on the EyeBot. For improving sound quality you can connect a standard 8 Ohm external mini speaker.

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

- The current flowing through the EyeBot is limited by a 3A fuse or poly-switch (from version 3.12 on) in order to protect the PCB.
- If you connect a high number of powerful servos, these may use more than 3A - so you cannot connect them directly to the EyeBot.
- Instead use a separate power supply for the servos or just power the servos from the same power supply, but connect power directly from the plus pole of the power supply to the plus poles of the servos - do not use the 3 pin connector on the EyeBot.
- Each servo has 3 pins:

- ground (connect to EyeBot ground)
- Vcc (about 6V, connect directly to power supply)
- signal (connect to EyeBot TPU output channel)

#### The camera image seems to flicker

- Make sure the controller is running at 35MHz
- Very often, fluorescent light bulbs in a lab can cause image flicker (even the ones labelled "flicker-free"!) - this is not a camera fault.
Make sure that your lab set-up is using natural light or light bulbs instead.

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

## General

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