Advertisements

Archive for May, 2018

Primo Comet vs. Green Glass Chip: Kevlar FTW!

The gashes don’t look like much:

Primo Comet gash - tread view

Primo Comet gash – tread view

Not even from the side:

Primo Comet gash - side view

Primo Comet gash – side view

When they happened, I knew where to look, because the Kevlar-belted Primo Comet had two conspicuous bulges surrounding debris jammed between the tread and the carcass along the sidewall: the gashes were wide open!

Much to my astonishment, the tire hadn’t gone instantly flat.

Some screwdriver probing in the leftmost gash produced this nasty glass chip:

Primo Comet gash - chip side view

Primo Comet gash – chip side view

AFAICT, the smooth side slid over the internal Kevlar belt as the edge sliced between the rubber tread and the carcass. I think the top entered first, with the somewhat crushed end hitting the pavement on each revolution:

Primo Comet gash - chip edge view

Primo Comet gash – chip edge view

The other gash emitted a somewhat smaller chip.

I rode over something crunchy, most likely the remains of a beer bottle, in a shaded section along Rt 376, and we stopped a few driveways later to diagnose a once-per-revolution thump from the front tire. The tube still wasn’t losing pressure, even after extracting the glass, so I continued the mission; it was a fine day for a ride!

I later filled those gashes (plus a few others) with silicone rubber to keep grit out. It’s surely a feel-good gesture, but maybe it’ll help the tire reach the end of its tread life.

You can judge our “riding environment” by the tire’s condition …

Advertisements

,

4 Comments

Siglent SDS2304X Screen Shot File

Poking the Print button on the front of the Siglent SDS2304X scope saves the screen to a BMP file (in the /BMP directory) on a USB flash drive plugged into its front-panel port:

Siglent SDS2304X Front Panel - Print Button - USB port

Siglent SDS2304X Front Panel – Print Button – USB port

Which produces files like these:

ll --block-size=1 /path-to-USB-stick/BMP/
total 2318336
drwxr-xr-x 2 ed ed    4096 May 23 13:13 ./
drwxr-xr-x 4 ed ed    4096 Dec 31  1969 ../
-rw-r--r-- 1 ed ed 1152054 May 23 13:13 SDS00001.BMP
-rw-r--r-- 1 ed ed 1152054 May 23 13:13 SDS00002.BMP

The files are 1152054 bytes long, as specified by the BMP header inside the file:

hexdump -C /path-to-USB-stick/BMP/SDS00001.BMP | head
00000000  42 4d 36 94 11 00 00 00  00 00 36 00 00 00 28 00  |BM6.......6...(.|
00000010  00 00 20 03 00 00 e0 01  00 00 01 00 18 00 00 00  |.. .............|
00000020  00 00 00 94 11 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 01 01  01 01 01 01 01 01 01 01  |................|
00000040  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
*
00000880  01 01 01 01 01 01 01 01  01 01 01 01 01 01 1e 1e  |................|
00000890  1e 1e 1e 1e 1e 1e 1e 1e  1e 1e 1e 1e 1e 1e 1e 1e  |................|
*
00000990  1e 1e 1e 1e 1e 1e 01 01  01 01 01 01 01 01 01 01  |................|

The first 14 bytes contain the Bitmap file header, with the file size in Little-Endian order in the four bytes at offset +0x02: 0x00119436 = 1152054.

The four bytes at offset +0x0A give the offset of the pixel data: +0x36. That’s the series of 0x01 bytes in the fourth row. Unlike most images, BMP pixel arrays start at the lower left corner of the image and proceed rightward / upward to the last pixel at the upper right corner.

The data between the Bitmap file header and the start of the pixel data contains at least a Device Independent Bitmap header, identified by its length in the first four bytes at offset +0x0E. In this case, the length of 0x28 = 40 bytes makes it a Windows (no surprise) header.

The two bytes at +1C give the bits-per-pixel value: 0x18 = 24 = 3 bytes/pixel, so parse the pixels in RGB order.

The four bytes at +0x12 give the bitmap width in pixels: 0x320 = 800. Each pixel row must be a multiple of 4 bytes long, which works out fine at 2400 bytes.

The tail end of the file shows one dark pixel at the upper right:

hexdump -C /path-to-USB-stick/BMP/SDS00001.BMP | tail
00118330  00 cc 00 00 cc 00 00 cc  00 00 cc 00 00 cc 00 00  |................|
00118340  cc 00 00 cc 00 00 cc 00  00 cc 00 00 cc 00 00 cc  |................|
00118350  00 00 cc 00 00 cc 00 00  cc 0f 0f 75 1e 1e 1e 1e  |...........u....|
00118360  1e 1e 1e 1e 1e 1e 1e 1e  1e 1e 1e 1e 1e 1e 1e 1e  |................|
*
00118ad0  1e 1e 1e 01 01 01 1e 1e  1e 1e 1e 1e 1e 1e 1e 1e  |................|
00118ae0  1e 1e 1e 1e 1e 1e 1e 1e  1e 1e 1e 1e 1e 1e 1e 1e  |................|
*
00119430  1e 1e 1e 01 01 01                                 |......|

Which looks like this, expanded by a factor of eight (clicky for more dots to reveal the situation):

Screenshot - upper right corner - 8x expansion

Screenshot – upper right corner – 8x expansion

The scope can also transfer a screenshot over the network:

lxi screenshot -a 192.168.1.42 /tmp/lxi-shot.bmp 
Loaded siglent-sds screenshot plugin
Saved screenshot image to /tmp/lxi-shot.bmp

Which has the same header:

hexdump -C /tmp/lxi.bmp | head
00000000  42 4d 36 94 11 00 00 00  00 00 36 00 00 00 28 00  |BM6.......6...(.|
00000010  00 00 20 03 00 00 e0 01  00 00 01 00 18 00 00 00  |.. .............|
00000020  00 00 00 94 11 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 01 01  01 01 01 01 01 01 01 01  |................|
00000040  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
*
00000880  01 01 01 01 01 01 01 01  01 01 01 01 01 01 1e 1e  |................|
00000890  1e 1e 1e 1e 1e 1e 1e 1e  1e 1e 1e 1e 1e 1e 1e 1e  |................|
*
00000990  1e 1e 1e 1e 1e 1e 01 01  01 01 01 01 01 01 01 01  |................|

But the resulting file is three bytes = one pixel (!) too large:

ll --block-size=1 /tmp/lxi.bmp
-rw-rw-r-- 1 ed ed 1152057 May 23 19:09 /tmp/lxi.bmp

The tail end of the file:

hexdump -C /tmp/lxi.bmp | tail
00118330  00 cc 00 00 cc 00 00 cc  00 00 cc 00 00 cc 00 00  |................|
00118340  cc 00 00 cc 00 00 cc 00  00 cc 00 00 cc 00 00 cc  |................|
00118350  00 00 cc 00 00 cc 00 00  cc 0f 0f 75 1e 1e 1e 1e  |...........u....|
00118360  1e 1e 1e 1e 1e 1e 1e 1e  1e 1e 1e 1e 1e 1e 1e 1e  |................|
*
00118ad0  1e 1e 1e 01 01 01 1e 1e  1e 1e 1e 1e 1e 1e 1e 1e  |................|
00118ae0  1e 1e 1e 1e 1e 1e 1e 1e  1e 1e 1e 1e 1e 1e 1e 1e  |................|
*
00119430  1e 1e 1e 01 01 01 01 01  0a                       |.........|

Because the file header doesn’t include those three bytes, they don’t go into the image and the resulting screenshot is visually the same.

Which looks like a picket-fence error, doesn’t it? I’d lay long odds the erroneous loop runs from 0 to NUMPIXELS, rather than 0 to NUMPIXELS-1. Raise your hand if you’ve ever made that exact mistake.

I have no practical way to determine whether the error is inside the scope or the LXI network code, but given Siglent’s overall attention to software fit-and-finish, I suspect the former.

One can convert BMP files to the much more compact PNG format:

convert /tmp/lxi.bmp /tmp/lxi.png
convert: length and filesize do not match `/tmp/lxi.bmp' @ warning/bmp.c/ReadBMPImage/829.

Yes. Yes, there is a mismatch.

The space savings is impressive, particularly in light of PNG being a lossless format:

ll /tmp/lxi.*
-rw-rw-r-- 1 ed ed 1.1M May 23 19:09 /tmp/lxi.bmp
-rw-rw-r-- 1 ed ed  14K May 23 19:17 /tmp/lxi.png

You can eliminate the nag by truncating the file:

truncate --size=1152054 /tmp/lxi.bmp

One could wrap it all up in a script:

#!/bin/bash
lxi screenshot -a 192.168.1.42 /tmp/"$1".bmp
truncate --size=1152054 /tmp/"$1".bmp
convert /tmp/"$1".bmp "$1".png
echo Screenshot: "$1".png

And then It Just Works:

getsds2304x.sh "Test Shot Starfish"
Loaded siglent-sds screenshot plugin
Saved screenshot image to /tmp/Test Shot Starfish.bmp
Screenshot: Test Shot Starfish.png
Test Shot Starfish

Test Shot Starfish

SpaceX uses Test Shot Starfish tracks for pre-launch background music; the actual test shot was spectacular.

,

2 Comments

LXI-Tools for Siglent SDS2304X Oscilloscope and SDM3045X Multimeter

For whatever reason, my Siglent SDS2304X Oscilloscope and SDM3045X Multimeter partially implement their documented command sets through partial implementations of the VXI instrumentation driver network protocol. The Linux command-line side comes from lxi-tools, which one must fetch from its repository and compile from source(do liblxi first, then lxi-tools)  through the usual ./configure - make - sudo make install process, after tediously installing whatever dependencies might be revealed by incremental progress through the configuration(s) on your system(s).

The alternative, of course, is Labview on Windows.

The SDS2304X scope doesn’t respond to the LXI discover broadcast, so you must know and specify its IP address in the command. It’s easiest to configure the Siglent instruments at fixed IP addresses and be done with it:

lxi scpi -a 192.168.1.41 "*idn?"
Siglent Technologies,SDM3045X,SDM34whatever,5.01.01.03
lxi scpi -a 192.168.1.42 "*idn?"
*IDN SIGLENT,SDS2304X,SDS2Xwhatever,1.2.2.2 R10

Although the LXI tools also come in a Snap package, installing them that way prevents storing files outside the user’s home directory; having evolved a fairly extensive NFS filesystem, Snaps seem basically useless for my purposes. I don’t see much more security exposure from downloading and running a Snap than from downloading, compiling, and running the source code, but they obviously know what’s best for me.

,

4 Comments

Subaru Forester Fuse Boxes

Speaking of automotive fuses, our 2015 Subaru Forester has a pair of fuse boxes, hereby documented in case of need.

One under the hood:

2015 Subaru Forester - engine compartment fuse box

2015 Subaru Forester – engine compartment fuse box

Note the white fuse puller near the top.

The layout chart doesn’t say what “SBF” might be, but we have a lot of whatever it is:

2015 Subaru Forester - engine compartment fuse ID

2015 Subaru Forester – engine compartment fuse ID

The spare fuses line up along the lower edge of the cover.

Another under the dashboard:

2015 Subaru Forester - dashboard fuse box

2015 Subaru Forester – dashboard fuse box

And their functions:

2015 Subaru Forester - dashboard fuse ID

2015 Subaru Forester – dashboard fuse ID

The string of fuses down the right side of the main block looks like a line of spares, but they’re not. What they might be isn’t documented anywhere, which seems to be very deliberate.

Memo to Self: Having never replaced an automotive fuse, I shouldn’t start worrying now.

23 Comments

Mower Blade Standardization, Lack Thereof

The blade from our current Craftsman mower is on the right:

Sears Craftsman mower blades

Sears Craftsman mower blades

The other two came from our previous Craftsman mowers.

Stipulated: Sears sources their mowers from various suppliers, but it’d be great if everybody could agree on a single blade mount and be done with it.

Obligatory XKCD.

For the record, a 5/8 inch socket works fine. One could surely use a 16 mm socket in a pinch.

Wear leather gloves to prevent a nasty gash from the stamped-steel muffler shroud as you pull the sparkle plug cap to avoid an absolutely impossible engine startup while you’re wrenching under the deck.

Replace the air cleaner while you’re at it.

,

6 Comments

Turtle Teleportation: Vassar Road

As always, we knew this wouldn’t end well for the small lump just in front of the car’s rear wheel (clicky for more, albeit fuzzy, dots):

Turtle 0134 - Vassar Rd - 2018-05-20

Turtle 0134 – Vassar Rd – 2018-05-20

So I stopped to lend a hand:

Turtle 1280 - Vassar Rd - 2018-05-20

Turtle 1280 – Vassar Rd – 2018-05-20

A fumbling hand, as it turned out, on the turtle’s slippery shell:

Turtle 1364 - Vassar Rd - 2018-05-20

Turtle 1364 – Vassar Rd – 2018-05-20

A belly-up turtle in the middle of the road knows the solution to the Halting Problem.

I hoped a secluded spot under a pine tree was closer to its destination:

Turtle 1724 - Vassar Rd - 2018-05-20

Turtle 1724 – Vassar Rd – 2018-05-20

However, if the turtle is a female in search of an egg-laying site, then she and all her progeny must cross Vassar Road in the other direction to reach the Mighty Wappinger Creek.

We’ll teleport them if we see them, too …

,

Leave a comment

SJCAM M20 Date/Time vs. Battery Change

A recent ride reminded me to do something about this:

M20 - Date-Time Reset - detail - 2018-05-18

M20 – Date-Time Reset – detail – 2018-05-18

So I wrote up a support ticket on the SJCAM site:

The time-of-day clock in my M20 often resets when I change the battery in the middle of a bike ride.

I turn the camera off, wait for the status light to go out, remove the battery, install the new battery, turn it on, and the time-of-day displayed on the screen has reset to 2016-01-01 00:00:00.

I’m using firmware 1.3.1 (the latest), genuine and fully charged SJCAM batteries, and swap the batteries as fast as I can. Sometimes it works, but maybe half of my bike rides end years before they start! [grin]

It seems my turned-off M20 is extremely sensitive to the power fluctuations occurring during a battery change.

What do you recommend?

Thanks …

Their reply:

The capacity of internal memory battery on main board is very small due to hardware limitation so it can save date and setting for about 10 seconds after pulling out battery.

Would you please check it again ?

I’d call that a design screwup, not a “hardware limitation”. Perhaps I don’t understand how putting a slightly larger capacitor on the PCB, in place of the one that’s already there, would pose a problem.

They also recommend checking with my “re-seller”, but, seeing as how I bought it directly from their nominally official Amazon store, so:

In case they are not able to offer help, SJCAM Technical Department offers a maintenance service. The steps of such service are:
1. You ship the camera directly to our Technical Department address at your own cost (it is located in Shenzhen, China).
2. We check and repair the camera. The repair process usually takes about 3-5 working days.
3. We ship the camera back to you.
Note: The whole process usually takes about 20-30 days, and if your camera doesn’t have damage on the main-board, screen or lens, the maintenance will be free, but we charge 15$ as return shipping cost.

As usual, round trip shipping to Shenzen costs half the price of the M20 camera package, a fact I’m sure they’re well aware of. I did a warranty return to Australia with the Cycliq Fly6, before replacing the battery myself, and (re)learned valuable lessons about warranties and batteries.

I turned SJCam’s offer down, which prompted a curious proposal:

You can send back your camera to SJCAM factory and then we can replace internal memory battery for you.

So the “hardware limitation” has morphed into a (presumably inadequate) internal battery that, when replaced, will resolve the problem. Huh.

Note: you can’t use the M20’s “Car mode” with the timestamp function, because you must remove the battery to let the camera start when the USB power goes on. Unlike basically all other cameras-with-clocks, the M20 wasn’t designed to run its internal clock without a battery.

Improving my battery change speed definitely has the best ROI. Alas, my dexterity has a definite upper limit …

AFAICT, the M2 has a glued-together / assemble-only shell, so cracking the case and hacking a cap isn’t happening.

8 Comments