PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Elektronische Morsetaste mit Mega32



Hans55
14.02.2009, 14:44
Hallo!
Ich möchte mir eine Morsetaste bauen die bei einer festgelegten Geschwindigkeit immer gleichlange Punkte und gleichlange Striche ausgibt.

z.B. Solange Taste 1 betätigt wird, werden defin. Punkte (TÖNE) ausgegeben. Wenn Taste 2 betätigt wird, werden defin. Striche (TÖNE) ausgegeben.
Dabei ist ein Strich genau 3xPunkt, die Pause dazwischen auch ein Punkt.

Wie könnte ich das mit dem Ton machen damit er immer eine exakte Länge hat und wie am besten die beiden Taster (Morsepaddle nach Links= Punkte, nach Rechts = Striche) abfragen?

Die eine Taste mit INT0 und die andere Taste auf INT1 legen? Könnte man das so machen?
Ich bin schon tagelang am suchen, finde aber nix was passt.
Wie fange ich am besten an?

Danke im vorraus!
Gruß

MelMan
14.02.2009, 15:22
Frag doch einfach die INTs ab und lasse einen Timer laufen, welcher dir immer die "Tonlängen" mitzählt.

Sauerbruch
14.02.2009, 17:06
Moin!

Wenn...

...der Controller sonst nix tun muss,
...es keine "Squeeze"-Taste werden soll (d.h. Punkt- und Strichtaste nicht gleichzeitig gedrückt werden können),
...die Gebegeschwindigkeit nicht variabel sein soll
...und gleich ein fertiger Ton rauskommen soll,

kann man es ganz einfach so machen:

(PORTB.0 = Ton-Ausgang, PINB.1 = Punkt-Eingang, PINB.2 = Strich-Eingang, Tasten gehen nach Masse, PullUp-Widerstände aktiviert)



Config PinB.0 = Output 'Ausgangs-Pin für den Ton
PortB.1 = 1 'PullUp aktiviert
PortB.2 = 1 'PullUp aktiviert

Do

If PinB.1 = 0 then 'Punkt-Taste aktiviert:
Sound PortB.0, X, Y 'Kurzer Ton...
Waitms Z '...und Pause
End if

If PinB.2 = 0 then 'Strich-Taste aktiviert:
Sound PortB.0, 3X, Y 'dreimal so langer Ton...
Waitms Z '...und Pause
End if

Loop


Der Befehl "Sound, X, Y" erzeugt einen Ton, dessen Frequenz der Prozessortakt/Y ist (d.h. je kleiner Y, desto höher der Ton), und der für X Schwingungen ausgegben wird (d.h. je größer X, desto länger der Ton). Du müsstest also nur etwas mit den Werten X und Z (für Waitms) rumspielen, damit die Zeiten stimmen.

Und wenn Du Interese an einem Code für eine "richtige" Squeeze-Taste hast, schick´ mir doch eine PN. Das war nämlich eins meiner letzten Projekte =P~

73,

Daniel

Hans55
15.02.2009, 11:16
Hallo!
Ich habs im Prinzip schon genau so gemacht wie du im Beispiel dargestellt hast. Es piept zwar je nach Tastendrucklänge, aber als Morsekeyer kann man das nicht bezeichnen.
Das Ausgangssignal sollte auch die Punkt-Pause-Strich-Pause immer in exakt gleicher Länge ausgeben.
z.B. bei 100 Buchstaben/Minute wäre ein Punkt= 50ms lang/ Strich = 150ms, Pause=50ms.
Wenn ich jetzt die Taste kurzer betätige sollte trotzdem ein 50ms Puls rauskommen.
Wenn ich den Punkt- Paddle länger als 50ms betätige sollten eine Reihe von 50ms Pulsen mit 50ms Pause rauskommen.
Da kaomm ich nicht weiter und steh am Schlauch.

Daniel, ich hab dir eine PN geschickt, sehe die aber nicht im Ausgangskorb.
Hast du was bekommen?
Genau sowas hätte ich auch vor zu basteln. Ich hab in den letzten Jahren immer wieder begonnen und jedesmal frustriert eingestellt, weils nix getaugt hat.
Ich verwende seit Jahren den Memory-Keyer ETM9COG-X3 der ja das alles schon kann. Mehr Spaß würde aber eine selbstgebaute Taste machen, Hi.
vy73 de Hans

Dirk
15.02.2009, 11:46
Hallo Hans55,

Ich verwende seit Jahren den Memory-Keyer ETM9COG-X3 der ja das alles schon kann.
Wenn man die Funktion des Memory-Keyers (besonderes Stichwort: "Memory"!) nachbauen will, braucht es etwas mehr Programmieraufwand.
Eingangsseitig (= Tasteneingabe) müssen die Striche und Punkte "aufgezeichnet" werden in Form eines Puffers.
Ausgangsseitig (= Impulse/Töne) muss in einem regelhaften Rhythmus der Puffer ausgelesen werden und in die entsprechenden Impulslängen umgesetzt werden.
Beide Prozesse verlaufen asynchron zueinander, wobei die Ausgangsseite einen genauen Grundrhythmus (z.B. 50ms) hat, die Eingangsseite ist vom Eingaberhythmus des Nutzers abhängig.

Ich würde die Eingabetasten an interruptfähige Pins legen und so den Puffer über ISRs auffüllen.
Die Ausgabeseite könnte man mit einem Timer 50ms realisieren: Alle 50ms wird der Puffer ausgelesen. Steht da ein Strich drin, wird ein Ton/Impuls bis zum übernächsten Timer-Tick (150ms) ausgegeben, danach noch ein weiterer Tick für die Pause abgewartet. Dann wird die nächste Stelle im Puffer gelesen und je nach Punkt/Strich verfahren.

... so etwa im Groben ... :-k

Gruß Dirk

vohopri
15.02.2009, 11:53
Hallo OM,

Damit so eine Taste wirklich Freude macht, sollte die Punkt und Strichergänzung vorhanden sein. Rollover und Insert sollten sauber ablaufen. Die Jambic Modi dagegen sind Geschmackssache und Gewohnheit.

Die Algorithmen kenn ich gut, aber auf MC hab ich das noch nie implementiert.

Beim Drücken der Punkttaste wird eine Punktreihe gestartet. Beim Loslassen wird wenn Zwischenraum, die Punktreihe beendet. Wenn gerade ein Punkt ertönt wird nur ein Flag gesetzt, dass bei Punktende ausgewertet wird und veranlasst, die Punktreihe dann zu beenden. Striche gehen analog.

Ich hoffe das hilft mal ein Stück. Sonst eben weiter fragen.

vy 73 55,
Hannes

Sauerbruch
15.02.2009, 13:54
@Hans:

´Habe Dir gerade eine PN geschickt...

Gruß,

Daniel

Hans55
15.02.2009, 14:36
Danke erstmal Daniel!!
Gruß
Hans

Dirk
15.02.2009, 16:21
Habe Dir gerade eine PN geschickt...

... und jetzt? Ich würde auch gern etwas lernen! O:)

Gruß Dirk