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.
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
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 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.
...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.
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 ...
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.
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.
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?
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 ...
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.
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.
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.
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!