You can download the NumWorks graphing calculator's schematics using the button below.
The STM32F412 is the centerpiece of our calculator. It's interfacing with pretty much all the other parts of the device. For proper operation, it needs 10 decoupling capacitors. We also added a pull-up on the NRST pin to make sure the device doesn't reboot accidentally.
We are using an external high-speed 25 MHz oscillator. This is not required for untethered operation, but is mandatory when you want to do USB communications.
Last but not least, we tied the BOOT0 pin to the VBUS port. In practice, this makes the device boot in DFU mode when it's reset while being plugged to a USB host.
We're using a very usual matrix keyboard layout. This has several implications :
The screen is interfaced with a 16-bit parallel bus. Since the bus write cycle should be at least 66ns, that allows for a 200fps max theoretical refresh rate.
We're powering the LED from the battery. We couldn't drive it from the MCU because it draws too much current, and has a forward voltage that is too high.
We're not bothering with a dedicated regulator ; instead we're using ballast resistors. This is a bit less efficient but a lot simpler.
The Reset button virtually disconnects the power to the device.
We're using a very simple divider bridge. What's rather unique here is that the impedance is very high : we need to use very strong resistors (1 MOhm), otherwise too much current would be drained when the device is off. Fortunately, we don't need very high sampling speed, so this simple design works well.
To power the backlight of the device we use an IC with a dual-mode charge pump mechanism. This allows for a small package that only requires external capacitors while still keeping a really good efficiency.