ossmann.blogspot.com announced the first release of Ubertooth, an open source wireless development platform for Bluetooth testing and research. This is a very preliminary release, but it includes the complete hardware design for Ubertooth Zero, firmware source code, and the host code needed to perform rudimentary Bluetooth sniffing. [via]

The Graphics Board is going to enable a bunch of fun projects around here.

Unfortunately, the ST7565 library is a bit slow in one specific way – display updates. Since everything is buffered in RAM, most other operations are actually quite fast, but to get that data onto the gLCD takes time.

I had to find out how much time, of course. Here’s my test sketch:

All the loop does is send the same RAM buffer contents to the display, over and over again. The time it takes in microseconds is sent to the serial port, and the result is quite bad, actually:

126 milliseconds, i.e. 8 refreshes per second, max!

The good news is that it’s a clear bottleneck, so chances are that it can be found and then hopefully also avoided. Sleuthing time!

The ST7565 core primitives, responsible for getting the data out to the display were coded as follows:

Guess what: the shiftOut() in the Arduino library is written with calls to digitalWrite(). That rings a bell.

So I rewrote this code using fixed pin numbers and direct port access:

And sure enough, it’s almost exactly TEN times faster:

12.3 milliseconds, i.e. 80 refreshes per second.

Needless to say, I’m going to leave these changes in my copy of the ST7565 library – even though that means it’s no longer general purpose since the pin assignments are now hard-coded. A 10-fold performance increase of something which really needs to be snappy and responsive is non-negotiable for me.

The ST7565 library was clearly written as general purpose library, so making it usable with any set of pin assignments makes a lot of sense. The price paid in this case, was a 10-fold drop in performance, plus a few extra bytes of RAM used in the ST7565 class.

I’ll revisit this topic some other time, to discuss the trade-offs and implications of compile-time vs run-time logic, as well as tricks such as: putting the pin choices in a header file, using #include for source files, pre-processing and code generation, and C++ templates.

I’ve always daydreamed of putting things in a tub and filling it with chocolate milk one centimeter at a time and taking a picture. Then I’d do edge detection on the objects and stack them up to make a 3D model.

I don’t have to dream anymore. It appears that Trace Modeler will do just that and more! It will also automatically output STLs! Very cool!

Probably you are aware of these great Texas Instruments calculators like TI-82, Ti-83 and other models that can do almost all math you need. As these calculators are equipped with link port this is where hacking starts. Ben Ryves decided to build an expander that would capture screen and display it on TV based on PAL or NTSC.

Expander is based on ATmega168 microcontroller running at 20MHz. It generates video signals via simple DAC made of couple resistors. When connected, TV demonstrator captures screen each time the button is pressed unless calc is busy on something. Due to AVR RAM limits TV Demonstrator supports calculators with screens less than 96×64 pixels.

I don't often build other people's kits, especially kits that don't include source code for the firmware. Most kits are too expensive and I usually think I can design something I will like better. However, the Yilane Systems YS-950 single-tube Numitron clock was sufficiently elegant and inexpensive that I couldn't resist. Availability of the kit has been intermittent, but it's worth keeping an eye on, as I understand that they will be in stock again soon.