Forum: Mikrocontroller und Digitale Elektronik RFM12 mit HCS12


von Stephan K. (stephan190)


Angehängte Dateien:

Lesenswert?

Hi,

habe ein problem mit dem RFM12 von Pollin. Ich versuche die Funkmodule
schon seit Tagen auf dem HCS12DP512 von freescale ans laufen zu
bekommen, aber leider läuft nichts. Möchte das ganze über die Hardware
SPI-Schnittstelle steuern. Anbei habe ich mal den Quellcode den ich mit
Hilfe dieses Forum aufgebaut habe dran gehangen. Bedanke mich schon
einmal im Vorraus. Bis dann

von Michael U. (amiga)


Lesenswert?

Hallo,

der Prozessor ist nicht meine Spielwiese, trotzdem:

hat die doppelte Initialisierung in rf12_init eine tiefere Bedeutung?

Redet Dein µC denn mit dem RFM? Erkennbar daran, daß er CLKOUT auf die 
10MHz umschaltet.

Allgemein meine Erfahrung: 10-20µ halbwegs dicht an den 
Betriebsspannungsanschlüssen des RFM12 sind zu empfehlen, speziell, wenn 
es ein Versuchsaufbau mit ungünstiger Leitungsführung ist.
100ms Wartezeit können den Modulen nach PowerOn durchaus auch zu kurz 
sein.
Als erstes nach PowerOn noch vor der Initsequenz das Statusbyte lesen, 
der Inhalt ist eigentlich egal, es geht nur um das Kommando zum 
Auslesen.

Zumindest sorgen diese Sachen bei mir jetzt schon seit ein paar Monaten 
für absolut stabilen Betrieb meiner Sensormodule und des Webservers mit 
RFM12.

Gruß aus Berlin
Michael

von Stephan (Gast)


Lesenswert?

Hi,
danke schon einmal für die schnelle Antwort. Ich habe RFM_Init 2 mal 
vorgenommen da ich an einem Microkontroller 2 RFM12 Module habe und die 
ja über die SPI1 und SPI2 schnittstelle betreibe. So mit muss ich doch 
um beide Funkmodule zu Initallisieren einmal auf SPI1 und einmal auf 
SPI2 durchführen, oder? Wie kann ich den überprüfen ob der clkout auf 
die 10Mhz umschaltet?

Bis dann und Danke

von Stephan (Gast)


Lesenswert?

Hallo Forum, kennt sich einer mit den RFM12 und kann mir bei den oben 
genannten Problem helfen. Wäre sehr nett komme nicht weiter :-((

von APW (Gast)


Lesenswert?

Ist das jetzt ein 9S12XDP512 oder ein 9S12DP512?

von Stephan (Gast)


Lesenswert?

Oh ja sorry das ist ein S12XDP512!

von Funkamateur1 (Gast)


Lesenswert?

Hallo Stephan,
man würde ja vielleicht helfen aber hast du zufällig mal ein Bild von 
der Hardware, Zeichnung, Bild, Schaltplan,Platinenlayout, Stückliste 
oder weitere Informationen zu Temperatur,Datenblatt, Sendefrequenz und 
Empfangsfrequenz, Filter, Standort Abstände Antennen... damit man sich 
mal ein Bild machen kann.

von Stephan (Gast)


Angehängte Dateien:

Lesenswert?

Hi, ja hier ist das Datenblatt vom RFM12. Benutze 2 davon an einem 
Mikrocontroller. Der Abstand zwischen beiden Funkmodulen sind nur ca. 
10cm.

von Christian G. (christiang)


Lesenswert?

Hallo,

mit welcher Taktfrequenz rennt dein S12X? Ich hab jetzt nicht in das 
Datenblatt des RFM12 geschaut, aber evtl. ist die Baudrate zu hoch. 
Deine SPI Baudratenprescaler stehen auf 0 -> höchste Baudrate.
Außerdem, warum hast du die SPI Interrupts (auch wenn du sie scheinbar 
nicht benutzt) zum XGate (RQST=1) geroutet?

Invertierte Logik, oder nur der Kommentar falsch?
1
  PTH &= ~0x80;  //Port H3 an
2
  PTH |= 0x80;     //Port H3 aus
Ist das dein Slave select? Warum hast du dann den automatischen 
eingeschaltet?

Generell solltest du nach jedem SPI-Byte-Schreiben auch den Puffer 
auslesen, ansonsten gibt das irgendwann Murks - glaubs mir. So z.B.
1
uint8_t Spi_Transfer(uint8_t txData)
2
{
3
    /* write */
4
    while (!SPI0SR_SPTEF)
5
    {
6
        /* wait for empty TX buffer */
7
    }
8
    SPI0DR = txData;
9
10
    /* read */
11
    while (!SPI0SR_SPIF)
12
    {
13
        /* wait for rx data */
14
    }
15
16
    return (SPI0DR);
17
}

Gruß,
Christian

von Michael U. (amiga)


Lesenswert?

Hallo,

Stephan schrieb:
> Hi, ja hier ist das Datenblatt vom RFM12. Benutze 2 davon an einem
> Mikrocontroller. Der Abstand zwischen beiden Funkmodulen sind nur ca.
> 10cm.

Ob das so klug ist?
zumindest mußt Du dafür sorgen, daß die Register beim Senden bzw. 
Empfangen auch pünktlich bedient werden.
Der Empfänger ist darauf angewiesen, daß die Daten ohne Pause kommen, 
sonst kommt die Bitclock-PLL aus dem Tritt. Deshalb auch nicht zuviele 
Daten ohne Pegelwechsel senden (0x00 oder 0xFF).

Die PLL syncronisiert mit der Präambel (den 0x0AA) und ist dann darauf 
angewiesen, daß oft genug ein Flankenwechsel kommt, sonst läuft sie weg.

Die 10MHz (oder was Du beim Init programmierst) findest Du am CLK-Pin 
des Moduls.

Ist zwar alles AVR und auch Soft-SPI, aber vielleicht findest Du bei 
meinen Sensoren noch Hinweise:

http://www.avr.roehres-home.de/

Gruß aus Berlin
Michael

von Stephan (Gast)


Lesenswert?

Hi, danke schon einmal an alle, werde mörgen eure typs ausprobieren.

Danke

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.