Moin Michael,
Tom, bestünde prinzipiell die Möglichkeit, dass eine Entprellung via Software machbar ist? Wird man hier nicht ändern können, daher mehr eine theoretische Frage.
ja, natürlich. Der Artikel bei mikrocontroller.net beschreibt das auch. Der klassische Weg wäre, einen Timer zu verwenden, der mit der ersten Flanke vom Taster gestartet wird. Nach Ablauf des Timers wird der Port erneut abgefragt und wenn das Signal immer noch ansteht, dann wird es als Tastendruck gewertet. Den Timer stellt man auf ein paar ms ein, auch klassich sind Werte um die 20ms. Wenn es nicht auf Geschwindigkeit ankommt, bei mehreren Tastendrücken hintereinander, kann man auch mehr nehmen, z.B. 100ms. Das ist dann ein RC-Glied per Software.
Das ist die Funktion für die Tastenabfrage in meiner Keyer-Software
/** @fn void CheckStraightKey(void)
* @brief Fragt die Handtasteneingänge ab und gibt das
* entsprechende Symbol aus. Bei der Handtaste
* findet über einen Timer eine Entprellung statt
*
* @param none
* @retval none
*/
void CheckStraightKey(void)
{
if(PIND & (1<<STRAIGHT_KEY))
{
if(bState.SendStatus == SENDING_NOTHING)
TXKey(0);
StateStraightKeyPressed = NO_KEY_PRESSED;
} else {
if(StateStraightKeyPressed == NO_KEY_PRESSED)
{
StateStraightKeyPressed = KEY_PRESSED_DEBOUNCE;
TimerStraightKeyPressed = 0;
}
if(StateStraightKeyPressed == KEY_PRESSED)
{
bState.Automatic = 0;
if(bState.SendStatus == SENDING_NOTHING)
{
TXKey(1);
}
}
}
}
Alles anzeigen
Es wird mit einer sogenannten State-Machine gearbeitet. Der Pin wird in der main Schleife abgefragt (könnte man auch per Interrupt machen, habe ich hier nicht), ist kein Taster gedrückt, wird TXKey (PTT) auf 0 gesetzt und der Status auf NO_KEY_PRESSED. Wird eine Taste gedrückt, wird der Status auf KEY_PRESSED_DEBOUNCE gesetzt und der freilaufende Timer auf 0. Ist der Timer abgelaufen wird der Status in der Timer-Routine auf KEY_PRESSED gesetzt. Wenn das Signal bei der nächsten Abfrage immer noch anliegt und KEY_PRESSED auf True steht, z.B. nach 20ms Timer-Laufzeit, dann wird TXKey(1) (PTT ein) ausgelöst. Ist der Timer noch nicht abgelaufen, d.h. der Status steht noch auf KEY_PRESSED_DEBOUNCE, wird nichts gemacht.
Es kann durchaus sein, dass andere TRX das so machen, also Mic und Fußschalter mit Entprellung, per Hardware oder Software und die PTT auf der ACC Buchse, für die digitalen Geräte (z.B. TNC), wo es auf Latenzen ankommt, haben keine Entprellung, weil die keine mechanischen Schalter haben. Es kann auch sein, dass der IC-7300 das per Software macht, nur das bei diesen alten Tastern die Zeit nicht genügt, das heißt, die prellen länger als die Timer-Laufzeit.
Mit einem Oszi kann man das sehr schön beobachten. Die Arduino Bibliotheken enthalten für die Softwareentprellung Routinen, falls man Arduino verwendet. Ansonsten macht man das selbst, meine Software ist kein Arduino, ich mag das nicht besonders.
73, Tom