Forum: Mikrocontroller und Digitale Elektronik Pollin Funkmodule


von Daniel S. (hackherz)


Lesenswert?

Hallo,
Ich versuche seit einiger Zeit die Funkmodule RFM01 und RMF02 von Pollin 
zum laufen zu kriegen. Mitlerweile ist es mir sogar gelungen das RFM02 
korrekt anzusteuern, leider regt sich seit mitlerweile 1.5Monaten noch 
immer nichts bei dem RFM01. Der Code stammt aus diesem Beitrag: 
Beitrag "Beispielprogramm für RFM12 433MHz Funk-Module" von Benedikt K.. Der 
verwendete Mikrocontroller ist ein Atmega23(programmiert in c) mit einem 
16MHz Quarz(beim Sender wurden die 10MHz des Funkmoduls verwendet).

Ich vermute, dass die Frequenz des SPI nicht stimmt(von diesem Problem 
haben einige berichtet), leider habe ich nicht herausgefunden wie ich 
die Taktrate des SPI anpassen kann?!
1
#define RF_PORT  PORTB
2
#define RF_DDR  DDRB
3
#define RF_PIN  PINB
4
5
#define SDI    5  // SDI,  -> RF02
6
#define SCK    6  // SCK,  -> RF02
7
#define CS    7  // nSEL, -> RF02
8
#define SDO    0  // SDO,  <- RF02
9
10
// nFFS: 1-10k Pullup an Vcc !!!
11
12
static unsigned char sdrssi, sgain;
13
14
void rf01_trans(unsigned short wert)
15
{  unsigned char i;
16
17
  cbi(RF_PORT, CS);
18
  for (i=0; i<16; i++)
19
  {  if (wert&32768)
20
      sbi(RF_PORT, SDI);
21
    else
22
      cbi(RF_PORT, SDI);
23
    sbi(RF_PORT, SCK);
24
    wert<<=1;
25
    _delay_us(0.2);
26
    cbi(RF_PORT, SCK);
27
  }
28
  sbi(RF_PORT, CS);
29
}
30
31
void rf01_init(void)
32
{  unsigned char i;
33
  RF_PORT=(1<<CS);
34
  RF_DDR=(1<<SDI)|(1<<SCK)|(1<<CS);
35
36
  for (i=0; i<11; i++)
37
    _delay_ms(10);      // wait until POR done
38
39
  rf01_trans(0xC2E0);      // AVR CLK: 10MHz
40
  rf01_trans(0xC42B);      // Data Filter: internal
41
  rf01_trans(0xCE88);      // FIFO mode
42
  rf01_trans(0xC6F7);      // AFC settings: autotuning: -10kHz...+7,5kHz
43
  rf01_trans(0xE000);      // disable wakeuptimer
44
  rf01_trans(0xCC00);      // disable low duty cycle
45
}

Ich hoffe ihr könnt/wollt mir helfen :)

MfG Daniel

von Daniel S. (hackherz)


Lesenswert?

Will mir denn niemand helfen?

von Thomas E. (thomase)


Lesenswert?

Daniel S. schrieb:
> Ich vermute, dass die Frequenz des SPI nicht stimmt(von diesem Problem
> haben einige berichtet), leider habe ich nicht herausgefunden wie ich
> die Taktrate des SPI anpassen kann?!
SPI Control Register – SPCR

mfg.

von holger (Gast)


Lesenswert?

>> leider habe ich nicht herausgefunden wie ich
>> die Taktrate des SPI anpassen kann?!

>SPI Control Register – SPCR

Macht bei Software SPI keinen Sinn;)
Ich würde mal an den delays rumfummeln.

von Daniel S. (hackherz)


Lesenswert?

Hab ich schon, leider hat es mir bisher nichts gebracht :(

von F.e (Gast)


Lesenswert?

Was meinst du mit regt sich nichts?
Versuch mal nicht das init auszuführen sondern einfach mal nach dem 
Start
Int result = rf01_trans(0x0) auszuführen.
Kommt dort was zurück?

Bei mir war meistens wenn's garnicht geklappt hat die verkabelung 
schuld.

von Daniel S. (hackherz)


Lesenswert?

F.e schrieb:
> Int result = rf01_trans(0x0)

rf01_trans() ist void, es gibt keinen Wert der zurück gegeben wird.

von Reiner O. (elux)


Lesenswert?

Lies Dir doch mal diesen Threat hier 
Beitrag "RFM12 Empfang von Sensordaten im IRQ" durch, da liegt auch 
die SW für die RFM02 zur reinsehen...
Du weißt aber schon, daß der RFM02 anders angesteuert wird, als der 
RFM12?

LG
Elux

von Daniel S. (hackherz)


Lesenswert?

Ja, ist mir durchaus bewusst, in dem von mir genannten Beitrag wurde 
auch Beispielcode für die RFM01 und RFM02 gepostet. Das RFM02 
funktioniert bei mir übrigens.

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.