General
I haven't worn a watch in years, but got this one because it is
programmable. Really wanted the Palm OS watch and then the MS
Spot watch, but the
Palm OS watch never came and the Spot watch has
no SDK :(. Besides, you have to recharge those watches almost
every day and they're very big. This watch has just enough
memory and speed to be useful.
Update: Ok, the Palm OS watch is out and looks pretty nice, but it's not
waterproof and only the battery only lasts a few days...
The watch is programmed via proprietary USB connector on the
left side (shown above) using Timex software (which you should
download to get the latest version).
You switch between programs using the "mode" switch in
the upper-right corner. You input data with the
"Start/Split" (bottom) and "Stop/Reset"
(lower-right) buttons and the crown. The crown can be rotated
in either direction, pushed in, or pulled out.
Programming is done in assembly language. This is no fun,
but probably a good idea anyway due to the limited memory. You
write your "app" to be a state machine and in this way
divide your program into up to 20 states. This is done because
the Timex OS only copies one state at a time into RAM because it is
so small. The code for each state is limited to 900 bytes (the
RAM is actually 2 kB, but the Timex OS uses the rest).
Fortunately, Timex has provided an SDK that eases the pain of
writing an application.
You will have to join the
Yahoo group to find other developers
and their code. Google usually finds nothing...
Pros: Only $61 at WalMart, relatively thin, nice look,
long battery life. Cons: small memory size, have to
program in assembly, no FPU or floating point support of any kind,
no emulator (have to test apps on real
watch).
Update: Paulo Marques, Pierre
Delore, and Paulo Costa have created a very nice emulator for the
Datalink watch. This is very useful for debugging and seeing
the internal workings of the system. It is free to use and you
can download it from the "files" section of
Datalink Developer Yahoo Group.
Links
Timex DataLink Main Page:
http://www.timex.com/datalink/
Timex Developer Page:
http://www.timex.com/developer/datalink/
Timex Data Link USB discussion forum:
http://groups.yahoo.com/group/timexdatalinkusb/
Timex Datalink USB Developer forum:
http://groups.yahoo.com/group/timexdatalinkusbdevelop
Display
Note that the upper Dot-Matrix is actually 12x5, despite what the
documentation says!
CPU: 8-Bit SEIKO EPSON S1C88349
Specification table for Seiko Epson (click to expand):
Supply Voltage: 1.8 to 3.5 VDC for low speed/power
operation
Clock Frequency: 32 kHz in low speed/power operation, 4.2
MHz in normal mode, 8.2 MHz in high speed mode
Note: the M851 OS uses 2 CPU clocks; 32.768 kHz for for
normal operations, 2 MHz for high speed ops. Timex says to
limit use of high speed as it drains the battery.
Memory: 48 kB internal ROM and 2 kB internal RAM (up to 2
MB external ROM/RAM)
Special Features: 1 buzzer output (sound), 1 SVD (supply
voltage detector), LCD driver, Serial I/O, 2 Comparators, various
timers.
External Memory
User data is stored in an external EEPROM chip. It is a
Microchip®
24LC256 (I/SN version), 32 kB, 400 kHz max, 5 ms write speed
chip, good for 1 million write cycles.
Programming the S1C88 in Assembly
Fortunately, Timex has provided a nice SDK that makes
programming relatively simple. Most of your program will
probably be calling macros defined in the Timex SDK header files.
To get started, simply run the "M851 WristApp Wizard", which will
build a skeleton program for you based on your desired number of
states and resources. Then, edit the source files (.asm) using
some kind of text editor. When you are done, run the "M851
WristApp Builder", open the script file for your app (.scr), and
push the button to build your app. Then, use the "WristApp
Installer" program to download to the watch.
You will probably have to become familiar with the
CPU register
names and instruction set.
You will also have to become familiar with the
Timex API.
There's no floating point support, so I had to write my own!
Tried doing IEEE-754 floats, but the code was getting too big, so I
switched to s16e7 floats.
You can see pieces of my code here