Gibt im Moment wohl nur die 01/02. Transceiver scheinen gerade aus zu sein. Suchbegriff: rfm
Oder schau mal hier: http://www.mikrocontroller.net/topic/80796#new
Druckbare Version
Gibt im Moment wohl nur die 01/02. Transceiver scheinen gerade aus zu sein. Suchbegriff: rfm
Oder schau mal hier: http://www.mikrocontroller.net/topic/80796#new
Hallo an alle,
@meik
ich habe mir vor längerer Zeit auch mal die RFM01/Rfm02 gekauft und habe sie leider noch nicht zum Laufen gebracht. Deine Beispiele in Picbasic hatte ich auch schon mal gefunden und wollte sie in Bascom übertragen. Ist mir aber noch nicht geglückt. Denn ich habe da noch ein paar Unklarheiten.
Was genau macht z.B dieser Befehl?
Shin Sdi , Scl , Msbpre , [daten2 \ 8]
bzw.
Shout Sdo , Scl , Msbfirst , [daten2 \ 16]
Inden Handbüchern der Picbasic-Demo konnte ich ihn nicht finden.
Du hast Shout Sdo .... im Quellcode für den Sender Rfm02 benutzt. Wo ist der SDO beim RFm02? Oder ist das ein anderen Anschluß? Könnstest Du evtl. einen Schaltplan zeichnen?
Ich würde auch meinen Bascom code hier reinstellen, alle könnten mal drüber gucken.
Ich habe letzte Woche RMF01 und RMF02 bei Pollin bestellt und auch geliefert bekommen.
BasCom ist auch meine erste Wahl und ich habe gestern ein paar Tonnen an Dokus, Beispielcode usw. aus dem Netz gesaugt.
Sehr geholfen hat folgende Seite:
http://comwebnet.co.funpic.de/seite48.html
bei der auch der Link zu deren Forum enthalten ist, in dem Wetterstationen großes Thema sind und dort auch vielfältig dokumentiert sind.
@pmaler
wenn Du das Empfänger/Senderpaar Rfm01/Rfm02 mit der Software des Rfm12 Tranceivers zum Laufen gebracht hast dann sag' hier Bescheid daran bin ich sehr interessiert!
Mach ich.
Hab da eine rf12.bas entdeckt. Da steht folgendes im Header:
Es wird mit SPI auf das Teilchen zugegriffen. Ich habe es mir als Weihnachts-Workshop vorgenommen.Code:' generated. Take care that the chip supports all fuse bytes.' ########################################################################
' ### RF12-Test in Bascom
' ### Basiert auf Code von Benedikt K.
' ### Joachim Fossie Bär Reiter 04/2007
' ########################################################################
Tach auch.Zitat:
Zitat von stevensen
Shin = Shift in. Das ist der Befehl, um die Daten seriell einzulesen.
Shout = Shift out. Um Daten seriell auszugeben.
Sdi bezeichnet den Port und PIN des seriellen Eingangs. Sdo den des Ausgangs und Scl ist die Clock Leitung. Diese sind am Anfang des Programms definiert. Man könnte die Port.Pin Angabe auch direkt in der SHIN bzw. den SHOUT schreiben, aber so ist es übersichtlicher. SDI des PIc wird mit dem SDO des RFM Moduls verbunden, SDO des PIC mit SDI des RFM´s und SCL mit SCK.
MSBFIRST ist eine Anweisung an den Compiler, das Programm so zu stricken, daß die Daten mit dem höchsten Bit zuerst ausgegeben werden. daten2 ist die Vaiable, die die zu sendenden bzw. zu empfangenen Daten beinhaltet und \16 bedeutet, daß 16 Bits der Variable gesendet bzw. empfangen werden sollen. Diese Angabe ist bei dem Compiler nötig, wenn Bits <>8 verarbeitet werden sollen. Wie das bei Bascom ausschaut, weiss ich leider nicht.
Wenn noch Unklarheiten bestehen, immer fragen.
Meik
Hallo meik,
vielen Dank für die Antwort. Mittlerweile bin ich wegen der shin und shout auch fündig geworden. In erster Linie wollte ich wissen bei welcher Flanke etc die Daten übernommen werden aber das weiß ich jetzt, glaub ich zumindest.
Wegen dem SDO usw, habe ich wohl was verwechselt. Dann sind die Ports des Pic gemeint, also Sdo des Chip an Sdi des RFm02. Bei den AVRs werden die Miso, Mosi etc genannt. naja dann muß ich mal schauen ob ich was gebacken kriege. also danke nochmal
Hallo da,
ich wollte diesen Thread nochmal aufgreifen. Ic habe jetzt meine DMX Komunikation stehen und will möglichst wireless werden. Es macht in meinen Augen einfach keinen Sinn, für meinen privaten Bereich mehr Geld für Stecker und Kabel auszugeben, wenn ich´s wireless preiswerter haben kann.
Das Problem ist eben nach wie vor die Dinger ans laufen zu kriegen. Außerdem müsste ich für die 250 kps des DMX im Analogmodus arbeiten. Wo ist da der UNterschied zum Digitalmodus?
BTW, die intergation.com Seite ist schätze ich mal nicht die richtige. Finde jedenfalls den Zusammenhang nicht. Hat jemand die Programme, von denen ktg da sprach?
mfg,
The Man
@The Man
So trifft man sich wieder...
Der Unterschied zwischen dem analogen und Digitalen Modus ist, das bei Analog Modus aussen ein RC Filter angeschaltet werden muß.
Wobei ich jetzt nicht ganz sicher bin, ob der benötigte R nicht schon im Chip enthalten ist.
Lad't dir die Beschreibung vom RF01 und RF02 bei hope-rf runter.
Das Datenblatt von Pollin ist nur ein, nicht ganz richtiger, Ausschnitt daraus.
Bei 250kBit/s wird es aber mit der Reichweite nicht besonders üppig.
Ich würd mit nem Controller die Übertragungsrate auf niedrigere Werte für den Funk runtersetzen, dann funkts auch weiter.
Ich habe jetzt diverse Datenblätter durchgeforstet. Ich finde nur Beschreibungen dazu, wie man das Gerät in FSK betreibt.
Es gibt offenbar die zwei Varianten RFx und RFMx. Wobei die RF´s nur der reine Chip´s sind, während die RFM´s mit Grundplatine und eingen Widerständen daherkommen.
Gibt es irgendwo detailiertere Beschreibungen? Ich kann einige Fragen mit den auffindbaren Datenblättern nicht beantworten.
Gruß,Code:Ist der FSK und ASK Pin der selbe?
Wo kommt im ASK Modus der Kondensator hin?
Wie wird der berechnet?
In welchem Befehl lege ich die Betriebsart fest?
(bei einem der Befehle ist nur eine Tabelle der Ü-Raten im FSK Modus)
The Man
Hast Du wirklich das Datenblatt vom RF01 angeschaut, oder doch wieder das vom RFM01?
Beim RF01 steht sinngemäß:
Ein 10kOhm Widerstand für den Analog Modus ist eingebaut.
Ein externen Kondensator ( Wert steht nicht dabei - ist wohl von der Datenübertragungsrate abhängig ) soll an den Pin CFIL angeschlossen werden.
Der Chip, der hinter dem Modul steht gibts bei Integration http://www.integration.com es sind die Chips 4220 /4320 /4420
hey
hat jemand ein bascom code der funzt für die RFM01 und RFM02??
In der Elektor Januar 2009 gabs einen Artikel mit Bascom Software über die RFM Module, allerding s für die mit 868MHz.
Da da nur ein paar Bytes bei der Initialisierung anders sind, sollte der Code auch für die 433MHz Module verwendbar sein.
Link:
http://www.elektor.de/jahrgang/2009/januar/bei-uns-hat-s-gefunkt!.769040.lynkx?tab=4
Wenn Du da keinen Account hast, kann ich Dir die Soft runterladen und per E-Mail schicken.
Du solltes aber auch die Zusammenschaltung zwischen Microcontroller und RFM Modul so machen , wie es in ELEKTOR vorgeschlagen ist.
ich habs mal runtergeladen aber der Code is ja für RFm12
is des schwer den auf rfm01/02 zu ändern??
Kann ich nicht sagen, hab ich noch nicht gemacht.
Die Initialisierungssequenzen kannst Du aber auch von unserer Modellflieger- Page runterladen.
http://www.toeging.lednet.de/flieger...telemetrie.htm
Der Code ist zwar in "C" , sollte aber mit der SPI von BASCOM auch gehen.
Code Sender:
Zum senden muss dann noch das entsprechende Kommando kommen:Code:// Das Sendemodul RFM 02 initialisieren
void init_rfm02(void)
{
volatile unsigned char uc_frequ[2]; /* Frequenz tuningword */
uc_frequ[1]=ui_frequ[uc_kanal]/256;
uc_frequ[1]|=0b10100000;
uc_frequ[0]=ui_frequ[uc_kanal]%256;
/* Configuration Setting: 433MHz, CLK 5MHz, 11,5pf Kapaz., +/-60kHz */
#asm ("cbi portb,nsel");
sendbyte(0b10001110);
sendbyte(0b01100000);
#asm ("sbi portb,nsel");
#asm ("nop");
/* Frequency Setting: eingestellter Kanal*/
#asm ("cbi portb,nsel");
sendbyte(uc_frequ[1]);
sendbyte(uc_frequ[0]);
#asm ("sbi portb,nsel");
#asm ("nop");
/* Output Power Command: Max Power */
#asm ("cbi portb,nsel");
sendbyte(0b10110000);
#asm ("sbi portb,nsel");
#asm ("nop");
/* Data Rate Command: 2400 bit/s */
#asm ("cbi portb,nsel");
sendbyte(0b11001000);
sendbyte(0b10001111);
#asm ("sbi portb,nsel");
#asm ("nop");
/* Low Batt + Sync Command: enable Sync Circuit */
#asm ("cbi portb,nsel");
sendbyte(0b11000010);
sendbyte(0b00100000);
#asm ("sbi portb,nsel");
#asm ("nop");
/* PLL Setting Command: 0xD240 up to 19,2kbit/s*/
#asm ("cbi portb,nsel");
sendbyte(0b11010010);
sendbyte(0b01000000);
#asm ("sbi portb,nsel");
#asm ("nop");
/* Power Managment Command= Enable Clock; disable Synthesizer; disable pow. Ampl. */
#asm ("cbi portb,nsel");
sendbyte(0b11000000);
sendbyte(0b00100000);
#asm ("sbi portb,nsel");
}
Code:/* Power Managment Command= Enable Clock; enable Synthesizer; enable pow. Ampl. */
#asm ("cbi portb,nsel");
sendbyte(0b11000000);
sendbyte(0b00111000);
#asm ("sbi portb,nsel");
#asm ("nop");
/*Sender Start Byte senden*/
#asm ("cbi portb,nsel");
sendbyte(0b11000110);
GICR|=(1<<6);/*Interrupt 0 freigeben*/
/* Der Rest der Sendung läuft nun in der Interupt 0 Routine ab */
Beim Empfänger schaut das so aus:Code:// External Interrupt 0 service routine sende Bits zum RFM 02
interrupt [EXT_INT0] void ext_int0_isr(void)
{
volatile unsigned char uc_buffer;
uc_sendbit--;
uc_buffer=(uc_sendbuffer[uc_sendbyte])&(1<<uc_sendbit);
if (uc_buffer == 0)
{
#asm ("cbi portb,sdi");/*Eine 0 wird gesendet*/
}
else
{
#asm ("sbi portb,sdi");/*Eine 1 wird gesendet*/
}
/* Alle 8 Bits schon übertragen ? */
if (uc_sendbit==0)
{
uc_sendbyte++;
uc_sendbit=8;
}
if (uc_sendbyte>(strlen (uc_sendbuffer)))
{
/* Ende der Übertragung */
uc_sendbyte=0;
uc_sendbit=8;
GICR&=0b10111111;/*Interrupt 0 sperren*/
/* Übertragung durch setzen des nSEL Ports beenden */
#asm ("sbi portb,nsel");
#asm ("nop");
/* Power Managment Command= Enable Clock; disable Synthesizer; disable pow. Ampl. */
#asm ("cbi portb,nsel");
sendbyte(0b11000000);
sendbyte(0b00100000);
#asm ("sbi portb,nsel");
sendung_aktiv=0;
uc_overflow=0; /* Zeitüberwachung zurücksetzen */
}
}
Code:// Empfange Daten vom RFM 01
interrupt [EXT_INT0] void ext_int0_isr(void)
{
unsigned char uc_i=0;
unsigned char uc_buffer=0;
unsigned char uc_check=0;
uc_timeout=0; /* Timeout Zähler zurücksetzen */
/* Die ersten 16 Bit des Statuswortes übergehen */
#asm ("cbi portb,nsel");
sendbyte(0b00000000);
sendbyte(0b00000000);
for(uc_i=0;uc_i<8;uc_i++)/* 8 Bits auslesen */
{
if ((PINB&(1<<3))!=0) /* SDO abfragen = PortB,3 */
{
uc_buffer=(uc_buffer<<1)| 0x01;
}
else
{
uc_buffer=(uc_buffer<<1);
}
clockpulse();
}
#asm ("sbi portb,nsel"); /* nSel Leitung abschalten */
#asm ("nop");
// Hingen noch Reste im Puffer ? oder Puffer Überlauf -> Dann löschen
if((uc_buffer=='$')||(uc_receivebyte>125))
{
uc_receivebyte=1;
uc_receivebuffer[0]='$'; /* Das Erste Byte des Empfangspuffers mit $ beschreiben*/
uc_receivebuffer[1]=0; /* Ein Stringende anfügen*/
}
else
{
uc_receivebuffer[uc_receivebyte]=uc_buffer;
uc_receivebyte++;
uc_receivebuffer[uc_receivebyte]=0; /* Stringende anfügen */
};
if (uc_buffer==10) /* Line Feed wurde empfangen*/
{
reset_fifo();
uc_check=checksum();
if (uc_check==0)
{
newstring=1;
};
uc_receivebyte=0;
}
}
Die Frequenz Tuningwörter kommen aus einer Tabelle, die dann mit dem entsprechenden Kommando Verodert wird:Code://RFM01 initialisieren
void init_rfm01(void)
{
volatile unsigned char uc_frequ[2]; /* Frequenz tuningword */
/* Frequenzwortermittlung aus der Kanalangabe */
uc_frequ[1]=ui_frequ[uc_kanal]/256;
uc_frequ[1]|=0b10100000;
uc_frequ[0]=ui_frequ[uc_kanal]%256;
/* Configuration Setting: 433MHz, CLK on, 11,5pf Kapaz., 67kHz */
#asm ("cbi portb,nsel");
sendbyte(0b10001001);
sendbyte(0b01101100);
#asm ("sbi portb,nsel");
#asm ("nop");
/* Low Batt Clock Divider Command: clock 5MHz */
#asm ("cbi portb,nsel");
sendbyte(0b11000010);
sendbyte(0b11000000);
#asm ("sbi portb,nsel");
#asm ("nop");
/* Frequency Setting: 434MHz (je nach Kanal) */
#asm ("cbi portb,nsel");
sendbyte(uc_frequ[1]);
sendbyte(uc_frequ[0]);
#asm ("sbi portb,nsel");
#asm ("nop");
/* Receiver Setting Command: VDI= Digital RSSI Out, -103dB, receiver disabled */
#asm ("cbi portb,nsel");
sendbyte(0b11000000);
sendbyte(0b10000000);
#asm ("sbi portb,nsel");
#asm ("nop");
/* Receiver Setting Command: VDI= Digital RSSI Out, -103dB receiver enabled */
#asm ("cbi portb,nsel");
sendbyte(0b11000000);
sendbyte(0b10000001);
#asm ("sbi portb,nsel");
#asm ("nop");
/* FIFO Command: Enable FIFO, IT level=8, Sync. Patt + VDI, stop FIFO */
#asm ("cbi portb,nsel");
sendbyte(0b11001110);
sendbyte(0b10001001);
#asm ("sbi portb,nsel");
#asm ("nop");
/* FIFO Command: Enable FIFO, IT level=8, Sync. Patt + VDI, start FIFO */
#asm ("cbi portb,nsel");
sendbyte(0b11001110);
sendbyte(0b10001011);
#asm ("sbi portb,nsel");
#asm ("nop");
/* Data Filter Command: */
#asm ("cbi portb,nsel");
sendbyte(0b11000100);
sendbyte(0b10101100);
#asm ("sbi portb,nsel");
#asm ("nop");
/* Data Rate Command: 2400 bit/s */
#asm ("cbi portb,nsel");
sendbyte(0b11001000);
sendbyte(0b10010001);
#asm ("sbi portb,nsel");
#asm ("nop");
/* AFC Command: Enable AFC, +3/-4, offset at VDI high */
#asm ("cbi portb,nsel");
sendbyte(0b11000110);
sendbyte(0b10111111);
#asm ("sbi portb,nsel");
#asm ("nop");
}
Den kompletten Code findest Du auf der angegebenen Seite.Code:Zuordnung Kanäle - Dip Fix - Frequenz
Dip Fix:Kanal:Frequenz
Dip Kanal Frequenz
xxx 01 433.075 MHz
00 02 433.100 MHz
xxx 03 433.125 MHz
xxx 04 433.150 MHz
01 05 433.175 MHz
xxx 06 433.200 MHz
xxx 07 433.225 MHz
02 08 433.250 MHz
xxx 09 433.275 MHz
xxx 10 433.300 MHz
03 11 433.325 MHz
xxx 12 433.350 MHz
xxx 13 433.375 MHz
04 14 433.400 MHz
xxx 15 433.425 MHz
xxx 16 433.450 MHz
05 17 433.475 MHz
xxx 18 433.500 MHz
xxx 19 433.525 MHz
06 20 433.550 MHz
xxx 21 433.575 MHz
xxx 22 433.600 MHz
07 23 433.625 MHz
xxx 24 433.650 MHz
xxx 25 433.675 MHz
08 26 433.700 MHz
xxx 27 433.725 MHz
xxx 28 433.750 MHz
09 29 433.775 MHz
xxx 30 433.800 MHz
xxx 31 433.825 MHz
10 32 433.850 MHz
xxx 33 433.875 MHz
xxx 34 433.900 MHz
11 35 433.925 MHz
xxx 36 433.950 MHz
xxx 37 433.975 MHz
12 38 434.000 MHz
xxx 39 434.025 MHz
xxx 40 434.050 MHz
13 41 434.075 MHz
xxx 42 434.100 MHz
xxx 43 434.125 MHz
14 34 434.150 MHz
xxx 45 434.175 MHz
xxx 46 434.200 MHz
15 47 434.225 MHz
xxx 48 434.250 MHz
xxx 49 434.275 MHz
16 50 434.300 MHz
xxx 51 434.325 MHz
xxx 52 434.350 MHz
17 53 434.375 MHz
xxx 54 434.400 MHz
xxx 55 434.425 MHz
18 56 434.450 MHz
xxx 57 434.475 MHz
xxx 58 434.500 MHz
19 59 434.525 MHz
xxx 60 434.550 MHz
xxx 61 434.575 MHz
20 62 434.600 MHz
xxx 63 434.625 MHz
xxx 64 434.650 MHz
21 65 434.675 MHz
xxx 66 434.700 MHz
xxx 67 434.725 MHz
22 68 434.750 MHz
xxx 69 434.775 MHz
Alle DIP FIX mit gültigen Werten versehen !
23 68 434.750 MHz
24 68 434.750 MHz
25 68 434.750 MHz
26 68 434.750 MHz
27 68 434.750 MHz
28 68 434.750 MHz
29 68 434.750 MHz
30 68 434.750 MHz
31 68 434.750 MHz
****************************************************/
flash unsigned int ui_frequ[32]={1240,1270,1300,1330,1360,1390,1420,1450,1480,1510,1540,1570,1600,1630,1660,1690,1720,1750,1780,1810,1840,1870,1900,1900,1900,1900,1900,1900,1900,1900,1900,1900};
Da die Beschaltung hier anders als bei der ELEKTOR Variante ist, musst Du gucken, was zu ändern ist.
hey
danke aner ich kenne mich mit c überhaupt nicht aus leider werd es aber warscheinlich bald lernen
bei dem Code von Elektor steht ja iwie nich dran ob des sender oder Empfänger ist!
Ich hab Dir ja auch die wirklich wichtigen Sachen rausgeklaubt
sendbyte(0b11000000) bedeutet
An das RFM Modul wird das Byte ( binär ) 11000000 über die Funktion sendbyte ( das ist meine selbst geschriebene SPI Routine ) übergeben.
Das dürfte auch mit Bascom kein Problem sein - oder ?
Ist ja auch Kommentiert und viel in Assembler, der ja auch in BASCOM so funktionieren sollte.
"Den" funktionierenden BASCOM Code wird es nicht geben.
Es sind nun mal sehr verschiedene Arbeitsmodi und Einstellungen bei den RFM Modulen möglich.
Das geht vom Einstellen der Sendeleistung, über den Frequenzhub zur Art der Übermittlung, mit Baudrate, FiFo Nutzung und so weiter.
Man muß sich also erstmal überlegen was man will und welche Datenübertragungsrate und Reichweite nötig ist.
Erst dann kann man entscheiden welche Parameter für die konkrete Anwendung sinnvoll sind.
Zu jedem Quellcode gehört somit auch ein Schaltplan, sonst wird's schwierig.
Du könntest aus dem Elektor Beispiel die SPI Routinen übernehmen, gucken wie die Beschaltung der Module ist und dann die Initialisierungsbytes aus unserem System übernehmen.
Unsere Telemetriegeschichte ist auf Reichweite getrimmt, also maximale Sendeleistung bei nur 2400Bit/sek.
Wenn das nicht passt die entsprechenden Bytes umbiegen - Fertig.
ah ok
ich werd mal schauen was ich zusammen bekomme
werd mich bei fragen/probleme wieder melden