Morse-Übungsgenerator mit Mikroprozessor

  • Hallo Wolf,


    Vielleicht ist der Begriff Paddle nicht richtig, ich mache ja kein CW, aber das war die Vorgabe von Daniel nur "Ein" und "Aus" zu erkennen, die "dit" und "dah" Länge wird vom Bediener über seine Gegegeschwindigkeit definiert.


    Oder meinst du, wie es im µP kodiert wurde ?


    .

  • Hallo Uwe,
    ich meinte ein 2-armiges-Paddle. Alle mir bekannten Lösungen benötigen dafür 2 Pins. Bei einem einarmigem Paddle wäre es natürlich möglich mit einem Kontakt auszukommen.


    72 de Wolf, DL2WRJ

  • Hallo Wolf,


    dieses Projekt ist ein Übungsgenerator, der sauber und klickfrei einen Ton generiert. Du kannst sogar wählen, welchen Ton Du haben willst. Aber das wars. Sicher lässt er sich auch zu einem Keyer (Elbug) erweitern. Statt LED ließe sich ein Pin für die andere Taste anschließen. Aber dann muss es auch Leute geben, die das auch umsetzen wollen. Weder Uwe noch ich brauchen einen Elbug.


    Wenn Du möchtest, kannst Du den PK4 Keyer nehmen. Und sollte Dir der Ton von diesem Keyer nicht gefallen (bisher habe ich keine Klagen gehört), dann kannst Du den PK4 an unseren Übungsgenerator anschließen. Und schon hast Du einen tollen Keyer mit einem tollen Ton.


    73 Daniel DM3DA

  • Hallo Wolf,


    Missverständnisse sind normal, vor allem bei solchen Projekten - und gerade, wenn sie auf so einem Forum besprochen werden. Oft führt das zu großartigen Ergebnissen. Zum Beispiel könnte ja wirklich jemand die Idee aufgreifen, den Tongenerator zu einem Keyer zu entwickeln.


    Das hatte ich in meinem Post oben gemeint. Ich habe jetzt beim Lesen den Eindruck, dass das nicht richtig herüber kommt. Bitte entschuldige.


    73 Daniel DM3DA

  • Hallo Daniel,


    die anti Plopp-Funktion habe ich heute auch schon eingebaut und das gesamte Programm noch weiter optimiert, bzw. fehlerhaften Code entfernt. Der WDT als 16ms Timerinterrupt ist wieder draußen, da er hat nur Probleme gemacht. Ich leite nun einen 1ms Takt vom Timer0 ab, er ist für die Ausgabefrequenz zuständig.
    Das ist etwas 'fummelig', da dieser Timer für jeden Frequenz einen anderen Zählerwert erhält und sich somit das gesamt Timing ändert.
    Da noch so viel gerecht werden soll, habe ich als Zeitkonstante den Mittelwert der Ausgabefrequenzen :
    660 Hz, 570 Hz und 750 Hz gewählt.


    Ich hänge Dir die beiden Python-Scripte daran, die verwendeten Funktionen kannst Du sicherlich schnell erkennen.


    Zu den Scripten:
    sine_pwm_down.py erzeugt 8 abkingende Schwingungen und belegt 8 * 128 = 1024 Byte.
    sine_pwm_up.py erzeugt 6 ansteigende Schwingungen und belegt 6 * 128 = 768 Byte.


    Im atTiny85 werden deshalb mit allen Programmteilen 3819 Byte Flash belegt.


    Code
    text   data bss dec hex filename
       3770  2 47   3819 eeb main.elf


    Der Begrüßungstext "de0508" wird noch 'hard' ausgegeben und mit der 'soft' Funktion klingt ein dit und dah ganz anders !


    .

  • Kann man anhand der Auflösung der Sinusstzpunkte und des D/A den Klirrfaktor bestimmen?
    Erfüllt der Generator damit überhaupt die HiFi Norm?
    Entspricht der Ton klangphysiologisch den Anspruch an ein wohltemperiertes Dit-dah
    Kann man zwischen Dur- und Moll umschalten?


    Das ist ja wohl das Mindeste was man verlangen kann.

    "For every complex problem there is an answer that is clear, simple, and wrong" (H.L. Mencken)

  • :D:D:D:D 73 Daniel



    Kann man anhand der Auflösung der Sinusstzpunkte und des D/A den Klirrfaktor bestimmen?
    Erfüllt der Generator damit überhaupt die HiFi Norm?
    Entspricht der Ton klangphysiologisch den Anspruch an ein wohltemperiertes Dit-dah
    Kann man zwischen Dur- und Moll umschalten?


    Das ist ja wohl das Mindeste was man verlangen kann.

  • Hallo Günter,


    ja klar, wir takten den PWM mit 500.000kHz und haben eine Sample-Rate von immer hin: 84,210 kHz .


    Oh ha.


    Bsp. 1:
    660Hz wird mit 84,210 kHz gesampelt, ein Sinus besteht aus 128 Spannungswerten, d.h.
    der Ton hat eine reale Frequenz von : 84.210 Hz / 128 = 657,9 Hz.
    Der Fehler beträgt 0,32%.


    Bsp. 2:
    570Hz
    Der interne Zählerwert beträgt: 110
    8Mhz / 128 / 110 = 568,2 Hz
    Auch hier beträgt der Fehler 0,32%.


    dit und dah und sonstiges:


    Ein dit habe ich auf 50ms festgelegt und dah = dit*3 und alle Pausen entsprechend diesem Artikel:


    http://de.wikipedia.org/wiki/Morsecode



    Ausblick:

    Ich muss euch also noch eine Audioaufnahme machen...


    .

  • Hi Daniel,
    ist schon ok, ich war nur irritiert was der Paddle-Eingang soll. Für einen Morsegenerator ist das alles ok.



    72 de Wolf, DL2WRJ

  • Hallo Leute,


    hier ein Hintergrund zum "Anti-Plopp" -- der Hüllkurve. Wie sieht das gesendete Signal aus? Das erste Bild zeigt ein schnelles Dit meines K2s (Seriennummer 04271, Keyergeschwindigkeit: Spd 40, Leistung: P 1.0, Tastkopf 1:10, DSO-2090 USB, dit40.png). In Gelb habe ich die sigmoide Hüllkurve nachgezeichnet. Sie dauert ca. 9 ms.


    Das zweite Bild zeigt den Beginn eines Dits aus dem Hörspiel Pendeen Lighthouse. Das stammt von dem Computerprogramm WinMorse. Die Amplitude der Welle steigt langsam an. Die fünfte Welle ist dann voll da. Dauer ca. 7 ms.


    Das dritte Bild stammt aus dem Äther. Es zeigt ein Dit einer Conteststation. Es ist zweimal dargestellt (siehe Binaurales CW). Auch hier wieder bei der fünften Welle ist die volle Amplitude erreicht. Dabei verstellt das Rauschen die Amplituden stark.


    Das Morsetrainingsprogramm von von Beat HB9HQX verwendet meines Wissens einen völlig linearen Anstieg und Abfall der Amplitude. Weil das An- und Abschwellen sowieso nur 5 Wellen oder 8 ms dauert, ist die exakte Hüllkurve vermutlich egal. Eine sigmoide Kurve ist nur bei Hochfrequenz nötig.


    73 Daniel DM3DA

  • Hallo Daniel,


    danke für die Klarstellung und die Grafiken.


    Ich habe bisher mit verschieden langen Zeiten resp. Schwingungen experimentiert und nun 6 Sinus-Schwingungen gewählt.


    Bei f= 660Hz entsprechen 6 Sinus-Schwingungen exakt 9ms = 1/660s * 6.


    Als Hüllkurven-Funktion habe ich nun endgültig die Sigmoide-Funktion festgelegt.


    Hier die Definition der Funktion sig(t):


    Code
    sig(t) = 1/(1+exp(4.0 - t*1.25))


    mit t E {0, 1, .., 5}


    Damit ist das Ein- und Ausschwingen symmetrisch.


    im atTiny85 werden nun 3607 Byte Flash-Speicher belegt, also können wir noch einen atTiny45 verwenden !


    Sind wir nun Fertig ?
    .

  • Danke Daniel,


    jetzt fehlt bei Dir nur noch die Hardware !


    Mit dem Schaltplan ist der Aufbau dann kein Problem.


    Das Hex-File sende ich Dir bei Nachfrage zu. Ich will den code noch etwas optimieren..


    .

  • Hallo miteinander,
    ich arbeite gerade an einem ähnlichen Projekt, allerdings PIC-basierend (12F1822) und bin hier
    im Forum über eure Diskussion gestolpert.
    Was man meiner Meinung nach vermeiden sollte ist die niederohmige Beschaltung der Ausgänge für
    den Lautsprecher. Zum einen verletzt man damit die Grenzwerte für die Port-Belastung, zum anderen
    verzerrt man das mühsam per Sinus-Tabelle zusammengebaute Signal wieder. Der Grund liegt darin dass
    die Einschaltwiderstände der Ausgangstransistoren unterschiedlich sind. Nach Masse schaltet ein N-,
    zur Versorgung hin ein P-Kanal-FET. Der P-FET ist normalerweise deutlich hochohmiger (Faktor 1,5-2,5)
    Also kommt man um ein kleinen Verstärker kaum herum. Mit dem Vorteil dass das Tiefpassfilter deutlich
    hochohmiger werden kann. Und damit auch der/die Kondensator(en) deutlich kleiner.



    73 Dieter DD5DD

  • Hallo Dieter,


    danke für den Hinweis. Für mich war der Hauptvorteil eines Verstärkers immer das Poti, mit dem ich die Lautstärke einstellen kann :) Aber das mit den unterschiedlichen Transistorcharakteristiken ist sehr interessant!


    Was machst Du denn in Deinem Projekt?


    73 Daniel DM3DA

  • Hallo Daniel ,
    bei mir geht es um eine kapazitive Tastatur, deren Betätigung ich über einen Piezo akustisch anzeige.
    Und die PWM einfach auf den Piezo ausgeben hört sich ziemlich schlecht an :(
    Aus dem Grund spiele ich gerade mit den verschiedenen Hüllkurven herum.


    Gruß aus Wuppertal


    Dieter DD5DD

  • Was man meiner Meinung nach vermeiden sollte ist die niederohmige Beschaltung der Ausgänge für den Lautsprecher.....
    ......... Der Grund liegt darin dass die Einschaltwiderstände der Ausgangstransistoren unterschiedlich sind. Nach Masse schaltet ein N-, zur Versorgung hin ein P-Kanal-FET. Der P-FET ist normalerweise deutlich hochohmiger (Faktor 1,5-2,5)

    Das ist richtig. Die Treiberleistung ist unsymmetrisch und damit auch die Spannungsabfälle am Innenwiderstand der Fets. Außerdem sinkt der maximale Ausgangsstrom noch mit der Betriebsspannung. Offensichtlich ist der On-Widerstand der Ausgangsfets bei niedriger Betriebsspannung höher. Eine Tabelle mit den maximalen Ausgangsströmen nach "H" und nach "L" der diversen Tinys hänge ich mal an. Der 2313 ist gegen die anderen ein richtiges Kraftpaket.


    Spendiert diesem tollen Käfer als Option noch einen LM386 als Gefährten und und das Ganze wird rund und geht auch mit hochohmigen Kopfhörern


    73, Günter

  • Hallo Günter und Mitleser,


    das es noch einen kleine PA geben wird, wurde am Anfang des Threads doch beschrieben.
    Da ich 'faul' war und nur eine Testversion für mein Programm aufgebaut habe, fehlt das natürlich.


    Jeder kann sich hier frei entfalten und der Ausgangsleistung wählen, die er braucht.


    Daniel hat da schon seine Vorstellungen.


    Ich bin mit der Software, bis auf kleine Fehler, fertig.


    Edit
    Die Software läuft nur auf atTiny45 oder atTiny85, deshalb ist die Betrachtung anderer nicht relevanter µP unbrauchbar.


    Die angehängten Bilder zeigen die realen max. Ströme und Spannungen des tiny85, nur als Info, ich will darüber nicht diskutieren.


    Der Sinus (PWM) Ton soll nur auf einem Breitbandlautsprecher ausgegeben werden, und das leistet meine Beschaltung.


    .

  • Auf jeden Fall ist es ein Klasse-Projekt.
    Mit einem 8-Beiner so eine einfache und doch komfortable Lösung hinzukriegen. Das reizt gerade zum sofort Nachbauen.
    Stellt ihr das HEX-File und die erforderlichen Fuse-Settings ein, wenn ihr fertig seid?
    73, Günter

    "For every complex problem there is an answer that is clear, simple, and wrong" (H.L. Mencken)