Main Menu

Recent posts

#1
For the regular use of this device numeric entry is somewhat rare. And alpha-numeric would be very rare. It's more of an instrument and once it's set up, you really don't need to do much data entry. It's very much like a cell phone experience.
#2
Member Projects / Re: The Knight Project
Last post by JKnightandKARR - Nov 01, 2026, 09:06 PM
Well, here is the code I found to work with the module, so hopefully this will go as intended.
// DTMF decoding with the MT8870
// Q1-Q4 data inputs are read when an interrupt is received
// and touch tone keys are decoded for 0-9, *, #, A, B, C, D
//
// Gadget Reboot

// interrupt flag indicating a new DTMF tone has been located/received
volatile bool toneLoc = false;

void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT);    // StQ (interrupt for data available)
  pinMode(3, INPUT);    // Q4 in
  pinMode(4, INPUT);    // Q3 in
  pinMode(5, INPUT);    // Q2 in
  pinMode(6, INPUT);    // Q1 in

  // run isr to set data received flag when interrupt occurs on pin 2
  attachInterrupt(digitalPinToInterrupt(2), newDTMF, RISING);

  Serial.println("DTMF Receiver\n");
}

void loop() {

  // decode DTMF data when data arrives
  if (toneLoc == true) {
    char keySymbol;            // decoded character
    bool Q1 = digitalRead(6);  // read Q1..Q4 data inputs
    bool Q2 = digitalRead(5);
    bool Q3 = digitalRead(4);
    bool Q4 = digitalRead(3);

    // combine Q1..Q4 bits into a byte
    byte toneData = (0x00 | Q1 | (Q2 << 1) | (Q3 << 2) | (Q4 << 3));

    // decode the DTMF character
    keySymbol = dtmf_decode(toneData);

    // we are expecting to receive characters in a specific test pattern
    // 0123456789*#ABCD
    // so format the received characters as a test pattern string per line
    if (keySymbol == '0') Serial.print("Receiving: ");   // display a message at start of each string
    Serial.print(keySymbol);                             // display each received character on the same line
    if (keySymbol == 'D') Serial.println();              // go to new line after string is complete

    // clear tone located flag to wait for next signal
    toneLoc = false;
  }
}

// isr to set data received flag upon interrupt
void newDTMF() {
  toneLoc = true;
}

// convert the Q1..Q4 data into a DTMF character
char dtmf_decode(byte recv_data) {
  switch (recv_data) {
    case 1:  return '1';
    case 2:  return '2';
    case 3:  return '3';
    case 4:  return '4';
    case 5:  return '5';
    case 6:  return '6';
    case 7:  return '7';
    case 8:  return '8';
    case 9:  return '9';
    case 10: return '0';
    case 11: return '*';
    case 12: return '#';
    case 13: return 'A';
    case 14: return 'B';
    case 15: return 'C';
    case 0:  return 'D';
    default: return '?';
  }
}
#3
Member Projects / Re: The Knight Project
Last post by JKnightandKARR - Nov 01, 2026, 05:02 PM
@Chris Savage or anyone else who knows. I was looking into mixing the 2 channels from the Picomite and looks like I require a passive option, which looks like nothing more then 2 resistors combining the inputs and then onto an small amp circuit. https://sound-au.com/articles/audio-mixing.htm such as Figure 2 on here. I've looked at various sites and all kinda generally say same thing, thought the resistor values seam to vary from 100 ohms to 10k ohms.. is this how todo it?
#4
General Discussion / Re: Looking to get some feedba...
Last post by Chris Savage - Nov 01, 2026, 10:22 AM
Very cool...and I will say this...if you've ever had to, on a TV or Blu-Ray player, enter your email and password, you'll know what I mean...it's not any more difficult than that, where you're using a 4-way arrow and enter button and having select an uppercase / lowercase / symbols set, etc. Unless you're constantly inputting data, I mean, you gotta work with what you have.

I no longer use my watch for Google Pay / Samsung pay at the store, because when active, you MUST enter a pin or password before you swipe. It takes me longer to try and punch that in on the watch face than to just pull out my wallet and use the card, even if I have to enter my PIN. Just sayin...I guess I am more patient in my old age. I'd rather take the longer / easier way than have it be fast, but difficult for me to see.
#5
Member Projects / Re: The Knight Project
Last post by JKnightandKARR - Oct 31, 2026, 04:32 PM
Quote from: Chris Savage on Oct 30, 2026, 03:30 PMSo, you're using the module to figure out which numbers they're pressing in the various show clips? What will you be using to generate your own tones?
Correct. Since I've been able to do DTMF tones with the PicoMite, makes sence to use it, just gotta combine the 2 channels into an small amp circuit, onto a small speaker.
#6
General Discussion / Re: Looking to get some feedba...
Last post by Jim Fouch - Oct 31, 2026, 01:18 PM
Here is a video I made of the keyboards in action.

#7
General Discussion / Re: NEW Atari 800XL
Last post by Jim Fouch - Oct 31, 2026, 12:01 AM
My cousins had the tape drive I borrowed until I had my 1050 out of lay-a-way.  Good times. :-)
#8
Member Projects / Re: The Knight Project
Last post by Chris Savage - Oct 30, 2026, 03:30 PM
So, you're using the module to figure out which numbers they're pressing in the various show clips? What will you be using to generate your own tones?
#9
Member Projects / Re: The Knight Project
Last post by JKnightandKARR - Oct 30, 2026, 02:56 PM
https://www.amazon.com/dp/B01DKAHXNI
I picked up these MT8870 DTMF Decoding Modules.  The plan is to test them with my Arduino, and then tap into the module and play various KR clips and not only get the correct Tone(s) for the clip I am using, such as the Start-Up Tones used in the show, but the exact timings, by hooking my Rigol DS1104Z's Logic Analyzer.  The Arduino can get my the Tone using code and the terminal.  I just need to figure out best way to hook the decoding module up to get the show clips.... Maybe using my Desktop, since has dual screens, output from audio system into the module, either using the input pin or the built in headphone jack.  Meanwhile, suggestions on good, pref cheap also PCB manufacturing in US with these *CENSORED* Tarrifs jacking crap up....


Edit, I guess JLCPCB isn't too bad.... Shipping less then $10 on a board I designed for prototyping my dash stuff, bad part is 8-10 business days, so 2 weeks.......
#10
Yes, multi-threading can cause some strange issues with the serial comms. One of the applications I wrote years ago in VB.Net had to talk to like 50+ devices across a network. Each device could talk in 3-4 different protocols and the app had to stay running unattended for months. It was a crazy thing to keep it all sorted out. The normal way of getting threads from the OS did not work or scale for us. I ended up writing a custom task scheduler that actually kept the number of threads capped and all connected devices shared those limited threads/tasks. Without that method, it would just request new threads as each new device would connect and you'd end up with hundreds of threads and it would just stop doing critical things. That took me a while to sort out. I still you that core task scheduler in things some 20 years later...lol
SMF spam blocked by CleanTalk