Ausschnitte_RFM12BP.c


1
SENDER
2
void init_rfm12(void)
3
{
4
  SPI_Config_CMD_16Bit(0x80E8);//80h   1110 1000; el=1=Sendepuffer EIN, ef=1= RX FIFO Buffer EIN , 
5
                               //b1='10`= 868MHz Band, Lastkapazität =12,5pF
6
  SPI_Config_CMD_16Bit(0x8239);//Komponentenauswahl Sender  82h 0011 1000  er=0= Empfangstrakt AUS,ebb=0 et='1'=Sender EIN, es=1=synthesizer EIN
7
                               // dc=1= Taktausgang AUS= '0' ausgeben; 
8
  warten100ms();
9
  SPI_Config_CMD_16Bit(0xCC77);//PLL konfigurieren, nur RFM12B, siehe Artikel µC
10
  SPI_Config_CMD_16Bit(0xC040);//Batterieüberwachung:2,2V, Ausgangsfrequenz für µC=1,66MHz
11
  SPI_Config_CMD_16Bit(0xA76C);//Frequenz festlegen, 76C = 869.5MHz    Berechnung:869,5-860 = 9,5 / 0,005 = 1900 oder 0x76C
12
  SPI_Config_CMD_16Bit(0xC647);//BIT-Rate: 4,8kbps
13
  SPI_Config_CMD_16Bit(0x94A0);//VDI Ausgang, Schnell, Basisbandbreite 134kHz, LNA Gewinn = 0dBm, DRSSI-Schwelle: -103dBm
14
  SPI_Config_CMD_16Bit(0xC2AC);//al, !ml, digitaler Filter, DQD-Schwellwert = 4
15
  SPI_Config_CMD_16Bit(0xCA81);//FIFO und Rücksetz-Betriebsart -->0xCA81 kein Erkennungsmuster auswerten, FIFO immer beschreiben
16
  SPI_Config_CMD_16Bit(0xC4F7);//AFC-Einstellung 1111 0011 --> unabhängig von VDI, +-20kHz delta f, 
17
  SPI_Config_CMD_16Bit(0x9853);//Senderkonfiguration 5-->Frequenzhub +-90kHz, Leistung(yyyx) 0--> Maximalleistung x =3 =-21dB
18
  SPI_Config_CMD_16Bit(0xE000);//nicht verwendet, Überwachungszeitgeber
19
  SPI_Config_CMD_16Bit(0xC800);//nicht verwendet
20
}
21
22
void daten_senden(void)
23
{
24
       P4OUT &= ~BIT1;//gelb();
25
      //SPI_Config_CMD_16Bit(0x0000); //liest Status und löscht Interruptanforderungen
26
      SPI_Config_CMD_16Bit(0xB8AA);
27
      SPI_Config_CMD_16Bit(0xB8AA);
28
      SPI_Config_CMD_16Bit(0xB8AA);
29
      //SPI_Config_CMD_16Bit(0xB82D);
30
      //SPI_Config_CMD_16Bit(0xB8D4);
31
      //SPI_Config_CMD_16Bit(0xCED4);//Synchronisationsmuster   2 Bytes
32
      SPI_Config_CMD_16Bit(0xB855);
33
      SPI_Config_CMD_16Bit(0xB855);
34
      SPI_Config_CMD_16Bit(0xB855);    
35
       P4OUT |= BIT1;//_gelb();  
36
}
37
------------------------------------------------------------------------------------      
38
EMPFÄNGER
39
void init_rfm12(void)
40
{
41
    SPI_Config_CMD_16Bit(0x80E8);//80h   1110 1000; el=1=Sendepuffer EIN, ef=1= RX FIFO Buffer EIN , 
42
                                 //b1='10`= 868MHz Band, Lastkapazität =12,5pF
43
//  SPI_Config_CMD_16Bit(0x8238);//Komponentenauswahl Sender  82h 0011 1000  er=0= Empfangstrakt AUS,ebb=0 et='1'=Sender EIN, es=1=synthesizer EIN 
44
                                 //dc=0= Taktausgang EIN;
45
//SPI_Config_CMD_16Bit(0x8239);//Komponentenauswahl Sender  82h 0011 1000  er=0= Empfangstrakt AUS,ebb=0 et='1'=Sender EIN, es=1=synthesizer EIN
46
                               // dc=1= Taktausgang AUS= '0' ausgeben; 
47
//SPI_Config_CMD_16Bit(0x82F8);//Komponentenauswahl: alles EIN
48
  SPI_Config_CMD_16Bit(0x82C8);//Komponentenauswahl Empfänger  82h 1100 1000 er=1= Empfänger EIN, et='0'=Sendertrakt AUS,es=0=synthesizer AUS
49
  warten100ms();
50
  SPI_Config_CMD_16Bit(0xCC77);//PLL konfigurieren, nur RFM12B, siehe Artikel µC
51
  SPI_Config_CMD_16Bit(0xC040);//Batterieüberwachung:2,2V, Ausgangsfrequenz für µC=1,66MHz
52
  SPI_Config_CMD_16Bit(0xA76C);//Frequenz festlegen, 76C = 869.5MHz    Berechnung:869,5-860 = 9,5 / 0,005 = 1900 oder 0x76C
53
  SPI_Config_CMD_16Bit(0xC647);//BIT-Rate: 4,8kbps
54
  SPI_Config_CMD_16Bit(0x94A0);//VDI Ausgang, Schnell, Basisbandbreite 134kHz, LNA Gewinn = 0dBm, DRSSI-Schwelle: -103dBm
55
  SPI_Config_CMD_16Bit(0xC2AC);//al, !ml, digitaler Filter, DQD-Schwellwert = 4
56
  SPI_Config_CMD_16Bit(0xCA81);//FIFO und Rücksetz-Betriebsart -->0xCA81 kein Erkennungsmuster auswerten, FIFO immer beschreiben
57
 // SPI_Config_CMD_16Bit(0xCED4);//Synchronisationsmuster   2Bytes
58
  SPI_Config_CMD_16Bit(0xC4F7);//AFC-Einstellung 1111 0011 --> unabhängig von VDI, +-20kHz delta f, 
59
  SPI_Config_CMD_16Bit(0x9853);//Senderkonfiguration 5-->Frequenzhub +-90kHz, Leistung(yyyx) 0--> Maximalleistung x =3 =-21dB
60
  
61
  SPI_Config_CMD_16Bit(0xE000);//nicht verwendet, Überwachungszeitgeber
62
  SPI_Config_CMD_16Bit(0xC800);//nicht verwendet
63
      
64
}      
65
66
unsigned int empfangen_RFM12BP(void)
67
{
68
SPI_Config_CMD_16Bit(0x82C8);//Komponentenauswahl  82h 1100 1000 er=1= Empfänger EIN, et='0'=SenderAUS,es=0=synthesizer AUS
69
warten100ms();
70
warten100ms();
71
statusRFM=SPI_Config_CMD_16Bit(0x0000);
72
SPI_Config_CMD_16Bit(0xCA81); // setzen der FIFO Betriebsart 
73
SPI_Config_CMD_16Bit(0xCA83); // FIFO einschalten
74
fifo=SPI_Config_CMD_16Bit(0xB000); // 0xB000 = lesen FIFO------- FIFO_data=
75
76
}
77
-------------------------------------------------------------------------------
78
SOFTWARE-SPI
79
      
80
unsigned int SPI_Config_CMD_16Bit ( unsigned int SPI_CMD_16Bit)
81
{
82
char i;//=16;
83
SDI_low;
84
nCS_low;
85
86
    for(i=0;i<16;i++)
87
    {
88
    if( SPI_CMD_16Bit & BITF ) // ...if most significant bit in SPI_CMD_16Bit = '1'
89
        { 
90
        SDI_high;               // set SDI-Port '1'
91
        }
92
        else
93
        {
94
        SDI_low;                // set SDI-Port '0'
95
      }
96
      SCK_high;                 //  Clock  0 -> 1, Datenübernahme
97
     datenin = datenin << 1;
98
    if (P5IN & BIT2 == BIT2)
99
     {
100
      datenin = datenin | 0x0001;
101
    }
102
      SCK_low;                  //  Clock  1 -> 0
103
      SPI_CMD_16Bit <<= 1;      // shift left ( next bit as most significant bit ...)
104
     return(datenin); 
105
    }