Arduino oder PIC oder Atmel?

  • Die Bitrate des Konfigurationsprogrammes scheint also fest auf 4800 bit/s eingestellt zu sein, während der KX3 sich automatisch anpasst.

    Genau anders herum, Ralf. Beim KX3 wird die Baudrate in der CONFIG (Menü) festgelegt, die Utility Software testet und passt sich an. Ausnahme: bei einem Firmwareupdate kommuniziert die Utility anfänglich mit der am KX3 eingestellten Baudrate, stellt dann aber vor dem upload den KX3 zwangsweise auf die höchste verfügbare Baudrate 38400 um.
    Man muss also erst die eingestellte Baudrate ermitteln um überhaupt kommunizieren zu können, kann aber sobald die Kommunikation steht den KX3 umstellen.

    73/2 de Peter, DL2FI
    Proud member of Second Class Operators Club SOC and Flying Pig Zapper #OOO (Certificated Kit Destroyer)

  • Zitat

    Genau anders herum, Ralf. Beim KX3 wird die Baudrate in der CONFIG (Menü) festgelegt, die Utility Software testet und passt sich an.


    Aha - für "reverse engineering" bin ich offenbar doch nicht schlau genug ;)


    Vermutlich ist 4800 bit/s die lagsamste Bitrate, die das kx3util probiert, und so bin ich bei meinen Versuchen mit dem kx3util bei 4800 bit/s gelandet. Auf dem Screenshot, den ich weiter oben eingefügt hatte, sieht man zu Anfang ein paar "Müllbytes", weil das Terminal-Programm, das den KX3 emulieren sollte, auf 4800 bit/s eingestellt war. Die Müllbytes waren offenbar die Versuche des kx3util, die höheren Bitraten durchzuprobieren.


    Möglicherweise sendet kx3util beim Communication Test jeweils ein ";" mit 38400 bit/s bis 4800 bit/s und horcht, ob der KX3 mit "k3n;" antwortet. Aber das ist jetzt schon wieder Kaffeesatzleserei, und ich bin zu faul, die Versuche mit dem neuen Wissen noch einmal durchzuspielen ;)


    Edit:


    Ich habe es doch noch mal durchgespielt, lästigerweise muss ich immer erst in ein altes 32bit-Linux umbooten. Dieses Mal habe ich das HTerm, das den KX3 emulieren soll, auf 38400 bit/s eingestellt, so dass kx3util die langsameren Bitraten gar nicht mehr durchprobiert. Und die mit dem HTerm emulierten KX3-Antworten bestehen nur noch aus blind abgefeuerten ";"


    Man sieht im angehängten Screenshot, dass kx3util erst mal ";;.;" sendet (möglicherweise mit einer Pause dazwischen, in der bereits das erste ";" vom KX3 eingehen muss) , dann "RVM;RVD;OM;ER83FA0281;", womit es die Hardwareausstattung und die Firmwareversion des KX3 abzufragen versucht.


    73,
    Ralf

  • Hallo Funkfreunde,
    PS2-Tastatur am Kx3 funktioniert!


    Das ist ganz einfach:
    -Zeichen von Tastatur holen
    -Kommando zusammenbauen , also "KY " + 'zu sendendes Zeichen' + ';' als Abschluss.
    -Kommando senden.


    Kurze Doku hier: ->link


    73
    Heribert

  • Hallo Heribert,


    die PS2-Keyboard-Lib ist ja wirklich komfortabel, die kennt ja sogar die deutsche Tastaturbelegung von Haus aus.


    Was ich an Deinem Arduino-Code bzw. am Verhalten des KX3 nicht verstehe: Die Zeilen


    Code
    cmd = ("KY" + (String)c + ";");   // Kommando zusammenbauen
    ss.print(cmd);   // Kommando senden


    senden anscheinend jedes Tastatur-Zeichen einzeln an den KX3, jeweils mit vorangestelltem "KY" und abgeschlossen mit ";" .


    Was macht der KX3 bei PSK31 draus? Geht der dann nicht nach jedem Zeichen auf Empfang?


    Und muss es statt "(String)c" nicht "String(c)" heissen? Der Compiler "verdaut" allerdings beide Varianten.


    73,
    Ralf

  • Was macht der KX3 bei PSK31 draus? Geht der dann nicht nach jedem Zeichen auf Empfang?


    Hallo Ralf und Mitleser,
    bei PSK dauert es sowieso eine Weile, bis der KX3 auf Empfang geht ( er sendet dann 'idle' ). Du kannst wahrscheinlich nicht so schnell tippen, wie PSK ausgesendet wird. Bei CW ist das je nach Geschwindigkeit anders; schnelleres Tippen puffert der KX3.


    73
    Heribert

  • Hmmm,


    so ganz schön ist das ja nicht, wenn man den KX3 am Ende eines gesendeten Textes nicht gezielt auf Empfang schalten kann, sondern er ein Eigenleben entwickelt. Möglicherweise macht er das dann an Stellen, an denen der OP das gar nicht möchte.



    Im ersten Beitrag des Threads hatte DL2FI ja ausgeführt, was gesucht wird:


    Ein OM hatte mit dem KX3 PSK31 gemacht, ohne einen PC zu besitzen. Sendeseitig hatte er die Texte mit dem CW-Paddle eingegeben, für den Empfang kann man den KX3 so konfigurieren, dass der Empfangstext auf der 8-stelligen VFO-B-Anzeige des KX3 durchscrollt.


    Da der hilfesuchende OM mittlerweile zu zittrige Hände für das CW-Paddle hat aber noch eine Tastatur bedienen kann, suchte er eine Lösung, die Texte per Tastatur einzugeben.


    Deine Lösung wäre als 1:1-Ersatz für die Paddle-Eingabe bereits gut genug, aber vielleicht kann man die noch etwas verbessern.



    Im Handbuch steht, dass der KX3 bei PSK31-Paddle-Input jeweils 4 Sekunden lang idles sendet und selbsttätig auf Empfang geht, wenn keine Paddle-Eingabe mehr erfolgt. Anscheinend macht er das so auch beim "ky"-CAT-Befehl.


    Im Programmers Reference stehen beim "ky"-Befehl noch so ein paar kryptische Erläuterungen, dass man mit den Zeichen "@", ">" und "<" irgendwas bewirken kann (das ich aber nicht verstanden habe).


    Möglicherweise kann man damit den KX3 auf "Senden" halten, wenn die Tastatureingaben zu langsam erfolgen (bzw. den KX3 gezielt auf Empfang schalten).


    Vielleicht hast du ja Lust, damit herumzuprobieren.



    Und wenn Du noch mehr Lust hast, die Lösung zu verbessern: Die Anzeige der eingehenden Texte auf der 8-stelligen VFO-B-Anzeige ist ja ziemlich "gichtig". Prinzipiell müsste es möglich sein, die per CAT an den Arduino ausgeben zu lassen und auf einem LCD anzuzeigen. Ein 2*16-Textdisplay oder ein 4*20-Textdisplay wäre ja schon eine enorme Verbesserung.


    73,
    Ralf


    PS: die Sache mit dem LCD ist vermutlich doch nicht so ganz trivial. Der KX3 sendet ja allerlei Befehlsbestätigungen zurück, die man alle unterdrücken müsste.

  • Hi,


    ich habe unabhängig von meinem letzten Beitrag mal mit Heriberts Basislösung herumgespielt.


    Ich hatte keine Mini-DIN-Buchse bzw. -Kupplung herumliegen und wollte den PS2-Stecker nicht abschneiden, aber jetzt habe ich einfach mal die Tastatur zerlegt, mich direkt an den Tastatur-Platinenstecker gehängt und endlich mal die PS2-Keyboard-Library ausprobiert.


    Funktioniert sehr schön. Da die PS2-Library eine Menge Interrupts werfen dürfte, war ich gespannt, ob die mit der SoftSerial-Library ins Gehege kommt. Meiner Meinung sollte man übrigens auf der SoftSerial eine möglichst hohe Bitrate verwenden, dann vertrödelt der Arduino weniger Zeit mit dem Bitgewackel an dem Sendepin.


    Heriberts Basis-Lösung läuft auch auf meinem Digispark-Clone, allerdings ist der Flashspeicher dann fast voll. Man kann aber weitere 2 kB gewinnen, indem man den Bootloader weglässt und den Attiny 85 direkt flasht.


    Die Invertierung des seriellen Sendesignals kann man auch in Software vornehmen. Mein Digispark-Clone verwendet einen steckbaren ATtiny85 im DIP-Gehäuse; wenn der ATtiny programmiert ist, kann man ihn entnehmen, und dann braucht es nur noch 3 oder 4 Bauteile für die fertige Schaltung. Ein ATtiny85 kostet bei Reichelt 99 Cent :)


    Schaltplan und leicht abgewandelter Sketch sind angehängt.


    73,
    Ralf

  • @ Peter:
    Ich habe inzwischen ein paar PS/2- Buchsen und könnte auf dem bisherigen Stand ("Basis-Version") eine Schaltung zusammenbraten und an Dich senden. Mit 12V-Regler und Schraubklemmen für Spannung und KX3-CAT-Anschluss.
    Soll ich?


    Für mich selbst habe ich einen PS2-Seriell-Wandler gebaut, der statt der KX3-CAT-Befehle die Tastendrücke 1:1 durchreicht. Bei der Gelegenheit habe ich gemerkt, dass es USB-Tastaturen mit PS2-Kompatibilitätsmodus gibt. Mit einem grünen USB-PS2-Mausadapter funktioniert die Schaltung auch an (m)einer USB-Tastatur.
    73, Ralf