Tweets
- Replying to @cabe_bedlam and @tahnok - I had not but now I’ve googled it — amazing! The concept reminds me of @nwsayer’s Crazy Clock: https://www.tindie.com/products/nsayer/crazy-clock/ - (original) 
- Replying to @josecastillo - what’s going on here: a beat is 1/1000th of a day, and 1/100th of that is 0.864s. So the beat clock ticks faster than once a second. With 1 Hz updates, every few seconds the display literally skips a beat. By updating @ 8 Hz, or every 0.125s, we can accurately display centibeats. - (original) 
- Added configurable refresh rates to the watch library, which means I can add (accurate!) fractional beats to @tahnok’s beat time app! The difference between a 1 Hz refresh rate (left) and an 8 Hz rate is subtle. but it’s the kind of subtle wrong that could drive you up the walls. - (original) 
- Replying to @GrantCuster - Thanks :) - (original) 
- Replying to @twopoint718 - Thank you! - (original) 
- Replying to @GrantCuster - But yea crowdfunding a larger run, especially if this initial one goes well, seems like a logical next step; my joke was that even a success in what I’m doing likely isn’t as profitable as selling out and getting paid a tech salary to make tech that disempowers people at scale 😬 - (original) 
- Replying to @GrantCuster - The first run of 100 is happening imminently, which i hope will kickstart a community of interest around the gadget. My worry is the SAM L22 chip that I need to make more is unobtanium for probably another year. So it may be a little while before I could do something like that :/ - (original) 
- Replying to @josecastillo - this does not feel like the most profitable way to spend my thirties. - (original) 
- it’s weird to try to put a finger on what i’m doing with my career path right now. it’s like, do i want to be a watchmaker? not really. i just want to build tech that helps people envision a world where they’re in control of the tech around them, instead of the other way around. - (original) 
- Replying to @_nitz - The serving suggestion is always so much more entertaining. - (original) 
- Replying to @Hamitron - HTTP 20� LOL IDK ¯\_(ツ)_/¯ - (original) 
- Replying to @DuwelSimeon - Oh 100%, totally. tho to be clear, I’m not writing this assembly myself, just showing the disassembly of my compiled C code… which I guess by the end did get simple enough to understand :) - (original) 
- Replying to @josecastillo - now I’m curious to re-run my power consumption tests, since the test app is ticking once a second and displaying the time. I mean I’m pleased with this change from an aesthetic perspective. but I also wonder if eliminating the timestamp conversion logic improved my battery life… - (original) 
- Replying to @josecastillo - the year thing is a bit annoying, but honestly it’s not that much weirder than the old note that had to explain why the maximum supported year is 2083. As long as it’s well-documented, it’s a tradeoff I’m down with.  - (original) 
- Replying to @josecastillo - by storing the date/time in the same bit-packed struct the RTC uses, getting the time is as simple as copying the register value. and it gives the app developer a simple enough API with minimal extra cruft: they just have to type 
 date_time.unit.second instead of date_time.second- (original) 
- Replying to @josecastillo - but like, all that code was just copying bits of data from one struct to another. It’s also wasted work if the app doesn’t care about the year, which I sense most apps won’t need; hours, minutes and seconds are the 90% use case for a watch. So I did this: https://github.com/joeycastillo/Sensor-Watch/commit/152ba8aec6c4ab19a56822ddd7d77e999cb715ae - (original) 
- Replying to @josecastillo - the gist of it is, the watch stores years as a number from 0-63 and expects the user to add that to a “base year”. so 1 is 2021, 2 is 2022, etc. I had been doing that in the watch library, to make it simple for the application developer to get a timestamp that makes sense.  - (original) 
- Replying to @josecastillo - this morning’s refactor brings it to this. a handful of instructions, compared to literally hundreds before and dozens yesterday. in the end it all came down to thinking carefully about how I was representing my data, and trading a tiny bit of usability for a big optimization. 2/  - (original) 
- further optimizations! at left: disassembly of just one function that was getting called in watch_get_date_time. at right, the state of yesterday’s refactor. Better! But there’s room for improvement; getting the time on a watch is something we’re going to do, like, all the time…   - (original) 
- Replying to @josecastillo - one big point of pride: while I did deprecate two functions (that took ASF calendar date structs as parameters) the new implementation remains totally compatible with all the application code written so far. I mean, I’m gonna test it more before I merge it. but so far, so good :) - (original) 
- Replying to @josecastillo - it also let me implement the alarm the way that I wanted to. Since the MCU knows how its timestamp represents real hours, minutes and seconds, it’s one line of code to set a recurring alarm that triggers every minute, hour or day, without having to reset it every time it fires.  - (original) 
- Replying to @josecastillo - the ASF calendar code used the RTC in 32-bit counter mode, which meant a lot of calculating how timestamps relate to calendar dates. but working directly in clock mode, the microcontroller itself handles all that; you can just hand the clock register a human-readable date & time.  - (original) 
- today’s watch accomplishment: gutted the original calendar functionality (which depended on a pile of ASF code) in favor of a simple implementation that works directly with the RTC in CLOCK mode. I feel good about this one. simple code that’s easy to read. https://github.com/joeycastillo/Sensor-Watch/blob/a65dcf1ec8071878988d5aa0390c5be66ba52a11/watch-library/watch/watch_rtc.c - (original) 
- Replying to @barryha and @logicalelegance - [muffled screaming] - (original) 
- Replying to @RealTimeKodi - I just want to read my analog values one bit at a time over a two-wire bus, like a civilized human. - (original) 
- Replying to @josecastillo - the MEMS accelerometer whispers gently to us that its sense of the world has shifted; we have to amplify the signal carefully to hear its subtle song. The quartz crystal meanwhile yells at precisely 32768 Hz, egged on by a pair of nearby capacitors. “WHY IS THIS HAPPENING TO ME?” - (original) 
- Replying to @josecastillo - oh and how could I forget the time sensor! This one doesn’t even require an ADC; it’s just a carefully crafted chunk of quartz crystal that we zap until it screams repeatedly, at precisely the frequency we want to measure. - (original) 
- Replying to @josecastillo - your smartphone’s microphone is just a diaphragm that converts capacitive noises into digital signals. Even the fanciest of fancypants MEMS gyroscopes: it’s a cutting edge nanomachine-adjacent flake of magic, plugged into a gadget that converts a voltage to a byte or two of data. - (original) 
- the more I play with sensor boards for the watch, the more I realize sensors are just fancy materials hooked up to an ADC. Light sensor? Doped silicon and an ADC. Temperature sensor? Flake of metal oxide and an ADC. It’s all just currents & voltages summoned from an analog world. - (original) 
- Replying to @wakest and @FakeUnicode - oh my, this is good! https://twitter.com/FakeUnicode/status/1429618081341480962 - (original) 
- Replying to @josecastillo - update: I have drawn my own rectangle from scratch. - (original) 
- apparently rectangles are part of the premium package.   - (original) 
- Replying to @ChengduLittleA - I would guess they’re just images? Or they used a custom font / custom piece of type like a dingbat? it does strike me like a job for images and not text… - (original) 
- Replying to @josecastillo - also I’m just now realizing that the “neutral chess symbols” are even weirder than I thought, in that they’re supposed to represent chess pieces that are neither black nor white and can be moved or captured by either player? Do they also need to be rotated 315 degrees? 🤯 - (original) 
- Replying to @josecastillo - every time I run into one of these things I dive headlong into the rabbit hole, because I’m certain someone had to write a proposal or at least an email about it; in this case, the paper trail does not disappoint: https://unicode.org/L2/L2016/16293-heterdox-chess.pdf  - (original) 
- learned something new in Unicode today. a timeline of my reactions: 
 ok, I guess. (seconds pass) wait, what? (seconds later) pls… pls stop.   - (original) 
- Replying to @josecastillo - eh what the hell. half a thing, fresh out of the Form 3. The window is off center, and I still need to figure out a way to hold this assembly on without crushing the screen. but I sense that these things are figure-out-able.  - (original) 
- Replying to @josecastillo - anyway. that’s about all I want to share for now. work continues on the sensor watch dev board, but there are lots of moving parts to that one, and I already share too many half-things on here. it makes sense in my head. bits of it work. but a lot of things need to come together. - (original) 
- Replying to @josecastillo - this is actually fine; part of the appeal of this project in my head was upcycling. I always kind of imagined this as an ode to scavenger tech, taking e-waste and tech relics and reusing whatever we can. Repurposing the original LCD was always the plan. so I’m sticking with that. - (original) 
- Replying to @josecastillo - other than that, some learnings on a custom LCD for the watch. namely: it’s gonna be way more complicated than I thought to do a custom LCD for the watch. the F-91W LCD is small, unusually thin and fairly fine-pitched. I didn’t think it would be easy, but it turns out, it’s hard. - (original) 
- Replying to @josecastillo - alternatively, if your application doesn’t need an always-on display, it could sleep indefinitely and only wake on a button press. for example, I want to build one that’s a light meter for photography. in that case, it makes sense to only wake it up when I want to take a reading. - (original) 
- Replying to @josecastillo - this could be super useful with a low power accelerometer like an LIS2DH on a sensor board; it consumes 1µA, and could wake the watch whenever the device moves. i.e. spend nighttime in a standby mode that lasts 2 years, and only wake up when the wristwatch is actually on a wrist. - (original) 
- Replying to @josecastillo - I also managed to move from standby mode experiments to a working API for sleep mode in the watch library. This is the new “shallow sleep” mode, which retains RAM but turns off pins and peripherals. 5.5 µA with the LCD off, or 12 µA if you want to optionally display a message. - (original) 
- i have been relatively quiet on twitter this last week. keeping my head down; doing the work. picked a manufacturer for the first 100 sensor watch boards. all parts are now on hand, and the panels are being fabricated even as we speak. (thread, I suppose; news of the watch) - (original) 
- Replying to @bsodmike, @adafruit and @sparkfun - this seems harsh and a bit needlessly cruel with the name-calling. Adafruit also gives back a lot to the community in terms of education and open source code. 
 tbh I kinda regret that my idle late-night speculation about a wayward box opened the door for a tweet like this :(- (original) 
- Replying to @KevinONeill1776 - I think they ship everything out of their warehouse in NYC? anyway I’m betting on this being some bizarre UPS website issue, and the package is actually somewhere in queens - (original) 
- i am so confused. i live in brooklyn. and this is a shipment from Adafruit. which is in manhattan. 
 how on earth did this box end up 2,800 miles off course? - (original) 
- Replying to @zackfreedman - the funny part is this is footprint came with a big shiny “verified” badge… tho if I had looked closely, I would have noticed the “manufacturability” line was decidedly not checked 😬 https://www.snapeda.com/parts/USB4085-GF-A/Global%20Connector%20Technology/view-part/  - (original) 
- Replying to @josecastillo - what happened here: I added a power plane on one of my internal layers, and while Eagle correctly removed copper from the holes in my USB port, it didn’t take into account the milling paths I added for the slots. so when the slots got plated, my 3V3 net got shorted to GND. (oops)   - (original) 
- all things considered, this could have gone worse. it could have gone better, for sure. but at least I managed to get some useful testing done with it.  - (original)