«

»

Sep 25 2013

DIY Digital Wristwatch

Kits are now available here!

Introduction

The main incentive behind this project was to see how much I could cram, in terms of both hardware and software, into a wristwatch-like device that is no larger than the display itself. An OLED display was chosen for being only 1.5mm thick and not requiring a backlight (each pixel produces its own light), but mostly because they look cool. The watch was originally going to have a 0.96″ display, but this proved too difficult to get all the things I wanted underneath it. Going up a size to 1.3″ was perfect.

DIGITAL CAMERA
DIGITAL CAMERA



Hardware

Wristwatch schematic

Wristwatch schematic


On the hardware side the watch contains an Atmel ATmega328P microcontroller, 2.5V regulator, Maxim DS3231M RTC, 1.3″ 128×64 monochrome OLED, 2 LEDs (red and green), a buzzer sounder, 3 way switch for navigation, powered by a 150mAh LiPo battery which can be charged via USB and 2 PCBs (though one PCB is just used as a raiser for the OLED).

The ATmega328P uses its internal 8MHz oscillator and runs on 2.5V from a linear regulator. Its current draw is around 1.5mA when active and 100nA in sleep mode.

The DS3231M RTC is an excellent chip, housed in a small 8 pin package which includes a built-in temperature compensated MEMS resonator with an accuracy of ±5ppm (± 2 minutes 40 seconds per year). Only a decoupling capacitor and a few extra pull-up resistors were required. The RTC is wired up so that instead of having power applied to the VCC pin, it’s applied to the Vbat pin which reduces its current draw from around 100uA down to 2.5uA.
Unfortunately this chip seems to be very hard to get hold of at a reasonable price if you’re not in the US. I had to get mine as samples.

The battery charging circuit uses a Microchip MCP73832 along with some additional components for load sharing, where the battery can charge without the rest of the watch interfering with it.

You might have noticed in the schematic that the LEDs are directly connected to the microcontroller without any resistors. The internal MOSFETs of the microcontroller have an on resistance of around 40Ω, so with a 2.5V supply voltage and LEDs with 2Vf, around 20mA ends up through the LEDs. I would have liked to have a blue LED, but the voltage drop for those are usually more than 3V which would have required some additional resistors and a MOSFET.

As the microcontroller is running on 2.5V the battery voltage needs to be brought down a bit to obtain an ADC reading. This is done by a simple voltage divider. However, with the voltage divider connected across the battery there would be a current of around 350uA constantly flowing through it, this is a huge waste of power. A P-MOSFET (and some voltage level conversion for it, which I forgot about in the first version so it was always stuck on) was added so the divider can be turned on only when needed.

The 2.5V regulator being used is a Torex XC6206, primarily chosen for its tiny quiescent current of just 1uA.
Why a linear regulator and not a switching regulator? The switching regulators I looked at had an efficiency of at least 80% with a 2mA load, but that efficiency quickly dropped off to less than 50% with loads of 100uA. Since the devices connected to the regulator draw 2-3uA in sleep mode, a switching regulator would have performed incredibly poor compared to a linear regulator. The 2.5V linear regulator efficiency is 60% with 4.2V input going up to 83% with 3V input.

Underside

Underside

Top side, under display

Top side, under display

Software

So we’ve got a nice OLED display and 32KB of program space at our disposal, surely we can have more than just the time and date?

Almost everything is animated

A lot of time was spent optimizing the rendering code which, in short, involves copying bitmap images from flash to the frame buffer in RAM and sending the frame buffer over SPI to the OLED. The end result was being able to maintain 100+ FPS in almost all areas of the watch with an 8MHz AVR. However, since the animations are frame based instead of time based and to save power, the frame rate is limited to 60FPS.

Some of the main animated things:

  • CRT animation when entering and exiting sleep mode (similar to Android CRT animation).
  • Main time numbers have a ticker effect.
  • Menus have a scroll left/right animation and selecting an option will cause the current menu to fall off the screen and the next thing to fall on.

Alarms

  • Set up to 10 alarm times.
    Number of alarm times is only limited by the amount of available EEPROM and RAM.
  • Each alarm has the hour, minute and which days of the week it should be active on.
Alarms menu

Alarms menu

Games

Breakout

Breakout

Car dodge

Car dodge

Apps

Flashlight

Flashlight
Turns on all OLED pixels and LEDs, also has seizure strobe mode

Stopwatch

Stopwatch

Plenty of options

  • 3 Channel volume control
    • UI
    • Alarms
    • Hour beeps
  • Sleep timeout
  • Display brightness
  • Animations
    You’re not going to turn them off, right?
Volume settings

Volume settings

Power saving

In ‘active’ mode the microcontroller tries to go into idle sleep as much a possible. In idle sleep the controller is woken each millisecond to see if anything needs to be updated, if not then it goes back to idle sleep, this usually takes less than 100us if the display doesn’t need to be updated. In this mode the current draw can be anywhere between 0.8mA and 2mA, depending on how long it takes to draw frames (fast frame draw time = more time in idle sleep).

In ‘sleep’ mode the microcontroller turns the OLED off and goes into power-down sleep mode where it is only woken by either a button press, an RTC alarm or USB being plugged in. In this state the microcontroller draws ~100nA.

Power consumption

In sleep mode the overall current draw of the watch is around 6uA. In active mode the current draw can vary from 2mA to over 70mA, though 10mA is the typical current draw.


Battery capacity: 150mAh

Minimum
(sleep mode)
Typical
(main time display)
High
(flashlight)
6uA
2.85 years
10mA
15 hours
64mA
2 hours, 20 minutes

If the watch is in active mode for an average of 1 minute per day (with a 5 second sleep timeout that would be checking the time 12 times a day) and all volume channels set to minimum the watch should last for around 30 days 1 year and 4 months on a single charge. (Oops, 30 days is if the watch is on for 1 minute per hour, not day).


Current draw breakdown (typical)

Part Current
ATmega328P (sleep / active) 100nA / 1.5mA
OLED (sleep / active) 500nA / 8.5mA
DS3231M RTC 2.5uA
Schottky diode (D1) (reverse leakage) 1uA
Regulator (quiescent current) 1uA
Other (MOSFET and capacitor leakage etc) 1uA
Total (sleep / active) 6.1uA / 10mA

v1 to v1.1 changes

The first version had a few problems:

  • Added level conversion for the ADC P-MOSFET.
    Without level conversion the P-MOSFET was always stuck on. To turn of the P-MOSFET off the gate voltage needs to be at around the same level as its source voltage (which is connected to the battery), but the microcontroller was only providing 2.5V.
  • Added a gate pull-down resistor for the MOSFET driving the sounder.
    The MOSFET gate was floating when the microcontroller was being programmed which was causing the MOSFET to turn on and allow non-pulsed current to flow through the sounder, which probably wasn’t good for it.
  • Larger solder pads for MicroUSB connector.
    Normally SMD MicroUSB connectors have solder tabs at the sides and should have extra solder pads underneath, but since this is soldered by hand the underneath is unreachable. With out the extra solder pads the USB connector was wobbly so some of the connector pins eventually broke their solder joints. To fix this issue I enlarged the side solder pads so that the connector can be soldered all along its side instead of just the tab. No more wobbly connectors.

DIGITAL CAMERA

Other problems

Out of 3 OLED displays, 2 died after a few minutes of being attached to the watch. One from Ebay and the other from AliExpress. I’m still not sure why they died, maybe just China quality? The one that worked was also from Ebay.

Future improvements

  • Programming via USB.
    At the moment 4 wires need to be poked into the board (SPI programming) and then hope they don’t fall out while programming.
  • Add a fuel gauge IC.
    At the moment the battery level is determined by its voltage, this isn’t a very accurate method of getting the remaining battery charge.
  • Different microcontroller.
    The current firmware is using ~28KB out of the 32KB of available program space in the ATmega328P, a different microcontroller with more program space and probably more RAM would be needed to add more things like a calculator (floating point stuff eats up a lot of program space). However, the ATmega328P has the most program space for an AVR in a 32 pin TQFP package, to have more program space I would have to use a 44 pin AVR. The ATmega1284 looks interesting.
  • Switching regulator, charge pump regulator or maybe a hybrid solution?
    The linear regulator in use at the moment isn’t particularly efficient and switching regulators don’t seem to be very good with low current draw. Perhaps a charge pump regulator or a hybrid solution to swap between a linear regulator for sleep mode and a switching regulator for active mode?
  • A case of some sort?

Sources available at GitHub

Parts list

Schematic Part/value Description Quantity
U1 Atmel ATmega328P Microcontroller 1
U3 MCP73832 Lithium battery charger IC 1
U4 XC6206P252MR 2.5V LDO Regulator 1
U2 DS3231MZ+ RTC 1
Q1, Q2 DMP1045U P-MOSFET 2
Q3, Q4 DMG6968U N-MOSFET 2
D1 ZLLS410 Schottky diode 1
D2 TS4148 High speed diode 1
C5 4.7nF Capacitor 1
C4, C6, C7 100nF Capacitor 3
C3, C8, C9, C10 1uF Capacitor 4
C12 2.2uF Capacitor 1
C1, C2, C11 4.7uF Capacitor 3
R4, R8, R10 100R Resistor 3
R6 2.7K Resistor 1
R5 7.5K Resistor 1
R7 10K Resistor 1
R1 22K Resistor 1
R2, R3, R11 47K Resistor 3
R9 390K Resistor 1
RN1 10K network Resistor network (4x resistors) 1
LED1 LED (green) LED 1
LED2 LED (red) LED 1
LS1 Sounder Magnetic sounder 1
SW1 3 Way navigation switch - 1
- MicroUSB connector (Ebay) - 1
OLED1 OLED (Ebay / AliExpress) - 1
- Battery (Ebay) - 1
- Main PCB - 1
- Display raiser PCB - 1
- Watch strap G10 NATO 22mm 1


Featured at
Atmel, HackADay, Electronics Lab, adafruit

Water proof down to 0m!

189 comments

14 pings

Skip to comment form

  1. Martin Andersen

    Über cool! That is a very nice build!

  2. zephyrin

    this is great! you should make kits for these and enter it into contests on instructables.com

  3. mianchen

    Very cool, may I ask why you use lipo instead of coin cells? Apart from rechargeable what are the benefits?

    1. Zak Kemble

      Coin cells start at 3V and go down to ~2V, which is a bit too low for the watch.
      The recommended discharge rate for most coin cells is less than 10mA, but the watch can easily draw much more than that.
      Mounting the cell and making it replaceable would be a bit of an issue, a coin cell with decent capacity is going be at least 20mm in diameter, a holder for it will take up the whole side of the PCB.
      Rechargeable Lithium coin cells are also available, but a 110mAh cell has a 24.5mm diameter, that’s slightly larger than the height of the screen and they’re not particularly thin either at 5.2mm.

  4. Winston Tan

    Awesome watch! Have you thought of using LPC11U24 which has builtin USB ROM drivers? It’s a 32-bit ARM Cortex M0 and it’s cheap! You can use QFN package to increase your board space.

    Cheers!

    1. Zak Kemble

      I haven’t had any experience with ARM processors or soldering QFN packages yet, but I guess they should be the next thing to try out.

  5. Pietro

    How much money do i have to throw at the pc screen until i got one of these?

  6. adrian

    Congrats, a very , very nice project.

  7. Thomas P

    Would you be interested in selling kits with the components soldered on? I would be willing to pay over $60 for it .

  8. emmanuel

    hello Zak this is really amazing wonderful! the animation and the CRT transition effects, the games they all just cool and great! Good Job!. please i need to know how to just interface a micro-controller with a 0.96″ OLED module and also draw graphics on it. or can you please just direct me to any link, book that will explain the use of the OLED module. i will appreciate it a lot thanks.

    1. Zak Kemble

      Thanks :)

      This should help explain how to use your OLED – http://learn.adafruit.com/monochrome-oled-breakouts/overview

  9. Nick

    Very, very nice… and I don’t mean “nice” as in one step up from OK, I mean the masculine niiiiiiice as in describing the latest Pagani Zonda or Ibanez Ziphos.

    That is some serious engineering, utter respect!

    Have the guys at tokyoflash.com seen this?

  10. Mustela Nivalis

    You can save some space off the MCU by adding a small FLASH chip like AT45DB161D or an SD card and store the bitmaps on that. The extra space used by the drivers instead of the bitmaps should be quite small.
    Replacing the AVR with an ARM Cortex M3 (I use STM for example) will also give you the USB connectivity. I recommend an ESD protection chip on the USB bus lines.
    Congratulation on the “load sharing” transistor+ diode implementation. One of my first projects with LiPOs was burnt to a crisp by the battery itself because I did not have this kind of protection and nor did the battery have any. After I added this kind of protection to all my LiPO circuits I never had a problem again.

    1. Zak Kemble

      Moving the bitmaps off the MCU will slow all the drawing down. Using an ARM processor would probably be the best thing to do, though I’ll have to learn how to use them properly first since I’ve never used ARM before. :D

      1. Mustela Nivalis

        Another tip on the power path(load sharing circuit as you name it). You can always check and use an integrated P-MOSFET/Schottky like FDFMA2P853. This will save you some PCB space. Problem with this is the RDS(on) for the P-MOSFET and the max forward current for the Schottky. But then again searching will give you some results of better combination. Perhaps this will help you reduce the leakage current.

  11. Kevin Smith

    Make it available to buy sooon. I would love to own one.

    Good Job.

  12. Adrian

    Nice work.Simple, classic and no unnecessary stuff. You should take it kickstarter.

  13. Vincenttech

    I would buy it for sure!
    Awsome Project.
    Try to put it on Kickstarter maybe some People would like it!

  14. Matt Starbuck

    Wow, this is an awesome hack! I am amazed you got that much functionality into a 328p! The animations of the bitmap menus are super sweet too, I am grateful for your source code. I think I might incorporate similar menus on my project, except my buttons aren’t buttons – they’re touch sensor electrodes. I’m using that .96″ screen you said was too small, and I agree the 1.3″ 128×64 looks great.

    Bookmarked your blog – will definitely be back to stalk you for more great ideas!

  15. manis404

    Awesome work! You could save bit space by using QFN packages for the MCU and RTC. This could leave room for some inductive charging magic…

  16. JustAnAnon

    This is really impressive! Even the UI is nice looking.

  17. Mike

    Awesome project! I’m surprised at how fast the aminations are on the screen. I’ve been making and building projects using the 0.96″ i2c oled display that is much slower than SPI. If you sell kits then I’ll defiantly buy one!

  18. davide

    Cool. Your project shows incredible skill in putting together a watch with a lot of features, in a really tiny space.
    Really impressive! And you are also sharing details on how you built it, so extra congrats for that ;)

  19. Gabriel Crowe

    Found you through hackaday.

    I’m not even kidding, if this was a watch I could buy right here and just slap it on my wrist, you would have already had my money.

    1. FranktheTank

      I agree

      SHUT UP AND TAKE MY MONEY

      *WAVES MONEY FURIOUSLY*

  20. Tim

    Do you have a part-number of manufacturer of the OLED display?

    1. Zak Kemble

      WiseChip UG-2864KSWLG01
      I got mine from here and here.

      1. Mike

        I make projects using the 0.96″ oled and get mine from here: http://www.buy-display.com/

        1. Zak Kemble

          Thanks for the link, I’ll have to check them out.

  21. Vassilis Serasidis

    I love this Wristwatch !
    Congratulations Zak !

  22. kap

    I love this project! Did you think put bluetooth?

    It would be awesome can connect with smartphones and notify messages or anything!

    1. Zak Kemble

      Bluetooth was thought about, but that would have made the watch thicker so I decided to leave it out for now.

      1. m

        “For now” very, very interested in this. Any chance a ‘daughterboard’ could be used, so as to start wrapping along the wristband at an angle?

        1. Zak Kemble

          Hmm, I could try adding some pads to access the SPI or I2C bus and power if I can fit them on the PCB. I’ll try adding them for the kit version.

  23. rere

    please add one time password to this watch.

  24. Gwilherm

    Can you sell it in kit form. I would be very interested in acquiring one.

  25. mooncactus

    Wow, amazing job!!
    My two cents: could the battery be embedded directly in the wrist band to “hide” it and make it thinner even? Also if you added an accelerometer, you could switch the display automatically with a rotation of the wrist! This probably would even spare some energy in the long term.

    1. m

      battery-in-wristband is my idea too – don’t know how flexible this is: http://www.alibaba.com/product-gs/1432667139/014461_180mah_3_7v_ultra_thin.html

  26. Snake

    Impressive! you made my (hack-a-)day, really.
    Very subtle touches, great execution. Perfect!

    Thank you for the opensourced stuff.
    Well… when can we buy the z-watch? :)

  27. Maigo

    Sell me one!!!!

  28. shadow1w2

    I agree with others, I’d glady buy a kit for this sorta thing.

    Very impressive job.

    I wonder if a solar panel could be added to that.
    My best guess is a portable solar panel USB charger would have to do though it might look silly wearing one on your back just to power a fancy watch.

    I also wanna suggest a cooking timer for small temporary alarms.

  29. Steve Diamond

    Zak,

    Hugely impressive! Congratulations and thanks for the writeup.

    P.S. I’d buy one too!

  30. Siegfried

    Absolutely amazing! COuld you add some GPS functionality and out everything in the waterproof resin? that would be cool :D

    1. Mike

      GPS modules and the antenna needed are pretty bulky.

  31. Romain Bazile

    Hey!

    Very very nice build!

    Do you plan on doing DIY kit or something? It would be nice, because it would drive the cost down for everyone that is interested.
    I did something similar a while back with the Makerbot Watch after doing a new rev ( http://wiki.gromain.info/tiki-index.php?page=Makerbot+Watch ). I can do it again if needed. The goal was to provide everyone with all the parts to be soldered together for the marginal cost for me. If I remember well, around 20 people got a kit a that time.

    Cheers,

    R

    1. Zak Kemble

      I’m working on getting a kit available, still in early stages though.

      1. Romain Bazile

        That’s awesome then! Do not hesitate to ask if you need any help!

    2. Sergey

      I loved both your watch and if I can take somewhere PCB and HEX??

      1. Zak Kemble

        The PCB design and .hex are in the .zip download, link is a the end of the post, just above the images.

  32. Petr Stehlík

    You simply rock! Thanks for making everything downloadable under the great GPL3. BTW, is the plastic base printed on a 3D printer?

    1. Zak Kemble

      Thanks :D
      I presume you mean the part between the main PCB and display? That is also a PCB, just without any traces on it.

  33. kiranvarma-npeducations

    That was really Cool! Where do get those small small components. Can we play any custom animation in that!
    Really nice work buddy!

  34. Irregular Shed

    Add me to the list of people thinking this is an amazing design. I too would pay real money for it.

  35. Ken Scharf

    I like the atmega1284, in a QFN package it won’t be much bigger in footprint than the 32 pin QFP. You also might look at the ATXmega128A3U3 or U4 devices. These run at 3.3 volts at full speed, and have built in USB. They are available in BGA for an even smaller footprint. Atmel has a bootstrap package that works with these. Both devices are under $5 in singles too! I think sparkfun sells “RAW” OLED displays. You might consider going with one of those squarish COLOR OLED displays. You could then display photos in low res.

  36. THX1082

    Add me to the list of those interested in a kit. I may not be able to wait and might attempt a clone. Did you use OSH Park for the PCB? Thanks.

    1. Zak Kemble

      Yup, PCBs are from OSHPark.

  37. tenrual

    create a data link with radio or skin, when you simply touch a door you can unlock it :)

  38. Daniel

    Absolutely amazing!

    I’d buy one too! I would love to own one.

  39. Allen Kipling

    Buddy this is amazing stuff . The idea , the concept, the execution is simply mind blowing. And thanks for sharing the information as well.I think you can just work on the modelling of the product and think of a marketing strategy . I for one would love to buy such a product. Good stuff buddy.

  40. Tyler Spilker

    Awesome awesome project. I am going to have to order some of your PCBs and try my hand at it. I see you started a calculator for it as well. I am guessing you didnt add that functionality due to a lack of user input buttons?

    sort of reminds me of Dave Jones’ uWatch project. I really want a proper scientific calc watch to come out again. This is a wonderful step towards that for a different target audience. I really like the party mode

    1. Zak Kemble

      Thanks :)
      I didn’t finish the calculator because all the floating point stuff was using up too much program space. Having only a few buttons isn’t too much of a problem, it just slows down user input as they’d have to traverse through an onscreen keypad.

  41. Jim

    I’d like to buy one too, but more importantly I’d like to contribute if you want.

  42. Jack Tramiel

    USB connector is used only to charge… Fake! Bullshit! You fail!
    Use ARM Coretx-M (STM32 as ex.):
    -Integrated RTC
    -Integrated USB2.0 controller
    -Huge amount of Flash and RAM
    -Low power consumption
    -Cheaper than AVR

    Why on AVR? ARM is it so difficult for you?

    2All:
    Why? Why would you want to buy this bullshit? I do not understand you people …

    1. Zak Kemble

      I’m sorry that you think everything must use an ARM controller. The watch runs great with an AVR, instead of just throwing more MHz/flash/RAM at it a little bit of thought had to be put into the code.
      In sleep mode, AVR current draw is in the nA range, while STM32s are in the uA range.
      Only the very low end STM32 chips are cheaper than an ATmega328P (for me, at least).

      But don’t worry, I will start using ARM controllers, I just don’t have any projects on the to-do list that need the power of ARM just yet.

      1. Jack Tramiel

        I do not think that everyone should use the ARM, I say that in your project ARM is preferred. If you’re planning to add a firmware update via USB, you have two ways: use expensive FTDI chips (or less expensive CP2102), or to realize the USB by software via v-usb, but it will take a significant amount of flash ROM. If you plan to add a firmware update via USB, you also have to find space in the flash ROM to bootloader. If you did not plan, then at least take the trouble to attach to your gadget AVR programmer and instructions for flashing.

        The output you have one – to move to ARM. Not because ARM is fashionable and popular, just for your project ARM the most cost-effective solution. Let’s count: ATmega328P + DS3231MZ + FT232 ~ €3 + €8 + €5 ~ €16. I think you will agree that the functional of ATmega328P + DS3231MZ + FT232 overlaps by one STM32L151C8 at ~ €4.

        Current consumption of STM32L1XX in standby mode + RTC ~ 900nA, this is less than ATmega328P + DS3231MZ. But you’re talking about the low consumption of picoPower AVR, although the are using 2.5V LDO Regulator. LOL

      2. Vincenttech

        Zak, ignor this idiot, you did an awsome Job, Man!
        I don’t know what Jack from a watch, its not like you need a super computer on your wrist ;)

      3. Jack Tramiel

        Dude, I’m an idiot do not listen to me, you’re doing the right thing. Good luck!

  43. Antoine

    Excellent project and description Zak, thanks a lot for this your nice publication!

    Looking at the OLED display documentation (WiseChip UG-2864KSWLG01 from eBay) I am missing something: how is it possible that the display is working when connecting the VCC (Supply Voltage for Display) to the ground (through C12 2.2uF) while 12V should be provided to this pin according to the datasheet?

    1. Zak Kemble

      The OLED can either run from an external 12V or use its own internal charge pump circuit. My project uses the internal charge pump since it requires fewer components, but the display is not quite as bright as using an external 12V. For some reason the UG-2864KSWLG01 datasheet doesn’t have much info about the charge pump, but the datasheet for the 0.96″ version (UG-2864HSWEG01) does.

  44. charlezkwan

    Hi there, it is a awsome project.
    Im just having a problem when opening the project under atmel studi 6. It says me i got an error on Flavour AVR-GCC 4.7.2 does not exist, how can i open it? Thanks so much for the irrelevant

    1. Zak Kemble

      That seems to be a problem with 6.1 (I’ve been using 6.0), open watch.cproj with notepad or something, search for “AVR-GCC 4.7.2″ and change it to “Native” (without quotes).

  45. Markus Gritsch

    “If the watch is in active mode for an average of 1 minute per day the watch should last for around 30 days on a single charge.”

    Shouldn’t it last about 0.150 Ah / ( 0.01 A * 1h / 60 + 6E-6 A * 24 h ) ~ 483 days?

    1. Zak Kemble

      Yes you’re right! Thanks for that, I think I worked it out as if the watch was on for 1 minute per hour, instead of per day!

  46. Mark M

    Hello.Very nice project.I was reading your introduction,and in the Future improvements,you’re mentioning, about using ”fuel gauge IC”.
    if you can, take a look at bq34z100,i think,it’s perfect for your watch.
    Thanks

    1. Zak Kemble

      Hmm, BQ34Z100 seems to have a lot of extra features which the watch doesn’t really need, I think a much smaller 6 pin IC would have all the things needed.

  47. Thomas

    Very impressive work. Your menu/UI system is quite a piece of work. I’m working on a project using that OLED and similar low-power techniques. A few things I’ve come up with;

    1). You can save 1uA quiescent using Microchip’s MCP1710 LDO Iq~20nA (Yes, nano). I don’t know how they managed to get it that low.

    2). Buydisplay.com is the cheapest place I’ve found to buy the 1.3″ OLED. I believe its the manufacturer’s (EastRising) shop. They emailed me to enquire about further business, so I expect they’d be quite a responsive source if you provide a kit for sale.

    3). I use the OLED module in SPI and parallel modes. I’ve noticed leakage currents on the SPI bus of several uA when asleep. May be worth checking nothing comparable occurs using I2C.

    4). Although too bulky for you perhaps, I’ve had good luck with NXP’s PCF2129 TCXO RTCC. It’s comparable to the non-MEMS DS3231 but much cheaper and more easily sourced, and at Iq~0.7uA it saves a couple of uA.

    Anyway, really just wanted to congratulate you on the good work.

    1. Zak Kemble

      Thanks :)
      20nA is very impressive :O I’m going to need some practice with soldering IC packages that don’t have pins. buy-display.com has been mentioned by a few others too, I’ll be trying them out soon. So far I haven’t had a any problems with excessive leakage on the SPI bus and I2C is kinda slow and would limit the frame rate to ~48FPS. I can’t seem to find any stores in the UK that stock PCF2129 and it does seem to be a bit on the large side for the watch.

  48. Mike

    Excellent project. One thing in not clear in is why +5v is on the oled display? It looks like the +5v comes from the charger which is only on when charging the battery. Shouldn’t the +5v on this display be +2.5v for it to work?

    1. Zak Kemble

      The +5.0V from the charging circuit isn’t really 5V (I should probably change it to just VCC or something). When it’s charging the +5.0V is 5V from USB minus D1 voltage drop (~0.3V). When it’s not charging then it’s at whatever voltage the battery is at (3V – 4.2V).
      The OLED takes 2 voltage inputs, one at pin 9 for the digital circuitry which should be between 1.65V and 3.3V and the other at pin 6 for the internal DC/DC converter for lighting up the pixels which should be between 3.5V and 4.2V (absolute max 5V).

  49. Rick

    Hey, could you explain more about how you program it?

    1. Zak Kemble

      There are some holes labeled MI, MO and CL just next to the switch and another hole labeled RST near the USB connector. Poking some wires into them and connecting the other end of the wires to an ISP programmer will allow you to program the watch.

      1. Rick

        Hmm. But do you have the battery attached when programmed?

        1. Zak Kemble

          It can be powered by battery or USB when programming it, though if you don’t have USB connected you also need to connect the GND hole (near nav switch) to GND of the ISP (or croc clip onto the USB connector, just as long as the 2 grounds are connected somewhere). Also make sure the ISP IO voltage is no more than 3.3V.

  50. Mike

    Hi! Lets say I want to change the RTC to something more accessible like ds1307z. Would i need to change the code or not?

    1. Zak Kemble

      Only a few code changes will be needed as the control register is slightly different. However, the DS1307 does not support alarms, requires an external crystal, uses a lot of power (the watch will only last for 1 week max with a 150mAh battery) and has a minimum supply voltage of 4.5V (LiPo max voltage is 4.2V). So really the DS1307 won’t work as an easy replacement.

  51. Mirko

    Hi, amazing work! After seeing your watch I want to start studying electronics :)
    How is the sunlight readability?

    1. Zak Kemble

      Hi, it’s not too hard to see in sunlight, if it’s very bright then shading it with your other hand usually makes it readable.

  52. Manny

    This is an amazing project! I was wondering if there’s a way that it can be modified to be able to play music with headphones instead of playing the apps?

    1. Zak Kemble

      Thanks :)
      Playing music would require a much faster processor, a DAC and some form of storage. It would need a complete redesign.

  53. I Like

    天哪,做的太漂亮了,非常喜欢,我也是初学者,现在在学习51单片机,希望将来也和你一样厉害!!!

  54. DigiGram

    Regarding future improvements: Some sort of a case? WHY! It looks damn gorgeous! lol, okay, but I guess it does depend on how easy dust get in and if it feels clunky on your arm, but just like that it looks VERY good! And with prices like those at BuyDisplay I guess I should try a project like this too :)

    Nice build!

  55. Prakash15

    DIY and clean making of digital wrist watch. Thanks for the video. Here The digital wrist watch programming is a bit tough.

    1. Wes

      Programming can indeed be tricky sometimes. To make mine, I bought a cheap USBASP programmer off ebay and used avrdude to put the code onto the MCU. The only bump in the road that I encountered was when I tried to burn the fuses.. where avrdude told me the chip signature was null (0x00000). I found that I could fix this by adjusting the programming frequency using the command “-B5″ (see below). I suspect that this issue was specific to my programmer, however if you use the commands below I would leave out “-B5″ first, and go from there.

      avrdude -c usbasp -p atmega328p -P usb -B5 -U lfuse:w:0xD2:m -U hfuse:w:0xDF:m -U efuse:w:0xFE:m

      Then, the flash and eeprom can be programmed using the following two lines:

      avrdude -c usbasp -p atmega328p -P usb -U flash:w:watch.hex
      avrdude -c usbasp -p atmega328p -P usb -U eeprom:w:watch.eep

      Then you should be good to go! Zak might have more to say.. afterall, he’s the expert :)

      1. Zak Kemble

        Hehe :P The controller comes clocked at 1MHz brand new (forgot about that), so you need to reduce the programmer clock a bit, like you did. But once the fuses are set so it runs at 8MHz you don’t need the -B5 anymore.

  56. vpapanik

    Apart from the great looks of this project, this blog is a real gem in terms of clarity and depth of information. I have read lots and lots of similar posts about AVRs, MOSFET switching, load sharing etc when designing my own projects, but I did never came across such a great level of detail. So, again, thanks a lot for sharing Zak !

    Please allow me to ask a few more questions (additional to my other ones in the load sharing post) regarding this schematic :

    1) I may be missing something, but why didn’t you choose a low-side N-MOSFET switching for enabling the R5/R6 divider (BATT_LVL) – similarly to the buzzer (LS1) switch – in order to avoid level-shifting and to use fewer components ?

    2) Did you have any problems programming the AVR due to the SPI bus sharing between the programmer and the OLED ? When the AVR is on reset state during programming, SS_OLED may be floating and messing things up. What I usually do is placing external pullups (10K) on all SPI peripheral SS pins (or pulldowns, depending on the chip).

    3) What is the use of D2 ? Why is C5 necessary ? These are some theoretical details that I cannot easily find answers to, since I am a hobbyist and try to learn by myself :)

    4) Why did you choose the internal 1.1V reference for the ADC (which is not very accurate) instead of the external VCC=2.5V ? In the second case, if you choose a 1:2 divider (e.g. 10K/20K) you get a much greater range in possible ADC readouts and hence better accuracy for the remaining battery percentage.

    5) This is not a question, just a good idea for programming space-limited PCBs like yours. It’s a bit overpriced but great, I have bought one : http://www.tag-connect.com/TC2030-IDC-NL. It’s compatible with the AVRISP mkII I am using. There are ready footprints for EAGLE of course.

    Thanks a very lot in advance Zak !

    1. Zak Kemble

      Thanks :D

      1) If it was an N-MOSFET then turning it off would disconnect R6 from GND and stop the diving part from working causing BATT_LVL to see full battery voltage.

      2) Only SCK and MOSI SPI pins are connected to the OLED, AVR042 section 3.1.1 says that you should put resistors (1K should be enough) on lines that devices other than the AVR might try to drive, but since the OLED doesn’t have MISO (the pin that a slave will try to drive) there’s no need for the resistors. Though sometimes the OLED will read the ISP data as normal commands/data, but that doesn’t really matter since the controller will reset the OLED back to a known state at start up.

      3) The reset pin has an ESD protection diode missing because it needs to support 12V being applied to it for HV programming. D2 adds back the ESD protection and C5 is to help prevent random resets caused by noise. See AVR042 section 2.

      4) Other than the 1.1V being a little bit inaccurate, there’s no difference between using internal or external (with the correct resistor values). Internal gives a smaller voltage range, but can measure smaller voltage changes (1.1/1024 = 1.074mV | 2.5/1024 = 2.441mV). I can’t remember why I chose the internal, but I think I’ll change it to external :P

      5) Ah yeah, I was thinking of moving the holes around a little bit and making a pogo-pin adapter thing to make it easier to program for when I get kits ready.

      1. vpapanik

        1) True, full VBAT (4.2V) may damage the ADC input, is that right ?

        2) I agree, however I have read somewhere that series resistors on SPI lines may affect the bus speed. In my case I have four peripherals sharing the same SPI bus, which are disabled during programming using external pullup resistors (10K) on their SS pins that tristate their MISO pins (works a treat).

        3) Do you really need HV programming for the watch ? :)

        4) Yes, you are right, I did a mistake in the calculations, it doesn’t really matter which VREF you use :) Your divider is wasting max 412 uA, however this could get lower with higher resistor values. I prefer a percentage-type output (instead of mV that I saw on the watch), here’s the Excel I am using : http://www.sendspace.com/file/bm4cul

        1. Zak Kemble

          1) The ADC would probably be alright, it will just read as 1023. But the internal ESD diode will conduct the battery voltage up to the 2.5V supply.

          2) Yeah, resistors can effect the max SPI speed (won’t be able to charge/discharge all the stray capacitance fast enough), but you’ll have to be running it at pretty high speeds before it starts being a problem. Your SS pullup would probably be the best all-round solution, though… or at least until you start having more than 1 master on the bus >.<

          3) No no, with the extra ESD diode HV won’t work (‘it’ was meant to mean the controller, not the watch).

          4) The divider is only turned on for ~500us and usually only once a minute while the watch is on. I did a kind of percentage thing with the battery icon (full, high, low, empty). Battery discharge isn’t linear so it’s hard to get a good percentage reading without a coulomb counter.

  57. vpapanik

    Check these SPI transfer functions that I have, maybe they’re a little bit faster (the “loop_until_bit_is_set” has an extra byte typecast I think). Also the first one does not need a “data” input.

    inline static uint8_t getSPI(void) {
    SPDR = 0xFF;
    while (!(SPSR & (1 << SPIF)));
    return SPDR;
    }

    inline static void sendSPI(uint8_t spi_data) {
    SPDR = spi_data;
    while (!(SPSR & (1 << SPIF)));
    }

    1. Zak Kemble

      Those functions are similar to the usual ones I use, but they can be improved (which I did for the watch).
      The normal functions would load a byte from RAM (2 cycles) into the SPI register (1 cycle) than wait for transfer completion. The function I did for the watch loads the next byte from RAM while the transfer is happening so it only takes 1 cycle instead of 3 to begin the next transfer. Well, it’s a bit more involved than that, but the general idea is to do stuff while waiting for a transfer to complete instead of after or before.

      1. vpapanik

        Wow, amazing trick !!! you don’t loop, just wait a predefined time for the transfer to finish :) it reminds me of a similar question I once had about SPI transfer for SD cards here : http://forum.arduino.cc/index.php/topic,113904.0.html. I am so happy that there are always so kind people out there to share their knowledge. Thanks a million Zak :)

  58. Ryan

    I can’t wait to get one on my work bench then on my wrist

  59. Lakes

    Amazing work!, saw this on AdaFruit Show n Tell. :)

    What form will the kit (you will sell loads of these!) take?, smd soldering?

    Add something that turns on the display when you tilt the watch to look at it?

    Could you have the software load a picture (Deluxe Colour watch version?) and draw analog watch hands over it?

    1. Zak Kemble

      Thanks! Have you got a link to the show n tell video?
      There will be 3 options for the kit, unassembled, PCB assembled and fully assembled. I’ve also updated the PCB design for the kit; there are exposed pads for power, I2C and UART so you can add your own little module things like bluetooth, accelerometer (tilt to turn on), GPS etc. Analog watch hands can be done, though I probably won’t be adding them to the official firmware since there’s not much program space left on the microcontroller :/

  60. chris J

    I would Like to buy one. Its very outstanding. Please let me know when you start selling them.

  61. HD

    A small question, how do you manage to calculate the FPS? I’m making a simular watch with arduino but anything I try only resulted in 14-15, that is incrementing a value constantly every draw the restating every second.

    1. Zak Kemble

      Hey, millisecond time is recorded at the start of all the rendering and then again at the end: FPS = 1000 / (endTime – startTime)
      It’s not very accurate for high frame rates, 2.5ms render time (400 FPS) will actually be worked out as 500 FPS since it gets the milliseconds as a whole number (2ms).
      14-15FPS is probably about right for Arduino libraries, they aren’t very fast.

      1. HD

        I tested it by recording the milliseconds taken to draw it then averaged it, basicly the same way, I was able to get 32 FPS just with the time shown, thanks for the answer!

  62. andrei

    Hi,

    I’ve just received your MailChimp email concerning the kit. Just wondering if you set a price yet.

    Thanks,
    Andrei

    1. Zak Kemble

      There will be 3 options:
      Unassembled around £35 (64.94 CAD).
      Partially assembled (just PCB soldered) and fully assembled will be around £50 – £70 (92.77 – 129.88 CAD).
      Shipping to Canada will probably be £4 (7.42 CAD).

  63. Pao Nan

    I’ve read your ultimate OLED wrist watch posting with pleasure.
    The only thing you’d missed was some musical element in your project.

    This could be a small help for you to upgrade your firmware with some musical tunes with current hardware wiring.

    Please, check my posting on the youtube.
    http://youtu.be/pxbmzRKlhek

    You could find more on my old posting.
    http://make-culture.blogspot.kr/2012/07/worlds-1st-120-rtttl-ringtone-random.html

    Good luck!

    1. Zak Kemble

      Hey, nice work on the RTTTL player :D
      I’ve actually implemented tune playing functionally for the next firmware version, though it’s much more basic than RTTTL to keep program size down. Notes are stored as binary rather than text and each note just has frequency and duration specified.

      1. RobG

        Oooo! Will this be in the Batch 2?

        1. Zak Kemble

          Yup, it was also in batch #1 :P There’s no full tunes, just things like the single beeps from pressing a button are now double beeps.

  64. William

    What parts do I need to solder if I buy the kit? I’ve got fine point tips for my Hakko but no flow tools or oven.

    ( and I HATE unreadable dumb stupid Captcha – it sucks big time – there are better tools now!)

    1. Zak Kemble

      You’ll need to solder everything if you buy the unassembled kit (0805, SOT-23, SOIC-8 and TQFP-32 packages, the hardest part would probably be the microUSB connector), or if you buy the PCB assembled option then you’ll only need to solder the battery and if you get the completely assembled option then you won’t need to solder anything. I use this iron and plenty of flux.

      Yeah, I’ll see about changing the captcha thing.

  65. Jay

    Hi Zack

    I have being reading HaD and was directed to your blog. I have a baby brother who really likes electronics and he is only in secondary school. I know I am too late but was wondering if you might have any extra watch and components left he will be very happy if I can give it to him in his bd

    Thx

    Jay

    1. Zak Kemble

      There might be enough parts left for a few more watches once the current batch is done, you can subscribe to updates here about it and possible future batches.

  66. kosthala

    Hi Zack,

    I can’t understand the purpose of the R7/R8 divider. From the schematic i can see that when the Q3 is off, the Q2 gate voltage is equal to the VBAT (so Q4 is off) and when the Q3 is on, the Q2 gate voltage is ~42mV by the divider (Q4 on). Without the divider the Q2 gate voltage would be ~0 volt, so the Q2 would be on again. So what is the difference?

    1. Zak Kemble

      R7/R8 isn’t really meant to be a divider in this case, R8 is to limit Q2 gate discharge current when turning on.

      1. kosthala

        Hi Zack,

        I was confused because you mentioned that without the divider, the p-mosfet was always stuck on.

        1. Zak Kemble

          Without level conversion the P-MOSFET was always stuck on.

          It’s without the level shifter R4, R7, R8 & Q3 that the P-MOSFET was stuck on (R7 and Q3 are the main parts, R4 and R8 are just to limit gate currents).

  67. Jerod

    Honestly amazing. If that watch were for sale, I would buy it. In a heartbeat. The alarm seems loud..it looks awesome. Thanks for showing it off!

  68. Sergey

    Good afternoon, I saw your watch and ecstatic, it’s excellent. Immediately wanted them repeat for yourself trying to open downloaded archive “watch.sch” program P-CAD 2006 but can not open writes error. Tell me how to open the PCB or could you give in a different format. Thanks in advance.

    1. Zak Kemble

      Hey, you need to use EAGLE.

      1. Sergey

        Thanks already figured out, now waiting for an updated version of PCB and HEX

  69. Necbettin

    You should add BLE to communicate with smartphones.

  70. Sergey

    Zack and where you can buy DS3231MZ + searched but could not find, could you provide a link.

    1. Zak Kemble

      RS-Online
      Mouser
      Digikey
      You might be able to get samples from Maxim

  71. Peter Sztojanov Jr.

    Hi Zak!

    Please tell us Farnell part number for the momentay switch buttons!

    thank you!

  72. Zohaib Amir

    Hello, Awesome Project!
    Problem encountered,
    .brd file unable to open (Using Allergo Free Physical Viewer)

    how would i program the mcu? will it be programmed after assembly ? which programmer and what software should be used?

    Suggestion : Proximity based screen on, wave your hand over it to see the time, (maybe LDR based?)
    Accelerometer based screen on, shake it to see the time,
    Gyroscope, Tilt based,, or touch based screen on, Stay on feature for screen, dock charging pogo stuff?
    Add BLE 4.0 to display cellphone notifications?

    1. Zak Kemble

      You need to use EAGLE to open the .brd and .sch files.
      On the latest PCB version (1.3) the MCU bootloader and fuse settings can be programmed by soldering connections to the SPI breakout pads (MI, MO, CL). Once the bootloader is programmed you can use the pogo adapter to program the main watch code (see this post for more pictures).
      I use a USBasp to program the bootloader and a normal USB-to-serial converter for the main watch code. Avrdude would be the software for uploading the code from your computer to the watch.

      Good suggestions, but all of that would be difficult to hand solder (accelerometers and gyros are usually in QFN packages) and not very friendly on battery life. Though bluetooth will likely be added soemtime.

      1. Peter Sztojanov Jr.

        Can we using the USBasp (and the 10pin-6pin converter) to uploading the bootloader and the main code also? Or should using the SPI pads first time? Can you explain please, Zak. Thank you!

        1. Zak Kemble

          The microcontroller in your kit already has the bootloader and main code programmed. To update the main code you would use the USB-to-serial converter and pogo adapter that came with the kit like this.
          To update the bootloader or change fuses then you will need to solder connections from a USBasp to the SPI pads, but you shouldn’t need to change those.

          1. Zohaib Amir

            oh, and what do you mean by “Changing fuses”, why?

          2. Zak Kemble

            The fuses are low-level AVR microcontroller settings for things like the clock source, you will need to change the fuses to the correct values using the USBasp programmer, see README.md on the github repo.

      2. Zohaib Amir

        Hey,Thanks for the reply
        forgot to ask, is this opensource? can i make one for myself without any fear of lawsuits? :P
        on your FTP there is a file named “watch_20130925″, what is that?
        should i follow the “NWatch-master” 1.3 version instead?
        i have once worked with 8051 microcontroller for a friend of mine, it had a programmer where you could just put the whole chip in socket and program it, this would be my first “normal” microcontroller project

        and yeah, i figured out that i needed EAGLE to open those files,but the PCB manufacturers want gerber files instead,so i am in the process of learning how to use “CAM” to export, not sure which layers to select

        you mean to say, that the bootloader must be programmed to atmega328p which doesnt already have a bootloader?
        because some already have arduino bootloader loaded, or you have a specialbootloader for it?
        difference between USBasp and USBtoSerial?, USB to RS232 TTL? a little confusion here

        so far what i understood,
        Step1:Buy all parts,MCU without bootloader
        2:Make PCB, assemble everything on it
        3:use pads to solder wires to burn a bootloader using usbasp
        4:solder again for USB to Serial to program it
        5: use it! and feel awesome

        P.S.: QFN packages could be assembled using heat gun,and solder paste masking

        1. Zak Kemble

          Yup it’s all open source, you’re free to make one for yourself. The code is GPLv3 so any changes you do to it must also be made open source.
          watch_20130925.zip is the first version (old), use whatever is on GitHub with the highest version number.
          Look here for the usual layers to export, should be similar for other manufactures. OSHPark can also take plain EAGLE .brd files if you decide to use them.
          A bootloader is only needed if you want to be able to program via serial and to protect the fuse settings from getting messed up (messed up fuses can be a real pain to fix). The bootloader for the watch is a slightly modified Arduino bootloader (optiboot), I just added EEPROM reading and writing support and changed the LED pin.
          USBasp is an actual AVR programmer. USB-to-serial is just a converter for USB to RS232 TTL, but with the bootloader installed on the AVR the converter can be used to program the watch.

          Those steps should work, apart from #4, what do you mean by solder again?

          I’ll have to have a look into using a heat gun, I’ll probably make soldering normal SMD parts easier too :P

          1. Zohaib Amir

            Okay, so
            do i have to put the modified bootloader on a new bought blank chip using USBASP?
            and after doing that , program it?

          2. Zak Kemble

            That’s right.

          3. Zohaib Amir

            Sorry for so many Questions, i am a newbie in the world of AVR, :P
            so, there are SPI pins for usb2serial TTL, and then there are other pins to be used with AVR,
            the modified optiboot goes into the AVR? or in the MCU?
            on the Github are 3 files,
            optiboot.hex
            watch.eep
            watch.hex
            where and in what order do these files go?

            it would be much appreciated if there was a step by step tutorial “after” assembling the components together,
            like instructables, :D

          4. Zak Kemble

            AVR is the type of MCU in the watch.
            optiboot.hex is the bootloader, use a USBasp to program that onto the watch.
            watch.eep and .hex is the main program, program that using a USB-serial converter.

            See THIS for installing drivers.
            Google image search for “avr isp” and connect wires from the USBasp header to the pads on the watch (MOSI -> MO, MISO -> MI, SCK -> CL, GND -> GND). RST goes to R, don’t solder that one though, just hold it on the pad.
            See last 2 steps in link below for programming, but choose USBasp as the programmer.

            This will help with the serial part: http://forum.zakkemble.co.uk/thread-1-post-2.html#pid2

          5. Zohaib Amir

            Thanks a lot for your support!
            in the time it took my comments to be moderated, i made myself busy learning about MCUs and arduinos, and i have a better understanding of it now,

            1:Atmel chip is at the heart of Arduino

            2:Arduino has their own programming language that works with their bootloader on Atmel

            3:Atmel has their own “Hardcore” programming language, and some pins are assigned differently

            4:An ATmel chip with Arduino (or optiboot) bootloader can be programmed using USB2Serial/TLL Adapter (using arduino IDE
            and/or AVRdudes).In your case, using the pogo Adapter.

            5:A blank ATmel chip is bootloaded using the AVR/USBASP programmer on SPI pads (using Avrdudes)
            in your case, using the pads you provided

            6:Fuses control the internal clock n stuff,they can be changed using AVR Programmer

            7:i assume that your code is written in normal ATmel language, basically this watch has nothing to do with Arduino(it was confusing me all the time)

            8:According to the screenshot on the link, you are programming the main code using an Arduino on AVRdudes
            can both the USBasp and USBtoSerialTTL can be used with AVRdudes to program/burn the MCU?
            can you also post a screenshot of burning the bootloader with all the fuses n stuff filled correctly?

            i will probably solder and desolder everytime , because i dont like holding onto cables while frimwares are being programmed, just the fear of Bricking devices.

            What do you think about this “Retro Watch”?
            http://www.instructables.com/id/Make-your-own-smart-watch/
            https://github.com/godstale/retrowatch

            Just refer to the line number, makes answering easy
            Have a nice day!

          6. Zak Kemble

            Sorry for taking so long to reply!
            All of those points are correct.
            Well, #3, the Atmel language is just normal C/C++, while the Arduino language is C/C++ made easy.
            #7: Yeah, the watch uses normal C, no Arduino stuff.
            #8: The programmer is set to ‘Arduino’ which tells avrdude that we are using serial to communicate with an optiboot bootloader. The USBasp needs to have USBasp chosen as the programmer (near the bottom of the list).

            Screenshot:
            http://blog.zakkemble.co.uk/files/avrdudess_usbasp_optiboot.png

            You can set the bit clock back to 1.5MHz once the fuses are set.

            Retro watch… not too keen on the way the strap is done :P Nice that it’s got bluetooth, but doesn’t seem to have any battery charging stuff.

          7. Zohaib Amir

            Haha, its okay, fast replies arn’t necessary

            yes,i found the retrowatch strap ugly aswell. but it is easier to make, instead of onboard RTC, the time data and other stuff is transferred through bluetooth,and for battery i was thinking something like TP4056, but i am note sure about the load sharing,

          8. Zak Kemble

            TP4056 would work, load sharing circuit would be the same, just the additional MOSFET, resistor and diode. More info here.

        2. Zohaib Amir

          Oh, and, what do you think about using a cellphone battery?
          they are thin, lightweight and they have enormous capacities (1500mAh ~ 3600mAh)
          i think the classic “BL-5C” from Nokia would fit the size perfectly
          perhaps with a Qi wireless charger sticker taped to the back.

          1. Zak Kemble

            Cellphone battery should work, though I’m not sure how safe it would be to solder wires onto the contacts.

          2. Zohaib Amir

            i think it would be safe, a few seconds of heat doesnt hurt, just dont heat the battery itself, only the terminals

  73. Jared

    Hey! I’ve been building my own OLED watch too, I came across your project while looking for other makers. I quite like your design, and I’m pretty impressed you managed to get 60FPS! (Mine can only do ~20FPS, but it’s probably because it’s 128×128 RGB)

    I went the Microchip PIC24 route in my watch instead of AVR, and added bluetooth and some sensors. Admittedly I should have chosen a lower-power MCU, it uses around 2mA on standby… You should check it out: http://jared.geek.nz/2014/jul/oshw-oled-watch

    PS. If you want to get into ARM, have a look at EnergyMicro’s EFM32 ARM chips. They’re very low power, and I’ll probably use one in my next version!

    1. Zak Kemble

      Heya, thanks :D I think I saw your watch on HackADay, great work! That colour display looks much nicer than my monochrome one :P
      I was looking at those EFM32 controllers not too long ago, though it seems the smaller TQFP versions don’t have USB support. Atmel and ST have some good stuff, power consumption probably isn’t quite as low, but it would only be only a few uA difference for the things a watch needs to do.

  74. ryan

    just wondering could i upgrade the battery as long as i made sure it was a single cell 3.7v lipo battry but with a different capacity.

    1. Zak Kemble

      Yup, Li-Ion should also work too. Make sure it has at least undervoltage protection though.

  75. Zohaib Amir

    and, what is RN2? (473)

    1. Zak Kemble

      RN2 is a resistor network, it contains 4x 47K resistors.

  76. Kian

    HI Zak,

    Great work here. Pardon me for my amateurish question, what is the reason for using 2.5V instead of 3.3V to power the MCU? Is it because current consumption is lower at a lower voltage? A lot of sensors out there has a 3.3V requirement.

    1. Zak Kemble

      Thanks :)

      A number of reasons for 2.5V:
      Lower power consumption.
      It’ll be pretty much always be under the battery voltage which ranges from 4.2V to 2.4V, so no drop out issues.
      It’s close to the OLEDs recommended logic voltage of 2.8V (max 3.3V, min 1.65V).
      Nothing else in the watch needed 3.3V.

      Most 3.3V devices can read a 2.5V signal, though you’ll need some level conversion for 3.3V -> 2.5V back to the microcontroller, a simple resistor divider can be used or for higher speed and lower power consumption use an OR gate.

  77. Electronics Subash

    Nice thing to build. I will surely try to build it myself.
    But one thing that didn’t made a sense to me is battery life and the use of atmega, If we use other light weight chips it will be more better and consume less power.

    1. Zak Kemble

      In sleep mode the ATmega consumes ~100nA and while awake the OLED is the main battery drainer. We’d probably only see a ~10% battery life improvement if we were to swap the ATmega for some ultra low power controller.

  78. K

    First of all I want to say that this is amazing and I want to build some thing just like this but I don’t have access to a 3 way switch so could u please chnag the code to use three small momentary push btutor switches and then send the code to menur3@icloud.com thank you.

    1. Zak Kemble

      The 3 way switch is already just 3 individual push buttons, so no need to update the code.

  79. Mike

    Loving the watch so far. However, I’ve recently been having an issue. My alarms have stopped going off for no apparent reason. It appears that when one goes off, it is immediately stopped, and no sound is made, regardless of the sound settings. I know the watch is still capable of making sound, as the menu sounds still work, so this appears to be some sort of bug in the code. Any help would be appreciated.

    1. Zak Kemble

      It is indeed a bug, updating the firmware will fix it, see HERE.

      1. Mike

        Thanks for the response. I’ve updated the firmware, and the alarms still stop working after the first one.

        1. Zak Kemble

          Ah, found another bug, see if the latest firmware fixes it.

          1. Mike

            This update appears to have fixed it. Thanks!

  80. Dave

    Hi Zack,

    My watch has started misbehaving. I really can’t explain why…. the beeps for the alarm and pressing buttons have disappeared. When the alarm goes off there is a brief “click” but that’s it.
    The beeper still works though because when I play either of the games I get all the sounds.

    The second issue is that the battery meter always reads 5001mV. This corresponds to an ADC reading of 1023 I believe (having looked at the source code).

    Any ideas what is going wrong? I’ll let the battery drain down and see if it works when re-powered up.

    Big Dave

    1. Zak Kemble

      The disappearing beeps is a bug, updating the firmware will fix it, see HERE. You can also short together R and G pogo pads to reset the microcontroller instead of waiting for the battery to run out.
      For the voltage reading check around RN3 and C6 area for shorts, though if you’ve epoxy’d the display it might be a bit difficult to do that now :P

  81. Dave

    Okay, I’ll update the firmware. Looks like I’ll have to live with the battery voltage problem. Maybe the display will start misbehaving when the voltage is low? Can’t believe I didn’t spot it before!

    1. Zak Kemble

      The battery has it’s own cutoff at about 2.4V, the display might start going a bit dim as the voltage goes down but should otherwise work normally. If there is a short you might find that stand by battery life is now only around 7 days :/

      1. Dave

        Well presumably the short won’t be a significant problem if the ADC input is “high” impedance. Thanks for clarifying DTR.

        1. Zak Kemble

          The ADC input is also connected to a voltage divider with one of the 10K resistors connecting to ground, that’s what will cause the reduced battery life.

          1. Dave

            Still going as of today without a recharge. I don’t think the 10k short was at fault after all.

          2. Zak Kemble

            Oh, I forgot about the transistors which turn the divider on and off only when needed, so that’s probably why battery life is still ok :P

  82. Dave

    By the way, in that link to reprogramming the firmware you refer to “DTS” however I only have “DTR” and “CTS” on my dongle. Which is it? Thanks.

    1. Zak Kemble

      Ah fixed, should be DTR.

  83. sztojanov

    Zak, Can you share with us the finished manual, or its just for the members, who bought the kit? thanks.

    1. Zak Kemble

      The manual/wiki is for anyone, but it’s still a work in progress – https://github.com/zkemble/NWatch/wiki/

      1. sztojanov

        Great! :-) Can you make for us an offline version, like in pdf format?

        1. Zak Kemble

          I don’t ave an offline version, but you can go the pages and CTRL+S to save them, or there might have a PDF option if you CTRL+P to print. There’s also websites that can convert pages to pdf, google “web page to pdf”.

  84. Max

    Got my watch as a Birthday gift ;) and it was spot-on :)
    though due to my shitty smd soldering skills i had to use another usb socket… (and i will not be showing them off to the world)
    but this is how it looks like ;)
    and it’s awesome :))

    http://muziol.com/wp-content/uploads/2014/10/WP_20141026_12_14_54_Pro.jpg

    1. Zak Kemble

      Awesome :D Looking good!

    1. Sergey

      vibro you can manually set the buzzer instead. True Zak

  85. Sinan Akkoyun

    Hi Zak,
    I can’t do anything with the .hex and .eep files. Please give me your arduino code so I can modify the code. I hope you awnser me in short time.
    Sry for bad english, I’m german.

    1. Zak Kemble

      Replied to the email you sent, but I’ll also put here:

      All code is available at https://github.com/zkemble/NWatch/tree/master/firmware/src
      You should be able to upload the .hex and .eep files to the microcontroller and if everything is wired up the same as in the schematic (https://github.com/zkemble/NWatch/blob/master/hardware/watch/1.4/schematic.png) it should just work.

  86. Hangman

    Hi Zak,

    I finally finished something like a case for your watch. It’s 3d printed in 2 parts and I tried to make it as minimalist as possible.
    If anyone is interested, on my website are some pictures and the .stl files (and everything in german).
    -> http://kekse23.de/2014.12.05/309/ein-gehaeuse-fuer-die-nwatch/

    1. Zak Kemble

      That looks really good, I like it! :D

  1. How Much Can You Cram Into a Wristwatch

    […] functional and not overly bulky is very, very hard. [Zak], though, makes it look easy. He started his DIY digital wrist watch to see how much he could cram into a watch-sized device. The finished product is really incredible, […]

  2. rndm(mod) » How Much Can You Cram Into a Wristwatch

    […] functional and not overly bulky is very, very hard. [Zak], though, makes it look easy. He started his DIY digital wrist watch to see how much he could cram into a watch-sized device. The finished product is really incredible, […]

  3. How Much Can You Cram Into a Wristwatch - RaspberryPiBoards

    […] functional and not overly bulky is very, very hard. [Zak], though, makes it look easy. He started his DIY digital wrist watch to see how much he could cram into a watch-sized device. The finished product is really incredible, […]

  4. How Much Can You Cram Into a Wristwatch — Blog of MPRosa

    […] functional and not overly bulky is very, very hard. [Zak], though, makes it look easy. He started his DIY digital wrist watch to see how much he could cram into a watch-sized device. The finished product is really incredible, […]

  5. IT青年舍 » How Much Can You Cram Into a Wristwatch

    […] functional and not overly bulky is very, very hard. [Zak], though, makes it look easy. He started his DIY digital wrist watch to see how much he could cram into a watch-sized device. The finished product is really incredible, […]

  6. What I found worth reading on the interwebs ;) 28/09/2013 | godzillor labs

    […] functional and not overly bulky is very, very hard. [Zak], though, makes it look easy. He started his DIY digital wrist watch to see how much he could cram into a watch-sized device. The finished product is really incredible, […]

  7. CJ Labs » Impressive DIY Digital Wristwatch

    […] I’ve been wanting to make something like this for a long time but I never did. This is truly impressive. It’s very nice looking and keeps a decent size. He has posted the schematics and source code on his website. […]

  8. ATmega328P powers this slick DIY wristwatch | Bits & Pieces from the Embedded Design World

    […] “The main incentive behind this project was to see how much I could cram, in terms of both hardware and software, into a wristwatch-like device that is no larger than the display itself,” Kemble wrote in a recent blog post. […]

  9. DIY Digital OLED Wriswatch with an ATmega328P | labratsgonewild

    […] watches are grand – been there for many years and I prefer them over digital watches, well this watch from Zak Kemble might just be an exception (Yes! its an exception!). Zak’s goal was to fit as much features […]

  10. DIY Digital Wristwatch #WearableWednesday « adafruit industries blog

    […] DIY digital wristwatch would come in handy in many situations but i especially like the ability to set up to 10 alarm […]

  11. DIY Watch uses OLED screen and ATMega328 - Hackalizer

    […] anticipated too huh?   How’s 1.5mm thick sound ?   Sounds pretty good to me too.  Zak has a really awesome writeup of him rolling his own […]

  12. WristWatchReview.com >> A Very Impressive DIY Watch

    […] This is all displayed on what looks to be a very crisp OLED display. Frankly, I’m impressed – while it’s not something I myself can put together, I can certainly appreciate the effort that went into packaging this watch (and it’s functionality). Sure, it’s not a smartwatch, but this is one of the cooler digital watches I’ve seen in some time, mass-produced or not. If you’d like some more information on this project, check out the original project page here. […]

  13. Developer I/O » Awesome DIY watch

    […] and 1.3″ 128×64 monochrome OLED screen. For more information on this awesome project, follow this […]

  14. Ein Gehäuse für die N|Watch

    […] Vorgeschichte: Vor ein paar Monaten bin ich im Internet auf eine tolle kleine Eigenbau Armbanduhr namens N|Watch (unbedingt ansehen) gestoßen. Ein kleiner atmega328p mit RTC und einem OLED Display, ein paar […]

Leave a Reply

Your email address will not be published. Required fields are marked *


7 − 1 =

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>