AVR und Funkprotokoll

Gast #255161
Lesenswert?

Bei Amplitudenmodulierten Signalen muss künstlich ein Pegelwechsel
erzeugt werden, da die Module mit statischen Zuständen nicht klar sind.
Gängigstes Mittel ist eben der Manchestercode, mit dem man ja auch schon
eine einfache Überprüfung auf Richtigkeit der empfangenen Daten
vornehmen kann.

Einfach solche Module an die serielle Schnittstelle (sei es nun PC mit
Pegelkonverter oder µC) funktioniert also nicht.

Anbei zwei Routinen, die die Daten Manchester-kodieren bzw.
-dekodieren.

unsigned char restore(void)
{
  unsigned char result = 0;

  //decode highbyte
  if (0x00 != (highbyte & 0x80)) result+=0x80;
  if (0x00 != (highbyte & 0x20)) result+=0x40;
  if (0x00 != (highbyte & 0x08)) result+=0x20;
  if (0x00 != (highbyte & 0x02)) result+=0x10;

  //decode lowbyte
  if (0x00 != (lowbyte & 0x80))  result+=0x08;
  if (0x00 != (lowbyte & 0x20))  result+=0x04;
  if (0x00 != (lowbyte & 0x08))  result+=0x02;
  if (0x00 != (lowbyte & 0x02))  result+=0x01;

  return result;
}  //end of restore

void manchester(unsigned char Bitarray)
{
highbyte=0x00;
lowbyte=0x00;

if (0x00 != (Bitarray & 0x80)) highbyte+=0x80; else highbyte+=0x40;
if (0x00 != (Bitarray & 0x40)) highbyte+=0x20; else highbyte+=0x10;
if (0x00 != (Bitarray & 0x20)) highbyte+=0x08; else highbyte+=0x04;
if (0x00 != (Bitarray & 0x10)) highbyte+=0x02; else highbyte+=0x01;

if (0x00 != (Bitarray & 0x08)) lowbyte+=0x80; else lowbyte+=0x40;
if (0x00 != (Bitarray & 0x04)) lowbyte+=0x20; else lowbyte+=0x10;
if (0x00 != (Bitarray & 0x02)) lowbyte+=0x08; else lowbyte+=0x04;
if (0x00 != (Bitarray & 0x01)) lowbyte+=0x02; else lowbyte+=0x01;
}

highbyte und lowbyte müssen natürlich als globale Variablen deklariert
werden.

Gruß
Christoph
Gast #255162
Lesenswert?

Seh ich das richtig, dass du die Datenmenge damit (wie bei Manchester
eben üblich) verdoppelst?
Wieviele oder besser wie lange vertragen solche Module einen statischen
Pegel? Ich meine man könnte sie ja auch mit neiedrigerer Baudrate fahren
und dann liegen die Pegel ja auch laenger an.
Gast #255163
Lesenswert?

Ja, die Datenmenge, die letztlich übertragen wird, wird verdoppelt.

Ich verwende Module von Aurel. Laut Hersteller sollte der Wechsel mit
mindestens 50Hz erfolgen. Demnach sollte er bei ein paar kHz keine
Probleme mit statischen Zuständen haben, doch eine solche Übertragung
ist  auf jeden Fall nicht empfehlenswert, da
-viele Empfänger statische Pegel nicht detektieren können
(Pendenempfänger)
-eine Datenübertragung ohne jeglich Codierung extrem anfällig für das
immer vorhandene Empfangsrauschen ist.

Zum Funk-Protokoll sei noch gesagt, dass man in jedem Fall eine
Präambel (ein paar Mal irgendein dafür reserviertes Byte)
vorrausschicken sollte, damit sich der Empfänger auf die richtige
"Lautstärke" einstellen kann und die serielle Schnittstelle sich
einpendelt und das Startbit auch wirklich als diese erkennt.
Gast #255165
Lesenswert?

Ich verwende auch die Aurel-Module (AM) und habe bei einem
kontinuierlichen Datenstrom von 4000 Baud (USART -> Start  9  gerade
Parität / Stop) keinerlei Übertragunsprobleme innerhalb der Reichweite.
Bei ständigem Senden von 0-Daten reicht das einzelne Stop-Bit (knapp
400Hz) immer noch aus, um die Module nicht aus dem Konzept zu bringen.
Funktioniert ohne Kodierung mit eben den Rohdaten einwandfrei (am Oszi
getestet und seit 3 Monaten 24/7 am laufen).
Grüße!
Gast #255166
Lesenswert?

Ein relativ handliches Protokoll, x-fach bewährt, ist das AX.25, es wird
im AMateurfunk zur Datenübertragung eingesetzt. Mit CRC und Adressierung
und Flußsteuerung, aber du kannst dir ja wenn du auf einer
Eigenproduktion bestehst einfach nur was abgucken.
(Evtl. auch bei EAX.25)
Was dem aber je nach Anwendung fehlt ist eine FEC, da wirst du
eventuell durch googlen nach "Reed-Solomon" schlauer (Ein Verfahren,
bei dem man ein paar Bit mehr überträgt als sein müssten, aber wenn
etwas schiefgeht
kann man mit deren Hilfe die Fehler finden+korrigieren. In der Praxis:
Wenn mal paar Bit durch Rauschen verloren gehen, werden die mithilfe
der Zusatzdaten restauriert.)

abzugucken bei SITOR Seefunkfernschreiben, AMTOR
Amateufunkfernschreiben, oder wenns ein komplexeres Beispiel sein darf
DVB :-)

Ja, auch WLAN und DVB und Bluetooth und all dieses "moderne Zeuch"
ist nur ein verfeinertes Fernschreiben (manche alte Herren haben jetzt
vielleicht so ein klackern im Erinnerungsohr...)

Grundfrage, die du dir stellen sollst: Müssen sich die beiden
Gegenstellen "unterhalten" oder genügts wenn eine Daten rausschreit
und die andere lauscht ?
Gast #255168
Lesenswert?

für Duplexbetrieb würden sich die easy-Radio-Module eignen,
brauchste auch kein extra Protokoll für, einfach auf
RX-TX-Schalten und per UART mit 19200 die Datenrein schieben
und fertig. Sind aber nicht ganz billig, irgendwas
zwischen €30-€40 musste dafür rechnen
Gast #255170
Lesenswert?

Der englsiche Hersteller ist LPRS (www.lprs.co.uk), deutsche
Distributoren sind die Firma Telemeter (www.telemeter.de) oder zum
Beispiel Farnell (www.farnell.de).

Ansonsten mal auf der Distributoren-Liste des Herstellers schauen.
Gast #255171
Lesenswert?

Wie wär´s denn mal mit ausprobieren? Wenn Du schon die "Aurels" da
hast, was hindert Dich, Daten zu übertragen und die Tauglichkeit zu
testen?! Wenn´s geht, kannst Du jegliche Suche einstellen und
losbasteln, wenn nicht, kannst Du ja immer noch weitergucken.
Gast #255172
Lesenswert?

Hallo Anton,

Sind bei deinem Sendemodul freie Lötstellen? (An welchen ein
SMD-Kondensator sein kann). Bei mir ist einer auf der Packung
abgebildet , aber am Modul ist er nicht eingelötet.

Mfg Hans

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