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.


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 MoreFirst 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.

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.

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 MoreNew 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 MoreMunin 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 MoreYealink vs. Entega MediaNet
My impression is that in Germany the standard router brand is FritzBox! These routers have also analogue phone sockets, so analogue phones can still be used even if Deutsche Telecom upgraded all lines to IP phone (SIP). I wanted to use my own router, which has no analogue phone connectors. So we bought an IP phone: the Yealink T41. It took some time to make it work, e.g. in the first step I set up SIP client on the PC, to see if, what and how it works, and then tried to set up the same on the phone.
But it works now, so here are the settings for future reference.
Account settings:
- Label: the local phone number (without prefix)
- Display Name: empty
- Register Name: full phone number starting with the land prefix: 49606…
- Username: the same as the Register Name
- Password: the one provided by Entega MediaNet
- Server Host: voip.entega-medianet.de Port: 5060
- Transport: UDP
Network settings:
- To be on the safe side IPv4 only
- DHCP
- NAT: everything is disabled (Manual NAT, ICE, STUN, TURN)
However, as it is a private network behind the router, on the router I also had to change a setting:
- SIP ALG (application level gateway): enabled