Forum: Mikrocontroller und Digitale Elektronik RFM12: erste gehversuche, welches Protokoll


von Michael S. (Gast)


Lesenswert?

Servus zusammen,

ich hab hier noch 3 so RFM12 Funkmodule rumliegen und könnte sie in 
einem meiner Projekte gebrauchen. Allerdings frage ich mich gerade, wie 
ich das bidirektional hinbekommen soll?
Anforderung ist: 3 Funkmodule (später vielleicht mal mehr) sollen 
miteinander kommunizieren können.
d.h. jeder soll von jedem Daten anfordern können.

Jetzt frage ich mich wie das zu lösen sein könnte.

Meine Idee: Alle sind immer auf Empfangen eingestellt und warten auf 
gültige Daten. Sobald einer was "sagen" möchte, prüft er ob ein anderer 
funkt (ob er also gerade etwas empfängt) und wenn nicht, schaltet er den 
Transmitter ein und sendet los.
Jetzt frage mich aber, wie ich Datenverluste umgehen kann, falls 2 sich 
gleichzeitig überlegen zu senden.
Kann mir hier jemand helfen?
Ich suche schon einige Stunden erfolglos, bzw. finde lediglich 
eindirektionale "Protokolle".

Vielen Dank
Michael

von Lehrmann M. (ubimbo)


Lesenswert?

1) Mikrocontroller ist Pflicht
2) Datenbaltt lesen - da steht alles drin.
3) Anfangen das ganze für 1 Modul zu realisieren. Daran sind schon 
einige gescheitert.
4) Dann kann man sich überlegen wie man für mehrere Module vorgehen 
möchte.

Michael S. schrieb:
> Jetzt frage mich aber, wie ich Datenverluste umgehen kann, falls 2 sich
> gleichzeitig überlegen zu senden.

Darum sollte man das Datenblatt lesen.

von test (Gast)


Lesenswert?


von Jan K. (pit1)


Lesenswert?


von R. W. (quakeman)


Lesenswert?

Ich habe mal selber ein einfaches Protokoll für die RFM12 geschrieben 
gehabt, womit ich zwischen zwei RFM12 fehlertolerant Daten austauschen 
kann.

Es sind ein paar Schutzmechanismen eingebaut wie CRC, Transmit-Retry mit 
pseudo-zufälligem Delay, Acknowledge, Not-Acknowledge, Paketzähler für 
die Erkennung doppelter Pakete nach einem Retry.
Ich hatte auch schon mal angefangen eine Adressierung zu implementieren 
um mehr als zwei Funkmodule miteinander zu vernetzen. Aber bis jetzt ist 
diese noch nicht drin, da ich noch keine Motivation/Verwendung für mehr 
als zwei RFM12 hatte. ;)

Der Code ist für einen LPC935 (8051er) geschrieben, wobei aber nur in 
den Low-Level Funktionen spezielle Controller Eigenschaften verwendet 
werden. Das eigentliche High-Level Protokoll ist vollständig unabhängig 
vom verwendeten Controller geschrieben.

Der Code ist unter [1] zu finden. Leider ist er, wegen der Vielzahl an 
#ifdef Anweisungen für diverse Debug Ausgaben, nicht mehr so schön zu 
lesen. Aber wenn man diese entfernt sollte er recht gut verständlich 
sein. Ich habe den Code auch gut dokumentiert.

Vieleicht gibt dir der Code ja Anregungen für ein eigenes Protokoll. Ich 
denke, es macht nicht viel Sinn sich nur nach fertigen Lösungen 
umzusehen. Lieber ein paar Anregungen holen und selber ein Protokoll 
programmieren. :)

Ciao,
     Rainer

[1] 
https://quakeman.homelinux.net/viewvc/uVision/trunk/Library/RFM12_Funktionen.c?view=markup

von Leo (Gast)


Lesenswert?

Fox Mulder schrieb:
> [1]
> https://quakeman.homelinux.net/viewvc/uVision/trun...
1
Bei allen relevanten Dateien die File Properties geändert damit der SVN Header gefüllt wird. Den SVN Header ebenfalls in diesen Dateien zu Beginn eingefügt
2
3
    1 /*********************************************************************
4
    2 * $HeadURL$
5
    3 * $LastChangedBy$
6
    4 * $LastChangedDate$
7
    5 * $LastChangedRevision$
8
    6 *********************************************************************/
Hat ja super funktioniert. ;-)

von R. W. (quakeman)


Lesenswert?

Leo schrieb:
> Hat ja super funktioniert. ;-)

Finde ich auch. Ist sehr praktisch so ein Header. ;)

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.