At $0.20 in 1k quantities, this is TI's answer to the CH32V003, Puya PY32, and the STM32C0 series. It's great to see tier-1 silicon vendors participating in the race to the bottom for jellybean microcontrollers.
The 1KB of SRAM is admittedly very tight (even WCH's 10-cent RISC-V parts usually give you 2KB), so you are strictly in bare-metal, carefully-managing-your-stack territory.
1KB isn't so bad unless you are making something complicated or need large buffers. You can do quite a bit of nontrivial stuff with it. Years ago I made universal remote with ATtiny13 + external EEPROM for storing remote data. It has only 64 bytes of RAM, that's what I would call very tight. Was still able to program it in C, 1KB flash and number of pins were bigger limiting factor than ram.
Plenty of DIY projects used ATtiny2313 with V-USB. That's a pure software USB implementation bit banging the IO pins (not a USB stack on top of hardware USB support)+ your application logic squeezed into 2K of flash + 128 bytes of ram.
Chips like this are great for digital glue logic. Read a sensor, read a button press, blink some LEDs with simple state machine or control loop.
It's been long enough ago that I don't use it as an interview answer anymore, but one of the most interesting things I built (technique-wise) was a Z-80 based serial multiplexer with no RAM. The only volatile memory it used was the device registers. The fun part was handling subroutine calls without a stack. The Z-80 has an indexed jump mode, so before calling a subroutine, I'd fill the jump register with the statement after the subroutine call, and when the subroutine was done, execute the jump with the (return) address prefilled.
Anything to save a few bucks on a 6264 SRAM component :-)
Yes, that's "bare metal" as opposed to programming in MicroPython, Javascript with Espruino, Lua/NodeMCU, Rust, or adding your C application on top of an off-the-shelf RTOS.
C support is basically universal these days, very few chips require you to program in only assembly anymore.
It also supports running in freestanding setups without an OS, and quite a lot of the language's features still work.
I was extremely surprised by how much functionality is packed into "core", and runs without an OS when using freestanding rust. Even stuff that requires an allocator can run provided you provide your own heap!
A cool example of this was implementing fmt::Write for a memory mapped uart console thing. Then implementing a kprintln! macro that supports all of the formatting machinery that you are use to. This worked without even a heap available.
This line of micros has been out for almost 2 years now but they only just took the 1.38mm^2 package out of pre-production.
I started a design last year of a tiny earring with ~102 addressable LEDs on it, a microphone, a bunch of supporting circuitry and this micro.
https://i.ibb.co/JWh57LLw/IMG-20260408-183807502-HDR.jpg
Unfortunately by the time I was ready to order the boards I found the tiny package was unobtanium and had to resort to the second smallest package which isn't very small. Frustration!
And for people saying it is low on RAM and flash, you need to understand this is a low cost micro.
You can also do a lot of work with a small amount of RAM by managing your memory manually. Through the use of C unions I have about 3kB worth of variables that get switched in and out depending on the mode we are in.
I have enough space to record analog audio samples and perform a fourier transform over the samples and use the generated to data to drive algorithmically generated animations on the LED array.
My sleeper pick for a design like this was JL700N series. Intended for cheap TWS, ultra high integration. 3x3mm QFN20 package, and in it: BLE, USB, can be powered off 5v or 3.3v, built in battery support complete with a charger, almost no passives required. SDK was a bitch though.
There are more pieces like this in "wearables" market now, things like "SmartBond" series. But for a while, weird off-label pieces like this wore the integration crown.
Wearable MCU is sometime stupidly good. Recently i learned that the new Pepple watch use SF32lb55. It has dual mode bluetooth with LE Audio, all the fancy like pmic, battery charger, usb, 2.5D GPU etc, it also has insanely large memory(16MB flash/8MB PSRAM on some packages). The whole MCU costs like $3.
If you dive into even more niche, NDA-Only MCU, We have BES2700 MCU, which is even better
A silly question (from a non-HW guy). Why are digital bathroom scales so coarse? Some have a weight resolution of +/- 500 grams. Would a better microcontroller make a weight faster or more presise? I guess this TI micro controller is overkill for a bathroom scale.
Computing power is crazy cheap and does not help. The perceived slowness is because the taken measurements are averaged over second or so. When you step on the scale your weight shifts around and that affects the measurement by far more than half a kg. Averaging gives you better accuracy and more confidence in the result but it doesn't improve the measurement precision.
The scale precision comes from calibration of the measuring mechanism done on factory line at certain weights. If your specific body weight is far from the weights used in calibration, or too much time passed, then the calibration doesn't help much.
A better microcontroller doesn't help at all. Even a cheapest uC from decades ago is good enough. Better ADC and gauge sensor would help, but even more important is good analog engineering to produce self-correcting circuits with decent noise rejection.
In general this category of products is more for tracking changes in your body weight than getting the precise absolute value. And the body weight changes a lot just from hydration level, so the ±.5kg tolerance is considered good enough.
My fine spice recipe writing scale (20g max, 20k count) consistently over years of me having it keeps it's magnitude calibration of the 10g reference to a single digit count, i.e., comfortably within +-0.1%.
Ofc there's auto-zero on start involved, but translated to a people bathroom scale that'd be "comfortably better than +-100g".
A precise bathroom scale just would want a bit more effort on drift prevention as a sample mass at this scale is rather unwieldy, and critically it'd need a toe-operated button to select that you've finished climbing onto the scale, upon which it starts averaging the load to progressively improve the weight measurement accuracy. I'd expect using a bounce-height-freefall-duration based length of timing uncertainty at the start and end of the averaging period to allow proper Bayesian uncertainty quantification of the shown result, say by displaying both the 10th and the 90th percentile on the display which grow closer as you wait while standing on it.
With some cleverness a compact calibration mass might be usable to calibrate absolute scale, transferring up to the "people" range using just a random assortment of stuff that fits on the platform, totalling around 10kg.
Because building the scale to be linear in response good enough for 20k count of resolution is pretty straight-forward.
Higher resolution would let the user see that your scale is zeroed badly, that repeatability sucks and that the measured weight is not even constant under a constant load.
Digital scales generally work by warping metal pieces and forcing a flex film resistor glued on the piece to be stretched along, causing its resistance to change, thereby breaking the balance of a Wheatstone bridge, creating force-proportional current to occur, which is finally read out with an ADC.
I guess the overall finickiness of that can't be instantly improved by a better microcontroller alone? They drift and have linearlity issues and show temperature dependancy and all that.
Precise body weight measurement at bathrooms is also probably not that important, 500 grams is one full bottle of soda/water; body weights can easily change that much within a single day.
I would suspect that the "real" reason is combination of both. 100-500g can be a "good" compromise for cheap bathroom scales.
You've described a load cell, which is commonly used in laboratory and industrial environments to resolutions exceeding 0.05% of full scale. I've used these in the past with great success:
Click the "Specifications" tab to see the various error sources. Interface's technical library (linked at the top right of their shop) is a great training tool too, if you want to learn more. To keep your NIST certification - and to maintain accuracy after a high-stress...incident... you need to do occasional recalibration. That would be a problem for a consumer product, but with good mounting and overload protection they really don't change that much over time.
Then you've got the electronics, and the amplifier required to get the rated precision out of that load cell costs more than the load cell itself.
Achieving those performance targets costs money, and people buy the cheapest scale that says "Accurate High Precision Digital Bathroom Scale Glass" on the Amazon listing.
I remember that a friend told that the Nintendo Wii Balance board gave her the weight on gram resolution. Which is 10-100x better than most commercial bathroom scales. But keep in mind that precision is not the same as accuracy.
As others have said, the crap resolution is to mask the crap repeatability.
Better processing can help, but good enough processing fits in the cheapest of microcontrollers.
ADC quality is more important, signal conditioning and sensor quality more important still.
The biggest factor for accuracy is likely calibration though.
A sensor that's 2% accurate with a 2 point calibration can easily become a 0.25% sensor with a 5 point, 3 temperature calibration.
But that all takes time, and unless you're running huge batches it adds too much to the bottom line of a low cost product.
Source: Designed strain gauge sensors and manufacturing processes for a living
I used to have a bathroom scale with a single strain gauge that was accurate. Accurate, as in weigh yourself, pick up a 1lb object, weigh yourself again and see an extra pound. That scale had a "lifetime" nonreplaceable battery in it and after 20 years or so, gave up the ghost.
Every scale I've tried since is wildly inaccurate, and they do have brains and they fake it. Step on, get a random weight within a 5lb range of the true weight. Step on repeatedly, even after the scale has timed out and had to be rezeroed, and get that exact weight again. Fake. Everysingle 4-sensor scale (one in each corner post) that I've tried does this.
I've since found another relatively vintage single strain gauge scale whose battery still works. And I have a mechanical scale in reserve for when it no longer does.
> Fake. Every single 4-sensor scale (one in each corner post) that I've tried does this.
Huh. I have never experienced this and didn't even know this was a thing. My cheapo Chinesium scale that I bought from Amazon years ago occasionally jumps by a pound or so. I measure myself a couple of times to be sure. But it definitely doesn't "freeze" measurements, as I see a different measurements shoes on in back-to-back measurements.
It's down to the quality of the sensor, the quality of the ADC translating the signals from the sensor, and the implementation of the software that deals with the ADC translation.
Mostly quality of the sensor, processing power is not a constraint. Also bear in mind that high range and high accuracy generally aren't very compatible, so to measure 100kg at a 1% accuracy is accuracy to the kg. to get +/-100g accuracy you need a +/-0.1% accuracy.
This is why highly accurate scales usually have very low max weights.
The prices are right there if you click "ordering & quality". $0.19-0.23 depending on exact variant at quantities of 1000 and up. $0.6 for 1-99 although that will likely vary a lot if you are buying through a distributor instead of directly.
Anything where a reasonable person would say "this doesn't even need a microcontroller, just do it analog".
In terms of projects that I would be inclined to try that are uniquely enabled by this, my mind goes towards wearables. It's small enough to be hidden in seams of fabric. If you wanted to have a bunch of temperature sensors all over your body, or have a complex arrangement of dimmable LEDs woven into clothing, each string going to its own controller hidden close by and communicating with a central controller, or maybe measure your skin conductivity all over your body or something, this is a great piece of tech to do that with style. You still need to run power and data wires everywhere (no RF on this chip), but flexible wires are a very solvable problem.
I have used a microcontroller from ST, very similar in size and also with a Cortex-M0+ core.
The applications required only I2C to communicate with a bunch of other integrated circuits and a few general-purpose pins.
An example of an application was a kind of hardware video converter, which received video input from a camera and then sent it wirelessly or on cables, where the MCU configured and reconfigured everything on the board, after reset or when certain buttons were pressed, and the configuration for some things, like a HDMI transmitter, was complicated, requiring the reading and the writing of many internal registers via I2C, so a MCU was really needed.
There are many types of complex integrated circuits that need to be configured with values written in internal registers to be usable, so, even if just for the initial configuration after reset, you need some small MCU that can write the registers via I2C or SPI. For this, the smaller the MCU is, so it will not take space on the PCB just for booting the other ICs, the better.
Consumer electronics can be designed to extremely tight budgets for cost and power consumption. Designers will choose a chip based on a chip having precisely the features needed, zero current wasted on features they don't need, and seemingly tiny price differences.
You write program(usually in C), compile it into machine code(to .hex or .bin file), then "flashing" it using debugger tool. This IC will execute your program.
I made something to ping an AWS service to tell me the uptime of my internet connection. The idea was to sprinkle them around our area, connected to various home WiFi’s, and get a better triangulation of outages. Eg is whole pipe out, just one ISP etc.
I made and tested it but didn’t care enough to continue.
I have action camera with retarded user interface. To turn it on I have to: press main button for at least 0.3s but no longer than 2s, then I have to wait until it beeps, then I have to wait for 3s, then I have to press second button for at least 0.3s but no longer than 1s. Then I observe main led, if it blinks the camera is recording, if not I need to press second button again.
With tiny mcu like this one, I think it would be possible to add a bodge inside that would turn on recording automatically after single press of button. The MCU needs to be really tiny to fit inside camera.
It's got a UART, it's got a PWM, it's really fast, and it's got masses of memory. I'd build a really tiny synthesizer, port my Juno 106 plugin's voice engine to it.
You need a few dozen bytes of storage per voice, like four bytes for the phase accumulator (uint32_t), another four for the current pitch offset that gets added, and so on.
It all adds up, especially if you want to implement a ladder filter properly.
Nintendo releasing a new GB would be wild and awesome. Unfortunately it'd likely be overpowered and emulate games they downloaded off ROM sites themselves.
They'd be done already if they bought up or licensed Analogue though.
Yes, if you want all the drawbacks of distributed computing with none of the advantages: You'd probably be stuck with something UART based as interconnect, Every core is gonna have way too little RAM to do anything useful, you are missing like half the instruction set (floating point operations in software), and power draw at 4mW minimum per core adds up quickly to something that an efficient laptop-CPU would use.
On top of all this, latency for anything is gonna be abysmal because the cores are so slow...
I honestly don't see an application where this is even close to desirable.
Would be fun, tough, to have a 10-stack of PCBs with 10 by 10 CPUs each for a thousand cores (=> ~4W power @1.8V).
Using it as a cluster is probably a bad idea, but you could probably build a 2d sensor grid using these. The 8 pin restriction is extremely limiting though. If you have an FSR matrix, you could connect a 2x2 grid to each MCU and then connect each row in a daisy chain configuration.
Maybe not practical as a cluster configuration, but it could certainly be used as a voice-generating device for a synthesizer, or as a controlling device for MIDI I/O, or .. both even of course, configurable according to the users needs/patch idea.
Yeah, but even for those applications you suffer from limited RAM a lot; with 16bit samples at 48kHz the thing has 10ms of audio buffer (stereo: 5ms) if you don't need RAM for anything else :S
The ADC is really nice though, 1.5 MSPS is really good for such a small/low powered thing (fills the whole RAM in under half a millisecond).
I have a fourier transform loop running on this micro which takes 64 samples and outputs 32 frequency bins.
It works perfectly for generating inputs to algorithmically driven animations including a visual audio spectrum frequency analyser.
I'm reminded of TIS-100, a game where you program a cluster of tiny, parallel CPUs using a custom assembly language. It's painful to get basic stuff done, but you can do some amazing things with some effort.
Yes, but also why would you? at 24MHz, you would be better off paying 100x the price ($25) for a 2.4GHz chip (easily doable). Something like a Raspbery Pi Zero 2 W already comes pretty close to that and without the penalty of memory communication/bandwidth.
The 1KB of SRAM is admittedly very tight (even WCH's 10-cent RISC-V parts usually give you 2KB), so you are strictly in bare-metal, carefully-managing-your-stack territory.
Plenty of DIY projects used ATtiny2313 with V-USB. That's a pure software USB implementation bit banging the IO pins (not a USB stack on top of hardware USB support)+ your application logic squeezed into 2K of flash + 128 bytes of ram.
Chips like this are great for digital glue logic. Read a sensor, read a button press, blink some LEDs with simple state machine or control loop.
Anything to save a few bucks on a 6264 SRAM component :-)
C support is basically universal these days, very few chips require you to program in only assembly anymore.
(had to disable debug symbols, though)
Why should that be any harder than C?
I was extremely surprised by how much functionality is packed into "core", and runs without an OS when using freestanding rust. Even stuff that requires an allocator can run provided you provide your own heap!
A cool example of this was implementing fmt::Write for a memory mapped uart console thing. Then implementing a kprintln! macro that supports all of the formatting machinery that you are use to. This worked without even a heap available.
Not worth changing the design now...
There are more pieces like this in "wearables" market now, things like "SmartBond" series. But for a while, weird off-label pieces like this wore the integration crown.
If you dive into even more niche, NDA-Only MCU, We have BES2700 MCU, which is even better
The scale precision comes from calibration of the measuring mechanism done on factory line at certain weights. If your specific body weight is far from the weights used in calibration, or too much time passed, then the calibration doesn't help much.
A better microcontroller doesn't help at all. Even a cheapest uC from decades ago is good enough. Better ADC and gauge sensor would help, but even more important is good analog engineering to produce self-correcting circuits with decent noise rejection.
In general this category of products is more for tracking changes in your body weight than getting the precise absolute value. And the body weight changes a lot just from hydration level, so the ±.5kg tolerance is considered good enough.
Ofc there's auto-zero on start involved, but translated to a people bathroom scale that'd be "comfortably better than +-100g".
A precise bathroom scale just would want a bit more effort on drift prevention as a sample mass at this scale is rather unwieldy, and critically it'd need a toe-operated button to select that you've finished climbing onto the scale, upon which it starts averaging the load to progressively improve the weight measurement accuracy. I'd expect using a bounce-height-freefall-duration based length of timing uncertainty at the start and end of the averaging period to allow proper Bayesian uncertainty quantification of the shown result, say by displaying both the 10th and the 90th percentile on the display which grow closer as you wait while standing on it.
With some cleverness a compact calibration mass might be usable to calibrate absolute scale, transferring up to the "people" range using just a random assortment of stuff that fits on the platform, totalling around 10kg.
Because building the scale to be linear in response good enough for 20k count of resolution is pretty straight-forward.
Decreasing resolution hides all of those.
I guess the overall finickiness of that can't be instantly improved by a better microcontroller alone? They drift and have linearlity issues and show temperature dependancy and all that.
Precise body weight measurement at bathrooms is also probably not that important, 500 grams is one full bottle of soda/water; body weights can easily change that much within a single day.
I would suspect that the "real" reason is combination of both. 100-500g can be a "good" compromise for cheap bathroom scales.
https://www.interfaceforce.com/products/load-cells/low-profi...
Click the "Specifications" tab to see the various error sources. Interface's technical library (linked at the top right of their shop) is a great training tool too, if you want to learn more. To keep your NIST certification - and to maintain accuracy after a high-stress...incident... you need to do occasional recalibration. That would be a problem for a consumer product, but with good mounting and overload protection they really don't change that much over time.
Then you've got the electronics, and the amplifier required to get the rated precision out of that load cell costs more than the load cell itself.
Achieving those performance targets costs money, and people buy the cheapest scale that says "Accurate High Precision Digital Bathroom Scale Glass" on the Amazon listing.
Every scale I've tried since is wildly inaccurate, and they do have brains and they fake it. Step on, get a random weight within a 5lb range of the true weight. Step on repeatedly, even after the scale has timed out and had to be rezeroed, and get that exact weight again. Fake. Every single 4-sensor scale (one in each corner post) that I've tried does this.
I've since found another relatively vintage single strain gauge scale whose battery still works. And I have a mechanical scale in reserve for when it no longer does.
That's resolution (or dynamic range), not accuracy. The scales could be 10lbs off of your weight and still do this.
Huh. I have never experienced this and didn't even know this was a thing. My cheapo Chinesium scale that I bought from Amazon years ago occasionally jumps by a pound or so. I measure myself a couple of times to be sure. But it definitely doesn't "freeze" measurements, as I see a different measurements shoes on in back-to-back measurements.
The reason is that most people use a dirt cheap HX711 or cheaper. A fancier microcontroller doesn't help all that much.
I got to 100dB of dynamic range at 1ksps (1 gram of noise at 100kg max load), so it's very much doable.
This is why highly accurate scales usually have very low max weights.
For majority of use cases nowadays it's much easier to use a programmable chip than invent a complex device using discrete analog electronic parts.
I have no grasp of even the magnitude of the price for something like this.
1-99 $0.720
100-249 $0.48925
0-999 $0.378
1,000+ $0.251
Can get under 10 cents each for cheap minimalistic CPUs in high numbers.
In terms of projects that I would be inclined to try that are uniquely enabled by this, my mind goes towards wearables. It's small enough to be hidden in seams of fabric. If you wanted to have a bunch of temperature sensors all over your body, or have a complex arrangement of dimmable LEDs woven into clothing, each string going to its own controller hidden close by and communicating with a central controller, or maybe measure your skin conductivity all over your body or something, this is a great piece of tech to do that with style. You still need to run power and data wires everywhere (no RF on this chip), but flexible wires are a very solvable problem.
The applications required only I2C to communicate with a bunch of other integrated circuits and a few general-purpose pins.
An example of an application was a kind of hardware video converter, which received video input from a camera and then sent it wirelessly or on cables, where the MCU configured and reconfigured everything on the board, after reset or when certain buttons were pressed, and the configuration for some things, like a HDMI transmitter, was complicated, requiring the reading and the writing of many internal registers via I2C, so a MCU was really needed.
There are many types of complex integrated circuits that need to be configured with values written in internal registers to be usable, so, even if just for the initial configuration after reset, you need some small MCU that can write the registers via I2C or SPI. For this, the smaller the MCU is, so it will not take space on the PCB just for booting the other ICs, the better.
This specific SKU has serious limitations due to the SRAM - TI limits the features (ROM bootloader IIRC, etc.) severely on these due to this.
I made and tested it but didn’t care enough to continue.
Applications
• Battery charging and management
• Power supplies and power delivery
• Personal electronics
• Building security and fire safety
• Connected peripherals and printers
• Grid infrastructure
• Smart metering
• Communication modules
• Medical and healthcare
• Lighting
With tiny mcu like this one, I think it would be possible to add a bodge inside that would turn on recording automatically after single press of button. The MCU needs to be really tiny to fit inside camera.
But like *really* tiny.
1KB is surely enough to store synthesizer patches. Several, probably.
It all adds up, especially if you want to implement a ladder filter properly.
They'd be done already if they bought up or licensed Analogue though.
On top of all this, latency for anything is gonna be abysmal because the cores are so slow...
I honestly don't see an application where this is even close to desirable.
Would be fun, tough, to have a 10-stack of PCBs with 10 by 10 CPUs each for a thousand cores (=> ~4W power @1.8V).
The ADC is really nice though, 1.5 MSPS is really good for such a small/low powered thing (fills the whole RAM in under half a millisecond).
I could only imagine the bringup fun for thousands of them. :P