Sunday, June 21, 2009

My take on SST

My search of some sort of OS suitable for N1's on-board computer based on LPC2103 lead me to an article "Build a Super Simple Tasker" (SST). The article describes a "run-to-completion (RTC) prioritized, fully preemptive, deterministic real-time kernel". Although I like the simplicity of the idea I think that tight coupling between an event and its target task in SST implementation (see Listing 3) reduces flexibility of the kernel. The Observer pattern is commonly utilized by event propagation frameworks including frameworks designed by Mother Nature. Additionally, an Observer pattern based design would allow to create and destroy tasks during an application run time. With these thoughts in mind, I decided to put together my own implementation of the idea. Since the coding has been completed I am using this implementation in two unrelated projects and should confirm that RTC tasks fit pretty nicely into FSM oriented designs and single event queue implementation of the Observer pattern provides nice to have extra flexibility with minimal impact on performance.

Friday, May 29, 2009

Number one

Number one (N1) is a robot which actually runs on a mobile phone. N1 has two parts: body and brain. The body consists of slightly modified chassis of N0 and tiny ARM® based computer which acts as brain spinal cord (BSC). N1 brain, located on a mobile phone and implemented as a Java ME program, connects to its BSC through Bluetooth®. There are some further technical details and photos on the robot's home page as well as a video which shows N1 equipped with infrared distance sensor in action.

Wednesday, May 20, 2009

Shrinkning Sharp GP2D120

I needed to mount vertically Sharp GP2D120 on a micro servo. To reduce sensor's dimensions I decided to get rid of standard mounting holes and connector. Removing mounting holes is simple job while removing the connector involves cutting a part of sensor's PCB. After a bit of head scratching, I moved a resistor and replaced several wires routed on the PCB under connector. Finally, I drilled two tiny holes on the top part of the sensor's body for a wire which attaches the sensor to the servo.

Sunday, May 17, 2009

Mounting a PCB on LEGO

I was looking for a while for a simple way of mounting a PCB on a construction made of LEGO® parts. Through-hole mount requires precise location of holes on a PCB and limits mounting flexibility as well as consumes a lot of valuable space on the board. The best solution to date for me is a three - four slightly modified LEGO® axle pins (gray pin is original and blue pin is modified) which hold edges of a PCB. The modification of four axle pins took about a minute thanks to DREMEL® rotary tool armed with 199 High Speed Cutter.

Thursday, October 30, 2008

Number zero

Number zero (N0) is my first attempt to build a robot. This toy tractor is built from LEGO® Technic parts. (back view) The toy is driven by Java ME™ MIDlet on a mobile phone via Bluetooth (JSR82). Small board on the tractor comprise of BlueSMiRF Bluetooth class 1 module and Atmel's ATmega88 controller. Two 71427 LEGO® 9V motors are controlled by TI's SN754410 configured as a dual H-bridge.

Saturday, July 12, 2008

OpenOCD and FT2232's default VID/PID

I spent quite a bit of time today trying to get OpenOCD work with OpenOCD-USB Adapter on MacOSX (10.5). There are two hints which might save your time:


1) Since the adapter comes with no EEPROM, FT2232D uses default VID/PID (0x0403/0x6010). If FTDIUSBSerialDriver (aka VCP) is installed on your machine, you will need to comment out or remove FT2232C_A section of driver's Info.plist file located at
  /System/Library/Extensions/FTDIUSBSerialDriver.kext/Contents/

This would prevent the FTDI VCP driver from conflicts with OpenOCD on attempt to use the port A of FT2232D on the adapter board. You also might want to reload the FTDI VCP driver after modification with following commands:

$sudo kextunload /System/Library/Extensions/FTDIUSBSerialDriver.kext
kextunload: unload kext /System/Library/Extensions/FTDIUSBSerialDriver.kext succeeded
$sudo kextload -c /System/Library/Extensions/FTDIUSBSerialDriver.kext
kextload: /System/Library/Extensions/FTDIUSBSerialDriver.kext loaded successfully


2) Since the adapter comes with no EEPROM, you will need to use default device descriptor in OpenOCD configuration file:
  ft2232_device_desc "Dual RS232 A"

Missing EEPROM on OpenOCD-USB Adapter board

As it turned out OpenOCD-USB Adapter does not have EEPROM which is on the adapter schematic (see the bottom of this page). The EEPROM chip (93LC46BT SOT-23-6) was removed from the board after manufacturing. It is clearly can be seen on the picture (6 pads on the right of USB connector). I guess, the EEPROM chip was removed because of an error on the adapter PCB (EEPROM's CLK and Vcc pins are swapped). The same adapter is also available form www.ic-board.de. So be aware of this defect.