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.
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!
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.
. . . . - , - - - - . , . . . . - , . . . - - , . . . . - , - - - . . , - - - - - , - - - - - , . . . . . , - - . . . , . . . . . , . . . . . , . . . . - , . . . . . , . . . . . , . . - - - , . . . . - , . . . . - , . . . . - , . . . . . , - - - - - , - - - - - , . . . . - , - - - . . , . . . . - , . . . . . , . . . . . , - - - . . , - - - - - , - - - - - , . . . . - , . . . - - , . . . . - , . . - . , . . . . - , . . . . - , . . . . - , - - - - . , . . . . - , . . . . . , . . . . . , . . - - - , . . . . - , . . . . . , . . . . - , .
Aber.... Warum? Welcher Umstand erfordert es eine so schräge eigene Übertragungsart zu nutzen (aber ich will das so zählt nicht!)?
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.
>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 | }
|
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?
Christoph M. schrieb: > Nicht so schwierig. Die Decodierung ist der eigentliche Spaß. Insbesondere die Erkennung von Fehlern.
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
Ich muss da an die uralte Fernschreibertechnik denken, mit 20mA Stromschleife.
wie viele verschiedene Schaltbefehle sollen es denn sein?
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 ;)
Oliver S. schrieb: > Nennt sich SPI, oder I2C, oder UART, oder > sonstwie. UART mit 1bit/s sollte gehen. Die anderen benötigen mehrere Leitungen.
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 ...
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
Es gibt einige Projekte https://github.com/G6EJD/ESP32-Morse-Decoder https://www.youtube.com/watch?v=9OWl8zOHgls
Moin, Wenns exotisch und ordentlich komplex sein sollte, aber Relaisfreundlich: Wie waer's mit TMDS? Also nur TM, kein DS... Gruss WK
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?
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
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.
Vielleicht doch einfach per Funk...
Warten wir doch erstmal ab, bis alle Salamischeiben geschnitten wurden.
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.
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
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.