Welcome to the new FlexRadio Community! Please review the new Community Rules and other important new Community information on the Message Board.
If you are having a problem, please refer to the product documentation or check the Help Center for known solutions.
Need technical support from FlexRadio? It's as simple as Creating a HelpDesk ticket.




  • KD0RC
    KD0RC Member, Super Elmer Moderator

    The resistive touch controller from Adafruit (STMPE610) that I use in the TeensyMaestro has nearly gone unobtanium. There are still a few available from Amazon and a couple of other sources, but they are going fast.

    The chip manufacturer (STM) no longer makes the 610 or 811 controller chips, so Adafruit is looking for a new alternative. I don't know when they will get their new board(s) designed and on the market, so if you want to build a TeensyMaestro with a touch screen, now is the time to get the Adafruit STMPE610 board.

    Once the new board comes out from Adafruit (they are actively working on this), I will get one and create a version of the firmware that accommodates the new board. There will likely be an I2C version and a SPI version. The TeensyMaestro uses I2C for this purpose.

    If you do build a TM and can't get the touch controller, not to worry - I only have very limited functionality related to the touch screen. I really added it just to see if I could make it work. It is not fantastically useful, so the TM can easily be built and used without the touch capability. Once the new Adafruit board comes out, you will be able to retrofit it to your TeensyMaestro (assuming I am successful in writing the code for it...).

    Thanks to Hu Lin, BG6SNJ for pointing out that the SMPTE610 is now out of production. I hope to see some pictures of his TeensyMaestro soon!

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Stefan, VA3AR has built the latest TeensyMaestro. He still has the buttons, multiplexers and some encoders to wire up, but he is nearly done. Stephan bolted all of the various boards to the front panel and wired from there. He should have a much neater wiring job when he is done than I have. I wired everything, then stuffed it all in the enclosure with the MUX and touch controller boards dangling (I am using the first prototype excuse...). The crazy amount of wire I used holds everything securely enough, but I think Stefan will be happy he took this approach.

    Nicely done Stefan! I will be interested to hear how you like it once it is complete.

  • KF5DEY
    KF5DEY Member ✭✭

    I have had a working breadboard version for apparently a year...well, we got busy at the clubhouse...

    Anyway, I see where some folks are using this remotely. I assume SmartLink is still not part of it, so I also assume you are doing some bridged connections?

    Time to get back to work on this.


  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Hi Mike, I'm glad to hear that you have a working version! Drilling and cutting the front panel is probably the hardest part...

    Yep, I use SoftEther VPN and bridge the connection. It is as if the TeensyMaestro is directly connected to the same LAN segment as the radio. Because the amount of data being transferred by the TeensyMaestro is low, using the VPN works great. This solution does require a second PC at the radio site, but that is a good idea anyway. Mike, VA3MW has a good video about that on YouTube. If you get one of these built, I can help you to get the VPN set up for remote operation.

    If you get a chance, post some pics of your project here. I would love to see what you come up with. Best of luck with your project!

  • Hi,
    I just finished my TeensyMaestro and I enjoy using it.
    It works great with SSDR and with the Ipad as well. I like the ethernet keying in particular!
    Len, thank you for your work and make it available to us.

    73! dx de va3ar
  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Hi Stefan, Congratulations! I am glad that you got it built and working! I am not sure, but I think you might be the first one to use a TeensyMaestro with a 6600. Please let me know if there are any problems - I have only ever used it on a 6400. I out in code to obtain and display the proper Slice designator (A, B, C, etc), but have never tested it beyond A and B. Note that if you use MultiFlex, the TeensyMaestro will show the slice designator the same way that SmartSDR on each computer does. That means that you can have two slice A on the TM at the same time.

    The ethernet keying was a struggle, but with this Flex forum, I got enough help to make it happen. I am glad that feature is helpful to your operation.

    I see that there are no buttons across the top of your TeensyMaestro, did you use a separate keypad for the CW memories? If so, that is a great way to go!

  • Hi Len,
    I'm using the manual key input only for now. When SSDR is running, keying is done manually with an external keyer and by the contesting software.
    I'm planning to add the speaker and the memory keys ASAP, to be used with the Ipad, or remote operation.
    I will try the multiple slices and let you know the results.
    For now I used SPLIT mode with A and B on different bands.The C slice for TX on A band, was not shown on the display as I expected but I could see it on SSDR and I completed the qso OK.
  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Sounds good Stefan. You can also key the memories from the menu without the buttons. Use the Menu Select knob (CW Speed) to select the desired memory, then short-click to send the memory. Long click to exit without sending.

    Yes, that would be the expected action for slices A, B and C. I am glad it is working predictably!

    Hope to hear you on the air one day.

  • TimothyDilks
    TimothyDilks Member ✭✭
    edited March 2022
    A note to those that are building a new Teensy Maestro: Adafruit TFT LCD

    I did not see see it in the manual or forum, but the Adafruit documentation for the LCD states you have to close the connection to enable the SPI interface. I almost quit this project as after two weeks I could not get my screen to turn on and show the interface. I had two problems:

    1. I was using the wrong inputs, the display has both a 8 bit and SPI interface. They are almost identical pins.
    2. To use the SPI interface, you have to close (solder the two pads together) the connection in the middle top of the board.
  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Hi Tim, I am sorry you had to figure that out the hard way. There is a picture on the first page of this thread that shows what to connect.

    I am glad you are building the project. Please don't hesitate to ask questions here if you have any issues. I normally check the forum multiple times a day. I can also do a Skype session if you get stuck. One of the other builders had a couple of wires backwards and using Skype, we got it working quickly.

    I will be posting V 1.023 to GitHub on Monday. In the meantime, I will send you the hex file via e-mail so that you can test your display with the latest version.

  • TimothyDilks
    TimothyDilks Member ✭✭
    I have read through multiple times… annnnd totally missed that!
  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Well, if that is your worst mistake in life, I think you will be OK! :- )

    I just sent you the latest hex file. I recommend loading it right away. V 1.022 had an issue that sometimes causes continuous re-booting of the Teensy board. This was an issue with one of the libraries changing as I was getting ready for the upgrade of the Arduino IDE and the TeensyDuino add-in. I have subsequently removed the V 1.022 hex file from GitHub, but I left everything else for anyone who is following along at a more technical level.

    Keep us posted here on your progress, it is fun to watch these things go from a pile of wires to an operating device!

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    TeensyMaestro V1.023 is now available on GitHub:


    ***************************** V 1.023 ***************************
    Fixed bug where Teensy board resets itself immediately following boot-up
    Fixed bug where PTT crashes keyer when in Keyer Only mode
    Fixed character spacing when using cut zeroes (long dash)
    Fixed bug where the memory menu overflows and corrupts other menus
    Changed to allow touch screen in Keyer Only mode
    Added CW mode "C" for sideswiper (Cootie Key)emulation
    Added CW mode "S" for Bug (Semi-automatic) emulation
    Recompiled for Arduino 1.8.19 and Teensyduino 1.56

    If you have a TeensyMaestro and previously loaded V1.022, I recommend upgrading to 1.023 as soon as possible. 1.022 will sometimes continuously reboot the Teensy board.

    I added the two new keyer modes, but they are really just novelty items. If you have a single lever paddle, they will probably work reasonably well. With twin paddles, the independent operation of each paddle works against you (it is very hard to time dots and dashes).

    My usual question: Is anyone else building one (or has already built one) and wants to share some pics?

  • TimothyDilks
    TimothyDilks Member ✭✭
    I loaded 1.023 and had no issues with it. Since you had commented on Github that it had a bug with stability I had loaded 1.021 do not run into any issues.
  • TimothyDilks
    TimothyDilks Member ✭✭
    edited March 2022


    I have built out the Teensy, Screen, and Touch Controller. I breadboarded the initial connection and have started soldering them now. This is going to get messy fast with all of the rotary encoders and switches...

    I really like the front panel from the GitHub that was delivered this week. Looks very professional. I felt bad though as I ordered the Amazon Rotary Encoders and they were a tad too large for the holes so I had to enlarge them with a drill, but the knobs will cover up the hack job.

    I went with silicone jumper wires. I have a bunch of silicone wire from other projects and they are so much easier to work with and and highly recommend them!

    I ordered some black M2 screws to match the sharp front panel.

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Wow, that looks great Tim! Good call on the silicone wires. I used the cheapies and they were a bit difficult to manage. Did you get your front panel from Front Panel Express? It looks really good.

    One trick that I used was to put black Sharpie on the edge of the cut out for the display. In my case it hides any roughness and tool marks. In your case, it would hide the shiny aluminum edge.

    As you solder in the encoders, I recommend doing them one at a time, then test to be sure that the control operates in the proper direction before moving on to the next one. It is much easier to move the wires as you go. My schematic naming convention did not take care of control direction of rotation. (sorry...)

    A feature that I have not added to the schematic yet is the ability to switch microphones and have the mic profile follow along. One page back in this thread is a pic of a hand-drawn schematic. It can always be added later if you are interested in that feature. It does require soldering to the back side of the Teensy board, but it is not overly difficult.

    Thanks for the progress report and pictures. That is going to be a great-looking TeensyMaestro!

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Hey Tim, would you mind sharing what you paid for the Front Panel Express panel? One of the more difficult aspects of the project is getting a decent looking front panel, and yours looks fantastic. Others who might shy away from the project due to the mechanical aspects may jump in if this option is available to them.

    Also, would you mind sharing the layout? The one that Dave, W4WKU did does not have any labelling on it. He did it just for the control spacing. If you e-mail it to me, I would be happy to put it on GitHub with the other layout.

  • TimothyDilks
    TimothyDilks Member ✭✭

    The Front Panel was $107.04 delivered (which included the standard shipping, and no rushed production). The panel is really nice looking. I actually used the Front Panel design from Github and made a couple changes (I did not want my callsign on it). From order to delivery took around 9 days (calendar)

    There are two changes I would make:

    1. Change the location of the High/Width A on the left side and Low/Shift B on the right side as the lettering is almost covered up by the screws (visible in the picture).
    2. Change the diameter of the holes. I found out that the rotary encoders from Adafruit are about 1mm larger than the hole size for the 9 holes, and the 4 pushbuttons under the screen I just realized are the same way. I will have to drill them out.

    I have no problem emailing you the design (the Front Panel Express app is really nice) but before we put it on the Github I would like to ensure that we correct those two issues before others make the same mistake. I had put the labels on inside the app which was very easy (it is almost like using Microsoft Visio or PowerPoint) and allows you to align the labels horizontally and vertically which is why the alignment looks correct in the layout (I am NOT a graphics designer).

    Also that was a great idea about using a sharpie around the inside edge of the cutout for the screen. I will be taking it apart later this evening to do that (and change out to black screws).

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Hi Tim, thanks for the info. The front panels can also be set up to have studs on the back instead of thru hole screws to hold the display. It bumps the price up quite a bit, though. $107 for a really nice anodized, multi-color custom engraved front panel is quite reasonable!

    If you want to make those changes using the front panel app, I would be happy to post the results to GitHub.

    Have you mounted any encoders with the knobs installed to verify that the knobs do not overlap the labels? The knobs that I have with the Leo Bodnar encoders are pretty big, so that is something to watch out for.

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    TeensyMaestro V1.023 is now available on GitHub:

    ***************************** V 1.024 ***************************
    Reduced debounce time from 50 to 10 ms to improve responsiveness of buttons
    Added button click for short press
    Added button click for long press
    Added config items to set short and long press button click defaults (ON/OFF)
    Added Misc Menu items to set short and long press button click operation (ON/OFF)

    Not much of a release this time... 😁 The button clicks are something I have been meaning to incorporate for some time and finally got motivated to get it done. The clicks use the sidetone speaker, so if you built this without the CW features, you can still hang a cheap speaker off Teensy pin 34.

    @TimothyDilks - How is your build going?

    Anyone else have anything to share? (getting started, got one finished, etc)

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    TeensyMaestro V1.025 is now available on GitHub:

    ***************************** V 1.025 ***************************
    Fixed minor CW timing problem (0.4 ms on inter-element spaces)
    Fixed minor CW timing problem when playing memories (1 ms on character spacing)
    Fixed CW timing error on word spacing when playing memories (had a 9 element wait time instead of 7)

    Very minor update. The CW memory playback had some very small errors that were bugging me. I couldn't hear them, but I could see them on an oscilloscope. I went to a lot of trouble to get very accurately timed code elements when using the paddles, then I goofed it up with poorly timed character and word spacing. At slower speeds, a 1 ms error isn't much. At high speed, that 1 ms is a much bigger percentage error. I don't key fast enough for this to matter much, but I wanted CW accuracy bragging rights... 😁

    For those who are interested in such things, the CW is timed using one of the Teensy (600 MHz ARM Cortex M7) internal timers. I set the timer at the beginning of a dot, dash, interelement space, character space or word space. When it times out, it generates an interrupt that I use to immediately (within a few microseconds) start or stop sending the code element. Because it is interrupt driven, I am never waiting for another process to finish up. It keeps the dots, dashes and spacing nearly perfectly timed at speeds over 100,000 WPM.

    When I did the uber-high speed testing, I was hoping it could keep up at a few hundred WPM. I was very pleasantly surprised when I got to 100,000 and it still looked good. The sidetone conks out way before that, and the Flex can't keep up - it just gives a constant sidetone (I assume I am keying faster than the time constants for the debounce routines). And no, I didn't key the transmitter, just the sidetone... I can only imagine the key clicks at speeds like that!!

  • TimothyDilks
    TimothyDilks Member ✭✭

    Have all the buttons/knobs mounted and I am really happy with how it looks. Now on to the monumental task of wiring them all up.

    Any recommendations from builders on the best practice for doing connecting all the switches/encoders? It is going to end up being a birds nest of wiring inside the TeensyMaestro!!!

    Feedback on my FrontPanel: Every hole except the large optical rotary encoders were too small by about half a millimeter. I had to use a slightly larger drill bit to ream them out to allow for both the rotary encoders and pushbuttons under the display to be inserted into the holes. I used the cheaper Amazon pushbutton's and rotary encoders with knobs from Sparkfun. If anyone else uses the FrontPanel, we should do an iteration of changing the diameter of the holes to make the switches and knobs just drop in. I changed out the front M2 screws for black ones (look much better) and also used the black Sharpie around the inside edge of the display cutout like was recommended by Lee (obviously with the display not mounted!). The knobs do not cover any of the labels which I am happy about. I wish I had moved the Low/Shift B label about 2mm to the right as the **** is touching the L which bothers me. I also spent half an hour tonight ensuring that all the rotary encoders were aligned at vertically and horizontally which also was bothering me.

  • TimothyDilks
    TimothyDilks Member ✭✭
    edited March 2022

    Side note, why did the forum asterisk out my 's c r e w' word above? It is a type of mechanical connection!!!

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    Wow, that looks great Tim!

    Yes, you do tend to get a rat's nest of wiring with this design. A wiring harness would help a lot but would be an incredible amount of work to develop. A PC board would really be the best. Anyone want to take on that challenge?

    I would start with wiring up the MUX boards. Since all power and addressing pins except for E0 and E1 are in common, you can use one ribbon cable for both boards to reduce the amount of cabling.

    After the MUX boards are wired up, use a jumper wire to test all of the switch inputs (C0 - C15) on each MUX to be sure that you get the expected results from each button push. It is much easier to fix the MUX address wiring before the other wiring is done.

    Next, I would wire in the Menu Select switch and the CW Speed encoder. That way you have access to the menu system for testing.

    The rest is a matter of personal preference. I wired the A side first so that I could verify operation of a slice.

    I would wire an encoder and switch, then verify the action. That way, if there is an error, you can more easily fix it. Be sure to check encoder rotation direction before moving on to the next one.

    One way to save some wiring is to run one ground wire for each set of four encoder/switch combinations. The four RIT/XIT switches in the center can use that same trick.

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    TeensyMaestro V1.025 is now available on GitHub:

    ***************************** V 1.026 ***************************
    Found and fixed one more 1 ms CW timing problem when playing memories

    I missed one instance of the timing error... I use timer-controlled interrupts to precisely time the CW. I didn't understand the use of "volatile" variables, so I had a 1 ms delay in a wait loop that caused a small timing error but allowed the variable to be queried. Once I figured out that I needed to declare variables used in my interrupt routines as volatile, I could get rid of the delay. This is my PL/I, Fortran, COBOL accent coming through...

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    TeensyMaestro V1.027 is now available on GitHub:


    ***************************** V 1.027 ***************************
    Fixed bug where turning the Vol B encoder caused a lockup
    Fixed bug where filter parms display on unused slice if Low or Hi encoders are turned
    Fixed radio query issue that caused TeensyMaestro to shut down SmartSDR when operating remotely

    Thanks to Dave, W4WKU for finding a bug that has been lurking since the early days of the project. Changing the Slice B volume sometimes causes the TeensyMaestro to lock up. The issue is that I put temporary code in that encoder routine to test an audio amp. I pulled all the related code out except for the lines in the B encoder section - DOH!! This did not manifest as a problem until some other unrelated change was made.

    I have had some problems with the TeensyMaestro connection causing SmartSDR to shut down when operating remotely. It is sporadic and unpredictable when it happens. I did some research and realized that the code that worked well using a slow Arduino is waaaay too fast using the 600 MHz Teensy board. I query the radio every time through the main program loop which floods the network and causes SmartSDR to drop.

    The solution is to only query the radio every 20 ms. Now, using my cell phone as a WiFi hotspot, SmartSDR stays put, and the TeensyMaestro operates normally. I have not tested this under very many conditions, but so far, 20 ms seems to be a good value to use. When I am out camping in remote locations this summer, I will see if I come across the problem again. If so, I will add a config parm to allow reducing the frequency of the query when operating in the field.

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    TeensyMaestro V1.028 is now available on GitHub:

    ***************************** V 1.028 ***************************
    Fixed bug where a dash is sent to sidetone at startup if sidetone is on in config file
    Fixed bug where paddle press to stop a message memory sometimes leaves sidetone keyed
    Added config items to make RIT, XIT, NB and NR Set timeout user configurable. Zero disables timer (i.e. manual operation)
    Added code to clear RIT or XIT to zero on long press if selected
    Added Misc Menu item to show splash screen, short press any key to return

    Thanks to Stefan, VA3AR for suggesting the RIT upgrade. He is a CW contester and wants the RIT to stay active until he specifically returns the control to AGC-T functionality. Also thanks to Stefan, I found the first sidetone bug.

    Because the STMPE-610 touch control board has gone unobtanium (for now), I added a menu item to the end of the Misc Menu that allows showing the splash screen without touching the display.

    Any updates from folks who are building one?

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    The Adafruit STMPE-610 touch screen controller used in the TeensyMaestro went unobtanium recently. They promised a pair of replacements (one for I2C and one for SPI). I just checked their website and the I2C version is in production!

    I ordered one to experiment with, and if it works as well as the STMPE-610, I will incorporate it into the project for new builders. I haven't decided exactly how to proceed, but if possible, I will keep one executable with a config file option to choose either controller. Failing that, I will just have a pair of executables; one for each controller.

    Link to the TSC2007 controller:

    Adafruit TSC2007 I2C Resistive Touch Screen Controller [STEMMA QT] : ID 5423 : $4.95 : Adafruit Industries, Unique & fun DIY electronics and kits

    Assuming that I get it working, I will update the BOM and User Manual to include it.

  • KD0RC
    KD0RC Member, Super Elmer Moderator

    The TSC2007 touch controller arrived today and works great!

    I managed to code it so that the same executable will determine which controller is installed and behave accordingly.

    The first picture shows both screens not touched. The one in the box is the STMPE610 and the one with the jumpers is the TSC2007. Both are running the same executable.

    The second picture shows both being touched at the same time and behaving the same - YES! So you don't have to worry about which touch controller you have, it will behave the same either way.

    If anyone is building a TeensyMaestro now with the Adafruit TSC2007 touch controller, let me know and I will send you the beta version. I will play with this for a few days, and if it feels reasonably stable, I will release it to GitHub.

  • Great job Len! And thanks for a really fun evening yesterday and a ride to the airport. I look forward to our next eyeball QSO!


    David W4WKU

Leave a Comment

Rich Text Editor. To edit a paragraph's style, hit tab to get to the paragraph menu. From there you will be able to pick one style. Nothing defaults to paragraph. An inline formatting menu will show up when you select text. Hit tab to get into that menu. Some elements, such as rich link embeds, images, loading indicators, and error messages may get inserted into the editor. You may navigate to these using the arrow keys inside of the editor and delete them with the delete or backspace key.