Code Monkey home page Code Monkey logo

timex-datalink-arduino's Introduction

Timex Datalink Notebook Adapter emulator for Arduino

This project emulates the Timex Datalink Notebook Adapter for early Timex Datalink watches in Arduino! It is 100% compatible with the original Notebook Adapter, and works with vintage and modern computer hardware.

This Notebook Adapter emulator is tested to be compatible with:

This project is not dependent on any specific Arduino board, although it has been tested to work with these devices:

These boards have USB serial interfaces and onboard LEDs, so they can be used as-is without any external components:

image

How does it work?

The early Datalink watches receives data over light, and the original intent was to take advantage of a flashing electron beam on a CRT. Timex also offered a Notebook Adapter accessory intended for mobile users at the time, which replicates the data sent from a CRT using a single LED:

image

The Notebook Adapter is a serial device with a proprietary protocol that was reverse-engineered for this project. With the Arduino device present, the original Timex Datalink software can be configured to use the Notebook Adapter and send data to your watch:

image

Using an external LED

The small onboard LED allows a Timex Datalink 150 watch to sync from a few inches away. With an external LED, it is possible to sync your watch from several feet away.

An LED can be added tidily to the Teensy LC by soldering an LED cathode (short leg) to the ground pin near the PROG pin, then connecting the anode (long leg) to pin 13 with a resistor, as pictured below.

image

I discovered that the best performance is obtained by using white LEDs, but every color I tested worked without problems. The LED pictured above is a white 20mA/3-3.2V 14000mcd LED paired with a stiff ¼W 22Ω resistor.

timex-datalink-arduino's People

Contributors

synthead avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

timex-datalink-arduino's Issues

Add documentation for an external LED

While the onboard red LED works, the performance becomes excellent with an external LED. With a bright white LED, I am able to sync a Datalink 150 watch from about 3 feet away without errors (compared to about four inches with the onboard LED).

Add documentation for adding an optional external LED to the Teensy LC for better performance.

timex-datalink-arduino on the Digispark

Hi,

Thank you for the awesome software!

I've adapted the project to work on the Digispark board, and the code is available in my fork.

I had to use a software implementation of the serial port because the Digispark board lacks hardware for this, but it turned out to work great. The modifications are minimal. I also added an external white LED, and I can sync the device from two feet away from the computer without any problems.

photo_2024-01-14_17-51-39
photo_2024-01-14_17-51-42
photo_2024-01-14_17-51-45

My goal now is to 3D model a case in the shape of the original Notebook Adapter but with the tiny footprint of the Digispark 😀

image

Are you interested in a pull request, or would you prefer to keep it as a separate fork?

Not work

Hello

I would like to use your Project for my Timex Watch but I can't get it to work and hope you could help me a find the error.

My configuration now:

  • Arduino Nano flashed with the Project files without errors.
IDE
  • VM with Win98 and successful installed USB to Serial Driver
driver

If I try to configur the Notebook Adapter I get an error :-(
port_failed

Do you know what is wrong?

Thanks a lot, Pegi

Compatibility to the Linux Datalink library by David Fries

Hi,
I have been using the Linux Datalink library by David Fries (https://github.com/dfries/datalink_ironman) to sync my watches in the past.
It supplies an application to send data provided by a datafile to a serial device and some code for a teensy board to control the led. Since the Teensy 3.+ boards won't be available anymore, I intended to switch to the 4.+ generation. The code supplied in the library unfortunately only works with the 3.+ generation and I wasn't able to update the code due to a lack of knowledge. So I tried using the timex arduino code in combination with the Teensy 4.+ and the Linux Datalink library datafile application. The code seems to run on the teensy 4.0, the internal LED lights up when serial data is received, but the timing seems to be an issue. I can not tell whether the timing is supplied by the sender or the receiver, as I do not fully understand the code and the concept behind it. (I understand the very basics with the data having to be transmitted at 60hz, sync bits, databits and so on, but do not understand how this is related to the baudrate of the transmission or the internal clock of the teensy or arduino board connected.)
Maybe it would be worth having a look at supporting the Linux Datalink library. I'll gladly offer any assistance and any help I can be of, although it might not be much.

Best regards

Benny

NotebookAdapter::emulate should be called before LedBlaster::emit_byte

In timex-datalink-arduino.ino's loop function, LedBlaster::emit_byte is called before NotebookAdapter::emulate:

void loop() {
int serial_byte = Serial.read();
if (serial_byte != -1) {
LedBlaster::emit_byte(serial_byte);
NotebookAdapter::emulate(serial_byte);
}
}

NotebookAdapter::emulate occasionally reaches back to LedBlaster functions to switch modes:

void emulate(uint8_t serial_byte) {
if (millis() - last_data_ms > DATA_MODE_TIMEOUT_MS) {
LedBlaster::enable_fast_mode(false);
command_mode = true;
}
Serial.write(serial_byte);
switch(serial_byte) {
case COMMAND_QUERY:
if (command_mode) {
Serial.print(COMMAND_QUERY_PAYLOAD);
Serial.write(0);
}
break;
case COMMAND_FAST:
if (command_mode) {
LedBlaster::enable_fast_mode(true);
}
break;
case COMMAND_TRANSMIT:
command_mode = false;
break;
}
last_data_ms = millis();
}

So it'd make sense to call NotebookAdapter::emulate before calling LedBlaster::emit_byte, even if the adapter functionally works right now

Use cropped screenshots in README.md

Small nit: the screenshots in README.md include a background color. Crop these screeenshots to only include the Timex Datalink software windows.

Support the Raspberry Pi Pico without changes to ino file

This adapter is currently written for the Teensy LC, but there really isn't anything fancy about the LC that is being used in this project. We're just talking serial while making a pin go high and low with sleep statements in-between.

Pretty much every Arduino board that has UART buit-in can run this project. Even ATTINY85 micro controllers could probably run this thing with software serial:

image

Let's add support for multiple Arduino boards! For starters, we can support the RPi Pico by wrapping this macro with "if" blocks to check if RPi-specific macros are defined. If so, use a pin for its onboard LED:

#define LED_PIN 13

BeepwearPRO 1.03 software: "The Timex Notebook Adapter is not compatible with your watch or your operating system."

The BeepwearPRO 1.03 software shows this message when performing the Notebook Adapter calibration or attempting to transfer data with the software:

The Timex Notebook Adapter is not compatible with your watch or your operating system.

Here's the error during calibration:

image

Here's the error during data transfer:

image

Here is the About information from the software:

image

The original Notebook Adapter works fine with Windows 98 SE and a physical RS232C port, so I suspect that the BeepwearPRO software is attempting to use hardware flow control. This Arduino project does not utilize flow control, and assumes the command mode or data mode states form the traffic. It will likely be necessary to emulate the flow control on the Arduino project to give the software what it's looking for.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.