Morse-kodare.

Bakgrund

På den gamla goda C64-tiden, i slutet av 80-talet, så gjorde jag ett program för att enkelt kunna ”sända” morsekod. Detta gjordes genom att i högtalaren spela upp morsekoden samtidigt som reläet till bandpelaren var tänkt att kopplas istället för en telegrafinyckel. Eftersom jag var mer intresserad av programmeringsbiten än av radiobiten så provades det aldrig ”skarpt”, men jag lyssnade långa stunder på hur programmet arbetade.

Morse-standarden

Samuel Morse

Det första Morse-alfabetet uppfanns av Samuel Morse och det första patentet beviljades den 20 juni 1840 och bestod endast av siffror. Om ett textbudskap skulle sändas så fick både avsändare och mottagare ha en lista med numrerade ord och bokstäver för att kunna avkoda meddelandet.

Telegrafnyckel

Senare kom Morse på att man även kunde representera bokstäver direkt och kommunikationen blev nu lättare eftersom man kunde sända vilket meddelande som helst och inte längre var begränsad till de listor man gjort. Det första steget mot en standard var taget men Morses kod såg på denna tid inte alls ut som den kod vi känner igen idag.

Efter ytterligare justeringar så antog man 1865 ett nytt alfabet med bestämda inbördes proportioner.

Längden på en punkt får fungera som referens till övriga delar. Längden på ett streck är lika lång som tre punkter. Pausen mellan varje tecken är också som tre punkter och pausen mellan ord är lika lång som 5 punkter. Detta kallas för det internationella morse-alfabetet. Efter ytterligare revideringar så ökas pausen mellan ord till sex punkter.

Maskinell sändning

Sir Charles Wheatstone

Internationella morsealfabetet

Under andra världskriget uppfanns system för att med hjälp av maskiner, s.k. transmittrar, sända meddelanden med morse-alfabetet. Det är främst två system som används.

Den första varianten uppfanns av Sir Charles Wheatstone1och använder sig av en hålremsa för att sända tecknen via en Wheatstone-transmitter.

Denna metod kunde med lite förfining av apparaturen komma upp i 600 ord per minut, en svindlande hastighet med tanke på att det för att klara ett första klass-certifikat för yrkestelegrafister endast krävdes 25 ord per minut. Wheatstones metod kom att dominera telegrafi över oceankabel.

Wheatstone-perforator

Den andra metoden byggde också på en pappersremsa men här användes istället fotoceller för att läsa av svarta streck på papperet.

I februari 2004 gjordes den första ändringen av morse-alfabetet sen andra världskriget när man införde tecknet snabel-a.

Sir Charles Wheatstone uppfann även. Wheatstone-bryggan som används inom elektroniken. Dessutom uppfann han concertinan. 1859 blev han invald som utländsk ledamot i den svenska Vetenskapliga Akademien.

Nedan syns att Wheatstone-remsan använde sig av två rader med hål för morsekoden och en rad med hål i mitten för matning av remsan. Ett hål i den övre raden betyder en punkt och ett hål i den nedre raden ett streck.

Wheatstones perforator för att framställa hålremsor hade bara tre tangenter, en för att göra en punkt, en för att göra ett streck och en för att mata fram remsan lika långt som mellanrummet mellan teckendelarna. För att använda denna apparat så krävdes någon som redan kunde telegrafi för att göra en remsa.

Wheatstone-remsa

 

Frederick William Creed

Runt sekelskiftet 1800-1900 så uppfann Frederick William Creed ett annat system att sända morse-kod. Istället för att en operatör kodade om text till morsekod så hade hans perforator ett vanligt tangentbord som man skrev in texten i klartext på. Maskinen översatte varje tangenttryckning till motsvarande tecken i morse-alfabetet och stansade automatiskt ut de hål i remsan som krävdes. Detta gjorde att man inte längre behövde utbildade telegrafister. På mottagarsidan hade man en annan perforator som skapade en exakt kopia av det meddelande som togs emot. Detta gjorde att man snabbt kunde vidaresända meddelanden. Tidigare hade man varit tvungen att manuellt koda en ny remsa för vidaresändning. Runt 1920 kom det även en automatisk dekoder som när den matades med en remsa skrev ut meddelandet i klartext på ett vanligt papper. Dessa maskiner var tillsammans föregångare till teleprintern.

Creed-remsan gick i en jämn hastighet från höger till vänster. Den övre raden på remsan är ”till” och den undre raden är ”från”.

Creed-remsa

Creed Perforator modell 7

 

Projektet

Arduino Duemilanova

För enkelhetens skull så valde jag att göra detta på en Arduino. Dels för att det är enkelt och dels för att även en nybörjare ska kunna genomföra detta projekt.

Den här versionen, som jag skrev 2011, tar emot en sträng via serieporten och blinkar sedan detta meddelande med en lysdiod på Arduino-kortet. samtidigt som morsetecknen skrivs till serieporten. Se listningen längst ner för det kompletta programmet eller ladda ned det här.

Programmets funktion

Först och främst så definieras de morsetecken vi ska använda i ett par arrayer, här är det från a – z samt från 0 – 9. Sen definieras en tidsenhet till 75 millisekunder och därefter längden på punkt, streck samt mellanslag. Ett par temporära variabler definieras också.

I funktionen setup() så initieras den seriella kommunikationen. Pin 13 som har en LED kopplad till sig sätts som utgång och sen skrivs ett meddelande ut som talar om att programmet är klart att ta emot en sträng.

Programloopen börjar med att kolla om det finns något tecken i seriebufferten och om det finns så läses ett tecken in. Om tecknet är ett tillåtet tecken (a-z/0-9) så dras ASCII-värdet för det första tecknet i respektive array bort så att vi istället för en bokstav har ett värde mellan 0 – 26 för bokstäverna eller 0 – 9 för siffrorna. Detta värde används sen för att indexera vilket morsetecken i arrayen som bokstaven motsvarar.

När detta är gjort så initieras en loop som går genom morsetecknet ett tecken i taget och kollar om det är en punkt eller ett streck. Beroende på detta kallas finktionerna playdot() respektive playdash() för att visualisera tecknet. Detta görs tills strängen med morsetecknet är slut och sedan hoppar vi tillbaka för att kolla om det finns något mer tecken i bufferten och börjar om proceduren.

Jag kopplade också in en liten summer till ben 13 för att få lite ljud och spelade in en liten videosnutt som visas härunder.
 

 

// Här ligger morsetecknen i en array så att man snabbt
// kan slå upp dem.

char* alphabet[] = {
  ".-","-...","-.-.","-..",".","..-.",
  "--.","....","..",".---","-.-",".-..",
  "--","-.","---",".--.","--.-",".-.",
  "...","-","..-","...-",".--","-..-",
  "-.--","--.."};

char* numbers[] = {
  "-----",".----","..---","...--","....-",
  ".....","-....","--...","---..","----."};

// tmr är längden på en punkt i millisekunder och 
// räknas som en tidsenhet.
word tmr=75;

// En punkt är en tidsenhet, streck är 3 tidsenheter 
// och ett mellanslag är 7 enheter.
word dot=tmr*1,dash=tmr*3,space=tmr*7;
char  temp;
int  i;


void setup()
{
  Serial.begin(9600);
  pinMode(13,OUTPUT);
  Serial.print("Morsekodare klar\n");
}

void loop()
{
  while(Serial.available() > 0) {
    temp=Serial.read();
    if (temp>='a' and temp<='z') {
      for (i=0;i<strlen(alphabet[temp-'a']);i++) {
        Serial.print(alphabet[temp-'a'][i]);
        if(alphabet[temp-'a'][i]=='.') {
          playdot();
        } 
        else {
          playdash();
        }
        delay(dot);
      }
    }
    if (temp>='0' and temp<='9') {
      for (i=0;i<strlen(numbers[temp-'0']);i++) {
        Serial.print(numbers[temp-'0'][i]);
        if(numbers[temp-'0'][i]=='.') {
          playdot();
        } 
        else {
          playdash();
        }
        delay(dot);
      }
    }
    if (temp=' ') {
      Serial.print("   ");
      delay(space);
    }
  }
}


void playdot(void) {
  digitalWrite(13,HIGH);
  delay(dot);
  digitalWrite(13,LOW);
}

void playdash(void){
  digitalWrite(13,HIGH);
  delay(dash);
  digitalWrite(13,LOW);
}


 

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

*

* Copy This Password *

* Type Or Paste Password Here *

5 596Spamkommentarer blockerade hittillsSpam Free Wordpress

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

Live data
Besökskarta
Login-box
  • Login
    Login

Ditt IP-nummer:
54.162.96.196