#krell — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #krell, aggregated by home.social.
-
Why is California allowing people to bet on politics but not sports? https://www.byteseu.com/1919773/ #betting #California #CaliforniaPolitics #Corruption #DarkMoney #election #gambling #issue #Kalshi #krell #MaggyKrell #OnlineSportBetting #people #politic #PoliticalCandidate #Politics #polymarket #Sports #STAFF #state #StateLawmaker
-
Hoffentlich kommt der auch noch, wenn ich zurück in Deutschland bin
#Kino #JetztWohin #Habeck #Grüne
mit dabei:
Luisa #Neubauer, Tobias #Krell, Markus #Lanz, Jan „#Monchi“ Gorkow, Charly #Hübner, Maja #Göpel, Daniel #Günther, Samira #ElOuassil, Friedemann #Karig, Christian #Stöcker, Arun #ChaudharyJETZT.WOHIN. | Homepage zum Film – Ab 7. Dezember 2025 im Kino
https://www.pandorafilm.de/filme/jetzt-wohin.html -
Hoffentlich kommt der auch noch, wenn ich zurück in Deutschland bin
#Kino #JetztWohin #Habeck #Grüne
mit dabei:
Luisa #Neubauer, Tobias #Krell, Markus #Lanz, Jan „#Monchi“ Gorkow, Charly #Hübner, Maja #Göpel, Daniel #Günther, Samira #ElOuassil, Friedemann #Karig, Christian #Stöcker, Arun #ChaudharyJETZT.WOHIN. | Homepage zum Film – Ab 7. Dezember 2025 im Kino
https://www.pandorafilm.de/filme/jetzt-wohin.html -
Hoffentlich kommt der auch noch, wenn ich zurück in Deutschland bin
#Kino #JetztWohin #Habeck #Grüne
mit dabei:
Luisa #Neubauer, Tobias #Krell, Markus #Lanz, Jan „#Monchi“ Gorkow, Charly #Hübner, Maja #Göpel, Daniel #Günther, Samira #ElOuassil, Friedemann #Karig, Christian #Stöcker, Arun #ChaudharyJETZT.WOHIN. | Homepage zum Film – Ab 7. Dezember 2025 im Kino
https://www.pandorafilm.de/filme/jetzt-wohin.html -
Hoffentlich kommt der auch noch, wenn ich zurück in Deutschland bin
#Kino #JetztWohin #Habeck #Grüne
mit dabei:
Luisa #Neubauer, Tobias #Krell, Markus #Lanz, Jan „#Monchi“ Gorkow, Charly #Hübner, Maja #Göpel, Daniel #Günther, Samira #ElOuassil, Friedemann #Karig, Christian #Stöcker, Arun #ChaudharyJETZT.WOHIN. | Homepage zum Film – Ab 7. Dezember 2025 im Kino
https://www.pandorafilm.de/filme/jetzt-wohin.html -
Hoffentlich kommt der auch noch, wenn ich zurück in Deutschland bin
#Kino #JetztWohin #Habeck #Grüne
mit dabei:
Luisa #Neubauer, Tobias #Krell, Markus #Lanz, Jan „#Monchi“ Gorkow, Charly #Hübner, Maja #Göpel, Daniel #Günther, Samira #ElOuassil, Friedemann #Karig, Christian #Stöcker, Arun #ChaudharyJETZT.WOHIN. | Homepage zum Film – Ab 7. Dezember 2025 im Kino
https://www.pandorafilm.de/filme/jetzt-wohin.html -
https://www.europesays.com/ro/27994/ „Vă dați seama ce e în sufletul lui?” / FOTO. Eugen Neagoe, primele explicații după ce a schimbat portarul gafeur la pauză #Csikszereda #EugenNeagoe #krell #petrolul #RaulBalbarau #RO #Română #Romania #Romanian #Sport #Sports #superliga
-
#Methodologie #qualitativer #Sozialforschung
nach #Blumer (1969) drei #Voraussetzungen:
-> #Berücksichtigung #gesamter #wissenschaftlicher #Suche, nicht nur #Teilaspekt -> #Epistemologie
-> #Forschungsmethode ist der #Welt untergeordnet -> #Reflexion von #Widerspenstigkeit
-> Die #Antwort auf die #Forschungsfrage liefert die #empirische #Welt#Lamnek, #Krell - #Qualitative #Sozialforschung, S. 89f.
-
#Methodologie #qualitativer #Sozialforschung
nach #Blumer (1969) drei #Voraussetzungen:
-> #Berücksichtigung #gesamter #wissenschaftlicher #Suche, nicht nur #Teilaspekt -> #Epistemologie
-> #Forschungsmethode ist der #Welt untergeordnet -> #Reflexion von #Widerspenstigkeit
-> Die #Antwort auf die #Forschungsfrage liefert die #empirische #Welt#Lamnek, #Krell - #Qualitative #Sozialforschung, S. 89f.
-
#Methodologie #qualitativer #Sozialforschung
nach #Blumer (1969) drei #Voraussetzungen:
-> #Berücksichtigung #gesamter #wissenschaftlicher #Suche, nicht nur #Teilaspekt -> #Epistemologie
-> #Forschungsmethode ist der #Welt untergeordnet -> #Reflexion von #Widerspenstigkeit
-> Die #Antwort auf die #Forschungsfrage liefert die #empirische #Welt#Lamnek, #Krell - #Qualitative #Sozialforschung, S. 89f.
-
#Methodologie #qualitativer #Sozialforschung
nach #Blumer (1969) drei #Voraussetzungen:
-> #Berücksichtigung #gesamter #wissenschaftlicher #Suche, nicht nur #Teilaspekt -> #Epistemologie
-> #Forschungsmethode ist der #Welt untergeordnet -> #Reflexion von #Widerspenstigkeit
-> Die #Antwort auf die #Forschungsfrage liefert die #empirische #Welt#Lamnek, #Krell - #Qualitative #Sozialforschung, S. 89f.
-
#Vielschichtige #methodische #Vorgehensweise / #Untersuchungsform (#Approach), der #theoretische #Vorgaben der #Methodologie in #praktische #Handlungsanweisungen umsetzt, ohne #Erhebungstechnik zu sein. Das #Untersuchungsobjekt wird nicht #reduziert.
#Ziel: #theoretischen #Typus in seiner #inneren #Logik #erklären.
#Lamnek, #Krell - #Qualitative #Sozialforschung, S. 285f.
#Fallbericht #Fallanalyse #Fallmethode #Falldarstellung #Fallgeschichte #Fallbeschreibung
-
#Vielschichtige #methodische #Vorgehensweise / #Untersuchungsform (#Approach), der #theoretische #Vorgaben der #Methodologie in #praktische #Handlungsanweisungen umsetzt, ohne #Erhebungstechnik zu sein. Das #Untersuchungsobjekt wird nicht #reduziert.
#Ziel: #theoretischen #Typus in seiner #inneren #Logik #erklären.
#Lamnek, #Krell - #Qualitative #Sozialforschung, S. 285f.
#Fallbericht #Fallanalyse #Fallmethode #Falldarstellung #Fallgeschichte #Fallbeschreibung
-
#Vielschichtige #methodische #Vorgehensweise / #Untersuchungsform (#Approach), der #theoretische #Vorgaben der #Methodologie in #praktische #Handlungsanweisungen umsetzt, ohne #Erhebungstechnik zu sein. Das #Untersuchungsobjekt wird nicht #reduziert.
#Ziel: #theoretischen #Typus in seiner #inneren #Logik #erklären.
#Lamnek, #Krell - #Qualitative #Sozialforschung, S. 285f.
#Fallbericht #Fallanalyse #Fallmethode #Falldarstellung #Fallgeschichte #Fallbeschreibung
-
#Vielschichtige #methodische #Vorgehensweise / #Untersuchungsform (#Approach), der #theoretische #Vorgaben der #Methodologie in #praktische #Handlungsanweisungen umsetzt, ohne #Erhebungstechnik zu sein. Das #Untersuchungsobjekt wird nicht #reduziert.
#Ziel: #theoretischen #Typus in seiner #inneren #Logik #erklären.
#Lamnek, #Krell - #Qualitative #Sozialforschung, S. 285f.
#Fallbericht #Fallanalyse #Fallmethode #Falldarstellung #Fallgeschichte #Fallbeschreibung
-
Forbidden Planet “Krell” Display – MIDI CC Controller – Part 2
This revisits my Forbidden Planet “Krell” Display – MIDI CC Controller using my Forbidden Planet “Krell” Display PCB with a Waveshare RP2040 to create more of a “all in one” device.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to Arduino, see the Getting Started pages.
Parts list
- Updated Forbidden Planet “Krell” Display (see below).
- Completed Forbidden Planet “Krell” Display PCB Build
- Waveshare Zero format device (I’m using an RP2040)
- 4x 6mm brass spacers
- 4x 20mm nylon spacers
PCB
This requires a built of the Forbidden Planet “Krell” Display PCB with the following:
- 2 potentiometers
- MIDI IN and OUT
I’ve used potentiometers that are their own knob, as they only poke through the casing by around 5mm or so.
If it you are able to get longer shaft pots, then that would probably be worthwhile.
Updated 3D Printed Case
This requires the following from the Krell Display 3D Printed Case:
- 1x Frame
- 2x Inserts (with potentiometer holes)
- 1x EuroRack support
This requires the following options in the OpenSCAD code:
show_frame = 1;
show_quadframe = 0;
show_insert = 1;
show_support = 0;
show_quadsupport = 0;
show_eurorack = 0;
show_eurorack_support = 1;
alg_pot1 = 1;
alg_pot2 = 1;
alg_cv = 0;The frame does not really take into account the PCB at present, but I’ve reached the “good enough I want to do something else” stage, so I’ve just added a couple of small cut-outs (using a hacksaw) for the two MIDI sockets, and am content that the components stick out a bit from the back.
This cutout has to be 10.5mm from the end, 6mm wide, and 5mm deep.
At some point I might go back and design a deeper frame that has the cut-outs included and some kind of snap-on back to make it a self-contained box.
But for now, this is left as an exercise for, well, anyone else 🙂
Construction
I’ve used four brass 6mm spacers to screw into the mounting holes in the frame. Then the PCB can be inserted, taking care to squeeze in the 3D printed support around the LEDs and pots, and fixed with 20mm spacers which will also act as “legs”.
The Code
I’ve used a Waveshare Zero RP2040 and Circuitpython for this build. This is a combination of some of the test code used for the Forbidden Planet “Krell” Display PCB but with added MIDI.
The code supports both Serial and USB MIDI.
I wanted an equivalent of the Arduino map() and constrain() functions and didn’t immediate spot them in Circuitpython so wrote my own:
def algmap(val, minin, maxin, minout, maxout):
if (val < minin):
val = minin
if (val > maxin):
val = maxin
return minout + (((val - minin) * (maxout - minout)) / (maxin - minin))This allows me to map the analog read values (0 to 65535) down to MIDI CC values (0 to 127) whilst also allowing for some inaccuracies (I’ve treated anything below 256 as zero for example):
alg1cc = int(algmap(alg1_in.value,256,65530,0,127))
I’ve used the Adafruit MIDI library, which I’m still not really a fan of, but I wanted to include MIDI THRU functionality to allow the controller to sit inline with an existing MIDI stream. But it doesn’t seem to work very well.
I was already only updating the LEDs/MIDI CC if the pot values had changed, to cut down on the number of Neopixel writes required.
I experimented with changing the scheduling of the analog reads and MIDI but that didn’t seem to help very much. In the end I made sure that all MIDI messages queued up in the system would be read at the same time before going back to checking the pots.
msg = midiuart.receive()
while (msg is not None):
if (not isinstance(msg, MIDIUnknownEvent)):
midiuart.send(msg)
msg = midiuart.receive()It will do for now. Moving forward, I might try the Winterbloom SmolMIDI library. If that still doesn’t give me some useful performance then I might have to switch over to Arduino C.
Closing Thoughts
The MIDI throughput is disappointing, but then I’ve never really gotten on with the Adafruit MIDI library. I use it as USB MIDI on Circuitpython is so easy, so will need to do something about that.
I’m still deciding on the PCB-sized supports too. The original seemed to have nicer diffusion of the LEDs, but that could have been the difference between 5mm SMT neopixels and these THT APA106s which seem more directional in the first place.
And I really ought to finish the 3D printed case properly too.
So this is “that will do” for now, but I ought to come back and finish it off properly at some point.
Kevin
#APA106 #circuitpython #ForbiddenPlanet #Krell #midi #midiController #NeoPixel #potentiometer #rp2040 #WaveshareZero
-
Forbidden Planet “Krell” Display – MIDI CC Controller – Part 2
This revisits my Forbidden Planet “Krell” Display – MIDI CC Controller using my Forbidden Planet “Krell” Display PCB with a Waveshare RP2040 to create more of a “all in one” device.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to Arduino, see the Getting Started pages.
Parts list
- Updated Forbidden Planet “Krell” Display (see below).
- Completed Forbidden Planet “Krell” Display PCB Build
- Waveshare Zero format device (I’m using an RP2040)
- 4x 6mm brass spacers
- 4x 20mm nylon spacers
PCB
This requires a built of the Forbidden Planet “Krell” Display PCB with the following:
- 2 potentiometers
- MIDI IN and OUT
I’ve used potentiometers that are their own knob, as they only poke through the casing by around 5mm or so.
If it you are able to get longer shaft pots, then that would probably be worthwhile.
Updated 3D Printed Case
This requires the following from the Krell Display 3D Printed Case:
- 1x Frame
- 2x Inserts (with potentiometer holes)
- 1x EuroRack support
This requires the following options in the OpenSCAD code:
show_frame = 1;
show_quadframe = 0;
show_insert = 1;
show_support = 0;
show_quadsupport = 0;
show_eurorack = 0;
show_eurorack_support = 1;
alg_pot1 = 1;
alg_pot2 = 1;
alg_cv = 0;The frame does not really take into account the PCB at present, but I’ve reached the “good enough I want to do something else” stage, so I’ve just added a couple of small cut-outs (using a hacksaw) for the two MIDI sockets, and am content that the components stick out a bit from the back.
This cutout has to be 10.5mm from the end, 6mm wide, and 5mm deep.
At some point I might go back and design a deeper frame that has the cut-outs included and some kind of snap-on back to make it a self-contained box.
But for now, this is left as an exercise for, well, anyone else 🙂
Construction
I’ve used four brass 6mm spacers to screw into the mounting holes in the frame. Then the PCB can be inserted, taking care to squeeze in the 3D printed support around the LEDs and pots, and fixed with 20mm spacers which will also act as “legs”.
The Code
I’ve used a Waveshare Zero RP2040 and Circuitpython for this build. This is a combination of some of the test code used for the Forbidden Planet “Krell” Display PCB but with added MIDI.
The code supports both Serial and USB MIDI.
I wanted an equivalent of the Arduino map() and constrain() functions and didn’t immediate spot them in Circuitpython so wrote my own:
def algmap(val, minin, maxin, minout, maxout):
if (val < minin):
val = minin
if (val > maxin):
val = maxin
return minout + (((val - minin) * (maxout - minout)) / (maxin - minin))This allows me to map the analog read values (0 to 65535) down to MIDI CC values (0 to 127) whilst also allowing for some inaccuracies (I’ve treated anything below 256 as zero for example):
alg1cc = int(algmap(alg1_in.value,256,65530,0,127))
I’ve used the Adafruit MIDI library, which I’m still not really a fan of, but I wanted to include MIDI THRU functionality to allow the controller to sit inline with an existing MIDI stream. But it doesn’t seem to work very well.
I was already only updating the LEDs/MIDI CC if the pot values had changed, to cut down on the number of Neopixel writes required.
I experimented with changing the scheduling of the analog reads and MIDI but that didn’t seem to help very much. In the end I made sure that all MIDI messages queued up in the system would be read at the same time before going back to checking the pots.
msg = midiuart.receive()
while (msg is not None):
if (not isinstance(msg, MIDIUnknownEvent)):
midiuart.send(msg)
msg = midiuart.receive()It will do for now. Moving forward, I might try the Winterbloom SmolMIDI library. If that still doesn’t give me some useful performance then I might have to switch over to Arduino C.
Closing Thoughts
The MIDI throughput is disappointing, but then I’ve never really gotten on with the Adafruit MIDI library. I use it as USB MIDI on Circuitpython is so easy, so will need to do something about that.
I’m still deciding on the PCB-sized supports too. The original seemed to have nicer diffusion of the LEDs, but that could have been the difference between 5mm SMT neopixels and these THT APA106s which seem more directional in the first place.
And I really ought to finish the 3D printed case properly too.
So this is “that will do” for now, but I ought to come back and finish it off properly at some point.
Kevin
#APA106 #circuitpython #ForbiddenPlanet #Krell #midi #midiController #NeoPixel #potentiometer #rp2040 #WaveshareZero
-
Forbidden Planet “Krell” Display – MIDI CC Controller – Part 2
This revisits my Forbidden Planet “Krell” Display – MIDI CC Controller using my Forbidden Planet “Krell” Display PCB with a Waveshare RP2040 to create more of a “all in one” device.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to Arduino, see the Getting Started pages.
Parts list
- Updated Forbidden Planet “Krell” Display (see below).
- Completed Forbidden Planet “Krell” Display PCB Build
- Waveshare Zero format device (I’m using an RP2040)
- 4x 6mm brass spacers
- 4x 20mm nylon spacers
PCB
This requires a built of the Forbidden Planet “Krell” Display PCB with the following:
- 2 potentiometers
- MIDI IN and OUT
I’ve used potentiometers that are their own knob, as they only poke through the casing by around 5mm or so.
If it you are able to get longer shaft pots, then that would probably be worthwhile.
Updated 3D Printed Case
This requires the following from the Krell Display 3D Printed Case:
- 1x Frame
- 2x Inserts (with potentiometer holes)
- 1x EuroRack support
This requires the following options in the OpenSCAD code:
show_frame = 1;
show_quadframe = 0;
show_insert = 1;
show_support = 0;
show_quadsupport = 0;
show_eurorack = 0;
show_eurorack_support = 1;
alg_pot1 = 1;
alg_pot2 = 1;
alg_cv = 0;The frame does not really take into account the PCB at present, but I’ve reached the “good enough I want to do something else” stage, so I’ve just added a couple of small cut-outs (using a hacksaw) for the two MIDI sockets, and am content that the components stick out a bit from the back.
This cutout has to be 10.5mm from the end, 6mm wide, and 5mm deep.
At some point I might go back and design a deeper frame that has the cut-outs included and some kind of snap-on back to make it a self-contained box.
But for now, this is left as an exercise for, well, anyone else 🙂
Construction
I’ve used four brass 6mm spacers to screw into the mounting holes in the frame. Then the PCB can be inserted, taking care to squeeze in the 3D printed support around the LEDs and pots, and fixed with 20mm spacers which will also act as “legs”.
The Code
I’ve used a Waveshare Zero RP2040 and Circuitpython for this build. This is a combination of some of the test code used for the Forbidden Planet “Krell” Display PCB but with added MIDI.
The code supports both Serial and USB MIDI.
I wanted an equivalent of the Arduino map() and constrain() functions and didn’t immediate spot them in Circuitpython so wrote my own:
def algmap(val, minin, maxin, minout, maxout):
if (val < minin):
val = minin
if (val > maxin):
val = maxin
return minout + (((val - minin) * (maxout - minout)) / (maxin - minin))This allows me to map the analog read values (0 to 65535) down to MIDI CC values (0 to 127) whilst also allowing for some inaccuracies (I’ve treated anything below 256 as zero for example):
alg1cc = int(algmap(alg1_in.value,256,65530,0,127))
I’ve used the Adafruit MIDI library, which I’m still not really a fan of, but I wanted to include MIDI THRU functionality to allow the controller to sit inline with an existing MIDI stream. But it doesn’t seem to work very well.
I was already only updating the LEDs/MIDI CC if the pot values had changed, to cut down on the number of Neopixel writes required.
I experimented with changing the scheduling of the analog reads and MIDI but that didn’t seem to help very much. In the end I made sure that all MIDI messages queued up in the system would be read at the same time before going back to checking the pots.
msg = midiuart.receive()
while (msg is not None):
if (not isinstance(msg, MIDIUnknownEvent)):
midiuart.send(msg)
msg = midiuart.receive()It will do for now. Moving forward, I might try the Winterbloom SmolMIDI library. If that still doesn’t give me some useful performance then I might have to switch over to Arduino C.
Closing Thoughts
The MIDI throughput is disappointing, but then I’ve never really gotten on with the Adafruit MIDI library. I use it as USB MIDI on Circuitpython is so easy, so will need to do something about that.
I’m still deciding on the PCB-sized supports too. The original seemed to have nicer diffusion of the LEDs, but that could have been the difference between 5mm SMT neopixels and these THT APA106s which seem more directional in the first place.
And I really ought to finish the 3D printed case properly too.
So this is “that will do” for now, but I ought to come back and finish it off properly at some point.
Kevin
#APA106 #circuitpython #ForbiddenPlanet #Krell #midi #midiController #NeoPixel #potentiometer #rp2040 #WaveshareZero
-
Forbidden Planet “Krell” Display – MIDI CC Controller – Part 2
This revisits my Forbidden Planet “Krell” Display – MIDI CC Controller using my Forbidden Planet “Krell” Display PCB with a Waveshare RP2040 to create more of a “all in one” device.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to Arduino, see the Getting Started pages.
Parts list
- Updated Forbidden Planet “Krell” Display (see below).
- Completed Forbidden Planet “Krell” Display PCB Build
- Waveshare Zero format device (I’m using an RP2040)
- 4x 6mm brass spacers
- 4x 20mm nylon spacers
PCB
This requires a built of the Forbidden Planet “Krell” Display PCB with the following:
- 2 potentiometers
- MIDI IN and OUT
I’ve used potentiometers that are their own knob, as they only poke through the casing by around 5mm or so.
If it you are able to get longer shaft pots, then that would probably be worthwhile.
Updated 3D Printed Case
This requires the following from the Krell Display 3D Printed Case:
- 1x Frame
- 2x Inserts (with potentiometer holes)
- 1x EuroRack support
This requires the following options in the OpenSCAD code:
show_frame = 1;
show_quadframe = 0;
show_insert = 1;
show_support = 0;
show_quadsupport = 0;
show_eurorack = 0;
show_eurorack_support = 1;
alg_pot1 = 1;
alg_pot2 = 1;
alg_cv = 0;The frame does not really take into account the PCB at present, but I’ve reached the “good enough I want to do something else” stage, so I’ve just added a couple of small cut-outs (using a hacksaw) for the two MIDI sockets, and am content that the components stick out a bit from the back.
This cutout has to be 10.5mm from the end, 6mm wide, and 5mm deep.
At some point I might go back and design a deeper frame that has the cut-outs included and some kind of snap-on back to make it a self-contained box.
But for now, this is left as an exercise for, well, anyone else 🙂
Construction
I’ve used four brass 6mm spacers to screw into the mounting holes in the frame. Then the PCB can be inserted, taking care to squeeze in the 3D printed support around the LEDs and pots, and fixed with 20mm spacers which will also act as “legs”.
The Code
I’ve used a Waveshare Zero RP2040 and Circuitpython for this build. This is a combination of some of the test code used for the Forbidden Planet “Krell” Display PCB but with added MIDI.
The code supports both Serial and USB MIDI.
I wanted an equivalent of the Arduino map() and constrain() functions and didn’t immediate spot them in Circuitpython so wrote my own:
def algmap(val, minin, maxin, minout, maxout):
if (val < minin):
val = minin
if (val > maxin):
val = maxin
return minout + (((val - minin) * (maxout - minout)) / (maxin - minin))This allows me to map the analog read values (0 to 65535) down to MIDI CC values (0 to 127) whilst also allowing for some inaccuracies (I’ve treated anything below 256 as zero for example):
alg1cc = int(algmap(alg1_in.value,256,65530,0,127))
I’ve used the Adafruit MIDI library, which I’m still not really a fan of, but I wanted to include MIDI THRU functionality to allow the controller to sit inline with an existing MIDI stream. But it doesn’t seem to work very well.
I was already only updating the LEDs/MIDI CC if the pot values had changed, to cut down on the number of Neopixel writes required.
I experimented with changing the scheduling of the analog reads and MIDI but that didn’t seem to help very much. In the end I made sure that all MIDI messages queued up in the system would be read at the same time before going back to checking the pots.
msg = midiuart.receive()
while (msg is not None):
if (not isinstance(msg, MIDIUnknownEvent)):
midiuart.send(msg)
msg = midiuart.receive()It will do for now. Moving forward, I might try the Winterbloom SmolMIDI library. If that still doesn’t give me some useful performance then I might have to switch over to Arduino C.
Closing Thoughts
The MIDI throughput is disappointing, but then I’ve never really gotten on with the Adafruit MIDI library. I use it as USB MIDI on Circuitpython is so easy, so will need to do something about that.
I’m still deciding on the PCB-sized supports too. The original seemed to have nicer diffusion of the LEDs, but that could have been the difference between 5mm SMT neopixels and these THT APA106s which seem more directional in the first place.
And I really ought to finish the 3D printed case properly too.
So this is “that will do” for now, but I ought to come back and finish it off properly at some point.
Kevin
#APA106 #circuitpython #ForbiddenPlanet #Krell #midi #midiController #NeoPixel #potentiometer #rp2040 #WaveshareZero
-
Forbidden Planet “Krell” Display – MIDI CC Controller – Part 2
This revisits my Forbidden Planet “Krell” Display – MIDI CC Controller using my Forbidden Planet “Krell” Display PCB with a Waveshare RP2040 to create more of a “all in one” device.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to Arduino, see the Getting Started pages.
Parts list
- Updated Forbidden Planet “Krell” Display (see below).
- Completed Forbidden Planet “Krell” Display PCB Build
- Waveshare Zero format device (I’m using an RP2040)
- 4x 6mm brass spacers
- 4x 20mm nylon spacers
PCB
This requires a built of the Forbidden Planet “Krell” Display PCB with the following:
- 2 potentiometers
- MIDI IN and OUT
I’ve used potentiometers that are their own knob, as they only poke through the casing by around 5mm or so.
If it you are able to get longer shaft pots, then that would probably be worthwhile.
Updated 3D Printed Case
This requires the following from the Krell Display 3D Printed Case:
- 1x Frame
- 2x Inserts (with potentiometer holes)
- 1x EuroRack support
This requires the following options in the OpenSCAD code:
show_frame = 1;
show_quadframe = 0;
show_insert = 1;
show_support = 0;
show_quadsupport = 0;
show_eurorack = 0;
show_eurorack_support = 1;
alg_pot1 = 1;
alg_pot2 = 1;
alg_cv = 0;The frame does not really take into account the PCB at present, but I’ve reached the “good enough I want to do something else” stage, so I’ve just added a couple of small cut-outs (using a hacksaw) for the two MIDI sockets, and am content that the components stick out a bit from the back.
This cutout has to be 10.5mm from the end, 6mm wide, and 5mm deep.
At some point I might go back and design a deeper frame that has the cut-outs included and some kind of snap-on back to make it a self-contained box.
But for now, this is left as an exercise for, well, anyone else 🙂
Construction
I’ve used four brass 6mm spacers to screw into the mounting holes in the frame. Then the PCB can be inserted, taking care to squeeze in the 3D printed support around the LEDs and pots, and fixed with 20mm spacers which will also act as “legs”.
The Code
I’ve used a Waveshare Zero RP2040 and Circuitpython for this build. This is a combination of some of the test code used for the Forbidden Planet “Krell” Display PCB but with added MIDI.
The code supports both Serial and USB MIDI.
I wanted an equivalent of the Arduino map() and constrain() functions and didn’t immediate spot them in Circuitpython so wrote my own:
def algmap(val, minin, maxin, minout, maxout):
if (val < minin):
val = minin
if (val > maxin):
val = maxin
return minout + (((val - minin) * (maxout - minout)) / (maxin - minin))This allows me to map the analog read values (0 to 65535) down to MIDI CC values (0 to 127) whilst also allowing for some inaccuracies (I’ve treated anything below 256 as zero for example):
alg1cc = int(algmap(alg1_in.value,256,65530,0,127))
I’ve used the Adafruit MIDI library, which I’m still not really a fan of, but I wanted to include MIDI THRU functionality to allow the controller to sit inline with an existing MIDI stream. But it doesn’t seem to work very well.
I was already only updating the LEDs/MIDI CC if the pot values had changed, to cut down on the number of Neopixel writes required.
I experimented with changing the scheduling of the analog reads and MIDI but that didn’t seem to help very much. In the end I made sure that all MIDI messages queued up in the system would be read at the same time before going back to checking the pots.
msg = midiuart.receive()
while (msg is not None):
if (not isinstance(msg, MIDIUnknownEvent)):
midiuart.send(msg)
msg = midiuart.receive()It will do for now. Moving forward, I might try the Winterbloom SmolMIDI library. If that still doesn’t give me some useful performance then I might have to switch over to Arduino C.
Closing Thoughts
The MIDI throughput is disappointing, but then I’ve never really gotten on with the Adafruit MIDI library. I use it as USB MIDI on Circuitpython is so easy, so will need to do something about that.
I’m still deciding on the PCB-sized supports too. The original seemed to have nicer diffusion of the LEDs, but that could have been the difference between 5mm SMT neopixels and these THT APA106s which seem more directional in the first place.
And I really ought to finish the 3D printed case properly too.
So this is “that will do” for now, but I ought to come back and finish it off properly at some point.
Kevin
#APA106 #circuitpython #ForbiddenPlanet #Krell #midi #midiController #NeoPixel #potentiometer #rp2040 #WaveshareZero
-
And a short demo of it in action.
-
And a short demo of it in action.
-
And a short demo of it in action.
-
And a short demo of it in action.
-
And a short demo of it in action.
-
Here is a 12 HP EuroRack version of my Krell Display with a single CV input.
https://diyelectromusic.com/2025/04/03/forbidden-planet-krell-display-eurorack-module/
-
Here is a 12 HP EuroRack version of my Krell Display with a single CV input.
https://diyelectromusic.com/2025/04/03/forbidden-planet-krell-display-eurorack-module/
-
Here is a 12 HP EuroRack version of my Krell Display with a single CV input.
https://diyelectromusic.com/2025/04/03/forbidden-planet-krell-display-eurorack-module/
-
Here is a 12 HP EuroRack version of my Krell Display with a single CV input.
https://diyelectromusic.com/2025/04/03/forbidden-planet-krell-display-eurorack-module/
-
Here is a 12 HP EuroRack version of my Krell Display with a single CV input.
https://diyelectromusic.com/2025/04/03/forbidden-planet-krell-display-eurorack-module/
-
Forbidden Planet “Krell” Display EuroRack Module
This project uses my Forbidden Planet “Krell” Display and the Forbidden Planet “Krell” Display PCB Design but with some slight variations that means it could be EuroRack mounted with a control voltage (CV) input.
This is a DIY module only for use in my own DIY system.
Do NOT use this alongside expensive modules in an expensive rack. It is highly likely to cause problems with your power supply and could even damage your other modules.
https://makertube.net/w/qJqgTxxsEznTuF2DRVZT9o
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers, see the Getting Started pages.
Parts list
- 3D Printed EuroRack format Krell Display unit.
- Waveshare Zero format board – details here.
- Forbidden Planet “Krell” Display PCB built for EuroRack use (see below).
- Additional companion EuroRack power PCB (see below).
EuroRack 3D Print Design
This is an evolution of my original Forbidden Planet “Krell” Display box, but fitting into EuroRack dimensions: 128.5 x 60, which essentially makes it a 12 HP module.
It still takes the same inserts however, but now also includes options for holes for jack sockets or potentiometers:
show_eurorack = 1;
show_eurorack_support = 1;
alg_pot1 = 1;
alg_pot2 = 1;
alg_cv = 0;I’ve also included a special “supports” option for use with the PCB and the EuroRack case.
Krell Display PCB – EuroRack Build
To build one of my Forbidden Planet “Krell” Display PCB Designs for use with a EuroRack, follow the previous Build Guide but note the following differences:
- The MIDI circuits are not required when used as a CV input device.
- The lower potentiometer should be replaced with a CV input circuit.
- The upper potentiometer is optional, but I’m omitting it for my build.
- Power will come via the 5V jumper headers from an additional EuroRack power PCB (details below).
- Low-profile (e.g. 9mm high in total) headers should be used for the Waveshare Zero, but once again note the errata about the footprint on the PCB being too wide.
Here are some build photos of a build for EuroRack use. For this build there are only two diodes (the two BAT43) and two resistors (22K and 33K). Also note that none of the 100nF ceramic capacitors are required either.
Both electrolytic capacitors have been soldered into position on their sides as show below.
The Thonkiconn style mono jack shares the footprint are of the lower potentiometer on the LED side of the board, but be sure to get use the correct mounting holes as shown by the orientation below.
Nothing has been soldered to the power jumper yet. See the discussion below for how to link this to the power board.
Krell Display Companion EuroRack Power PCB
Bill of Materials:
- Waveshare Zero “Krell” Display EuroRack power PCB (Github Link below).
- L7805 TO-220 format regulator or equivalent (see discussion below).
- 1x 16-way DIP EuroRack shrouded header.
- 1x 1N5017 Zener diode.
- 2x 47uF electrolytic capacitors.
- 1x 100nF ceramic capacitor.
- 2-way Jumper header socket and pins (probably need extended pins – see discussion).
I’ve opted to use a DC-DC converter with a 7805 physical footprint as shown below.
If a 7805 regulator is used then a heatsink will almost certainly be required. I’ve oriented the regular to allow for a “tab up” mounting which hopefully leaves plenty of room for some kind of heatsink to be used.
Here are some build photos.
There is an option on the PCB to install a 10R resistor as is sometimes recommended for EuroRack modules. From what I’ve read this seems to be to allow it to act as a “fuse” in the case of an incorrectly wired module. As I’ve discussed before (see here) I’m not sure this is so relevant for me, so I’m using the provided solder bypass bridge to leave it out.
Note the orientation of the DC-DC converter.
I’ve used extended pin headers for the power link between the two boards, but due to an error in positioning, they’ve had to be bent over slightly – more on that later.
Physical Build
A completed unit has the following parts:
- 3D printed case, PCB supports, and two “krell” inserts.
- Main PCB built for EuroRack use as described above.
- Power PCB as described above.
- M2.5 spacers and fixings as follows:
- 4x 6mm M2.5 brass fixings.
- 4x 15mm M2.5 nylon fixings.
- 4x M2.5 nylon screws.
The power link between the two PCBs has to be trimmed and slightly bent as shown below.
Once the whole thing is put together, there isn’t room, at least on my build, for the nut to be put on the jack socket. Also, the 6mm and 15mm spacers might be slightly too short, depending on how far off the PCBs the LEDs ended up. Some experimentation and “encouragement” is probably required to get everything together.
The Code
The code is relatively straight forward, and is largely a mix of the analog and neopixel test code from the Forbidden Planet “Krell” Display PCB Build Guide.
One quirk is scaling the analog read from 0..65535 to a useful 0-10 to allow for zero to 10 leds to light up. I’ve allowed for a range of values to be “basically zero” too to allow for some jitter or noise.
As I only write out to the neopixels when something changes, this code seems to be quite responsive.
This requires the following Adafruit Circuitpython Library Bundle libraries:
- neopixel.mpy
- adafruit_pioasm.mpy
- adafruit_pixelbuf.mpy
In fact, the entire Circuitpython code is given below.
import time
import board
import neopixel
from analogio import AnalogIn
cv_in = AnalogIn(board.A3)
pixel_pin1 = board.GP2
pixel_pin2 = board.GP3
num_pixels = 5
pixels1 = neopixel.NeoPixel(pixel_pin1, num_pixels, brightness=0.3, auto_write=False, pixel_order=neopixel.RGB)
pixels2 = neopixel.NeoPixel(pixel_pin2, num_pixels, brightness=0.3, auto_write=False, pixel_order=neopixel.RGB)
col = (80, 35, 0)
lastcv = -1
while True:
cv = cv_in.value / 256
if (lastcv != cv):
lastcv = cv
led = cv / 25
for pix in range(5):
if (pix < led and cv > 5):
pixels1[pix] = col
else:
pixels1[pix] = 0
if (pix+5 < led and cv > 5):
pixels2[pix] = col
else:
pixels2[pix] = 0
pixels1.show()
pixels2.show()GiHub Resources
There is now an updated version of the OpenSCAD code for the case on GitHub and the PCB and code are also now available.
- OpenSCAD code and STL models: https://github.com/diyelectromusic/sdemp_3dprints/tree/main/KrellDisplay
- PCB: https://github.com/diyelectromusic/sdemp_pcbs/tree/main/WaveshareZeroKrellDisplay
- Code: https://github.com/diyelectromusic/sdemp/blob/main/src/SDEMP/CircuitPython/KrellEuroRackDisplay.py
Closing Thoughts
This isn’t a perfect build in mechanical terms, but I’m not sure I ever do anything perfectly anyway, especially where mechanical things are concerned, but the final result is pretty pleasing.
The video shows it running with a Pimoroni RP2040 in the driving seat. First a potentiometer provides a 0 to 5V input, then I’m using my Educational DIY Synth Thing‘s LFO to provide a 0 to 3V3 input.
Kevin
-
Forbidden Planet “Krell” Display EuroRack Module
This project uses my Forbidden Planet “Krell” Display and the Forbidden Planet “Krell” Display PCB Design but with some slight variations that means it could be EuroRack mounted with a control voltage (CV) input.
This is a DIY module only for use in my own DIY system.
Do NOT use this alongside expensive modules in an expensive rack. It is highly likely to cause problems with your power supply and could even damage your other modules.
https://makertube.net/w/qJqgTxxsEznTuF2DRVZT9o
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers, see the Getting Started pages.
Parts list
- 3D Printed EuroRack format Krell Display unit.
- Waveshare Zero format board – details here.
- Forbidden Planet “Krell” Display PCB built for EuroRack use (see below).
- Additional companion EuroRack power PCB (see below).
EuroRack 3D Print Design
This is an evolution of my original Forbidden Planet “Krell” Display box, but fitting into EuroRack dimensions: 128.5 x 60, which essentially makes it a 12 HP module.
It still takes the same inserts however, but now also includes options for holes for jack sockets or potentiometers:
show_eurorack = 1;
show_eurorack_support = 1;
alg_pot1 = 1;
alg_pot2 = 1;
alg_cv = 0;I’ve also included a special “supports” option for use with the PCB and the EuroRack case.
Krell Display PCB – EuroRack Build
To build one of my Forbidden Planet “Krell” Display PCB Designs for use with a EuroRack, follow the previous Build Guide but note the following differences:
- The MIDI circuits are not required when used as a CV input device.
- The lower potentiometer should be replaced with a CV input circuit.
- The upper potentiometer is optional, but I’m omitting it for my build.
- Power will come via the 5V jumper headers from an additional EuroRack power PCB (details below).
- Low-profile (e.g. 9mm high in total) headers should be used for the Waveshare Zero, but once again note the errata about the footprint on the PCB being too wide.
Here are some build photos of a build for EuroRack use. For this build there are only two diodes (the two BAT43) and two resistors (22K and 33K). Also note that none of the 100nF ceramic capacitors are required either.
Both electrolytic capacitors have been soldered into position on their sides as show below.
The Thonkiconn style mono jack shares the footprint are of the lower potentiometer on the LED side of the board, but be sure to get use the correct mounting holes as shown by the orientation below.
Nothing has been soldered to the power jumper yet. See the discussion below for how to link this to the power board.
Krell Display Companion EuroRack Power PCB
Bill of Materials:
- Waveshare Zero “Krell” Display EuroRack power PCB (Github Link below).
- L7805 TO-220 format regulator or equivalent (see discussion below).
- 1x 16-way DIP EuroRack shrouded header.
- 1x 1N5017 Zener diode.
- 2x 47uF electrolytic capacitors.
- 1x 100nF ceramic capacitor.
- 2-way Jumper header socket and pins (probably need extended pins – see discussion).
I’ve opted to use a DC-DC converter with a 7805 physical footprint as shown below.
If a 7805 regulator is used then a heatsink will almost certainly be required. I’ve oriented the regular to allow for a “tab up” mounting which hopefully leaves plenty of room for some kind of heatsink to be used.
Here are some build photos.
There is an option on the PCB to install a 10R resistor as is sometimes recommended for EuroRack modules. From what I’ve read this seems to be to allow it to act as a “fuse” in the case of an incorrectly wired module. As I’ve discussed before (see here) I’m not sure this is so relevant for me, so I’m using the provided solder bypass bridge to leave it out.
Note the orientation of the DC-DC converter.
I’ve used extended pin headers for the power link between the two boards, but due to an error in positioning, they’ve had to be bent over slightly – more on that later.
Physical Build
A completed unit has the following parts:
- 3D printed case, PCB supports, and two “krell” inserts.
- Main PCB built for EuroRack use as described above.
- Power PCB as described above.
- M2.5 spacers and fixings as follows:
- 4x 6mm M2.5 brass fixings.
- 4x 15mm M2.5 nylon fixings.
- 4x M2.5 nylon screws.
The power link between the two PCBs has to be trimmed and slightly bent as shown below.
Once the whole thing is put together, there isn’t room, at least on my build, for the nut to be put on the jack socket. Also, the 6mm and 15mm spacers might be slightly too short, depending on how far off the PCBs the LEDs ended up. Some experimentation and “encouragement” is probably required to get everything together.
The Code
The code is relatively straight forward, and is largely a mix of the analog and neopixel test code from the Forbidden Planet “Krell” Display PCB Build Guide.
One quirk is scaling the analog read from 0..65535 to a useful 0-10 to allow for zero to 10 leds to light up. I’ve allowed for a range of values to be “basically zero” too to allow for some jitter or noise.
As I only write out to the neopixels when something changes, this code seems to be quite responsive.
This requires the following Adafruit Circuitpython Library Bundle libraries:
- neopixel.mpy
- adafruit_pioasm.mpy
- adafruit_pixelbuf.mpy
In fact, the entire Circuitpython code is given below.
import time
import board
import neopixel
from analogio import AnalogIn
cv_in = AnalogIn(board.A3)
pixel_pin1 = board.GP2
pixel_pin2 = board.GP3
num_pixels = 5
pixels1 = neopixel.NeoPixel(pixel_pin1, num_pixels, brightness=0.3, auto_write=False, pixel_order=neopixel.RGB)
pixels2 = neopixel.NeoPixel(pixel_pin2, num_pixels, brightness=0.3, auto_write=False, pixel_order=neopixel.RGB)
col = (80, 35, 0)
lastcv = -1
while True:
cv = cv_in.value / 256
if (lastcv != cv):
lastcv = cv
led = cv / 25
for pix in range(5):
if (pix < led and cv > 5):
pixels1[pix] = col
else:
pixels1[pix] = 0
if (pix+5 < led and cv > 5):
pixels2[pix] = col
else:
pixels2[pix] = 0
pixels1.show()
pixels2.show()GiHub Resources
There is now an updated version of the OpenSCAD code for the case on GitHub and the PCB and code are also now available.
- OpenSCAD code and STL models: https://github.com/diyelectromusic/sdemp_3dprints/tree/main/KrellDisplay
- PCB: https://github.com/diyelectromusic/sdemp_pcbs/tree/main/WaveshareZeroKrellDisplay
- Code: https://github.com/diyelectromusic/sdemp/blob/main/src/SDEMP/CircuitPython/KrellEuroRackDisplay.py
Closing Thoughts
This isn’t a perfect build in mechanical terms, but I’m not sure I ever do anything perfectly anyway, especially where mechanical things are concerned, but the final result is pretty pleasing.
The video shows it running with a Pimoroni RP2040 in the driving seat. First a potentiometer provides a 0 to 5V input, then I’m using my Educational DIY Synth Thing‘s LFO to provide a 0 to 3V3 input.
Kevin
-
Forbidden Planet “Krell” Display PCB Build Guide
Here are the build notes for my Forbidden Planet “Krell” Display PCB. This post just looks at building the PCB for standalone use.
Further posts will explore other uses for this PCB:
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and electronics, see the Getting Started pages.
Bill of Materials
- Forbidden Planet “Krell” Display PCB (GitHub link below)
- Waveshare Zero format board (more here).
- 10x APA-106 through-hole programmable RGB LEDs pinout: IN-VCC-GND-OUT.
- 1x 500uF electrolytic capacitor (or thereabouts).
- 1x 47uF electrolytic capacitor.
- Optional: 2x 9-way header sockets (full or low-profile – see notes).
- Pin headers
For the MIDI circuit:
- 1x H11L1 optoisolator.
- 1x 1N4148 or 1N914 signal diode.
- Resistors: 1×10Ω, 1×33Ω, 1×220Ω, 1×470Ω.
- 1x 100nF ceramic capacitor.
- 2x 3.5mm stereo TRS sockets – pcb mount (see photo and PCB for footprint).
- Optional: 1x 6-way DIP socket.
For potentiometer circuit:
- 1 or 2 x 10K pcb-mount potentiometer (see photo and PCB for footprint).
- 1 or 2x 100nF ceramic capactiors.
For the CV input:
- 1x Thonkiconn style mono PCB mount jack socket.
- Resistors: 1x22K, 1x33K.
- 2x BAT43 Schottky diodes.
Build Steps
This posts describes a standalone module with two potentiometer controls and a MIDI circuit. For a EuroRack-style module with CV inputs refer to: Forbidden Planet “Krell” Display EuroRack Module.
Taking a typical “low to high” soldering approach, this is the suggested order of assembly:
- All diodes and resistors.
- DIP socket (if used) and TRS sockets.
- Disc capacitors.
- LEDs on rear of the board.
- 9-way headers (if used).
- Additional pin headers (if used).
- Electrolytic capacitors.
- Potentiometers on rear of the board.
Here are some build photos.
When it comes to adding the LEDs it is critical to get them in the correct pin order. These boards are designed for LEDs with two long and two shorter legs, with the pins in the order:
- Short: IN
- Short: VCC
- Long: GND
- Long: OUT
The pins need to be slightly bent to fit in the staggered footprint which means it isn’t possible to push the LEDs flush with the PCB. It is worth taking a little care to get them all to approximately the same height and vertically aligned.
Hopefully it goes without saying to be careful of rubbing the hot soldering iron tip on any of the existing plastic components.
As the footprint for the Waveshare Zero is 2.54mm too wide, it is advantageous to use a Waveshare Zero format board to help angle-in the pin headers prior to soldering.
If using full height headers there will probably be enough flex to do this afterwards. If using low-profile headers then it will be necessary to get the angle correct prior to soldering.
In the following note how the large capacitor has been bent over to lie flat.
Also, I didn’t have a 500uF or higher, so used a 470uF in a 10mm diameter package.
Testing
I recommend performing the general tests described here: PCBs.
Here is some test CircuitPython code that will check the functionality of the board with a Waveshare Zero type device. This was used with a Pimoroni Tiny2040 (which has two less pins to the Waveshare Zero devices).
Analog Input
This tests the potentiometers:
import time
import board
from analogio import AnalogIn
analog_in1 = AnalogIn(board.A2)
analog_in2 = AnalogIn(board.A3)
while True:
print(analog_in1.value,"\t",analog_in2.value)
time.sleep(0.1)On turning each of the potentiometers a value between 0 and 65536 should be printed to the serial console. Note: Mine never seems to get below 256…
LEDs
This can be used to test the LEDs. Requires the following libraries from the Adafruit Circuitpython Library Bundle:
- neopixel.mpy
- adafruit_pioasm.mpy (presumably only required on RP2040 based boards)
- adafruit_pixelbuf.mpy
import time
import board
import neopixel
pixel_pin1 = board.GP2
pixel_pin2 = board.GP3
num_pixels = 5
pixels1 = neopixel.NeoPixel(pixel_pin1, num_pixels, brightness=0.3, auto_write=False, pixel_order=neopixel.RGB)
pixels2 = neopixel.NeoPixel(pixel_pin2, num_pixels, brightness=0.3, auto_write=False, pixel_order=neopixel.RGB)
while True:
for col in [(255,0,0),(0,255,0),(0,0,255),(0,0,0)]:
for pix in range(5):
pixels1[pix] = col
pixels1.show()
time.sleep(0.5)
pixels2[pix] = col
pixels2.show()
time.sleep(0.5)
time.sleep(3)This will light each LED in turn alternating between the upper and lower sets of LEDs and then leave them off for three seconds.
MIDI IN and OUT
This requires the Adafruit MIDI library, which requires the following directory from the Adafruit Circuitpython Library Bundle:
- adafruit_midi/*
import board
import digitalio
import busio
import adafruit_midi
from adafruit_midi.note_off import NoteOff
from adafruit_midi.note_on import NoteOn
uart = busio.UART(tx=board.GP0, rx=board.GP1, baudrate=31250, timeout=0.001)
midi = adafruit_midi.MIDI(midi_in=uart, midi_out=uart)
while True:
msg = midi.receive()
if (msg is not None):
if (isinstance(msg, NoteOn)):
print (msg)
print ("Note On: \t",msg.note,"\t",msg.velocity)
midi.send(msg)
if (isinstance(msg, NoteOff)):
print ("Note Off:\t",msg.note,"\t",msg.velocity)
midi.send(msg)This will print out any received NoteOn and NoteOff messages (and only those) on the MIDI IN port and send them back out over the MIDI OUT port.
PCB Errata
There are the following issues with this PCB:
- The aforementioned Waveshare Zero footprint error.
Enhancements:
- It might have been useful to position the Waveshare board so that the USB connector could be presented to the edge of the board and thus left exposed when used with a case.
Closing Thoughts
That is the basics of the board covered. Next will be a discussion of the alternative EuroRack supporting configuration and the physical builds for both versions.
Kevin
-
Forbidden Planet “Krell” Display PCB Build Guide
Here are the build notes for my Forbidden Planet “Krell” Display PCB. This post just looks at building the PCB for standalone use.
Further posts will explore other uses for this PCB:
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and electronics, see the Getting Started pages.
Bill of Materials
- Forbidden Planet “Krell” Display PCB (GitHub link below)
- Waveshare Zero format board (more here).
- 10x APA-106 through-hole programmable RGB LEDs pinout: IN-VCC-GND-OUT.
- 1x 500uF electrolytic capacitor (or thereabouts).
- 1x 47uF electrolytic capacitor.
- Optional: 2x 9-way header sockets (full or low-profile – see notes).
- Pin headers
For the MIDI circuit:
- 1x H11L1 optoisolator.
- 1x 1N4148 or 1N914 signal diode.
- Resistors: 1×10Ω, 1×33Ω, 1×220Ω, 1×470Ω.
- 1x 100nF ceramic capacitor.
- 2x 3.5mm stereo TRS sockets – pcb mount (see photo and PCB for footprint).
- Optional: 1x 6-way DIP socket.
For potentiometer circuit:
- 1 or 2 x 10K pcb-mount potentiometer (see photo and PCB for footprint).
- 1 or 2x 100nF ceramic capactiors.
For the CV input:
- 1x Thonkiconn style mono PCB mount jack socket.
- Resistors: 1x22K, 1x33K.
- 2x BAT43 Schottky diodes.
Build Steps
This posts describes a standalone module with two potentiometer controls and a MIDI circuit. For a EuroRack-style module with CV inputs refer to: Forbidden Planet “Krell” Display EuroRack Module.
Taking a typical “low to high” soldering approach, this is the suggested order of assembly:
- All diodes and resistors.
- DIP socket (if used) and TRS sockets.
- Disc capacitors.
- LEDs on rear of the board.
- 9-way headers (if used).
- Additional pin headers (if used).
- Electrolytic capacitors.
- Potentiometers on rear of the board.
Here are some build photos.
When it comes to adding the LEDs it is critical to get them in the correct pin order. These boards are designed for LEDs with two long and two shorter legs, with the pins in the order:
- Short: IN
- Short: VCC
- Long: GND
- Long: OUT
The pins need to be slightly bent to fit in the staggered footprint which means it isn’t possible to push the LEDs flush with the PCB. It is worth taking a little care to get them all to approximately the same height and vertically aligned.
Hopefully it goes without saying to be careful of rubbing the hot soldering iron tip on any of the existing plastic components.
As the footprint for the Waveshare Zero is 2.54mm too wide, it is advantageous to use a Waveshare Zero format board to help angle-in the pin headers prior to soldering.
If using full height headers there will probably be enough flex to do this afterwards. If using low-profile headers then it will be necessary to get the angle correct prior to soldering.
In the following note how the large capacitor has been bent over to lie flat.
Also, I didn’t have a 500uF or higher, so used a 470uF in a 10mm diameter package.
Testing
I recommend performing the general tests described here: PCBs.
Here is some test CircuitPython code that will check the functionality of the board with a Waveshare Zero type device. This was used with a Pimoroni Tiny2040 (which has two less pins to the Waveshare Zero devices).
Analog Input
This tests the potentiometers:
import time
import board
from analogio import AnalogIn
analog_in1 = AnalogIn(board.A2)
analog_in2 = AnalogIn(board.A3)
while True:
print(analog_in1.value,"\t",analog_in2.value)
time.sleep(0.1)On turning each of the potentiometers a value between 0 and 65536 should be printed to the serial console. Note: Mine never seems to get below 256…
LEDs
This can be used to test the LEDs. Requires the following libraries from the Adafruit Circuitpython Library Bundle:
- neopixel.mpy
- adafruit_pioasm.mpy (presumably only required on RP2040 based boards)
- adafruit_pixelbuf.mpy
import time
import board
import neopixel
pixel_pin1 = board.GP2
pixel_pin2 = board.GP3
num_pixels = 5
pixels1 = neopixel.NeoPixel(pixel_pin1, num_pixels, brightness=0.3, auto_write=False, pixel_order=neopixel.RGB)
pixels2 = neopixel.NeoPixel(pixel_pin2, num_pixels, brightness=0.3, auto_write=False, pixel_order=neopixel.RGB)
while True:
for col in [(255,0,0),(0,255,0),(0,0,255),(0,0,0)]:
for pix in range(5):
pixels1[pix] = col
pixels1.show()
time.sleep(0.5)
pixels2[pix] = col
pixels2.show()
time.sleep(0.5)
time.sleep(3)This will light each LED in turn alternating between the upper and lower sets of LEDs and then leave them off for three seconds.
MIDI IN and OUT
This requires the Adafruit MIDI library, which requires the following directory from the Adafruit Circuitpython Library Bundle:
- adafruit_midi/*
import board
import digitalio
import busio
import adafruit_midi
from adafruit_midi.note_off import NoteOff
from adafruit_midi.note_on import NoteOn
uart = busio.UART(tx=board.GP0, rx=board.GP1, baudrate=31250, timeout=0.001)
midi = adafruit_midi.MIDI(midi_in=uart, midi_out=uart)
while True:
msg = midi.receive()
if (msg is not None):
if (isinstance(msg, NoteOn)):
print (msg)
print ("Note On: \t",msg.note,"\t",msg.velocity)
midi.send(msg)
if (isinstance(msg, NoteOff)):
print ("Note Off:\t",msg.note,"\t",msg.velocity)
midi.send(msg)This will print out any received NoteOn and NoteOff messages (and only those) on the MIDI IN port and send them back out over the MIDI OUT port.
PCB Errata
There are the following issues with this PCB:
- The aforementioned Waveshare Zero footprint error.
Enhancements:
- It might have been useful to position the Waveshare board so that the USB connector could be presented to the edge of the board and thus left exposed when used with a case.
Closing Thoughts
That is the basics of the board covered. Next will be a discussion of the alternative EuroRack supporting configuration and the physical builds for both versions.
Kevin
-
Forbidden Planet “Krell” Display PCB Design
This is a PCB to support one of my dual Forbidden Planet “Krell” Displays. Rather than using ready made programmable LED rings, this is using through-hole APA-106 programmable RGB LEDs.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and electronics, see the Getting Started pages.
The Circuit
I want this circuit to support the following:
- Waveshare Zero format microcontroller – ideally, any I mentioned before here: Waveshare Zero, Pimoroni Tiny, and Neopixels.
- Two sets of five APA-106 programmable RGB LEDs to support the five segments of my Forbidden Planet “Krell” Display.
- MIDI IN and OUT.
- Optional: potentiometer control.
- Optional: CV input for use with analog synths.
- Optional: Means to power from a EuroRack system.
I’ve chosen to include a single 5V power jumper for power in, so will consider any EuroRack style powering options as a separate project.
A standalone instance of this would be fine to be powered using the USB connection of the Waveshare Zero board chosen.
I’ve included some optional breakout headers for spare GPIO pins.
I’m using the GPIO of a Waveshare Zero compatible board as follows:
5V Power IN5VTXMIDI OUTGroundGNDRXMIDI IN3V3 Power OUT3V3GPIOLower LEDsLower Analog INADCGPIOUpper LEDsUpper Analog INADCGPIOADCGPIOADCGPIOGPIOGPIOGPIOGPIOThe upper analog input I’m anticipating will be an (optional) potentiometer.
The lower analog input I’m planning to be either an (optional) potentiometer or a (optional) CV input, so I’ve include some (also optional) CV input protection circuitry and a simple resistor divider to scale a 0 to 5V analog CV to a 0 to 3V3 range for use with the ADCs.
PCB Design
The size of the PCB is designed to fit inside my Forbidden Planet “Krell” Display.
The LEDs and potentiometers are on the non-component side of the PCB. I’ve used a staggered LED pin footprint to hopefully make soldering a little easier, but this does mean that the LEDs probably won’t fit flush to the board.
I’ve overlapped the footprints of the lower potentiometer and a “Thonkiconn” style mono jack, so the board can use one or the other (or neither).
MIDI circuitry is optional. CV in circuitry is also optional. I’ve attempted to highlight each within a silkscreen box to make it clearer which components relate to which part of the circuit.
The 2-pin power input header is also designed to be used to connect the board to a secondary power board (to be discussed in a future post).
There are additional breakout headers for a range of unused signals.
I’ve also included a breakout header for the additional analog and IO signals that could be used for a single microcontroller to link to a second PCB to support a four-way Krell display. These would have to be patch-wired into the appropriate header signals on the unpopulated microcontroller headers on the secondary PCB.
Closing Thoughts
Unfortunately I already know the Waveshare Zero footprint is 2.54mm too wide, as I used the same footprint as my Waveshare Zero MIDI Proto PCB Design.
Still, I should be able to provide the same workaround here when it comes to building the boards.
Kevin
-
Forbidden Planet “Krell” Display PCB Design
This is a PCB to support one of my dual Forbidden Planet “Krell” Displays. Rather than using ready made programmable LED rings, this is using through-hole APA-106 programmable RGB LEDs.
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
If you are new to microcontrollers and electronics, see the Getting Started pages.
The Circuit
I want this circuit to support the following:
- Waveshare Zero format microcontroller – ideally, any I mentioned before here: Waveshare Zero, Pimoroni Tiny, and Neopixels.
- Two sets of five APA-106 programmable RGB LEDs to support the five segments of my Forbidden Planet “Krell” Display.
- MIDI IN and OUT.
- Optional: potentiometer control.
- Optional: CV input for use with analog synths.
- Optional: Means to power from a EuroRack system.
I’ve chosen to include a single 5V power jumper for power in, so will consider any EuroRack style powering options as a separate project.
A standalone instance of this would be fine to be powered using the USB connection of the Waveshare Zero board chosen.
I’ve included some optional breakout headers for spare GPIO pins.
I’m using the GPIO of a Waveshare Zero compatible board as follows:
5V Power IN5VTXMIDI OUTGroundGNDRXMIDI IN3V3 Power OUT3V3GPIOLower LEDsLower Analog INADCGPIOUpper LEDsUpper Analog INADCGPIOADCGPIOADCGPIOGPIOGPIOGPIOGPIOThe upper analog input I’m anticipating will be an (optional) potentiometer.
The lower analog input I’m planning to be either an (optional) potentiometer or a (optional) CV input, so I’ve include some (also optional) CV input protection circuitry and a simple resistor divider to scale a 0 to 5V analog CV to a 0 to 3V3 range for use with the ADCs.
PCB Design
The size of the PCB is designed to fit inside my Forbidden Planet “Krell” Display.
The LEDs and potentiometers are on the non-component side of the PCB. I’ve used a staggered LED pin footprint to hopefully make soldering a little easier, but this does mean that the LEDs probably won’t fit flush to the board.
I’ve overlapped the footprints of the lower potentiometer and a “Thonkiconn” style mono jack, so the board can use one or the other (or neither).
MIDI circuitry is optional. CV in circuitry is also optional. I’ve attempted to highlight each within a silkscreen box to make it clearer which components relate to which part of the circuit.
The 2-pin power input header is also designed to be used to connect the board to a secondary power board (to be discussed in a future post).
There are additional breakout headers for a range of unused signals.
I’ve also included a breakout header for the additional analog and IO signals that could be used for a single microcontroller to link to a second PCB to support a four-way Krell display. These would have to be patch-wired into the appropriate header signals on the unpopulated microcontroller headers on the secondary PCB.
Closing Thoughts
Unfortunately I already know the Waveshare Zero footprint is 2.54mm too wide, as I used the same footprint as my Waveshare Zero MIDI Proto PCB Design.
Still, I should be able to provide the same workaround here when it comes to building the boards.
Kevin
-
@diyelectromusic you're aware there was a #krell synthesizer from #boldport club?
-
@diyelectromusic you're aware there was a #krell synthesizer from #boldport club?
-
@diyelectromusic you're aware there was a #krell synthesizer from #boldport club?
-
@diyelectromusic you're aware there was a #krell synthesizer from #boldport club?
-
@diyelectromusic you're aware there was a #krell synthesizer from #boldport club?
-
I've updated my Forbidden Planet Krell Display to allow me to produce a 12HP EuroRack panel version.
Looking promising so far...
-
I've updated my Forbidden Planet Krell Display to allow me to produce a 12HP EuroRack panel version.
Looking promising so far...
-
I've updated my Forbidden Planet Krell Display to allow me to produce a 12HP EuroRack panel version.
Looking promising so far...
-
I've updated my Forbidden Planet Krell Display to allow me to produce a 12HP EuroRack panel version.
Looking promising so far...
-
I've updated my Forbidden Planet Krell Display to allow me to produce a 12HP EuroRack panel version.
Looking promising so far...