Super-simpler Sensorkeyer mit Sinus-Ausgang

  • Moin, moin,

    die meisten Keyer erzeugen einen Rechteck-Mithörton und klingen schaurig, wenn man das Signal in einen breiten NF-Kanal einspeist - in meinem Fall ist es Internet CW, es gilt aber z.B. auch für CW-Übungsnetze auf UKW-FM.


    Ich hatte mir vor ein paar Monaten für ICW einen "schnellen Hack" einfallen lassen. Zwei ATTiny13; einer als Keyer, der andere als PWM-Sinusgenerator:

    http://www.elektronik-labor.de/AVR/icw-morsetaste.html

    Inwischen habe ich die beiden Funktionen in einem Controller zusammengefasst und um eine Sensor-Lösung ergänzt. Die neue Version sollte eigentlich auf einem ATtiny24 basieren; da der Code aber recht kompakt war, fand ich es spannender, ihn auf ein Minumum zu reduzieren und in einen ATtiny13 zu quetschen:

    https://www.elektronik-labor.de/AVR/T13-ICW-Sensorkeyer.html

    Mit 5 zusätzlichen Bauteilen erhält man eine Version mit Tastausgang zur Ansteuerung von CW-Sendern und mit verbesserter Einstrahlfestigkeit. Die Sensorlösung scheint recht HF-fest zu sein. Ein Tester verwendet eine endgespeiste Antenne, die direkt im Shack endet; bei 100W konnte er keine Beeinträchtigung durch HF feststellen.

    Eine etwas komfortablere Version mit einem ATtiny24 (bzw. ATtiny84) soll aber auch noch folgen.

    Ist alles Freeware unter der WTFPL ( http://www.wtfpl.net/about/ ) und mit der Demo-Version von Bascom-AVR (https://www.mcselec.com) zusammengeschustert.


    73,
    Ralf



    Edit: Link zu MCS Electronics korrigiert, tnx to Michael.

  • der andere als PWM-Sinusgenerator:

    Moin Ralf,


    schöne Schaltung zur Tonerzeugung. Kommt auf meine To-Do-Liste für die Rente. ;)

    73 Michael
    ~ DARC ~ G-QRP-Club ~ DL-QRP-AG ~ AGCW ~ FISTS ~ QRPARCI ~ SKCC ~

    Edited once, last by DF2OK: Anpassung. ().

  • Hallo Ralf,

    Deine Entwicklung ist einfach der Hammer !!!!:)

    Seit vielen Monaten denke ich immer wieder mal über eine Lösung zu diesen Thema nach.

    Vom Ausbildungsstand (Alter) her, habe ich immer nach einer analogen Lösung mit RC-Filtern

    gesucht und auch vieles praktisch erprobt.
    Aber der Erfolg war mäßig oder die Schaltung war von der Anzahl der Bauelemente mechanisch

    dann einfach zu groß.


    Und deshalb kann ich nur sagen: Respekt !!!


    Beste Grüße aus dem Sauerland

    Rolf

  • Hallo,


    ich hatte für unser Projekt auch einen PWM zu 1750Hz Sinusgenerator mit etwas aufwändigerer PMW-Filterung vorgesehen: 1750Hz Sinusgenerator mit µC


    Mit der AVR-Hardware Auslegung des "Super-simpler Sensorkeyer mit Sinus-Ausgang" bin ich nicht ganz zu frieden.

    Ich setzte hier die AVR Hardware guidelines um:

    noch ein 100nF zwischen Vcc und Gnd, ich würde mir noch Gedanken zu EMV und EMVU Einstrahlung, -streuung machen.


    Ich würde den Eingängen zu DIT und DAH noch einen kleinen Kondensator 1nF spendieren, um weniger Einfluss durch den notwendigen Aufbau zu erhalten und mögliche HF Einstrahlung, Streuung besser zu unterdrücken.

    Evtl. noch ein RC Filter bei Störungen vorsehen.


    Die Sensortastenabfrage ist ein über den ADC ein interessante Lösung.

    Warum aber mit Admux = 1 auf einen offenen Eingang ADC1 (PB2) umgeschaltet wird, ist unklar.

    Logischer wäre es für mich, diesen Pin fest auf Gnd zu legen und anschließend den ADC-Eingang auf einer der Sensortasten zu schalten.


    Dem Trimmer R3 (270k) würde ich noch einen kleinen Kondensator (10nF) zu ADC0, Gnd nach schalten, so dass Störungen und mögliche Schleiferproblem gefiltert werden können.


    Man sollte auch erwähnen, dass in dieser Schaltung der #RESET Eingang auch für das Lesen des ADC0 benutzt wird. Für eine ISP Programmierung wird #RESET auf Gnd gelegt.

    Darauf wird im Link https://www.elektronik-labor.de/AVR/T13-ICW-Sensorkeyer.html natürlich hingewiesen.


    Ich würde den #RESET Eingang nicht parallel für den Reset und das Lesen des ADC0 nutzen.

  • Hallo Rolf,

    danke für die Blumen ;)

    Aber ich kann eigentlich gar nicht programmieren. Ich verstosse gegen alles, was richtige "Softies" mal gelernt haben und beherrschen. Die rümpfen über meinen Spaghetti-Code nur die Nase.

    Aber für kleine Programme auf kleinen Mikrocontrollern reicht es; und die "Sünden" (wie z.B. die Verwendung globaler Variablen) sind zwar verpönt, aber haben den Vorteil, dass man rätselhaften Problemen wie z.B. gelegentlichen Stack-Überläufen aus dem Weg geht.

    Bei grossen Programmen fliegt einem so eine Vorgehensweise rasch um die Ohren, aber grosse Programme "kann" ich eh' nicht. Man muss sich halt seine Nische suchen ;)

    73,
    Ralf


    PS: bei der Gelegenheit mal eine Frage an die Mitleser:

    Ich verschicke inzwischen gelegentlich programmierte ATtinies per Post an OM, die mit Mikrocontrollern nix am Hut haben. Misslich ist es, wenn sich Verbesserungen oder Fehlerbereinigungen ergeben haben und ich dann eine Version mit geänderter Firmware hinterschicken muss....

    Eigentlich würde ich gern ein paar USBasp-Programmer mitschicken, damit die Nutzer sich die neue Version selbst auf die vorhandenen ATTinies flashen können.

    Problem: ich verwende avrdude unter Linux. Gibts auch für Windows, aber man muss wohl einen Windows-Treiber installieren, und die meisten Leute bekommen Panik oder Hautausschlag, wenn sie etwas auf der Kommandozeile tun sollen ;)

    Mit Windows kenne ich mich nicht aus. Bin es leid mich mit Lizenzschlüsseln, Online-Aktivierungen und dergleichen Hindernissen herumzuärgern und mich dann auch noch ausspionieren zu lassen (da schlage ich mich lieber mit den kleinen Unzulänglichkeiten freier Software herum).

    Zu Windows XP-Zeiten hatte ich manchmal eine GUI von myAVR im Einsatz:

    http://shop.myavr.de/index.php…oad.sp.php&suchwort=DL112

    Die fand ich recht übersichtlich. Weiss jemand, ob die es auch unter Windows 10 "tut" und Fremd-Programmer unterstützt? Die Version ist immerhin schon 6 Jahre alt.

    Oder gibts da was besseres?

  • Hallo Ralf,


    hattest Du schon mal Kontakt zu Bootloadern?


    Ich verwende auf Attiny85 (Attiny45) gerne den Fastbootloader von Peter Dannegger (peda):


    https://www.mikrocontroller.ne…tBoot_von_Peter_Dannegger


    Der benötigt dann maximal 512 Worte und stellt u.a. eine 1-Pin serielle Schnittstelle zur Verfügung.


    Über einen USB-TTL-Wandler (FTDI FT232 Chip) kann man einen einfachen Programmer zur Verfügung stellen.


    Für Windows gibt's dann auch noch ein Frontend. Für Linux nutzen wir natürlich die Komanndozeile und ein Script.

  • @ Uwe:


    Der ADC-Eingang ist nicht offen, er wird zu Beginn des Programms konfiguriert:

    Code
    Ddrb = &B0000_0111
    Portb = &B1110_0000


    Ja, die von Dir vorgeschlagenen Kondensatoren kann man in der Schaltung verteilen; die ATtinies sind aber recht gutmütig und ich habe bewusst auf die "Angstkondenatoren" verzichtet, um das "bare minimum" an Aufwand rauszukitzeln.


    Über Bootloader könnte ich in der Tat mal nachdenken, für den Attiny13 wäre das zwar nix; der ist randvoll, aber für die nächste Version werde ich wohl einen ATtiny84 nehmen; da wäre das in der Tat ein Thema; danke für den Tip.


    PS: Ja, mit dem Dannegger-Bootloader hatte ich mal kurz herumgespielt, aber ihn nie wirklich eingesetzt.


    73,

    Ralf

  • Hallo Uwe,


    bin zu doof, das da rauszulesen. Mein Attiny 13 ist auch zu doof dazu ;)


    Habe es gerade mit einem kleinen Programm getestet, das die ADC-Werte seriell ausgibt. Wenn ich DDRB auf Null Eins setze, spuckt der zureordnete ADC-Eingang nur Nullen aus, wenn ich den Finger an den Pin halte.


    Hätte mich sehr gewundert, wenn es anders wäre, ich telegrafiere schon wochenlang mit der Schaltung herum.


    73,

    Ralf

  • Hallo Ralf,


    mir taugt das, was du da tust! Ich bin auch meistens noch mit dem Bascom mit ganz alter Seriennummer unterwegs und mit AVRStudio oder myAVR ProgTool, das übrigens unter Win10 einwandfrei läuft!


    73 de Egon

  • Hallo,

    ich benutze unter WIN10 auch den "MYAVR light" mit dem zugehörigen Programmiertool unter Bascom, geht problemlos.

    Meine Heim-Sensortaste ist nun seit über 10 Jahren im Einsatz (mit einem AT90-S2313 noch, insgesamt 7 Sensorflächen für Tastung und Funktionen) und LiIon-Telefonakku. Läuft einwandfrei, Nachladen erst nach ein paar Monaten erforderlich.

    Ich habe auch die Probleme bei konventioneller Anordnung der Paddlesensoren gehabt, da es keinen Druckpunkt gibt, wenn man was fühlt, hat die Taste schon reagiert. Deshalb benutze ich nebeneinander angeordnete Sensorflächen und wische mit dem Finger. Bei meinem BCR und QCX habe ich die Flächen ins/ans Gehäuse integriert, platzsparend und unempfindlich bei Transport.

    Ich würde auch keine Zusatzkondensatoren an den Sensoren vorsehen, da sie die Kapazitätssprünge durch Berühren deutlich verringern. Dann eher einen nicht zu großen Widerstand Richtung AVR-PIN und auf die internen Schutzdioden am AVR verlassen, wie oben gemacht. Folie über den Sensorflächen macht sich beim Wischen gut.

    Einziger Nachteil der Wischmethode aus meiner Sicht: Mit feuchten Fingern rutscht es holprig, entsprechend ist das Ergebnis.

    vy 73 Reiner

  • Hallo, auch ein reiner Sinuston, mag er noch so sauber sein, erzeugt ein fieses Knacken beim Ein- und Ausschalten. Das kennen wir von Telefonen. Knack-Tuuut-Knack ;-).


    Man muss die Amplitude von Null auf Maximum so erhöhen, dass keine Knackgeräusche entstehen. Beim Ausschalten entsprechend. Das geht sehr schön, wenn man den Verlauf einer Cosinuscurve nimmt. Bei der CW-Tastung wird das ja auch so gemacht.


    73, Holger

  • Moin moin,

    ich hatte am Wochenende keinen brauchbaren Internet-Zugang; daher erst jetzt eine Sammelantwort:


    @Egon, OE8EPK

    Danke für die Rückmeldung zum myAVRProgTool; muss mal ausprobieren, ob meine "Kundschaft" damit zurechtkäme.

    Ja, Bascom ist schon recht alt und schleppt einige Altlasten mit sich rum, aber die versuchen halt, zu sich selber kompatibel zu bleiben, und das finde ich so wohltuend daran. Auch 15 Jahre alter Sourcecode lässt sich oft klaglos kompilieren; manche AVR-GCC-Quelltexte oder Arduino-Quelltexte fliegen einem erst mal um die Ohren, wenn sie nur 3 oder 4 Jahre alt sind - je nach verwendeter Compiler-Version

    Das ist mir zu wenig "nachbausicher" für Einsteiger und Anfänger. Und BASCOM-Quelltexte sind leichter zu lesen (und zu schreiben).


    @Reiner, DL8LRZ:

    Stimmt, mit Sensoren ist man wesentlich freier in der Gestaltung des Paddles. Muss ich mal ausprobieren; habe aber den Verdacht, dass das Wischen bei Geschwindigkeiten jenseits von 25 WpM zu lange dauert.

    AT90-S2313 bzw. die moderneren ATTiny2313 haben keinen ADC, d.h, Deine Version nutzt Digitaleingänge und wertet die Hi-Low-Schaltschwelle der CMOS-Eingänge aus. Das schien mir etwas zu "wacklig"; interessant, dass es offenbar auch bei Anwesenheit von HF gut genug funktioniert.

    Auch an Dich danke für die Rückmeldung zum myAVRProgTool.


    @Holger, DL9HDA:

    Ja, stimmt; darum mache ich das so wie von Dir beschrieben. Ist ja ziemlich naheliegend, aber ich hatte damit ein Rad neu erfunden, denn erst später hatte ich etwas über ein Verfahren gelesen, das den bombastisch klingenden Namen "raised cosine" hat.

    Bei der ersten Lösung mit zwei getrennten ATTiny13 hatte ich in den Sinusgenerator zusätzlich noch eine Schiebe-Operation eingebaut, um die Anstiegs-Flanke und die Abfall-Flanke weicher zu machen.

    Die erste Vollwelle wird z.B. mit einem Achtel der Maximalampitude durchlaufen, die nächste mit einem Viertel, die übernächste mit der Hälfte. Am Ende des Zeichenelements geht es dann andersrum. Gibt zwar keine ideale Hüllkurve, ist aber besser als nix.

    Auf dem ATtiny13-Sensorkeyer war dafür kein Platz mehr, der klingt daher etwas härter.

    73,
    Ralf