Forum: Projekte & Code bidirektionale RS232 Funkbrücke mit RFM12


von Bart (Gast)


Lesenswert?

Hallo,
kurze Frage zu einer passenden Antenne: Funkmodule gehen soweit gut, 
allerdings nur auf sehr kurze Distanz, Meter oder so.
Meine Antennen sind Koax-Kabel,
insgesamt 34cm lang, Isolierung aber bis zur Hälfte abgemacht, d.h.17cm 
-> lambda/4. Der Innenleiter ist an das Funkmodul angeschlossen, die 
Isolierung mit GND verbunden, passt das so? Baudrate ist übrigens glaube 
20kBaud. Warum ist die Reichweite hier so gering??
Viele Grüße
Bart

von Jan K. (pit1)


Angehängte Dateien:

Lesenswert?

Hallo,

habe für dieses tolle Projekt zwei kompakte Eagle-Layouts entworfen.
"SFI-Test" ist eins mit DIP-Mega8 Fassung + RFM12 2mm Steckverbindern.
Die LEDs sind hier solche mit eingebautem Vorwiderstand.
Das in etwa Funkmodul-kleine "SFI-SMD" schließlich mit SMD-Mega8 auf der 
Top- sowie dem (gespiegelten) RFM12 auf der Bottomseite.

Gruss Jan

von Ein (Gast)


Lesenswert?

Würdest du auch die Files einstellen?

von Jan K. (pit1)


Angehängte Dateien:

Lesenswert?

Bitteschön.
Möchte einige davon fertigen lassen,
bei Interesse evt. Sammelbestellung
möglich.

von cyberlink (Gast)


Lesenswert?

Hallo,
Ist es eigentlich möglich, anstatt des RFM12 auch das RFM12BP 
anzuschliessen?
Weil ich habe 4 Stück von denen Rumliegen und suche einen 
verwendungszweck dafür (ausser einstauben...)

mfg, cyberlink

von Benedikt K. (benedikt)


Lesenswert?

Prinzipiell ja. Allerdings muss die Software erweitert werden, damit 
diese die TXEN und RXEN Signale ausgibt.
Weiterhin müssen natürlich noch die Vorschriften beachtet werden, da man 
mit diesen Modulen nicht in allen Bereichen einfach so senden darf.

von cyberlink (Gast)


Lesenswert?

Funktechnisch ist das kein Problem, ich habe einen komplett 
Elektromagnetisch abgeschirmten Raum zur Verfügung. Und für die wenigen 
Sekunden Testbetrieb kommt noch kein Funkmesswagen...

Zu TXEN und RXEN: Soweit ich das verstanden habe, müssen diese Pins je 
nach Datenrichtung (Senden/Empfangen) auf high gezogen werden. Wie das 
Schaltungstechnisch geht weiss ich noch nicht genau (vielleicht Pullup 
gegen GND und AVR-Pin auf Input stellen?). Aber die Möglichkeit der 
Anzeige der Senderichtung ist doch glaube ich schon in der Software 
eingebaut, müsste man also nur noch über zwei Ports ausgeben, oder?

mfg, cyberlink

von Benedikt K. (benedikt)


Lesenswert?

cyberlink schrieb:

> Zu TXEN und RXEN: Soweit ich das verstanden habe, müssen diese Pins je
> nach Datenrichtung (Senden/Empfangen) auf high gezogen werden.

Ja.

> Wie das
> Schaltungstechnisch geht weiss ich noch nicht genau (vielleicht Pullup
> gegen GND und AVR-Pin auf Input stellen?).

Einfach direkt die 3,3V Signale vom AVR auf TXEN/RXEN.

> Aber die Möglichkeit der
> Anzeige der Senderichtung ist doch glaube ich schon in der Software
> eingebaut, müsste man also nur noch über zwei Ports ausgeben, oder?

Ja. In der Software gibt es Kommentare wie RX ON, TX ON, RX OFF usw.
An diesen Stellen müssen die Pins entsprechend geschaltet werden.

von cyberlink (Gast)


Lesenswert?

Danke Benedikt!

Mit diesen Informationen ist das ja supereinfach zu realisieren (Dank 
deiner Software).

Nochmal zu den 3,3V Signalen: Wie sähe dass dann in C aus, den den 
Ausgang PB1 auf eben VCC zu bringen und umgekehrt auf GND? Bin in C noch 
nicht ganz so erfahren wie in Bascom...

mfg, cyberlink

von Daniel (Gast)


Lesenswert?

Ich verstehe nicht ganz warum der Schaltplan DIP Version und Softconfig 
so verschieden sind was RTS/CTS betrifft. Kann man das deaktivieren um 
nur mit RX und TX zu arbeiten? Was ist mit der FFIT Leitung?

von Benedikt K. (benedikt)


Lesenswert?

Daniel schrieb:
> Ich verstehe nicht ganz warum der Schaltplan DIP Version und Softconfig
> so verschieden sind was RTS/CTS betrifft.

Es gibt keinen Unterschied, RTS ist vorgesehen aber nicht implementiert.

> Kann man das deaktivieren um
> nur mit RX und TX zu arbeiten?

CTS wird immer ausgegeben, man kann das Signal ignorieren, muss dann 
aber damit rechnen, dass Daten verloren gehen wenn man zu schnell 
sendet.

> Was ist mit der FFIT Leitung?

Die ist vorgesehen wird aber auch nicht verwendet.

von Daniel (Gast)


Lesenswert?

Vielen Dank Benedikt.
Kann man auch einen anderen Pin für CTS konfigurieren oder muss es genau 
der Pin sein?

von Benedikt K. (benedikt)


Lesenswert?

Man kann jeden Pin verwenden, man muss diesen nur auf Ausgang setzen und 
in der uart.h den Pin einstellen.

von Tobi W. (todward)


Lesenswert?

Hallo,
reicht es eigentlich aus in Bascom die Funktion
1
SPIOUT Kommando(1) , 1
bzw.
1
SPIIN Kommando(1) , 1
zu verwenden, um mit dem RFM12 zu kommunizieren?
Bastelbär hatte ja in einem anderen Thread einen Code gepostet, der mit 
einer Software SPI funktioniert.

Eine kleiner ablauf der kommunikation wäre nicht schlecht, wenn den 
jemand beschreiben würde.

Gruß
Tobi

von Florian (Gast)


Lesenswert?

Hi,

ich habe mir jetzt den ganzen Thread durchgelesen (puhh, Gehirnschmelze) 
und wollte mal nachfragen ob ichs richtig verstanden hab: Kann ich jetzt 
einfach ne Rs232 Verbindung mit den Boards ersetzen, indem ich statt dem 
Max232 dieses Board anschließe? Muss ich da nix mehr in den Code extra 
konfigurieren? Ich programmiere in Bascom (duck und weg) und kann leider 
dadurch das Programm nicht nachvollziehen.

Danke schon mal im Vorraus.

Mfg,
Florian

von Timo P (Gast)


Lesenswert?

Hallo!!

Sehr interessante Beiträge. Mittlerweile gibt es ja viele sinnvolle 
Anmerkungen. Gibt es nun eine aktuelle SW-Version (ggf. auch Hardware), 
die alle Neuerungen vereint?

Wenn ja, wäre eine erneute Veröffentlichung super!

von Timo P (Gast)


Lesenswert?

Angenommen, man nimmt sich die neuste Version zur Brust. Welche 
Maßnahmen sind zur Inbetriebnahme notwendig?

Ich habe folgendes gemacht: Softconfig und USE_686 defined. Kann ich nun 
Daten über die UART einspeisen und versenden? (meine gewünschte 
Baudrate, sowie der Kanal sind ebenfalls eingestellt(im Code).

von Andreas Häusler (Gast)



Lesenswert?

Hallo zusammen...

Ich möchte mich für diesen super Beitrag zum RFM12 Modul damit bedanken, 
dass ich den gesamten Text als *.pdf Dokument aufgearbeitet habe.

Die im Text vorhandenen Links funktionieren übrigens, so dass man die 
gewünschten zip Files aus dem Dokument herunterladen kann.

Vielleicht habe ich eine "Druckversion" übersehen, dann sei mir 
verziehen.

Ich hoffe, mit diesem Dokument nicht gegen jrgend eine Regel verstossen 
zu haben. Sonst bitte File wieder entfernen. Danke...

Gruss Andy

von meddie (Gast)


Lesenswert?

Hallo Leute,

das ist ja mal ein Super Beitrag. Danke an Benedikt für seine tolle Idee 
und vorallen, dass er soviel Zeit und wissen in dieses Projekt 
eingesteckt hat und es uns jetzt schenkt.

Gibt es eigentlich ein Boardlayout für die Platine zum Download für 
Eagle oder Target?

Habe schon viele diese Lösung erfolgreich nachbauen können. Wäre für ein 
kurzes Feedback sehr dankbar.

Vielen Dank im Voraus.
Gruß Eddie

von Stefan (Gast)


Lesenswert?

Hallo,

ich hätte ma eine kleine Frage zu diese tollen Projekt.
Ich benutze die Check4-Version und diese funktioniert auch soweit 
wunderbar bei mir solange ich beide Atmega8 gleichzeitig einschalte. 
Sobald ich den Empfänger später einschalte empfängt er garnichts mehr 
und der Sender sendet solange bis die maximale Wiederholungsanzahl 
erreicht ist. Wo liegt mein Fehler?

von Stefan H. (shelmschrott)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich habe den Code dieses Threads verwendet, um das 
Pollin-Funk-AVR-Evaluationsboard (v1.2) in Betrieb zu nehmen. Hat nach 
wenigen Anpassungen sehr gut funktioniert.

Hier meine Änderungen für diejenigen, die auch dieses Board nehmen:

verwendete Hardware:

* Pollin Funk-Avr-Evulationboard V1.20
* RFM12 mit 17cm-Draht-Antenne
* Atmega32 mit 16 MHz-Quarz

Änderungen in den Dateien rfm12_rs232_rxtx_check5.zip:

main.c
======
CPU-Frequenz
- #define F_CPU 10000000UL
+ #define F_CPU 16000000UL

CONFIG-Schalter  (Taster gegen 5V statt Jumper gegen GND - bei Reset 
oder Start drücken und halten)
- #define CONFIG      PIND_4
+ #define CONFIG      PINB_1

Abfrage CONFIG-Schalter in main()
- if (!CONFIG)
+ if (CONFIG)

rf12.c
======
CPU-Frequenz
- #define F_CPU 10000000UL
+ #define F_CPU 16000000UL

SPI-Pins am Atmega
- #define SDI    3
- #define SCK    5
- #define CS    2
- #define SDO    4

+ #define SDI    5
+ #define SCK    7
+ #define CS    4
+ #define SDO    6

SPI-Geschwindigkeit clk/16 statt clk/4  in rf12_init(void)
- SPCR=(1<<SPE)|(1<<MSTR);
+ SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR0);  // clk/16

leds.h
======
- #define LED_TX    PORTC_2
- #define LED_RX    PORTC_3
- #define LED_RETRANS    PORTC_1
- #define LED_ERR    PORTC_0

+ #define LED_TX    PORTD_5
+ #define LED_RX    PORTD_5
+ #define LED_RETRANS    PORTD_6
+ #define LED_ERR    PORTD_6

Anfang bekam ich nur Müll ausgegeben bis mir auffiel, dass die SPI-Speed 
auf clk/4 steht. Das ist mit 10Mhz für AVR oberste Geschwindigkeit für 
RFM12. clk/16 ist für 16 MHz OK (dürfte auch für 10 Mhz nicht zu langsam 
sein).

Das Board hat nur zwei LEDs (ich habe sie 1x gelb und 1x rot bestückt). 
Daher musste ich TX+RX und ERR+RETRANS zusammenlegen.

Einige #defines sind mehrfach in main.c und rf12.c definiert. Das 
verwirrt und provoziert Fehler. Ich denke, diese sollte man in die 
(ohnehin vorhandene) config.h auslagern. Die Hardware-nahen #defines 
wären da auch gut aufgehoben!

Grüße
Stefan

von Benedikt (Gast)


Lesenswert?

Besteht eigentlich die Möglichkeit mit der Version in diesem Thread 
mehrere Funkmodule in einem Netz zu betreiben? Ich lese zur Zeit die 
Spannung und den Alarmstatus eines Raumelders aus und sende diesen an 
ein anderes Modul zurück, das den Status auf einem LCD ausgibt. Ich 
würde jetzt gerne mehrere Rauchmelder abfragen.
Das Projekt von Florian Scherp kann dies zwar, benutzt aber einen 
ATMega16/32. Ich habe jetzt aber schon einige Boards mit einem ATMega88 
geätzt.
Was für Möglichkeiten gäbe es noch?

von Hunni (Gast)


Lesenswert?

Ich hab mal ne Grundsätzliche Frage zu deinem Funkmodul. Kann ich auch 
einfach nur TXD und RXD ohne Flusskontrolle oder ähnlichen anschließen? 
Mich interessiert das, da ich dann nämlich gerne zwei Mikrokontoller 
über dein Funkmodul labbern lassen möchte.
Gruß
Marius

von Dennis (Gast)


Lesenswert?

Hallo zusammen,

erstma vielen dank für den Code, der hier zur Verfügung steht.
Hätt da aber eine Frage. Habe zwei Funk AVR Boards von Pollin, und 
wollte den Code zur Datenübertragung nehmen. Habe da einige Änderungen 
vorgenommen, also die Ports angepasst usw. Leider kriege ich keine 
Verbindung zwischen den beiden aufgebaut. Hatte vllt. einer den Code für 
an die oben erwähnte hardware angepasst?

Danke und Gruß

Dennis

von Dennis (Gast)


Lesenswert?

Dennis schrieb:
> Hallo zusammen,
>
> erstma vielen dank für den Code, der hier zur Verfügung steht.
> Hätt da aber eine Frage. Habe zwei Funk AVR Boards von Pollin, und
> wollte den Code zur Datenübertragung nehmen. Habe da einige Änderungen
> vorgenommen, also die Ports angepasst usw. Leider kriege ich keine
> Verbindung zwischen den beiden aufgebaut. Hatte vllt. einer den Code für
> an die oben erwähnte hardware angepasst?
>
> Danke und Gruß
>
> Dennis

benutze einen atmega8, Änderungen soweit,

externe quelle:
   F_CPU 3686400UL

moduleänderungen:
   #define SDI    3  //
   #define SCK    5
   #define CS    2
   #define SDO    4


LED Änderungen
   #define LED_TX    PORTD_6 //Transmit
   #define LED_RX    PORTD_5 //Resive

SPI-Geschwindigkeit clk/16 statt clk/4  in rf12_init(void)
   SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR0);  // clk/16

Abfrage CONFIG-Schalter in main()
   #define CONFIG      PINB_1
   if (CONFIG)

möchte mit 868MHz senden, hab also USE_868 aktiviert

Übertragung funktioniert trotzdem nicht.

Gruß

von Dennis (Gast)


Lesenswert?

Hallo zusammen, mein Board läuft jetzt mehr oder weniger.
Eine weitere Frage, kennt jemand von euch das Prog RFM12_Scanner.
Kann man damit die rssi Werte auf den Monitor ausgeben?

Gruß

von Dirk M. (dirkm)


Lesenswert?

Hallo,

super Lib, funktioniert bei mir den den RFM12 Modulen einwandfrei :)

Nun stelle ich mir die Frage, ob man auch ohne großen Aufwand die 
RFM12BP-868 (500mW) Module verwenden kann?

Gruß
Dirk

von fabian27 (Gast)


Lesenswert?

erstmal wollte ich mich auch an Benedikt bedanken für seinen starken
sourcecode.

nun nachdem ich die ersten teste mit dem rfm12 erfolgreich sind habe ich
festgestellt dass manche daten die ich empfange  nicht rechtzeitig aus
dem fifo ausgelesen werden..gibts es die möglichkeit die Grösse des FIFO
buffer zu beinflussen oder ist die schon beim programm von benedikt auf
die maximale Grösse eingestellt?

vielen dank

von Heinz (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich versuche seit Wochen mein RFM-12B Modul zum laufen zu bekommen. 
Allerdings komme ich keinen Schritt vorwärts. Das Funkmodul antwortet 
anscheinend nicht auf Anfragen des Mikrocontrollers. Ich habe mit einem 
Oszilloskop ein Siganl am MOSI erkannt. Allerdings keine am MISO. Ich 
habe den internen Takt des Atmega mit 8 MHz verwendet. Um vom 2mm auf 
das 2,54mm Rastermaß zu kommen habe ich etwa 5cm lange Leitungen an das 
Funkmodul angelötet um es auf meinem Breadboard zu verwenden. Ich kann 
das Problem nicht genau lokalisieren.

Ich verwende die Software : rfm12_rs232_rxtx_check5

Atmega8L-8PU                3,3V
RFM12B DIP Rev.4.0 868MHz   3,3V  868MHz aktiviert im Sourcecode

1.Frage: Sollte ich den Takt des Moduls oder den des uC verwenden? Ich 
kann in meien Fusbits keine 10MHz einstellen.
2.Frage: Sind die Leitungen die ich an das Modul gelötet habe störend?
3.Frage: Müssen Veränderungen am Sourcecode oder der Schaltung 
vorgenommen werden wenn 3,3V Bauteile verwendet werden?
4.Frage: Fällt jemanden noch ein Fehler auf? ;)

Also ich weiß nicht mehr weiter. Wenn ihr keine Lösungen oder Vorschläge 
habt gebe ich auf.

von Hellboy (Gast)


Lesenswert?

Beitrag "Re: bidirektionale RS232 Funkbrücke mit RFM12"


> 1.Frage: Sollte ich den Takt des Moduls oder den des uC verwenden? Ich
> kann in meien Fusbits keine 10MHz einstellen.
XTal_1 geht auf dem Bild zm Modul:
Beitrag "Re: bidirektionale RS232 Funkbrücke mit RFM12"

>2.Frage: Sind die Leitungen die ich an das Modul gelötet habe störend?
Hauptsache sie sind nicht zu lang.

> 3.Frage: Müssen Veränderungen am Sourcecode oder der Schaltung
> vorgenommen werden wenn 3,3V Bauteile verwendet werden?
Sollte alles okay sein, das Modul läuft ab 2.2V
Hast du auch einen UART-RS232 Pegelwandler (Max232 läuft oft nur mit 5V) 
dran der mit 3.3V läuft?

> 4.Frage: Fällt jemanden noch ein Fehler auf? ;)
Du könntest mal ain kleines Testprogramm drauf laufen lassen oder deine 
Fusebits auslesen oder einen Screenshoot der Einstellungen machen.
Die "Brown Out detection" hast du auf 2.6V gestellt?

von Chris B. (Gast)


Lesenswert?

Kann jemand einen Wiki Artikel schreiben, in dem alles erläutert wird?
Es ist u.A. sehr umständlich alle >400 Posts zu lesen.

MfG.
Chris

von Jensi n. (marc1990feb)


Lesenswert?

Hallo,

funktioniert das auch mit:

http://www.pollin.de/shop/dt/Mzg4OTgxOTk-/Bausaetze_Module/Module/Funkmodul_RFM12BP_868_Sende_Empfangsmodul.html

Davon habe ich noch 2 Daheim :-D

Würde diese gerne verwenden, da ich auch eine etwas höhere Reichweite 
benötige!

LG

von Borislav S. (borislav)


Lesenswert?

Guten Tag

Ich bin ein Neuling und habe nicht so viel Erfahrung mit µC und 
Funkmodulen. An dieser Stelle möchte ich mich bei Benedikt bedanken für 
seinen robusten Code. Ein zweiter Dank geht an Stefan für seinen Beitrag 
vom 16.05.2010 in dem er den Code auf die 
Pollin-Funk-AVR-Evaluationsboard angepasst hat. Mit diesen Anpassungen 
ist mir gelungen relativ rasch zwei solche Boards, die mit RFM12 Modulen 
bestückt sind zum Einsatz zu bringen und die bidirektionale RS232 
Funkbrücke aufzubauen. Ich finde es einfach fabelhaft, dass ich mit der 
bidirektionale RS232 Funkbrücke für meine eigenen, zukünftigen Projekte 
ein verlässliches Testsystem habe.

Gruß an Alle

Borislav

von André M. (pc-fan)


Lesenswert?

Hallo,

erst mal ein großes Dankeschön an Benedikt für den Code!
Ich möchte in den Code eine Funktion Einbauen, die es mir ermöglicht, 
nach Eingabe einer bestimmten Zeichenkombination in den Config-Modus zu 
kommen. Als Zeichenkette wäre für mich irgendetwas denkbar, was man 
sonst nicht sendet, z.B. eine Kombination aus Sonderzeichen oder 
ähnliches.
Mir ist nun leider nicht ganz klar, wo (und wie) ich diese Funktion 
einbauen muss. Ich müsste ja die letzten 3 Zeichen abfragen und dann mit 
der gewünschten Zeichenkette vergleichen.

Schonmal Danke im Voraus und Gruß
André

von Nils (Gast)


Lesenswert?

Nabend,

ich habe mich die Tage recht intensiv mit den RFM12 Modulen beschäftigt 
und bin dabei auf Benedikts Bibliotheken gestoßen. Was ich dabei nicht 
ganz verstehe ist die Funktion zum Einstellen der Baudrate. Das CS Bit 
wird nur unter Baudwerten 5400 gesetzt. Rein rechnerisch komme ich aber 
auf ~2700 (2693 oder so). Macht in der Praxis nichts aus, ich bin nur 
drauf gestoßen und möchte mal nachhaken. Ich hoffe ich habe's bisher nur 
nicht überlesen (so lang wie der Thread schon ist).

Grüße, Nils

von Nils (Gast)


Lesenswert?

EDIT:
Meine Version der Baudratenfunktion:
1
void rfmSetBaud( uint16_t baud ) {
2
  
3
  uint16_t tmp;
4
  
5
  //minimal baudrate with cs=0 is about 2700
6
  if( baud < 2700 ) {
7
    tmp = (344828/(baud*8)-1);  //cs=1  BR=344828/(R+1)*(1xcs*7)
8
  } else {
9
    tmp = ((344828/baud)-1);  //cs=0  BR=344828/(R+1)
10
  }
11
  
12
  rfmWrtCmd(0xC600|tmp);
13
  
14
}

von S. M. (lichtmensch)


Angehängte Dateien:

Lesenswert?

Hallo

Ich wollte gerde die Funkbrücke zum testen aufbauen und dabei ist mir 
aufgefallen das die Pinbeschriftungen von dem Avr garnicht passen
Geschrieben steht Atmega 8 allerdings Reset an pin 29 und auch sonst 
passen die Nummern garnicht

von Bernhard M. (boregard)


Lesenswert?

Sven Möller schrieb:
> Ich wollte gerde die Funkbrücke zum testen aufbauen und dabei ist mir
> aufgefallen das die Pinbeschriftungen von dem Avr garnicht passen
> Geschrieben steht Atmega 8 allerdings Reset an pin 29 und auch sonst
> passen die Nummern garnicht

Das ist nicht das DIP Gehäuse, sondern das 44 polige TQFP...

Bez. Baudrate: Benedikts Formel ist zwar lt. Datenblatt korekt, aber 
durch das Integer-Runden / Wegschneiden kommen teilweise sehr 
unglücklicher Werte raus, bei 19200 wird z.B. real auf ~20284 Baud 
eingestellt.
Mit 345600 statt 344828 kommt man meiner Meinung nach besser hin...

von S. M. (lichtmensch)


Lesenswert?

Ich habe gestern meinen ersten Versuch gestartet und bin wie zu erwarten 
gescheitert ...

Beide module schalten auf 10mhz, Fuse auf Extern gestellt.
Aber beide avr's senden mir über rs232 nur Datenmüll und das in einer 
tour. Auch wenn einer der beiden aus ist und auch sonst vermutlich nix 
auf 433 senden dürfte.

Rs232 am pc eingestellt auf 19200 auch im config modus nur datenmüll
version war die rfm12_rs232_rxtx_check5

hat jemand einen hinweis?

von Tobi F. (Gast)


Lesenswert?

Hallo,

hat für mich als reinem Anwender des Codes "rfm12_rs232_rxtx_check5.zip" 
jemand eine Erklärung für folgendes Phänomen, welches ich in meinem 
kleinen Netzwerk mit mehreren der Funkmodule habe: Wird eines davon 
-Nr.1- neu eingeschaltet werden sämtliche davon gesendete Zeichen bei 
einem weiteren -Nr.2- (ständig eingeschalteten) Modul nicht empfangen- 
solange nicht von einem dritten -Nr.3- (ebenfalls ständig 
eingeschalteten) Modul etwas gesendet (und stets auch ordnungsgemäß 
empfangen) wird. Modul Nr.1 soll aus Energiespargründen nur ab und zu 
eingeschaltet werden wenn es Daten zum Senden gibt. Nun sehe ich mich 
außerstande das zu realisieren da ich dabei natürlich nicht auf auf 
sonstigen Funkverkehr (Modul Nr.3) angewiesen sein möchte. Hoffe das 
Problem ist einigermaßen klargeworden und jemand kennt eine Lösung ...

Gruß Tobi

von Bernd O. (bitshifter)


Lesenswert?

Hallo,

ich verwende den Code aus "rfm12_rs232_rxtx_check5.zip" mit komplett 
anderer main() und habe das Problem, das ausschließlich beim Empfang die 
folgende Aufrufkette bei ca. jedem zweiten Telegramm blockiert:

rf12_rxdata() -> rf12_rxbyte() -> 1.Aufruf von rf12_ready()

konkret in dieser Zeile:
while (!(RF_PIN&(1<<SDO)));         // wait until FIFO ready

Ich will das als Basis für einfache Funk-Spielereien nehmen. Es ist also 
kein UART etc. beteiligt. Es wird ein Telegramm gesendet wenn eine Taste 
gedrückt wird.

Der Code in main() ist deswegen auch hinreichend simpel und es sind 
keine Interrupts aktiv.
1
#define CHANNEL      2     // Sende/Empfangskanal (0-3) (nur gültig wenn kein DIP Schalter verwendet wird)
2
#define RF_BAUDRATE  20000 // Baudrate des RFM12 (nur gültig wenn kein DIP Schalter verwendet wird)
3
#define MAX_BUF      128   // Paket Größe in Bytes (maximal 250, siehe auch rf12.c)
4
    :
5
    :
6
    rf12_init();  // ein paar Register setzen (z.B. CLK auf 10MHz)
7
    rf12_config(RF_BAUDRATE, CHANNEL, 0, QUIET);  // Baudrate, Kanal (0-3), Leistung (0=max, 7=min), Umgebungsbedingungen (QUIET, NORMAL, NOISY)
8
    rf12_rxmode();
9
10
11
    /* endless main loop */
12
    while (1) {
13
        /* check for received data */
14
        if (rf12_data()) {                               // Daten im RF12 RX Puffer ?
15
            rx_cnt=rf12_rxdata(rxbuf, &status, &rx_id);  // komplettes Paket empfangen
16
            if (rx_cnt<=MAX_BUF) {                       // Daten gültig (d.h. kein CRC Fehler) ?
17
                snprintf(line, sizeof(line), "%03d Received: %d", (int) loop, (int)status);
18
                WriteString(0, 4, line);
19
            } else {
20
                snprintf(line, sizeof(line), "%03d RX error!", (int)loop);
21
                WriteString(0, 4, line);
22
            }
23
        }
24
        /* middle key triggers sending */
25
        if (!KEY_MIDDLE) {
26
            rf12_stoprx();  // auf TX umschalten
27
            WriteString(0, 7, "Sending ...      ");
28
            rf12_txdata(txbuf, 30, value, 0);
29
            delay_ms(700); // "debouncing ;-)"
30
            rf12_rxmode();  // wieder auf RX umschalten
31
            value++;
32
        }
33
        :
34
        :
35
    }

Hardware ist das bekannte OLED Blutzuckermeßgerät:
http://www.mikrocontroller.net/articles/Compact_Plus_Blutzuckermessger%C3%A4t-Hardware
Es ist also ein 3,3V-System. Das Modul ist RFM12S in der 868 
MHz-Version. "USE_868" ist gesetzt und grundsätzlich funktioniert das 
System auch, da ca. jede zweite Botschaft (durch Tastendruck gesendet) 
fehlerfrei durchkommt - die Pins sind also korrekt angeschlossen etc. 
NFFS und NSEL sind je mit einen 12k-Pullup versehen.

Das Problem äußert sich so, dass rf12_ready() blockiert. Wenn eine 
weitere Botschaft vom Sender geschickt wird, dann läuft es weiter - 
natürlich für dieses Telegram mit fehlerhafter CRC aber die main()-Loop 
wird wieder ausgeführt.

Ich habe zwei gleiche Systeme aufgebaut und die können sich gegenseitig 
durch das Senden von Botschaften blockieren und auch wieder 
"entblockieren".

Hat jemand eine Idee, woran das liegen könnte?

Gruß,
Bernd

von Bernd O. (bitshifter)


Lesenswert?

Noch ein Hinweis:
Das Modul ist über ca. 4cm lange Käbelchen verbunden und die Spannung am 
Modul mit 10µF Tantal / 100 nF keramisch abgeblockt. Sollte also 
eigentlich alles passen. Ich habe die SPI-Frequenz mal halbiert, hat 
aber nichts gebracht, da gleiches Verhalten.

Hat niemand eine eine Idee?

Gruß,
Bernd

von Dennis M. (Gast)


Lesenswert?

Hallo!

Dieser Thread ist mittlerweile richtig lang....

Ich habe eine Frage: Habt ihr Empfehlungen zu folgenden Einstellungen 
(868MHz)?

rf12_setbandwidth(? , ?, ?);


Ziel sollte eine gr. Reichweite sein mit einer Fehlerrate, die noch in 
Kauf zu nehmen ist. (ich setzte mir ein flag.RX_err wenn der CRC-Check 
in die Hose geht.)


Einstellung derzeit: rf12_setbandwidth(0,3,0);
die Reichweite ist nicht zufriedenstellend. Aus dem Gebäude raus, 30m 
zur Garage. Kein Empfang.

Danke für eure Hilfe/Empfehlungen!

von ziegenpeter (Gast)


Lesenswert?

Wäre es nicht besser gewesen einen neuen Thread zu erstellen?
Es gibt bestimmt genug Leute, die wie ich auch manchmal erst mal oben 
anfangen und ich nach einer Stunde wundern wie lange der Thread noch 
geht ;)

Zum Thema: würde mich auch interessieren. Hab auch vor ein Paar Tagen im 
offizielen RFM12-Artikel einen Abschnitt gesehen, in dem stand, wie man 
möglichst hohe Reichweite bekommt, aber noch nicht rum probiert.

http://www.mikrocontroller.net/articles/RFM12#Einstellungen_f.C3.BCr_maximale_Reichweite

von Clyde H. (clyde)


Lesenswert?

Guten Morgen zusammen,

ich habe ein Problem und hoffe auf eure Hilfe.
Ich habe die Version Check5 auf einem Mega8 und 868Mhz fehlerfrei 
compiliert(led.h und use868 entsprechend bearbeitet usw.) aber bekomme 
nur eine Unidirektionale Verbindung obwohl auf beiden der gleiche Code 
läuft.
Ich kann nur von 1 auf 2 Senden aber nicht von 2 auf 1. Die RX-LED 
blinkt auch nur bei 1 und bei beiden geht die Error-LED an. Die Retrans 
und TX LEDs bleiben bei beiden aus.
Wo kann ich noch nach dem Fehler suchen?
Sender sind sowohl TeraTerm auf dem PC und ein Mega168 mit 
Temperaturwerten. Bei direkter Kabelverbindung klappt alles und emnach 
scheint von der Seite alles ok zu sein.

Habe gestern auch schon das Funkmodul was"scheinbar" nicht sendet 
ausgetauscht, da ich mehrere habe aber ohne Erfolg.

Hat jemand evtl. einen Tip?

Gruß
Clyde

von Clyde H. (clyde)


Lesenswert?

Ich vergaß, ich nutze die DIP-Schalterversion.

von Clyde H. (clyde)


Lesenswert?

Hallo zusammen,

nach dem Aufbau eines dritten Moduls klappt die Verbindung in beide 
Richtungen. Weiss zwar noch nicht, was ich versemmelt habe aber werde es 
später mal suchen.

Nun habe ich aber ein anderes Problem...

Ich habe keine ausreichene Reichweite, ich komme nicht mal 10-15m durch 
die Wohnung. Antennen sind Drahtstücke von ca. 8cm(868Mhz-Modul) und 
eine selbst gewickelte Spule aus einem der wenigen noch Funktionierenden 
Links.
Habe auch mal von QUIET über NORMAL auf NOISY aber es brachte nichts.
Als Leistungsabgabe habe ich den Originalcode übernommen, weil ich es so 
verstehe, das mit maximaler Leistung gefunkt wird.

Wer weiß Rat?

von Clyde H. (clyde)


Lesenswert?

Huhu,
guckt hier noch jemand?!?!
Mittlerweile habe ich eine Aurel-Antenne für 868Mhz, aber vom PC-Zimmer 
bis ins Wohnzimmer(ca. 15m ums Eck aber offene Türen, Wände Massiv) 
klappt es immer noch nicht...
Habe jetzt auch mal nen anderen Kanal gewählt, aber ohne Erfolg...
Mit der Baudrate stehe ich noch auf Kriegsfuß, auf 19200 klappt alles in 
Sichtweite.
bei anderer Baudrate verstehen sie sich nicht mehr, trotz gleicher DIP 
Stellung, TeraTerm zeigt nur wirre zeichen obwohl ich die Baudrate 
angepasst habe(2400,4800,9600 ausprobiert).
19200 klappt wie gesagt...

Wo könnte der Fehler/das Problem liegen?

Gruß
Clyde

von hunt_work_er (Gast)


Angehängte Dateien:

Lesenswert?

hallo,

ich versuche seit längerem meine beiden Funkmodule RFM12BP-868 mit je 
einem mega8 zum laufen zu bringen. Nach einigen Fehlschlägen versuche 
ich jetzt möglichst nahe an Benedikts Code zu bleiben. Ich benutze 
Softconfig das funktioniert auch, wenn ich den Jumper stecke komme ich 
in das config-menü. Beim Daten senden (ohne Jumper) blinkt auch die 
TX-Led, nach einigen versuchen leuchtet die Retrans-Led und später die 
Error-Led. Beim Empfänger tut sich in dieser Zeit gar nichts.

Die Umschaltung von RXEN und TXEN funktioniert auch.

Ich weiß nicht mehr weiter, vielleicht sind auch die module hinüber, als 
sie mal kurz mit 5V liefen. Hat jemand ein kleines Programm für die 
RFM12BP-868 version um die Funktion zu testen?

Grüße

von Bilbo Beutlin (Gast)


Lesenswert?

Hallo,
ich versuche zwei RFM12 Module mit dem Code von Benedikt zum laufen zu 
bekommen(check5) - das funktioniert allerdings nur wenn ich beide Module 
an der selben Spannungsversorgung betreibe - jemand ne Idee woran das 
liegt?
Danke

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Angehängte Dateien:

Lesenswert?

Moinsen,
da ich eine interne UART Funkbrücke brauchte die nicht an den Hardware 
UART geht habe ich mal diese Funkbrücke als Library gekapselt.

Der Aufruf erfolgt genauso wie die UART Lib von Peter Fleury.

Im Anhang eine Echo Funkbrücke, ein Modul sendet was es vom UART bekommt 
und das andere Funkt dies zurück.

von HarryHirsch (Gast)


Lesenswert?

Hallo Benedikt, wenn Du hier noch mitliest möchte ich Dich bitten das 
Prg. hier nochmal für einen Neuling zuverlinken und ein paar Tips zum 
RFM12 bezüglich Fehler einzustellen. Schon mal danke für Deine Arbeit

von Joachim B. (jar)


Lesenswert?

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Frage an die Moderation? Ich verstehe das nicht, habe weitere Fragen zum 
Projekt und keine Antwort!


Hallo Benedikt, klasse Teil habe es nachgebaut und es tut was es soll.
Hast du noch eine Idee wie man das so erweitern kann das DTR und RTS und 
CTS mitübertragen werden für eine drahtlose FTDI(RS232) Verbindung zum 
Arduino mini oder clones zum drahtlos programmieren?

von Moby (Gast)


Angehängte Dateien:

Lesenswert?

Joachim B. schrieb:
> Hallo Benedikt, klasse Teil habe es nachgebaut und es tut was es soll.
> Hast du noch eine Idee ...

Das kann ich bestätigen und habs auch dutzendefach als kleines 
Funknetzwerk fürs Smart Home im Einsatz!

Leider ist der "Support" wohl endgültig ausgelaufen, zum Trost hier im 
Anhang nochmal eine vereinfachte kleine LP zum Drauflöten eines 433 MHz 
RFM12 + passende Hex für den Mega8 und einer kurzen Anleitung zum 
Programmieren mit einem AVRISP-Programmer. Die entsprechende temporär 
anzulötende 6-pol. Programmierbuchse muß man sich noch dazu basteln 
(siehe Schaltplan).

von Malte _. (malte) Benutzerseite


Angehängte Dateien:

Lesenswert?

Da ich vor Jahren Benedikts Code für eine Funkbrücke zwischen zwei 
ATmega8 verwendet habe und auf einem aktuellen Board ebenfalls ein RFM12 
bestückt hatte, war es naheliegend das Projekt von damals als 
funktionsfähiges Gegenstück zu verwenden.
Zu diesen Zweck habe ich Benedikts Code etwas erweitert und dafür 
gesorgt dass er mit einem aktuellen gcc übersetzbar (zumindest für eine 
mega8) ist . (Interrupt Namen...)
Features:
-Timeout und Anzahl der Retries lassen sich per Software ändern und 
werden im EEprom gespeichert.
-Timeout fürs erneute Senden ist nun variabel (Pseudozufall) um ein 
wiederholtes gleichzeitiges Senden von beiden Teilnehmern zu vermeiden.
-Zu Testzwecken kann auf ein Senden der Bestätigung verzichtet werden 
und CRC Fehler können angezeigt werden.
Und das Protokoll war glaube ich auch nirgends dokumentiert:

TX POS  RX POS
0...4   ------: Sync data: 0xAA + 0xAA + 0xAA + 0x2D + 0xD4
5       0     : Status byte: bit 0 set: received ok
6       1     : Number of data bytes to send (id not counted!)
7...N   2...M : Data bytes: Only if number of bytes is > 0.
                If at least one data byte, first byte(7) is an id.
                Receiver accepts package when ID is different to the
                previous one.
                Transmitter increases ID if the reception has been
                acknowledged or the the acknowledge is not received
                within some timeout.
N+1     M+1   : CRC of bytes 5...N/0...M
N+2     ------: 0 - not received
Speciality in protocol: If one byte is 0x0 or 0xFF, the next byte will 
be completely ignored (stuff byte).
The default values will result in a re-sent after 10ms if no ACT has 
been received.

Sample reception:
00: Status
AA: Stuff byte because previous byte is 0
01: Number of data bytes to send = 1
05: The 5th packet to send
77: The Data - ascii w
2F: CRC (excluding stuff byte and excluding CRC itself)
E2: Garbage

Vielleicht interessiert es ja jemanden - die RFM12 scheinen ja weiter 
aktuell zu sein.

von Malte _. (malte) Benutzerseite


Angehängte Dateien:

Lesenswert?

Da ich per PM danach gefragt wurde,
hier ein fertiges Binary aus dem Quellcode des vorherigen Posts
Hex für:
AtMega8 mit 8MHz Quarz.
Der Uart läuft standardmäßig mit 9600 Baud.
Um in das Konfigurationsmenü zu kommen, muss beim Power Up PinD.2 auf 
Low gezogen sein.

von Christian J. (Gast)


Lesenswert?

Gibt es den Benedikt Kullmann eigentlich noch? Seit zig Jahren (ca 2008 
glaube ich) nichts mehr von ihm gesehen hier.... hat aber noch MOD 
Status.

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.