Steuersignale "morsen" oder wie bei "Impulswahl" übertragen.

OP #7961612
Lesenswert?

Hi.

Wie schwierig ist es, mit einem Mikrocontroller zu "morsen" bzw ähnlich wie bei Impulswahl etwas zu übertragen und das dann auch wieder zu decodieren?

Ich würde gerne Schaltbefehle von A nach B übertragen, und das so langsam, dass es sogar über normale Installationsrelais drüber geht.

Eigentlich müsste ich doch nur zählen, wie viele ms das Signal ansteht, um dann zwischen "Lang" und "kurz" zu unterscheiden.

Ein Signal zwischen 75 und 125 ms Länge (100 ms Soll) = kurz = logisch 0 Ein Signal zwischen 175 und 225 ms Länge (200 ms Soll) = logisch 1 Ein Signal mehr als 275 ms lang (300 ms Soll) = Block Ende

Man könnte nun z.B. 4 bis 6 Bit als "Adresse" nehmen und 4 oder 2 Bit für den "Befehl".

Die empfangenen Bits werden dann nacheinander auf ein Schieberegister geschrieben. Mit einem 300 ms langen Signal wird das Schieberegister dann ausgewertet und wieder auf 0 gesetzt.

Mit einer Siemens Logo kann ich zumindest schonmal Zahlen zwischen 1 und 99 übertragen, indem ich wie bei einem alten Telefon "Impulswahl" mache. Die erste Zahl wird übertragen, nach einer 300 ms Pause wird die zweite Zahl übertragen. Mit 2 Zählern werte ich das dann aus. Allerdings gibt es keine Adressen oder Befehle, sondern bestimmte "Telefonnummern" lösen vorgefertigte Aktionen aus.

Allerdings sind Siemens Logos zu teuer und ich würde das gerne viel viel günstiger machen.

Beitrag #7961642 wurde vom Autor gelöscht.
#7961651
Lesenswert?

. . . . - , - - - - . , . . . . - , . . . - - , . . . . - , - - - . . , - - - - - , - - - - - , . . . . . , - - . . . , . . . . . , . . . . . , . . . . - , . . . . . , . . . . . , . . - - - , . . . . - , . . . . - , . . . . - , . . . . . , - - - - - , - - - - - , . . . . - , - - - . . , . . . . - , . . . . . , . . . . . , - - - . . , - - - - - , - - - - - , . . . . - , . . . - - , . . . . - , . . - . , . . . . - , . . . . - , . . . . - , - - - - . , . . . . - , . . . . . , . . . . . , . . - - - , . . . . - , . . . . . , . . . . - , .

#7961682
Lesenswert?

Du machst einen Interrupt auf die Signalleitung. Bei jedem Wechsel wird die Zeit einen Millisekunden-Timers in einem Fifo gespeichert. Ein zweiter Prozess wertet das Timing aus und macht 0en und 1en aus den Zeiten. Sollte jeder Student aus dem ersten Semester schaffen.

#7961683
Lesenswert?

Wie schwierig ist es, mit einem Mikrocontroller zu "morsen" bzw ähnlich wie bei Impulswahl etwas zu übertragen und das dann auch wieder zu decodieren?

Nicht so schwierig. Du könntest es so versuchen:

1
/*
2
 * Pulswahl ähnlicher Sender für Relais
3
 * 
4
 */
5

6
#define PULSPIN 13
7

8
#define HIGH_MS 200
9
#define LOW_MS 100
10
#define PAUSE_MS 100
11
#define END_MS 300
12

13
// adr=0..63, cmd=0..3
14
void send(uint8_t adr,uint8_t cmd)
15
{
16
  uint8_t val=(adr<<2) + (cmd&0x0F);
17
  for(int n=0;n<8;n++)
18
  {
19
    digitalWrite(PULSPIN,HIGH);
20
    if(val&0x80) delay(HIGH_MS);
21
    else delay(LOW_MS);
22
    
23
    digitalWrite(PULSPIN,LOW);
24
    delay(PAUSE_MS);
25
    
26
    val=val<<1;
27
  }
28
  delay(END_MS);
29
  
30
}
31

32
void setup() 
33
{
34
  pinMode(PULSPIN,OUTPUT);
35
}
36

37
void loop() 
38
{
39
  // adr=0..63, cmd=0..3
40
  uint8_t adr=0,cmd=0;  
41
  send(0,0);
42
  send(0,3);
43
  send(63,0);
44
}
#7961699
Lesenswert?

Sven schrieb:

Wie schwierig ist es, mit einem Mikrocontroller zu "morsen" bzw ähnlich wie bei Impulswahl etwas zu übertragen und das dann auch wieder zu decodieren?

Nicht schwierig. Weil das aber eins der absoluten Basics in der Mikrocontroller-Kommunikation ist, haben die Dinger in den allermeisten Fällen so eine oder auch mehrere Morseeinheiten schon eingebaut, die das alles für dich übernehmen. Nennt sich SPI, oder I2C, oder UART, oder sonstwie. Je nach Lust und Laune, ode auch nach den Anforderungen, passt da eins. Immer.

Such dir einfach eine aus.

Oliver

#7961713
Lesenswert?

Sven schrieb:

...normale Installationsrelais... Ein Signal zwischen 75 und 125 ms Länge (100 ms Soll)...

Sind solche Relais so schnell? Der sendende uC kann die Zeit sehr viel genauer und konstanter erzeugen. Aber ob die Toleranz für verschiedene Relais, neu oder alt, bei schwankender Spannung und im Sommer wie im Winter reicht? Der Pegelwandler beim Empfänger macht ähnliche Fehler, eher größere. Der muss filtern, analog wäre ungenau aber viel besser als per Interrupt (wie kommt man überhaupt auf so eine Idee?).

Du könntest statt kurz-lang NRZ verwenden, das spart dem Relais viele Schaltspiele. Und mit Glück kannst du beim Empfänger das Hardware-UART nutzen.

H. H. schrieb:

Ich muss da an die uralte Fernschreibertechnik denken, mit 20mA Stromschleife.

Die waren aber viel schneller ;)

Moderator (Firma: Titel) Persönliche Seite #7961733
Lesenswert?

Sven schrieb:

ich würde das gerne viel viel günstiger machen.

In welcher Stückzahl soll das "günstiger" gehen? Denn wenn du erst noch lernen musst, einen µC so zu programmieren, dass er auch noch mit Übertragungsfehlern (z.B. duch prellende Relaiskontakte) zurechtkommt, dann kann das schon einiges an Arbeitszeit kosten. Und wenn das dann z.B. nur 2x aufgebaut wird und EMV tauglich aufgebaut werden soll und zudem noch irgendwelche 230V Lasten geschaltet werden sollen, dann relativieren sich die Kosten recht schnell.

dass es sogar über normale Installationsrelais drüber geht.

Was sind hier "normale Installationsrelais"? Sind das mechanische Relais mit unterschiedlichen Anzugs- und Abfallzeiten, sodass sich eine Verzerrung der Pulszeiten ergibt?

Mit einem 300 ms langen Signal wird das Schieberegister dann ausgewertet und wieder auf 0 gesetzt.

Dabei immer im Hinterkopf behalten, dass es auch sowas wie Störungen gibt. Deine Auswertung kommt pfeilschnell durcheinander, wenn sie nur die Flankenwechsel berachtet und nicht auch noch unplausible Flanken ignoriert.

Carsten-Peter C. schrieb:

ist es nicht einfacher Signale zur eingebauten seriellen Schnittstelle USART zu schicken?

Das wäre auch mein erster Ansatz: einfach eine hinreichend langsame Baudrate auswählen. Mit dem richtigen µC und einem 32kHz Takt lassen sich problemlos Übertragungsraten im 1 Baud-Bereich erreichen. Dann gibt es zumindest schon eine gewisse Störunempfindlichkeit durch die bei bei µC-UARTs übliche 16-fache Überabtastung eines übertragenen Bits.

: Bearbeitet durch Moderator
#7961742
Lesenswert?

Sven schrieb:

Man könnte nun z.B. 4 bis 6 Bit als "Adresse" nehmen und 4 oder 2 Bit für den "Befehl".

Das hat dann nichts mehr mit Morsen zu tun. Das Morsealphabet verwendet für die einzelnen Zeichen unterschiedlich lange Codeworte, weil es darauf ausgelegt ist, die Übertragung zeitlich zu optimieren und vom Menschen dekodiert zu werden. Der Kodierung der Zeichen liegt eine Häufigkeitsstatistik der Zeichenverwendung zu Grunde. Bei reiner Zahlenübertragung wird daher zur Zeitoptimierung beim Morsen auch eine andere Kodierung verwendet, als im Mischtext.

UARTs für maschinelle Zeichenübertragung wurden nicht ohne Grund erfunden. In Fernschreibern wurde das schon vor 100 Jahren mit mechanischen UARTs und Elektromagneten gelöst, Dauer zur Übertragung eines Zeichens inklusive Framing: 150...165ms, je nach Baudrate (später teilweise auch schneller).

Als Test für die Übertragung wurde bei Fernschreibern eine Folge "RYRYRY..." verwendet. Mit welcher Baudrate schafft das deine Übertragungsstrecke bei Verwendung vom Baudot-Code?

Persönliche Seite #7961805
Lesenswert?

ich habe mal einen kleinen Mikrocontroller per Stratosphaerenballon auf die Reise geschickt. Der hat mir fortlaufend seine Postion per Funk im Morsecode durchgegeben. War sehr praktisch, weil man bei der Fahrt in Richtung vermutetem Landeplatz dann direkt die aktuelle Hoehe (und damit die Zeit bis zur Landung) auf 100m genau gehoert hat, wenn man nur bei den richtigen zwei Ziffern aufgepasst hatte.

Was ich damit sagen will: Der Morse Code ist fuer das Dekodieren durch das menschliche Gehirn gemacht. Mikrocontroller koennen das auch, aber das ist unnoetig komplex.

Wenn Du wirklich durch Relais hindurch Signale schicken willst, dann mach was ganz Einfaches. Beispielsweise innerhalb von 5 Sekunden ein einzelner ein-Sekunden-Puls bedeutet "Einschalten" und drei Pulse bedeuten "Ausschalten". Das haelt den Aufwand beim Dekodieren in Grenzen und tut seinen Job.

#7961820
Lesenswert?

Andi M. schrieb:

Was ich damit sagen will: Der Morse Code ist fuer das Dekodieren durch das menschliche Gehirn gemacht. Mikrocontroller koennen das auch, aber das ist unnoetig komplex.

Stimmt. Ist nur für den TO völlig irrelevant, da der den Begriff „Morsen“ als Synonym für „irgendwelche ein-aus-Impulse“ nutzt. Morsen in seiner ursprünglichen Bedeutung istdem vermutlich nicht mal mehr geläufig.

Oliver

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren