Entries with tag "Tepozchiquilichtli"
Dot matrix printer heads are very soft sounding. They are not powerful at all. The loud irritating noise we hear when they print away is mainly due to the printer enclosure, which serves as a resonator. The fact that the printhead actually hits the paper is another important factor in the amplification of the sound. Once the printhead is removed from the printer enclosure, the loudness is gone. Since I was not interested at all in keeping the enclosure of the printer, I needed to find an elegant way to recover the amplification provided by the enclosure. After trying a couple different things I ended up with the design in the image. It is essentially a double resonator: the first and most important is the plastic membrane/cone. The prinhead hits the membrane projecting the sound forward, exactly like a drum. The other part is the wooden base to which the printhead is attached.
My Tepozchiquilichtli pieces so far have required a time resolution of 1 millisecond (1 millisecond is the tatum of the pieces). Controlling the timing of the pieces using the Python
time.sleep( ) function from within my general purpose computer (Intel Core Duo CPU T2250 @ 1.73GHz, cpu MHz: 800.000, cache: 2048 KB) running plain vanilla Linux proved useless. The function is unable to sleep for less than 4 milliseconds and the inaccuracy is too high.
One way around this problem is to have a dedicated micro-controller do the timing and have it send all the data to the printers. This works great and has the advantages of compactness (there are other issues with this solution, but accurate timing is not one of them). I still wanted to find a way to get the accuracy I need from a general purpose computer because this is more convenient for testing and prototyping.
Enter Real-time Linux and powernap. powernap is a Python module that uses the real-time clock (
dev/rtc) to do the timing. With powernap and RT Linux I can get the accuracy of 1 millisecond I need with variances of about 0.002 milliseconds.
The powernap website point to this real-time module, but since there's no documentation for it, I decided to go with the Linux kernel and the CONFIG_PREEMPT_RT Patch instead. Here are instructions to compile the Linux kernel in Debian, and here are general instructions for patching the source for real-time capabilities.
First working PCB of a dot matrix printhead driver. The circuit is a simple transistor array with a 74HC595 shift register, which simultaneously triggers the printhead’s tiny hammers. The PCB is designed to be daisy-chained with other identical copies, allowing one to control multiple printheads at once.