Morsedecoder mit AVR Volker G. Aurich, DK3PK Mit dem Mikrokontroller ATmega16 von Atmel lässt sich ein billiger, aber leistungsfähiger Decoder für Morsezeichen verwirklichen. Dank des eingebauten Vorverstärkers werden nur sehr wenig zusätzliche Bauteile benötigt: eine LC-Anzeige, eine Mikrofonkapsel, ein paar Widerstände und Kondensatoren, zwei Taster und eventuell ein Quarz. Trotzdem ist auch bei schlechtem SNR noch ein Dekodierung möglich. Als LC-Anzeige wird eine 2- oder 4-zeilige, 16-stellige Anzeige mit einem zu KS0070B oder HD44780- kompatiblen Kontroller verwendet. Weil sich 8 Zeichen frei programmieren lassen, kann man leicht kleine, vertikale Balken erzeugen, um ein Spektrum darzustellen. Solche Anzeigen gibt es recht billig zu kaufen. Als Mikrofon wird eine einfache, kleine Elektretkapsel benutzt. Ihr Signal kann man direkt in den ATmega16 einspeisen, weil er einen eingebauten Vorverstärker besitzt. Allerdings muss man dafür einen Differenzeingang des ADC verwenden. Daher die etwas seltsame Beschaltung. Als Taktgenerator kann der im ATmega16 eingebaute RC-Oszillator mit 8 MHz dienen. Bei schlechtem SNR wird die Decodierung jedoch ein wenig besser, wenn man den eingebauten Oszillator mit einem höherfrequenten Quarz zu betreibt. Es wurde ein Quarz mit 14,7456 MHz gewählt. Dementsprechend werden zwei Arten von Dateien zum Herunterladen bereitgestellt; davon noch je eine für 4-zeilige oder 2-zeilige Anzeigen. Und bitte nicht vergessen, dass auch die Fuses im ATmega16 entsprechend geändert werden müssen! Der Stromverbrauch beträgt (ohne LCD-Beleuchtung) nur 20-30 mA. Daher werden als Stromversorgung 4 Batterien mit 1,5 Volt genommen. Eine Siliziumdiode in der Plusleitung erniedrigt die 6 Volt auf eine für den ATmega16 noch zulässige Spannung. Modus 1: Anzeige des Spektrums von 300 Hz bis 1800 Hz in 100Hz-Schritten Umschalten in Modus 2 durch Drücken auf Taster 1 Modus 2: Dekodierung des 1000Hz-Signals Umschalten in Modus 1 durch längeres Drücken auf Taster 1. Die Tonhöhe am Empfänger so einstellen, dass die LED1 im Takt der Morsezeichen blinkt. LED0 zeigt die Amplitude des 900Hz-Anteils, LED2 die des 1100Hz-Anteils an. Eine automatische Anpassung an die Geschwindigkeit ist eingebaut. Es dauert ein paar Punkte und Striche, bis sie einrastet. Sie funktioniert meist recht gut. Man kann sie aber auch abschalten und manuell eingreifen: - Langes Drücken auf Taster 2 schaltet die automatische Synchronisation ein bzw. aus. - Kurzes Drücken auf Taster 2 setzt die Geschwindikeit herab, kurzes Drücken auf Taster 1 erhöht sie. Das Mikrofon wird einfach in die Nähe des Lautsprechers des Empfängers gelegt; durch Verändern des Abstandes reguliert man die Lautstärke so, dass LED1 schön im Rhythmus der Zeichen blinkt. LED0 und LED1 sollen gar nicht oder weniger und symmetrisch aufleuchten. Eine Übersteuerung des ADC kommt dabei kaum vor, kann aber auf Wunsche durch eine LED an PD7 angezeigt werden. 4,7k +5V 1u Taster2 Taster1 10p 10p 1 PA0 40 2 PA1 39 3 38 4 37 5 36 6 35 7 PB6 34 8 PB7 33 9 32 10 VCC 1u 10k 50u 100 +5V GND 31 11 GND AVCC 30 330 LED0 LED1 LED2 12 29 1 13 28 14 PD0 PC5 27 15 PD1 PC4 26 16 PD2 PC3 25 17 PC2 24 18 PC1 23 19 PC0 22 20 PD7 21 1u 2 6 4 14 13 12 11 VDD E RS DB7 DB0 LCD DB6 DB1 DB2 DB5 DB4 VSS VO R/W 1 3 DB3 7 8 9 10 5 ATmega16 Die Anschlüsse sind so gewählt, dass man die Schaltung auf dem STK500-Board erproben kann. Allerdings muss man dann den Jumper AREF entfernen, den Jumper OSCSEL neben die Zeichen OSC setzen und einen 14,7456MHz-Quarz in die Fassung des STK500 stecken. Download Auf STK500 mit 14.7456MHz-Quarz: morsetinyXX 14MHz 4rows.srec oder morsetinyXX 14MHz 2rows.srec Fuses: Highbyte D9, Lowbyte E0 Kommando für avrdude mit STK500 an serieller Schnittstelle: avrdude -P /dev/ttyUSB0 -c stk500v2 -p m16 -U hfuse:w:0xD9:m -U lfuse:w:0xe0:m Standalone mit 14.7456MHz-Quarz: morsetinyXX 14MHz 4rows.srec oder morsetinyXX 14MHz 2rows.srec Fuses: Highbyte C9, Lowbyte EF Kommando für avrdude mit STK500 an serieller Schnittstelle: avrdude -P /dev/ttyS0 -c stk500v2 -p m16 -U hfuse:w:0xC9:m -U lfuse:w:0xef:m Mit internem 8MHz-RC-Oszillator: morsetinyXX 8MHz 4rows.srec oder morsetinyXX 8MHz 2rows.srec Fuses: Highbyte D9, Lowbyte E4 Kommando für avrdude mit STK500 an serieller Schnittstelle: avrdude -P /dev/ttyS0 -c stk500v2 -p m16 -U hfuse:w:0xd9:m -U lfuse:w:0xe4:m