Forum: Mikrocontroller und Digitale Elektronik AVR und Funkprotokoll


von AntonWert (Gast)


Lesenswert?

Ich möchte einige Daten zwischen 2 AVR's per Funk übertragen. Die
nötige 433MHz Hardweare hab ich schon, bin aber noch auf der Suche nach
einem guten Protokoll für die Übertragung (incl. Manchester Kodierung)
Hat da einer einen Tipp?

von Pöschi (Gast)


Lesenswert?

Hi,

eine Frage, was für Hardware nimmst du? Wollte sowas auch mal bauen.

von AntonWert (Gast)


Lesenswert?

Einfache 433 MHz Module von Conrad, die gab's damals güstig beim großen
C. Heute wohl nemme im Angebot...

von TravelRec. (Gast)


Lesenswert?

Wozu Protokoll? UART auf ca. 4000 Baud einstellen und los geht´s. Vorher
aber in´s Datenblatt der Funkmodule (Sender) gucken, die vertragen u.U.
keine 5V am Datenpin.

von AntonWert (Gast)


Lesenswert?

und was ist mit Fehlerkorrektur und von den Modulen geforderte
Mancestercodierung?

von Christoph (Gast)


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

von AntonWert (Gast)


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.

von Christoph (Gast)


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.

von Marko (Gast)


Lesenswert?

bei AM Modulen stimmt das unbedingt,
alternativ kann man aber auch FM-Module verwenden, dieschwingen nicht
aus.

von TravelRec. (Gast)


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!

von don hendi (dg3hda) (Gast)


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 ?

von AntonWert (Gast)


Lesenswert?

Meine Beiden Gegenstellen kommen sich immer näher, sind sie in Reichwete
soll ein Frage-Antwortspiel entstehen. Das alles ist aber Zukunftsmusik,
jetzt erst mal in eine Richtung...

von Marko (Gast)


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

von AntonWert (Gast)


Lesenswert?

wo gibt es diese "easy-Radio-Module"?

von Christoph (Gast)


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.

von TravelRec. (Gast)


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.

von Hans Ebberich (Gast)


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

von AntonWert (Gast)


Lesenswert?

Hab die Dinger gerade nicht vor mir, kann mich aber an keien nicht
bestückten Bauteile erinnern.

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.