Dual-boot

Note to self: after update sometimes Windows disappears from the grub boot menu. To put it back, just edit /etc/default/grub and add the line

GRUB_DISABLE_OS_PROBER = false

And then just run

# update-grub

That should put Windows back in the list. By the way, if os-prober is disabled, update-grub will warn you.

Read More

Railway crossing lights with the TLC555

After we successfully built a circuit to have a blinking green LED, we wanted to bring it to the next level.

First step: have alternating lights. It was quite easy, as we also had a Texas Instruments SN74LS04 inverter chip, we just connected it to 5V and GND, connected the output signal of the TLC555 to one of the inverters in the 74LS04 and got the inverted signal on the next pin, which then we could simply connect to another LED.

Next step: add a switch so select between stop (red) and go (white). No big thing, right? Add a switch, and then the output (clock) of the TLC555 can go to the red (as before) or to the white LED. Simple. And does not work. Remember the inverter? It inverts the input for the first red LED (red1) to get the signal for the second red LED (red2), so as soon as we switch on the white LED (white) the first red will be permanently off, so the second will be permanently on.

Luckily we also had the Texas Instruments SN74LS08 with 4 AND gates, so we could improve the logic. Put the switch to 5V instead of clock, and then AND the white state with the clock to get the white LED and the red state with the clock / inverted clock to get the two red LEDs. Basically the following:

white = go AND clock
red1  = stop AND clock
red2  = stop AND NOT clock 

It should work, right? Well, no. If the switch is set to go then the AND gate will get 5V plus the clock signal to get the white LED input, but if the switch is set to stop, then the go line will be open, and in this case the output of the AND gate is not defined.

To solve it, we turned around the switch: not to switch 5V between stop and go, but switch go between 5V and GND. This way go was always in a defined state, and to get stop we just inverted go. This way we get our nice railway crossing light.

Of course we have set it up with a bunch of control lights: two LEDs blinking alternately to show the clock signal, as well as an addition red and white LEDs to show the state of the switch.

breadboard with the railway crossing light simulator
completed circuit
schematics
Read More

Raspberry reinstall

Exactly two months ago, on 23 August I posted about munin not creating html pages and that I had to reinstall libxrender1, because the file libXrender.so.1.3.0 was corrupt, but I have not checked the root cause. Well, I should have gone deeper into it, because it turned out that the flash drive was about to break down. So at the end I had to reinstall the whole system. It was not a big deal, but here is how I did it for future reference:

I did a normal install on an SD Card. Then I took a new flash drive, created a single ext4 partition, and read out the DOS disklabel (it has a DOS disklabel, not a GPT) with fdisk -l. The installation creates two partitions on the SD Card, a boot and a root, so I just copied the content of root over to the flashdrive. One last thing to make the system use the flashdrive as root partition is to update /cmdline.txt on the boot partition:

// DOS Disklabel of the flash drive: 0xabcd1234
// Partition number of the root partion on the flash drive: 01
// this needs to be added to the root= parameter
console=serial0,115200 console=tty1 root=PARTUUID=abcd1234-01 rootfstype=ext4 fsck.repair=yes rootwait

During the installation I chose minimal, I also enabled ssh, set the password, and the IP address is assigned via DHCP, so after these steps, I had the basic working setup. I just needed a few more things to have my monitoring stuff with munin. Luckily the old flash drive was not completely broken, so I could save munin configuration (/etc/munin) my custom scripts and plugins (/usr/local/bin and /usr/local/lib/munin) as well as the RRDtool database files (/var/lib/munin), so I copied them onto the new root filesystem before installing munin.

To get munin up and running, I just needed to install lighttpd and munin, and as I read the heating system data via the ModBus protocol, also a small tool called mbpoll. Furthermore, lighttpd needed two lines in the config:

alias.url += ("/munin-static" => "/etc/munin/static" )
alias.url += ("/munin"        => "/var/cache/munin/www/" )

Also for convenience I also installed vim and mc. That’s it.

Read More

First steps with the breadboard

The packages that I ordered arrived fairly quickly. First the breadboards from the Netherlands then the components from Germany. As Ben recommended the BusBoard BB830, this is what I have ordered, 3 of them and an additional BB830-KIT. It comes with an additional battery box, jumper wires and an LED plus resistor for a simple test. I find the battery box quite useful, because it is mobile so you can take your assembled circuit for example to show off in front of your family or colleagues.

Breadboard test

With my son we decided to start with the clock module first and to build an astable timer based on the 555 chip following the video from Ben Eater: https://www.youtube.com/watch?v=kRlSFm519Bo

Ben was using the Texas Instruments LM555 timer, but as it was out of stock, I have ordered the TLC555, which should work in the same way and to my understanding it might even have a better performance. Just to understand the price range, we are talking about a 0.96€ component.

Another difference is that we used a 1 MΩ resistor and not a 100 kΩ, because that’s what I have ordered, but that was not a problem, it just meant that the blinking was slower. Anyway the idea was to replace it with a potentiometer so that we can change the resistance up to 2 MΩ. Also we realized that the white stripe on the capacitor marks the negative contact, not the positive as in the video.

Assembling the 555 circuit

So we put together the circuit as shown in the video, turned it on, aaaand…. it almost worked. The LED turned on, and then after a while it turned off and remained so. But a quick check on the data sheet revealed the problem: the pin 4, which Ben has not connected (at least not in the first 20 minutes) is the reset pin. It is active low, so we connected it to +5V to avoid the 555 resetting, and voilá, the circuit was working as expected.

What we did not do is the check with the oscilloscope, because I don’t have one, but maybe if I’m becoming more experienced and turning into a hobby HW engineer, I might get one.

Read More

New project: learning about electronics

Recently I have stumbled upon some videos from Ben Eater showing and explaining some interesting projects on breadboards. For example building a computer based on the 6502 CPU: https://www.youtube.com/watch?v=LnzuMJLZRdU

I have never heard about breadboards before, unfortunately. As a child I was interested in electronics, but I was not very keen on soldering stuff, and I didn’t have tools or knowledge. So it’s my second chance to start experimenting, so I decided to follow Ben Eater’s videos and build stuff. I have even found a partner for it: my son.

I have ordered some stuff yesterday afternoon. I have found the breadboards suggested by Ben Eater in a dutch online shop, eleshop.eu, much cheaper than on amazon. They are now on the way, expected to arrive on Thursday. The rest I have ordered on reichelt.de, but there you cannot pay with credit card, so I had to transfer the money from our bank account. And as today was a public holiday in Germany, I expect the transfer and the delivery taking a bit more time.

Read More

Munin stopped creating html pages and graphs

Last night munin stopped updating the graphs around 2:30 am. A quick check showed that the rrd files are being updated, meaning the data collection was ok. Also looking at the html and png files one could see that they were not changed since 2:30 am. Actually, this is a lesser problem, as the data was still being collected. Honestly, I hate gaps in the graphs. 😀

I tried to generate the files manually and I got the following response:

# su - munin --shell=/bin/bash -c "/usr/share/munin/munin-graph --debug"
Can't load '/usr/lib/arm-linux-gnueabihf/perl5/5.32/auto/RRDs/RRDs.so' for module RRDs: /lib/arm-linux-gnueabihf/libXrender.so.1: unsupported version 0 of Verneed record at /usr/lib/arm-linux-gnueabihf/perl-base/DynaLoader.pm line 187.
 at /usr/share/perl5/Munin/Master/GraphOld.pm line 46.
Compilation failed in require at /usr/share/perl5/Munin/Master/GraphOld.pm line 46.
BEGIN failed--compilation aborted at /usr/share/perl5/Munin/Master/GraphOld.pm line 46.
Compilation failed in require at /usr/share/munin/munin-graph line 49.
BEGIN failed--compilation aborted at /usr/share/munin/munin-graph line 49.

So I have checked libXrender.so.1, it is a symlink to libXrender.so.1.3.0:

# file /lib/arm-linux-gnueabihf/libXrender.so.1.3.0
/lib/arm-linux-gnueabihf/libXrender.so.1.3.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, missing section headers

# dpkg -S libXrender.so.1.3.0
libxrender1:armhf: /usr/lib/arm-linux-gnueabihf/libXrender.so.1.3.0

# apt-get install --reinstall libxrender1
Reading package lists… Done
Building dependency tree… Done
Reading state information… Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 26 not upgraded.
Need to get 29.9 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 http://mirror.as43289.net/raspbian/raspbian bullseye/main armhf libxrender1 armhf 1:0.9.10-1 [29.9 kB]
Fetched 29.9 kB in 2s (16.1 kB/s)
(Reading database … 115977 files and directories currently installed.)
Preparing to unpack …/libxrender1_1%3a0.9.10-1_armhf.deb …
Unpacking libxrender1:armhf (1:0.9.10-1) over (1:0.9.10-1) …
Setting up libxrender1:armhf (1:0.9.10-1) …
Processing triggers for libc-bin (2.31-13+rpt2+rpi1+deb11u5) …
Segmentation fault

The message “missing section headers” sounds strange, also the Segmentation fault at the end, so some more investigation might be needed. However, after reinstall the .so looks better:

# file /lib/arm-linux-gnueabihf/libXrender.so.1.3.0
/lib/arm-linux-gnueabihf/libXrender.so.1.3.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=24fb04ae1904cc7b7d4f2407d0e62bdedcf7af46, stripped

Unfortunately I have not saved the old libXrender.so.1.3.0 so I cannot check the difference. I wonder what happened to it. Nevertheless munin works again.

Read More