Stand-alone-Morse-Keyboard mit ATtiny 85

  • Moin, moin,


    ich kann Telegrafie schneller hören als geben (zu Anfang war es mal umgekehrt). Trotz reichlich Morse-Praxis - meist per ICW - komme ich beim Geben mit dem Paddle kaum über 33 WpM.


    Da ich nur "Second Class Operator" bin (SOC Nr. 1315), habe ich keine Berührungsängste mit "elektronischen Prothesen". Daher entstand die Idee, mal den Betrieb mit einer Morse-Tastatur auszuprobieren.


    Wird zwar von vielen abgelehnt, aber ein Elbug ist ja auch eine elektronische Prothese (die jedoch allgemein akzeptiert wird). Morse-Decoder finde ich jedoch nicht sinnvoll, weil die einfach zu unvollkommen für praktischen Betrieb sind.


    Ich kann nur mit zwei Fingern tippen, aber es reicht auch über längere Zeit für Tempo 40 Wpm (habe gerade eine halbe Stunde 2-way-QSO mit Morse-Keyboards hinter mir - Decodierung aber per 2-way Brain, keine Software).


    Wird keinen interessieren ;) - aber falls doch: hier der Link auf einen Beitrag in DK7JDs Elektronik-Labor: https://www.elektronik-labor.de/avr/morse-keyboard.html


    73,

    Ralf

  • Na ja,


    man kann ja durchgehend Kleinbuchstaben verwenden, und der "word mode" sorgt dafür, dass es nicht mitten im Wort zu Pausen kommt, falls der Vorschreibpuffer mal leer läuft. Das passiert mir nach zu vielen Vertippern.


    Ansporn für die Sache war dieses Video von W5UXH; der kann das wirklich ;)


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Bei DEM Tempo bekomme ich aber nix mehr mit.....


    73,

    Ralf

  • Hallo Ralf,

    ein interessantes Projekt, welches anschaulich zeigt, was so ein 8-beiniger Käfer alles kann.

    Bruce, W8BH, hat mit der Arduino IDE ein Programm in C für eine Morsetastatur mit einem Seeeduino XIAO geschrieben und noch eine OLED-Anzeige spendiert:

    http://w8bh.net/KeyboardKeyer.pdf

    CPU: Arm Cortex-M0+ 32-bit 48 MHz, MC SAMD21G18 mit 256 KB Flash und 32 KB SRAM.


    Viel Spaß beim Lesen,

    73, Roland, DF8IW

    ***Ich baue selbst, also bin ich.***

  • Warum nicht ein 6 $ - Modul nehmen ? ; egal wie leistungsfähig es ist.
    Die neuen CPUs warten nur schneller als früher....

    73 + HNY

  • Danke. Mich interessierts. Sehr cool. Ich liebe den 85iger.

    73 de OE9SAU, Martin

  • Daher entstand die Idee, mal den Betrieb mit einer Morse-Tastatur auszuprobieren.

    Moin Ralf,


    Tastaturen - sei es im Verbund mit dem PC oder autark wie hier - sind bei sehr hohem Tempo durchaus üblich. Und, wie ich finde, keine Schande. Der eine oder andere ist mit zunehmendem Alter oft nicht mehr so gelenkig, dass er hohes Tempo auf den üblichen Wegen geben kann. Wenn es mit der Tastatur leichter und schmerzfreier geht, warum denn nicht?

    Decodierung aber per 2-way Brain, keine Software

    Genau das ist der Punkt. So soll(te) es sein. :thumbup:

    73 Michael, DF2OK.

    ~ AFU seit 1975 ~ DARC ~ G-QRP-Club ~ DL-QRP-AG ~ AGCW ~ FISTS ~ QRPARCI ~ SKCC ~

    "Der Gesunde weiß nicht, wie reich er ist."

  • Moin,

    Warum nicht ein 6 $ - Modul nehmen ? ; egal wie leistungsfähig es ist.

    da habe ich kein Problem mit!


    Nur mit dem delay() aus der Arduino-Bibliothek. In einem Stück Code hatte ich das sogar mal in einer Interruptroutine gesehen! Wie soll denn ein Bastler das richtig lernen, wenn überall nur delay() verwendet wird? :/Dabei werden Dinge wie millis() und andere Timerfunktionen mitgeliefert.


    73, Tom

  • Huch,


    das Thema ist ja wieder hoch geploppt; ich hatte erwartet, dass es (fast) kommentarlos aus der Liste der letzten Beiträge herausfallen wird....


    Versuch einer Sammelantwort:


    @ DF8IW:


    Danke für den Link zur W8BH-Morse-Tastatur; die hatte ich aber schon vorher bei der Suche nach der PS/2-Stecker-Belegung gefunden (und mir da auch eine Grafik "ausgeborgt").



    @ OE9SAU:


    Mein Lieblings-Attiny ist der ATtiny13, weil ich eh' nur einfache Sachen hinkriege. Nur wenn der nicht reicht, wird's ein ATtiny85 oder Atiny84.



    @ DF2OK:


    Morse-Tastaturen oder -Programme sind wohl eher was für Contester und 599-Funker. Bei den CW-RagChewern sind sie wohl eher verpönt; bei den *HSC-Vereinen sind Decoder und auch Tastaturen ausdrücklich für die "Sponsor-QSOs" untersagt. Vielleicht wird hinsichtlich der Tastaturen aufgrund des zunehmenden Remote-Betriebes ein Umdenken einsetzen.


    73,

    Ralf

  • Moin Ralf,

    HSC-Vereinen sind Decoder und auch Tastaturen ausdrücklich für die "Sponsor-QSOs" untersagt.

    korrekt. Aber es gibt ein Funkbetriebsleben neben HSC und Co. ;)

    73 Michael, DF2OK.

    ~ AFU seit 1975 ~ DARC ~ G-QRP-Club ~ DL-QRP-AG ~ AGCW ~ FISTS ~ QRPARCI ~ SKCC ~

    "Der Gesunde weiß nicht, wie reich er ist."

  • Moin Michael,

    korrekt. Aber es gibt ein Funkbetriebsleben neben HSC und Co. ;)

    und neben Contests & Co, abseits von 599 tu.


    Taste ist Taste - ob es nun die red Switches von Cherry oder Begali sind ;) Und wo genau ist der Unterschied zwischen einem Memory-Keyer und einer PC-Tastatur? Bei beiden werden die Zeichen nicht mehr von Hand geformt, nur angetriggert. Wenn elektronisches Geben so verpönt ist, dann müssten auch alle Keyer von den Tischen verschwinden und die Junker aus der Schublade geholt werden. Es geht hier ja nicht um Dekoder, gehört wird weiterhin mit den Ohren.


    73, Tom

  • Moin Heribert,

    Delay() stammt aus dem Projekt 'Arduino', das viele interessierte Menschen dazu ermuntert hat , sich überhaupt mit der Programmierung von Mikroprozessoren zu beschäftigen. Es geht doch darum, dass man überhaupt an die Materie herankommt.

    millis() auch und ist ja nun echt simpel. Nur kann die CPU in der Wartezeit dann auch andere Dinge tun.


    73, Tom

  • Hallo Tom,


    die wenigsten Programmieren noch und kennen einen Ereignis- und zeitgesteuerte Programmausführung.


    Credo: Es wird nicht mehr gewartet.


    Interrupts werden der Hauptprogrammschleife nur noch signalisiert.


    Es wird eine immer konstante Programmzykluszeit vorausgesetzt.

    Z.B. 1 ms oder 10 ms.


    Eingaben über Taster und Keyswitches werden korrekt Entprellt und nur die Ereignisse, wurde "gedrückt", wurde "losgelassen" usw. übermittelt.


    (Teil-)Programmcode wird in kleine Teile zerlegt, die man nun in der Programmzykluszeit einfach unterbringen kann.

    So wird der gesamte (Teil-)Programmcode mit N-Durchläufen einer Programmzykluszeit abgearbeitet.

    73 de Uwe
    DC5PI

  • DL7BJ, DC5PI

    Hallo ihr Programmierer,

    ihr krittelt etwas am Keyboard-Keyer-Code von W8BU herum, weil er die "unsägliche" delay() Funktion benutzt.

    Ich habe mir den Code angeschaut und finde nur drei Verwendungen:

    delay(ditPeriod); delay(msWait); delay(100);

    „Alle Wege führen nach Rom.“

    Mag sein, dass es aus akademischer Sicht alternative Funktionen gibt, die ein paar Millisekunden sparen.

    Wir reden hier über einen Codeumsetzer, bei dem zeitunkritisch Signale von Hand über eine Tastatur eingegeben werden.

    Der Sketch verwendet nur 54980 Bytes (20%) des Programmspeicherplatzes.

    Ich bin kein Programmierer, aber ich meine, die Kritik an der Verwendung der delay(); ist hier weit hergeholt.

    Bleibt Cool, 73, Roland, DF8IW ;)

    ***Ich baue selbst, also bin ich.***

  • Moin Roland,

    Mag sein, dass es aus akademischer Sicht alternative Funktionen gibt, die ein paar Millisekunden sparen

    darum geht es aber nicht! https://randomnerdtutorials.co…e-arduino-delay-function/


    Blocking functions sind auf Microcontrollern und unter Multitasking Systemen einfach nur Mist, das hat man vor Jahrzehnten schon nicht gemacht. Vor allem, weil Arduino in der Umgebung millis() für die einfache Anwendung liefert. Wenn man das schon lernen möchte, dann gleich richtig und Hände weg von delay()!


    73, Tom

  • Hallo Tom,

    ok, Du hast mich überzeugt.

    Der Link liefert die ausführliche Erklärung.

    Ich werde von nun an delay(); vermeiden :)

    Danke, Roland, DF8IW

    ***Ich baue selbst, also bin ich.***

  • Der Link liefert die ausführliche Erklärung.

    Hab' ihn mir auch mal angesehen und durchgelesen. Find die Erklärung(en) dort gut.

    73 Michael, DF2OK.

    ~ AFU seit 1975 ~ DARC ~ G-QRP-Club ~ DL-QRP-AG ~ AGCW ~ FISTS ~ QRPARCI ~ SKCC ~

    "Der Gesunde weiß nicht, wie reich er ist."

  • Moin,


    das ist fein!


    Wobei der Code in dem Link für die Verwendung von millis() auch wieder so ein gutes Beispiel ist, wie umständlich das manchmal mit Arduino Lösungen dargestellt wird.

    Bei allen neueren ATMega Controllern geht das simpler und schneller, z.B.Pin 13 vom Arduino Uno (PortB, Pin PB5) zu schalten. Man muss bei einem Blinklicht nicht wissen, ob der gerade an oder aus ist, einfach umschalten langt.

    Code
    if (currentMillis - previousMillis >= interval) {
        // save the last time you blinked the LED
        previousMillis = currentMillis;
        PORTB ^= (1<<PB5);   
      }

    73, Tom

  • @ DK5BU

    Hallo Ralf,

    ich habe Deine Schaltung nachgebaut und Dein Bascom-Programm verwendet.

    Mit einer Tastatur Cherry G84-4100LCADE-0 führte ich an einem TS-590 erste CW-QSOs:


    - Ich bekomme hörend nur QRS hin. Meine Handschrift an einer Handtaste ist genauso schlecht, wie auf einem Blatt Papier :)

    Geben mit einer elektronischen Taste, die exakte Punkte und Striche erzeugt, erfordert Übung, so dass in der Aufregung beim Geben einer 5 schon mal 6 Punkte rausgehen...Dagegen bin ich mit einer Tastatur im Zweifingersystem vertraut- meine Diplomarbeit schrieb ich noch eigenhändig auf einer mechanischen Schreibmaschine. Ich muss sagen, es macht Spaß, mit Deinem Code-Umsetzer zu arbeiten. Es findet sich immer ein netter OM, der auf QRS eingeht. Der Pufferstring erlaubt es, schneller zu schreiben, als zu senden- die Zeichen werden dann "gemütlich" nacheinander abgearbeitet. Bequem: Mit F4-F9 kann ich Standardtext ausgeben, wie Stationsvorstellung, Wetter u.s.w.


    - Du speist Deine Schaltung mit 3xAA. Als Batterieschoner hast Du einen Powerdown vorgesehen, der nach 10 min eintreten soll. Leider erreiche ich den Powerdown nie, weil vermutlich meine Tastatur ungefragt etwas in den Puffer schreibt, so dass die Bedingung Loop until Pufferstring <> "" vorzeitig erfüllt ist und das Programm weiter läuft. Vorschlag: Überwachen des Key-Ausgangs (Pin7): Wenn kein Signalwechsel an dem Ausgang, ist der OM eingeschlafen und Powerdown kann kommen?


    - Du schaltest die Tastatur mit HIGH an Pin6 ein. Meine Tastatur zieht ca. 10 mA. Nach dem Einschalten oder Drücken der Start-Taste an Pin1 blitzen die 3 LED der Tastatur auf, so dass kurzzeitig ca. 40 mA abverlangt werden. So werde ich, wie von Dir vorgeschlagen, an Pin6 einen Schalttransistor einfügen.


    - Mit F3 sollen die WPM ausgegeben werden. Ich erhalte nach WPM 3 Striche ohne Pause gefolgt von 3 Punkten, dann 2 Ziffern, wie z.B. 14. Die 3 Striche und Punkte kann ich nicht erklären?


    - Wie gibst Du verbundene Zeichen, wie AR, BT, KN?


    73, Roland, DF8IW

    ***Ich baue selbst, also bin ich.***