1 | unsigned int SPI_External(unsigned int uiData)
|
2 | {
|
3 | unsigned char ucCount = 0;
|
4 | unsigned int uiReceive = 0;
|
5 | E_nSEL_0;
|
6 | while(ucCount != 16)
|
7 | {
|
8 | ucCount++;
|
9 | if((uiData & 0x8000) > 0) E_SDI_1
|
10 | else E_SDI_0;
|
11 | E_SCK_1;
|
12 | _delay_us(10);
|
13 | //uiReceive = (uiReceive | SDO);
|
14 | if(ucCount != 16) uiReceive = uiReceive << 1;
|
15 | E_SCK_0;
|
16 | _delay_us(10);
|
17 | uiData = uiData << 1;
|
18 | }
|
19 | E_nSEL_1;
|
20 | while(!E_SDO); //Auf externes Modul Warten
|
21 | return uiReceive;
|
22 | }
|
23 |
|
24 | unsigned int SPI_OnBoard(unsigned int uiData)
|
25 | {
|
26 | unsigned char ucCount = 0;
|
27 | unsigned int uiReceive = 0;
|
28 | nSEL_0;
|
29 | while(ucCount != 16)
|
30 | {
|
31 | ucCount++;
|
32 | if((uiData & 0x8000) > 0) SDI_1
|
33 | else SDI_0;
|
34 | SCK_1;
|
35 | _delay_us(10);
|
36 | //uiReceive = (uiReceive | SDO);
|
37 | if(ucCount != 16) uiReceive = uiReceive << 1;
|
38 | SCK_0;
|
39 | _delay_us(10);
|
40 | uiData = uiData << 1;
|
41 | }
|
42 | nSEL_1;
|
43 | while(!SDO); //Auf OnBoard Modul Warten
|
44 | return uiReceive;
|
45 | }
|
46 |
|
47 |
|
48 | int main( void )
|
49 | {
|
50 | //RFM OnBoard
|
51 | DDRD = (1 << DDD4) | (1 << DDD5) ; //Ausgänge bestimmen
|
52 | DDRB = (1 << DDB0) | (1 << DDB2) | (1 << DDB3) ; //Ausgänge bestimmen
|
53 | DDRB &= ~( 1 << DDB4 ); //Eingang bestimmen
|
54 | DDRB &= ~( 1 << DDB1 ); //Eingang bestimmen
|
55 |
|
56 | //////RFM External
|
57 | DDRD &= ~( 1 << DDD1 ); //Eingang bestimmen
|
58 | DDRD = (1 << DDD2) | (1 << DDD3) | (1 << DDD0) ; //Ausgänge bestimmen
|
59 |
|
60 | nSEL_1;
|
61 | SDI_0;
|
62 | SCK_0;
|
63 | E_nSEL_1;
|
64 | E_SDI_0;
|
65 | E_SCK_0;
|
66 |
|
67 | _delay_ms(50);
|
68 |
|
69 | SPI_OnBoard(0xC0E0); //Clock einstellungen (Ausgang)
|
70 | SPI_OnBoard(0x80E7); //FIFO Aktivieren
|
71 | SPI_OnBoard(0xC2AB); //Daten Filter
|
72 | SPI_OnBoard(0xCA81); //FIFO Modus
|
73 | SPI_OnBoard(0xE000); //Disable Wakeuptimer
|
74 | SPI_OnBoard(0xC800); //Disable low Duty Cycle
|
75 | SPI_OnBoard(0xC4F7); //AFC Einstellungen: autotuning: -10kHz...+7,5kHz
|
76 | SPI_OnBoard(0xA680); //Frequenz auf: 868.32MHz
|
77 | SPI_OnBoard(0x908C); //200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm
|
78 | SPI_OnBoard(0xC623); //Datenrate: 9.54kbps
|
79 | SPI_OnBoard(0x9870); //1mW Ausgangangsleistung, 120kHz Frequenzshift
|
80 |
|
81 | SPI_External(0xC0E0); //Clock einstellungen (Ausgang)
|
82 | SPI_External(0x80E7); //FIFO Aktivieren
|
83 | SPI_External(0xC2AB); //Daten Filter
|
84 | SPI_External(0xCA81); //FIFO Modus
|
85 | SPI_External(0xE000); //Disable Wakeuptimer
|
86 | SPI_External(0xC800); //Disable low Duty Cycle
|
87 | SPI_External(0xC4F7); //AFC Einstellungen: autotuning: -10kHz...+7,5kHz
|
88 | SPI_External(0xA680); //Frequenz auf: 868.32MHz
|
89 | SPI_External(0x908C); //200kHz Bandbreite, -6dB Verstärkung, DRSSI threshold: -79dBm
|
90 | SPI_External(0xC623); //Datenrate: 9.54kbps
|
91 | SPI_External(0x9870); //1mW Ausgangangsleistung, 120kHz Frequenzshift
|
92 |
|
93 |
|
94 | while(1)
|
95 | {
|
96 | while(!taster);
|
97 | LED_gn_1;
|
98 | SPI_External(0x0000); //Status Register auslesen
|
99 | SPI_OnBoard(0x0000); //Status Register auslesen
|
100 |
|
101 | SPI_OnBoard(0x82C8); //Rx Einschalten
|
102 | SPI_OnBoard(0xCA81); //FIFO Modus setzen
|
103 | SPI_OnBoard(0xCA83); //FIFO Aktivieren
|
104 |
|
105 | SPI_External(0x8238); //TX Enable
|
106 | SPI_External(0xB8AA); //Senden wie im Beispiel
|
107 | SPI_External(0xB8AA); //Senden wie im Beispiel
|
108 | SPI_External(0xB8AA); //Senden wie im Beispiel
|
109 | SPI_External(0xB82D); //Senden wie im Beispiel
|
110 | SPI_External(0xB8D4); //Senden wie im Beispiel
|
111 |
|
112 | SPI_External(0xB8AA); //Eigentliche Daten Senden AA
|
113 |
|
114 | SPI_External(0x8208); //Tx Deaktivieren
|
115 |
|
116 | SPI_OnBoard(0xB000); //FIFO Auslesen
|
117 | SPI_OnBoard(0x8208); //Rx Deaktivieren
|
118 |
|
119 | LED_gn_0;
|
120 | while(taster);
|
121 | }
|
122 | }
|