Hallo zusammen,
ich benutze zum RFM12 konfiguieren, als Beispiel, folgende Code-Zeile:
1 | RFM_cmd_empf(0x8280); //Power Management
|
Die dazugehörige Funktion sieht so aus:
1 | unsigned int RFM_cmd_empf(uint16_t aCmd)//Software-Lösung für MOSI/MISO als Empänger
|
2 | {
|
3 | unsigned char i;
|
4 | unsigned int temp;
|
5 |
|
6 | temp=0;
|
7 | Low_Sck();
|
8 | Low_Sel();
|
9 |
|
10 | for(i=0;i<16;i++)
|
11 | {
|
12 | if(aCmd&0x8000)
|
13 | {
|
14 | Hi_Sdi();
|
15 | }
|
16 | else
|
17 | {
|
18 | Low_Sdi();
|
19 | }
|
20 |
|
21 | Hi_Sck();
|
22 | temp<<=1;
|
23 |
|
24 | if(Sdo_ist_Hi())
|
25 | {
|
26 | temp|=0x0001;
|
27 | }
|
28 |
|
29 | Low_Sck();
|
30 | aCmd<<=1;
|
31 | };
|
32 |
|
33 | Hi_Sel();
|
34 | return(temp);
|
35 | }
|
Soweit so gut.
Jetzt hab ich mir gedacht, da die o.g. Code-Zeile direkt das Ganze Byte
anspricht, wäre es doch kleverer nur das Bit zu minpulieren, welches
gerade auch wirklich notwenig ist. Also hab ich in der Header und
C-Datei des RFM12 folgendes eingebaut.
rfm12.h:
1 | //(Power Management 82xx) Einzelbit-Konfiguration / -Abfrage
|
2 | extern uint16_t PWRM; //Adressierbereich, in *.c deklaiert
|
3 | #define ER 7 //enable receiver
|
4 | #define EBB 6 //enable baseband
|
5 | #define ET 5 //enable transmitter
|
6 | #define ES 4 //enable synthesizer
|
7 | #define EX 3 //enable xtal(Quarz)
|
8 | #define EB 2 //enable brownout
|
9 | #define EW 1 //enable wakeup
|
10 | #define DC 0 //disable clock
|
rfm12.c:
1 | //--------------------------Initialisierung-----------------------------
|
2 | uint16_t PWRM = 0x8200; //Adresszuweisung (Power Management 82xx)
|
3 |
|
4 | void RFM_Empf_Ein() //Empfänger einschalten
|
5 | {
|
6 | RFM_cmd_empf(PWRM |= (1<<ER)); //Empfänger einschalten
|
7 | _delay_ms(1); //Warten bis Empfänger an ist
|
8 | RFM_Fifo_Reset(); //Fifo reseten
|
9 | }
|
Ersetzte ich jetzt die o.g. Zeile:
durch den Funktionsaufruf:
...funkioniert der ganze spass nicht mehr.
Wo ist mein Denkfehler, in der Simluation sieht das alles ganz gut aus ?
Vorher "8280" und danach "8200" wie es sein soll.