Forum: Mikrocontroller und Digitale Elektronik Steuersignale "morsen" oder wie bei "Impulswahl" übertragen.


von Sven (elitron)


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.

von Helmut -. (dc3yc)


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?

Kommt drauf an, wie gut du im Programmieren bist. Hexenwerk ist das 
nicht!

von Carsten-Peter C. (carsten-p)


Lesenswert?

Moin,
ist es nicht einfacher Signale zur eingebauten seriellen Schnittstelle 
USART zu schicken?
Das Problem ist sicherlich weitere Strecken über TTL-Pegel o.ä. also 
einer Gleichspannung zu übertraben. Vielleicht ist das Tonwahlverfahren 
oder ein altes Modem geeignet.
Gruß
 Carsten

Beitrag #7961642 wurde vom Autor gelöscht.
von Alexander (alecxs)


Lesenswert?

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

von Jens M. (schuchkleisser)


Lesenswert?

Aber....
Warum?

Welcher Umstand erfordert es eine so schräge eigene Übertragungsart zu 
nutzen (aber ich will das so zählt nicht!)?

von Peter (pittyj)


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.

von Christoph M. (mchris)


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
}

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Sven schrieb:
> und das so langsam, dass es sogar über normale Installationsrelais
> drüber geht.

Heißt das das Relais soll für jedes Bit ein/aus schalten? Oder lediglich 
dass das Signal durch den Lastkreis vom Relais geht?

von Alexander (alecxs)


Lesenswert?

Christoph M. schrieb:
> Nicht so schwierig.

Die Decodierung ist der eigentliche Spaß. Insbesondere die Erkennung von 
Fehlern.

von Oliver S. (oliverso)


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

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

DCF77-Dekoder...

von H. H. (hhinz)


Lesenswert?

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

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Da hattest du noch Haare ;)

von .● Des|ntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

wie viele verschiedene Schaltbefehle sollen es denn sein?

von Bauform B. (bauformb)


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 ;)

von R. L. (roland123)


Lesenswert?

Oliver S. schrieb:
> Nennt sich SPI, oder I2C, oder UART, oder
> sonstwie.

UART mit 1bit/s sollte gehen. Die anderen benötigen mehrere Leitungen.

von Harald K. (kirnbichler)


Lesenswert?

H. H. schrieb:
> Ich muss da an die uralte Fernschreibertechnik denken, mit 20mA
> Stromschleife.

Das ist doch auch UART, nur mit sehr niedriger Baudrate (50 Baud), und 
mit 5-Bit-Wörtern. Die anderthalb Stopbits dürften das sein, was moderne 
UARTs als erstes verlernt hatten ...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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
von Alexander (alecxs)


Lesenswert?


von Dergute W. (derguteweka)


Lesenswert?

Moin,

Wenns exotisch und ordentlich komplex sein sollte, aber 
Relaisfreundlich: Wie waer's mit TMDS? Also nur TM, kein DS...

Gruss
WK

von Rainer W. (rawi)


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?

von H. H. (hhinz)


Lesenswert?

Harald K. schrieb:
> H. H. schrieb:
>> Ich muss da an die uralte Fernschreibertechnik denken, mit 20mA
>> Stromschleife.
>
> Das ist doch auch UART, nur mit sehr niedriger Baudrate (50 Baud), und
> mit 5-Bit-Wörtern. Die anderthalb Stopbits dürften das sein, was moderne
> UARTs als erstes verlernt hatten ...

Anderswo waren das 8 Bit, mit 110bps.

https://en.wikipedia.org/wiki/Teletype_Model_33

von Cyblord -. (cyblord)


Lesenswert?

Dergute W. schrieb:
> Wenns exotisch und ordentlich komplex sein sollte

Es soll wohl eher doof und ordentlich dämlich werden. Erdacht und 
umgesetzt von Leuten die in jeder Nachrichtentechnik Vorlesung krank 
waren. Oder schlimmer, unwissende Quereinsteiger sind die Theorie schon 
immer unnötig fanden.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Vielleicht doch einfach per Funk...

von .● Des|ntegrator ●. (Firma: FULL PALATINSK) (desinfector) Benutzerseite


Lesenswert?

Warten wir doch erstmal ab,
bis alle Salamischeiben geschnitten wurden.

von Andi M. (andi6510) Benutzerseite


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.

von Oliver S. (oliverso)


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

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Normale Installationsrelais halten die vielen Schaltspiele übrigens 
nicht lange durch! Da müßtest du schon Fernmelderelais nehmen, die dann 
auch schnell genug sind. Sind aber auch antiquarisch!

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Sven schrieb:
> Ich würde gerne Schaltbefehle von A nach B übertragen,
Dafür gibt es einige etablierte Standards!

Sven schrieb:
> dass es sogar über normale Installationsrelais drüber geht.
Welchen Sinn hat das?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.