PTT-Steuerung mit GPIO

  • Guten Abend,

    ich betreibe hier eine abgesetzte Sprechstelle für unser 10m Relais DB0MAX.

    Bislang erfolgt die Squelch-Steuerung mittels VOX, das funktioniert zwar, aber mehr schlecht als recht. Du musst prinzipiell ständig etwas sagen, sonst fällt die Squelch wieder ab. Das ist manchmal echt anstrengend :D Und ich hab die SQL_HANGTIME schon auf 1500 (also 1,5 Sekunden) gesetzt. Noch länger wäre dann zuviel.


    Ich möchte gerne mit einem Schalter die PTT per GPIO-Pin steuern, z.B. GPIO17.


    Unter http://raspberrypiguide.de/howtos/raspberry-pi-gpio-how-to/ habe ich nach Variante 1 den Port schon mal als Eingang konfiguriert. Aber wie muss ich SvxLink jetzt beibringen, dass er nicht auf die serielle Schnittstelle, sondern auf den GPIO-Port gucken soll? Irgendeine Idee?


    Vielen Dank
    Sandy DO7CT

  • Hi Sandy,

    so aus dem Bauch raus würde ich es mit

    Code
    [Tx1]
    PTT_TYPE=GPIO
    PTT_PIN=gpio0
    ...

    probieren, wobei mir die Bezeichnung nicht so geläufig und nicht nachvollziehbar ist.
    GPIO0 = Pin 11? An anderer Stelle finde ich dafür die Bezeichnung GPIO17?!?
    Das hängt aber auch vom Treiber ab der da verwendet wird, die svxlink.conf manual page sagt dazu:

    PTT_PIN
    If GPIO was specified in PTT_TYPE, set the PTT_PIN config variable to the pin name of the GPIO-pin to use. The
    most common name is gpio<number>, like gpio3. Some GPIO drivers use more complex pin names like gpio33_pe11.
    Have a look at the USING GPIO section for information on how to set up the operating system. Normally, the pin
    will be active high but if the pin name is prefixed with an exclamation mark it will be active low instead.

    USING GPIO
    GPIO (General Purpose IO) is used to access hardware pins that are made available for example on an embedded system.
    Before starting to use a pin in SvxLink some setup need to be done in the operating system. The example below will set
    up pin 31 as an output for PTT use and pin 30 is used as input for squelch. Make sure that the commands are run as user
    root.

    Enable the PTT pin for GPIO:
    echo 31 > /sys/class/gpio/export

    Set the direction to output for the pin:
    echo out > /sys/class/gpio/gpio31/direction

    Make sure that the svxlink user can write to the GPIO pin:
    chown svxlink /sys/class/gpio31/value

    Enable the squelch pin for GPIO:
    echo 30 > /sys/class/gpio/export

    Set the direction to input for the pin:
    echo in > /sys/class/gpio/gpio30/direction

    Make sure that the svxlink user can read from the GPIO pin:
    chown svxlink /sys/class/gpio30/value

    These steps have to be performed whenever the system is rebooted. Putting the commands in a script is recommended.

    Viel Erfolg!

    vy 73's de Adi, DL1HRC

  • Hallo Adi,

    das mit den verschiedenen Bezeichnungen könnte daher kommen, dass zwischen Revision 1.0 und 2.0 ein paar Änderungen vorgenommen wurden.

    In der aktuellsten Version soll es wohl so sein, dass Du den kompletten Namen angeben musst, also nicht nur "17" sondern jetzt "gpio17".

    Wenn ich die Signale mit sicheren logischen Zuständen am Port anliegen habe, werde ich das mit Svxlink probieren. Ich melde mich dann noch mal.

  • So,

    nachdem am GPIO 17 endlich definierte Zustände (logisch null / logisch eins) herrschten, konnte die Konfiguration der Software anfangen.

    Ich musste ein paar Dinge recherchieren, aber am Ende funktioniert es so wie gewollt.


    Man muss ja bei jedem Neustart des Systems die GPIO-Ports wieder freischalten. Man kann das wohl mit einem Skript machen, ich hab die Befehle aber einfach in /etc/rc.local geschrieben - geht wunderbar.


    Code
    # Konfiguration der GPIO-Schnittstelle# PTT-Kontakt für SvxLink# GPIO Pin 17 aktivierenecho "17" > /sys/class/gpio/export# GPIO Pin 17 als Eingang konfigurierenecho "in" > /sys/class/gpio/gpio17/direction# GPIO Pin x als Ausgang konfigurieren#echo "out" > /sys/class/gpio/gpiox/direction# Warten...sleep 5


    Als Nächstes in remotetrx.conf die Squelch von VOX auf GPIO umstellen, die Haltezeit der Squelch deaktivieren und den GPIO17 als Squelch-Pin zuweisen:

    Code
    #SQL_DET=VOX
    SQL_DET=GPIO
    ...
    #SQL_HANGTIME=1500
    SQL_HANGTIME=0
    ...
    GPIO_SQL_PIN=gpio17


    Damit funktioniert es schon mal.


    Das Problem ist nur: Beim Ausschalten, wenn die Squelch in der Software auch als "closed" angezeigt wird, dann höre ich, wie die NF stummgeschaltet wird, dann ist kurze Zeit nichts zu hören und dann für kurze Zeit wieder NF, bevor dann endgültig Stille herrscht. Ich weiß noch nicht, ob der Schalter prellt oder ob ich die Konfiguration der Software noch ändern muss.... seltsam... es ist jetzt nicht besonders dramatisch, aber aufgefallen ist es mir schon...

  • hm, eventuell mal RGR_SOUND_DELAY=-1 setzen
    Vielleicht macht da der Roger-Beep ein Problem, zur Not im tcl deaktivieren.

    73's de Adi, DL1HRC