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)